Spaces:
Build error
Build error
| @echo off | |
| setlocal enabledelayedexpansion | |
| :: Capture all arguments into ARGS | |
| set "ARGS=%*" | |
| set "NATIVE=native" | |
| set "FULL_DOCKER=full_docker" | |
| set "SCRIPT_MODE=%NATIVE%" | |
| set "SCRIPT_DIR=%~dp0" | |
| set "ARCH=%PROCESSOR_ARCHITECTURE%" | |
| set "PYTHON_VERSION=3.12" | |
| set "PYTHON_ENV=python_env" | |
| set "PYTHONUTF8=1" | |
| set "PYTHONIOENCODING=utf-8" | |
| set "CURRENT_ENV=" | |
| set "PROGRAMS_LIST=calibre-normal ffmpeg nodejs espeak-ng sox" | |
| set "TMP=%SCRIPT_DIR%\tmp" | |
| set "TEMP=%SCRIPT_DIR%\tmp" | |
| set "ESPEAK_DATA_PATH=%USERPROFILE%\scoop\apps\espeak-ng\current\eSpeak NG\espeak-ng-data" | |
| set "SCOOP_HOME=%USERPROFILE%\scoop" | |
| set "SCOOP_SHIMS=%SCOOP_HOME%\shims" | |
| set "SCOOP_APPS=%SCOOP_HOME%\apps" | |
| set "CONDA_URL=https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Windows-x86_64.exe" | |
| set "CONDA_INSTALL_DIR=%USERPROFILE%\Miniforge3" | |
| set "CONDA_INSTALLER=Miniforge3-Windows-x86_64.exe" | |
| set "CONDA_ENV=%CONDA_INSTALL_DIR%\condabin\conda.bat" | |
| set "CONDA_PATH=%CONDA_INSTALL_DIR%\condabin" | |
| set "NODE_PATH=%SCOOP_HOME%\apps\nodejs\current" | |
| set "PATH=%SCOOP_SHIMS%;%SCOOP_APPS%;%CONDA_PATH%;%NODE_PATH%;%PATH%" 2>&1 >nul | |
| set "SCOOP_CHECK=0" | |
| set "CONDA_CHECK=0" | |
| set "PROGRAMS_CHECK=0" | |
| set "DOCKER_CHECK=0" | |
| set "HELP_FOUND=%ARGS:--help=%" | |
| :: Refresh environment variables (append registry Path to current PATH) | |
| for /f "tokens=2,*" %%A in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path') do ( | |
| set "PATH=%%B;%PATH%" | |
| ) | |
| cd /d "%SCRIPT_DIR%" | |
| if "%ARCH%"=="x86" ( | |
| echo Error: 32-bit architecture is not supported. | |
| goto :failed | |
| ) | |
| :: Check if running inside Docker | |
| if defined CONTAINER ( | |
| set "SCRIPT_MODE=%FULL_DOCKER%" | |
| goto :main | |
| ) | |
| goto :scoop_check | |
| :scoop_check | |
| where /Q scoop | |
| if %errorlevel% neq 0 ( | |
| echo Scoop is not installed. | |
| set "SCOOP_CHECK=1" | |
| goto :install_components | |
| ) | |
| goto :conda_check | |
| exit /b | |
| :conda_check | |
| where /Q conda | |
| if %errorlevel% neq 0 ( | |
| call rmdir /s /q "%CONDA_INSTALL_DIR%" 2>nul | |
| echo Miniforge3 is not installed. | |
| set "CONDA_CHECK=1" | |
| goto :install_components | |
| ) | |
| :: Check if running in a Conda environment | |
| if defined CONDA_DEFAULT_ENV ( | |
| set "CURRENT_ENV=%CONDA_PREFIX%" | |
| ) | |
| :: Check if running in a Python virtual environment | |
| if defined VIRTUAL_ENV ( | |
| set "CURRENT_ENV=%VIRTUAL_ENV%" | |
| ) | |
| for /f "delims=" %%i in ('where /Q python') do ( | |
| if defined CONDA_PREFIX ( | |
| if /i "%%i"=="%CONDA_PREFIX%\Scripts\python.exe" ( | |
| set "CURRENT_ENV=%CONDA_PREFIX%" | |
| break | |
| ) | |
| ) else if defined VIRTUAL_ENV ( | |
| if /i "%%i"=="%VIRTUAL_ENV%\Scripts\python.exe" ( | |
| set "CURRENT_ENV=%VIRTUAL_ENV%" | |
| break | |
| ) | |
| ) | |
| ) | |
| if not "%CURRENT_ENV%"=="" ( | |
| echo Current python virtual environment detected: %CURRENT_ENV%. | |
| echo This script runs with its own virtual env and must be out of any other virtual environment when it's launched. | |
| goto :failed | |
| ) | |
| goto :programs_check | |
| exit /b | |
| :programs_check | |
| set "missing_prog_array=" | |
| for %%p in (%PROGRAMS_LIST%) do ( | |
| set "prog=%%p" | |
| if "%%p"=="nodejs" set "prog=node" | |
| if "%%p"=="calibre-normal" set "prog=calibre" | |
| where /Q !prog! | |
| if !errorlevel! neq 0 ( | |
| echo %%p is not installed. | |
| set "missing_prog_array=!missing_prog_array! %%p" | |
| ) | |
| ) | |
| if not "%missing_prog_array%"=="" ( | |
| set "PROGRAMS_CHECK=1" | |
| goto :install_components | |
| ) | |
| goto :dispatch | |
| exit /b | |
| :install_components | |
| :: Install Scoop if not already installed | |
| if not "%SCOOP_CHECK%"=="0" ( | |
| echo Installing Scoop... | |
| call powershell -command "Set-ExecutionPolicy RemoteSigned -scope CurrentUser" | |
| call powershell -command "iwr -useb get.scoop.sh | iex" | |
| call scoop install git | |
| call scoop bucket add muggle https://github.com/hu3rror/scoop-muggle.git | |
| call scoop bucket add extras | |
| call scoop bucket add versions | |
| echo Scoop installed successfully. | |
| if "%PROGRAMS_CHECK%"=="0" ( | |
| set "SCOOP_CHECK=0" | |
| ) | |
| start "" cmd /k cd /d "%CD%" ^& call "%~f0" | |
| exit | |
| ) | |
| :: Install Conda if not already installed | |
| if not "%CONDA_CHECK%"=="0" ( | |
| echo Installing Miniforge... | |
| call powershell -Command "Invoke-WebRequest -Uri %CONDA_URL% -OutFile "%CONDA_INSTALLER%" | |
| call start /wait "" "%CONDA_INSTALLER%" /InstallationType=JustMe /RegisterPython=0 /S /D=%UserProfile%\Miniforge3 | |
| where /Q conda | |
| if !errorlevel! neq 0 ( | |
| echo Conda installation failed. | |
| goto :failed | |
| ) | |
| call conda config --set auto_activate_base false | |
| call conda update conda -y | |
| del "%CONDA_INSTALLER%" | |
| set "CONDA_CHECK=0" | |
| echo Conda installed successfully. | |
| start "" cmd /k cd /d "%CD%" ^& call "%~f0" | |
| exit | |
| ) | |
| :: Install missing packages one by one | |
| if not "%PROGRAMS_CHECK%"=="0" ( | |
| echo Installing missing programs... | |
| if "%SCOOP_CHECK%"=="0" ( | |
| call scoop bucket add muggle b https://github.com/hu3rror/scoop-muggle.git | |
| call scoop bucket add extras | |
| call scoop bucket add versions | |
| ) | |
| for %%p in (%missing_prog_array%) do ( | |
| call scoop install %%p | |
| set "prog=%%p" | |
| if "%%p"=="nodejs" ( | |
| set "prog=node" | |
| ) | |
| if "%%p"=="calibre-normal" set "prog=calibre" | |
| where /Q !prog! | |
| if !errorlevel! neq 0 ( | |
| echo %%p installation failed... | |
| goto :failed | |
| ) | |
| ) | |
| call powershell -command "[System.Environment]::SetEnvironmentVariable('Path', [System.Environment]::GetEnvironmentVariable('Path', 'User') + '%SCOOP_SHIMS%;%SCOOP_APPS%;%CONDA_PATH%;%NODE_PATH%;', 'User')" | |
| set "SCOOP_CHECK=0" | |
| set "PROGRAMS_CHECK=0" | |
| set "missing_prog_array=" | |
| ) | |
| goto :dispatch | |
| exit /b | |
| :dispatch | |
| if "%SCOOP_CHECK%"=="0" ( | |
| if "%PROGRAMS_CHECK%"=="0" ( | |
| if "%CONDA_CHECK%"=="0" ( | |
| if "%DOCKER_CHECK%"=="0" ( | |
| goto :main | |
| ) else ( | |
| goto :failed | |
| ) | |
| ) | |
| ) | |
| ) | |
| echo PROGRAMS_CHECK: %PROGRAMS_CHECK% | |
| echo CONDA_CHECK: %CONDA_CHECK% | |
| echo DOCKER_CHECK: %DOCKER_CHECK% | |
| goto :install_components | |
| exit /b | |
| :main | |
| if "%SCRIPT_MODE%"=="%FULL_DOCKER%" ( | |
| call python %SCRIPT_DIR%\app.py --script_mode %SCRIPT_MODE% %ARGS% | |
| ) else ( | |
| if not exist "%SCRIPT_DIR%\%PYTHON_ENV%" ( | |
| call conda create --prefix "%SCRIPT_DIR%\%PYTHON_ENV%" python=%PYTHON_VERSION% -y | |
| call %CONDA_ENV% activate base | |
| call conda activate "%SCRIPT_DIR%\%PYTHON_ENV%" | |
| call python -m pip cache purge >nul 2>&1 | |
| call python -m pip install --upgrade pip | |
| for /f "usebackq delims=" %%p in ("requirements.txt") do ( | |
| echo Installing %%p... | |
| call python -m pip install --upgrade --no-cache-dir --use-pep517 --progress-bar=on "%%p" | |
| ) | |
| echo All required packages are installed. | |
| ) else ( | |
| call %CONDA_ENV% activate base | |
| call conda activate "%SCRIPT_DIR%\%PYTHON_ENV%" | |
| ) | |
| call python "%SCRIPT_DIR%\app.py" --script_mode %SCRIPT_MODE% %ARGS% | |
| call conda deactivate | |
| ) | |
| exit /b | |
| :failed | |
| echo ebook2audiobook is not correctly installed or run. | |
| exit /b | |
| endlocal | |
| pause |