Warning, /graphics/krita/packaging/windows/package-complete.cmd is written in an unsupported language. File is not indexed.
0001 @echo off 0002 :: This batch script is meant to prepare a Krita package folder to be zipped or 0003 :: to be a base for the installer. 0004 0005 :: -------- 0006 0007 setlocal enabledelayedexpansion 0008 goto begin 0009 0010 0011 :: Subroutines 0012 0013 :find_on_path out_variable file_name 0014 set %1=%~f$PATH:2 0015 goto :EOF 0016 0017 0018 :get_dir_path out_variable file_path 0019 set %1=%~dp2 0020 goto :EOF 0021 0022 0023 :get_full_path out_variable file_path 0024 setlocal 0025 set FULL_PATH=%~f2 0026 if not exist "%FULL_PATH%" ( 0027 set FULL_PATH= 0028 ) else ( 0029 if exist "%FULL_PATH%\" ( 0030 set FULL_PATH= 0031 ) 0032 ) 0033 endlocal & set "%1=%FULL_PATH%" 0034 goto :EOF 0035 0036 0037 :get_full_path_dir out_variable file_path 0038 setlocal 0039 set FULL_PATH=%~dp2 0040 if not exist "%FULL_PATH%" ( 0041 set FULL_PATH= 0042 ) 0043 endlocal & set "%1=%FULL_PATH%" 0044 goto :EOF 0045 0046 0047 :prompt_for_string out_variable prompt 0048 set /p %1=%~2^> 0049 goto :EOF 0050 0051 0052 :prompt_for_positive_integer out_variable prompt 0053 setlocal 0054 call :prompt_for_string USER_INPUT "%~2" 0055 if "%USER_INPUT%" == "" set USER_INPUT=0 0056 set /a RESULT=%USER_INPUT% 0057 if not %RESULT% GTR 0 ( 0058 set RESULT= 0059 ) 0060 endlocal & set "%1=%RESULT%" 0061 goto :EOF 0062 0063 0064 :prompt_for_file out_variable prompt 0065 setlocal 0066 :prompt_for_file__retry 0067 call :prompt_for_string USER_INPUT "%~2" 0068 if "%USER_INPUT%" == "" ( 0069 endlocal 0070 set %1= 0071 goto :EOF 0072 ) 0073 call :get_full_path RESULT "%USER_INPUT%" 0074 if "%RESULT%" == "" ( 0075 echo Input does not point to valid file! 0076 set USER_INPUT= 0077 goto prompt_for_file__retry 0078 ) 0079 endlocal & set "%1=%RESULT%" 0080 goto :EOF 0081 0082 0083 :prompt_for_dir out_variable prompt 0084 setlocal 0085 :prompt_for_dir__retry 0086 call :prompt_for_string USER_INPUT "%~2" 0087 if "%USER_INPUT%" == "" ( 0088 endlocal 0089 set %1= 0090 goto :EOF 0091 ) 0092 call :get_full_path_dir RESULT "%USER_INPUT%\" 0093 if "%RESULT%" == "" ( 0094 echo Input does not point to valid dir! 0095 set USER_INPUT= 0096 goto prompt_for_dir__retry 0097 ) 0098 endlocal & set "%1=%RESULT%" 0099 goto :EOF 0100 0101 0102 :usage 0103 echo Usage: 0104 echo %~n0 [--no-interactive --package-name ^<name^>] [ OPTIONS ... ] 0105 echo. 0106 echo Basic options: 0107 echo --no-interactive Run without interactive prompts 0108 echo When not specified, the script will prompt 0109 echo for some of the parameters. 0110 echo --package-name ^<name^> Specify the package name 0111 echo. 0112 echo Path options: 0113 echo --src-dir ^<dir_path^> Specify Krita source dir 0114 echo If unspecified, this will be determined from 0115 echo the script location 0116 echo --deps-install-dir ^<dir_path^> Specify deps install dir 0117 echo --krita-install-dir ^<dir_path^> Specify Krita install dir 0118 echo. 0119 echo Special options: 0120 echo --pre-zip-hook ^<script_path^> Specify a script to be called before 0121 echo packaging the zip archive, can be used to 0122 echo sign the binaries 0123 echo. 0124 goto :EOF 0125 :usage_and_exit 0126 call :usage 0127 exit /b 0128 :usage_and_fail 0129 call :usage 0130 exit /b 100 0131 0132 0133 :: ---------------------------- 0134 :begin 0135 0136 echo Krita Windows packaging script 0137 echo. 0138 0139 0140 :: command-line args parsing 0141 set ARG_NO_INTERACTIVE= 0142 set ARG_PACKAGE_NAME= 0143 set ARG_SRC_DIR= 0144 set ARG_DEPS_INSTALL_DIR= 0145 set ARG_KRITA_INSTALL_DIR= 0146 set ARG_PRE_ZIP_HOOK= 0147 :args_parsing_loop 0148 set CURRENT_MATCHED= 0149 if not "%1" == "" ( 0150 if "%1" == "--no-interactive" ( 0151 set ARG_NO_INTERACTIVE=1 0152 set CURRENT_MATCHED=1 0153 ) 0154 if "%1" == "--package-name" ( 0155 if not "%ARG_PACKAGE_NAME%" == "" ( 0156 echo ERROR: Arg --package-name specified more than once 1>&2 0157 echo. 0158 goto usage_and_fail 0159 ) 0160 if "%~2" == "" ( 0161 echo ERROR: Arg --package-name is empty 1>&2 0162 echo. 0163 goto usage_and_fail 0164 ) 0165 set "ARG_PACKAGE_NAME=%~2" 0166 shift /2 0167 set CURRENT_MATCHED=1 0168 ) 0169 if "%1" == "--src-dir" ( 0170 if not "%ARG_SRC_DIR%" == "" ( 0171 echo ERROR: Arg --src-dir specified more than once 1>&2 0172 echo. 0173 goto usage_and_fail 0174 ) 0175 if not exist "%~f2\" ( 0176 echo ERROR: Arg --src-dir does not point to a directory 1>&2 0177 echo. 0178 goto usage_and_fail 0179 ) 0180 call :get_dir_path ARG_SRC_DIR "%~f2\" 0181 shift /2 0182 set CURRENT_MATCHED=1 0183 ) 0184 if "%1" == "--deps-install-dir" ( 0185 if not "%ARG_DEPS_INSTALL_DIR%" == "" ( 0186 echo ERROR: Arg --deps-install-dir specified more than once 1>&2 0187 echo. 0188 goto usage_and_fail 0189 ) 0190 if "%~f2" == "" ( 0191 echo ERROR: Arg --deps-install-dir does not point to a valid path 1>&2 0192 echo. 0193 goto usage_and_fail 0194 ) 0195 call :get_dir_path ARG_DEPS_INSTALL_DIR "%~f2\" 0196 shift /2 0197 set CURRENT_MATCHED=1 0198 ) 0199 if "%1" == "--krita-install-dir" ( 0200 if not "%ARG_KRITA_INSTALL_DIR%" == "" ( 0201 echo ERROR: Arg --krita-install-dir specified more than once 1>&2 0202 echo. 0203 goto usage_and_fail 0204 ) 0205 if "%~f2" == "" ( 0206 echo ERROR: Arg --krita-install-dir does not point to a valid path 1>&2 0207 echo. 0208 goto usage_and_fail 0209 ) 0210 call :get_dir_path ARG_KRITA_INSTALL_DIR "%~f2\" 0211 shift /2 0212 set CURRENT_MATCHED=1 0213 ) 0214 if "%1" == "--pre-zip-hook" ( 0215 if not "%ARG_PRE_ZIP_HOOK%" == "" ( 0216 echo ERROR: Arg --pre-zip-hook specified more than once 1>&2 0217 echo. 0218 goto usage_and_fail 0219 ) 0220 if "%~f2" == "" ( 0221 echo ERROR: Arg --pre-zip-hook does not point to a valid path 1>&2 0222 echo. 0223 goto usage_and_fail 0224 ) 0225 call :get_full_path ARG_PRE_ZIP_HOOK "%~f2" 0226 if "!ARG_PRE_ZIP_HOOK!" == "" ( 0227 echo ERROR: Arg --pre-zip-hook does not point to a valid file 1>&2 0228 echo. 0229 goto usage_and_fail 0230 ) 0231 shift /2 0232 set CURRENT_MATCHED=1 0233 ) 0234 if "%1" == "--help" ( 0235 goto usage_and_exit 0236 ) 0237 if not "!CURRENT_MATCHED!" == "1" ( 0238 echo ERROR: Unknown option %1 1>&2 0239 echo. 0240 goto usage_and_fail 0241 ) 0242 shift /1 0243 goto args_parsing_loop 0244 ) 0245 0246 if "%ARG_NO_INTERACTIVE%" == "1" ( 0247 if "%ARG_PACKAGE_NAME%" == "" ( 0248 echo ERROR: Required arg --package-name not specified! 1>&2 0249 echo. 0250 goto usage_and_fail 0251 ) 0252 ) 0253 0254 if "%ARG_NO_INTERACTIVE%" == "1" ( 0255 echo Non-interactive mode 0256 ) else ( 0257 echo Interactive mode 0258 :: Trick to pause on exit 0259 call :real_begin 0260 pause 0261 exit /b !ERRORLEVEL! 0262 ) 0263 :real_begin 0264 echo. 0265 0266 0267 if "%ARG_PACKAGE_NAME%" == "" ( 0268 call :prompt_for_string ARG_PACKAGE_NAME "Provide package name" 0269 if "ARG_PACKAGE_NAME" == "" ( 0270 echo ERROR: Package name not set! 1>&2 0271 exit /b 102 0272 ) 0273 ) 0274 0275 0276 :: Check environment config 0277 0278 if "%SEVENZIP_EXE%" == "" ( 0279 call :find_on_path SEVENZIP_EXE 7z.exe 0280 ) 0281 if "%SEVENZIP_EXE%" == "" ( 0282 call :find_on_path SEVENZIP_EXE 7za.exe 0283 ) 0284 if "!SEVENZIP_EXE!" == "" ( 0285 set "SEVENZIP_EXE=%ProgramFiles%\7-Zip\7z.exe" 0286 if not exist "!SEVENZIP_EXE!" ( 0287 set "SEVENZIP_EXE=%ProgramFiles(x86)%\7-Zip\7z.exe" 0288 ) 0289 if not exist "!SEVENZIP_EXE!" ( 0290 echo 7-Zip not found! 1>&2 0291 exit /b 102 0292 ) 0293 ) 0294 echo 7-Zip: %SEVENZIP_EXE% 0295 0296 if "%MINGW_BIN_DIR%" == "" ( 0297 call :find_on_path MINGW_BIN_DIR_MAKE_EXE mingw32-make.exe 0298 if "!MINGW_BIN_DIR_MAKE_EXE!" == "" ( 0299 if not "%ARG_NO_INTERACTIVE%" == "1" ( 0300 call :prompt_for_file MINGW_BIN_DIR_MAKE_EXE "Provide path to mingw32-make.exe of mingw-w64" 0301 ) 0302 if "!MINGW_BIN_DIR_MAKE_EXE!" == "" ( 0303 echo ERROR: mingw-w64 not found! 1>&2 0304 exit /b 102 0305 ) 0306 call :get_dir_path MINGW_BIN_DIR "!MINGW_BIN_DIR_MAKE_EXE!" 0307 ) else ( 0308 call :get_dir_path MINGW_BIN_DIR "!MINGW_BIN_DIR_MAKE_EXE!" 0309 echo Found mingw on PATH: !MINGW_BIN_DIR! 0310 if not "%ARG_NO_INTERACTIVE%" == "1" ( 0311 choice /c ny /n /m "Is this correct? [y/n] " 0312 if errorlevel 3 exit 255 0313 if not errorlevel 2 ( 0314 call :prompt_for_file MINGW_BIN_DIR_MAKE_EXE "Provide path to mingw32-make.exe of mingw-w64" 0315 if "!MINGW_BIN_DIR_MAKE_EXE!" == "" ( 0316 echo ERROR: mingw-w64 not found! 1>&2 0317 exit /b 102 0318 ) 0319 call :get_dir_path MINGW_BIN_DIR "!MINGW_BIN_DIR_MAKE_EXE!" 0320 ) 0321 ) 0322 ) 0323 ) 0324 echo mingw-w64: %MINGW_BIN_DIR% 0325 0326 :: Windows SDK is needed for windeployqt to get d3dcompiler_xx.dll 0327 if "%WindowsSdkDir%" == "" if not "%ProgramFiles(x86)%" == "" set "WindowsSdkDir=%ProgramFiles(x86)%\Windows Kits\10" 0328 if "%WindowsSdkDir%" == "" set "WindowsSdkDir=%ProgramFiles(x86)%\Windows Kits\10" 0329 if exist "%WindowsSdkDir%\" ( 0330 pushd "%WindowsSdkDir%" 0331 if exist "bin\x64\fxc.exe" ( 0332 set HAVE_FXC_EXE=1 0333 ) else ( 0334 for /f "delims=" %%a in ('dir /a:d /b "bin\10.*"') do ( 0335 if exist "bin\%%a\x64\fxc.exe" ( 0336 set HAVE_FXC_EXE=1 0337 ) 0338 ) 0339 ) 0340 popd 0341 ) 0342 if not "%HAVE_FXC_EXE%" == "1" ( 0343 set WindowsSdkDir= 0344 echo Windows SDK 10 with fxc.exe not found 0345 echo If Qt was built with ANGLE ^(dynamic OpenGL^) support, the package might not work properly on some systems! 0346 ) else echo Windows SDK 10 with fxc.exe found on %WindowsSdkDir% 0347 0348 if not "%ARG_SRC_DIR%" == "" ( 0349 set "KRITA_SRC_DIR=%ARG_SRC_DIR%" 0350 ) 0351 if "%KRITA_SRC_DIR%" == "" ( 0352 :: Check whether this looks like to be in the source tree 0353 set "_temp=%~dp0" 0354 if "!_temp:~-19!" == "\packaging\windows\" ( 0355 if exist "!_temp:~0,-19!\CMakeLists.txt" ( 0356 if exist "!_temp:~0,-19!\3rdparty\CMakeLists.txt" ( 0357 set "KRITA_SRC_DIR=!_temp:~0,-19!\" 0358 echo Script is running inside Krita src dir 0359 ) 0360 ) 0361 ) 0362 ) 0363 if "%KRITA_SRC_DIR%" == "" ( 0364 if not "%ARG_NO_INTERACTIVE%" == "1" ( 0365 call :prompt_for_dir KRITA_SRC_DIR "Provide path of Krita src dir" 0366 ) 0367 if "!KRITA_SRC_DIR!" == "" ( 0368 echo ERROR: Krita src dir not found! 1>&2 0369 exit /b 102 0370 ) 0371 ) 0372 echo Krita src: %KRITA_SRC_DIR% 0373 0374 if not "%ARG_DEPS_INSTALL_DIR%" == "" ( 0375 set "DEPS_INSTALL_DIR=%ARG_DEPS_INSTALL_DIR%" 0376 ) 0377 if "%DEPS_INSTALL_DIR%" == "" ( 0378 set DEPS_INSTALL_DIR=%CD%\i_deps\ 0379 echo Using default deps install dir: !DEPS_INSTALL_DIR! 0380 if not "%ARG_NO_INTERACTIVE%" == "1" ( 0381 choice /c ny /n /m "Is this ok? [y/n] " 0382 if errorlevel 3 exit 255 0383 if not errorlevel 2 ( 0384 call :prompt_for_dir DEPS_INSTALL_DIR "Provide path of deps install dir" 0385 ) 0386 ) 0387 if "!DEPS_INSTALL_DIR!" == "" ( 0388 echo ERROR: Deps install dir not set! 1>&2 0389 exit /b 102 0390 ) 0391 ) 0392 echo Deps install dir: %DEPS_INSTALL_DIR% 0393 0394 if not "%ARG_KRITA_INSTALL_DIR%" == "" ( 0395 set "KRITA_INSTALL_DIR=%ARG_KRITA_INSTALL_DIR%" 0396 ) 0397 if "%KRITA_INSTALL_DIR%" == "" ( 0398 set KRITA_INSTALL_DIR=%CD%\i\ 0399 echo Using default Krita install dir: !KRITA_INSTALL_DIR! 0400 if not "%ARG_NO_INTERACTIVE%" == "1" ( 0401 choice /c ny /n /m "Is this ok? [y/n] " 0402 if errorlevel 3 exit 255 0403 if not errorlevel 2 ( 0404 call :prompt_for_dir KRITA_INSTALL_DIR "Provide path of Krita install dir" 0405 ) 0406 ) 0407 if "!KRITA_INSTALL_DIR!" == "" ( 0408 echo ERROR: Krita install dir not set! 1>&2 0409 exit /b 102 0410 ) 0411 ) 0412 echo Krita install dir: %KRITA_INSTALL_DIR% 0413 0414 0415 :: Simple checking 0416 if not exist "%DEPS_INSTALL_DIR%\" ( 0417 echo ERROR: Cannot find the deps install folder! 1>&2 0418 exit /B 1 0419 ) 0420 if not exist "%KRITA_INSTALL_DIR%\" ( 0421 echo ERROR: Cannot find the krita install folder! 1>&2 0422 exit /B 1 0423 ) 0424 if not "%DEPS_INSTALL_DIR: =%" == "%DEPS_INSTALL_DIR%" ( 0425 echo ERROR: Deps install path contains space, which will not work properly! 1>&2 0426 exit /B 1 0427 ) 0428 if not "%KRITA_INSTALL_DIR: =%" == "%KRITA_INSTALL_DIR%" ( 0429 echo ERROR: Krita install path contains space, which will not work properly! 1>&2 0430 exit /B 1 0431 ) 0432 0433 set pkg_name=%ARG_PACKAGE_NAME% 0434 echo Package name is "%pkg_name%" 0435 0436 set pkg_root=%CD%\%pkg_name% 0437 echo Packaging dir is %pkg_root% 0438 echo. 0439 if exist %pkg_root% ( 0440 echo ERROR: Packaging dir already exists! Please remove or rename it first. 0441 exit /B 1 0442 ) 0443 if exist %pkg_root%.zip ( 0444 echo ERROR: Packaging zip already exists! Please remove or rename it first. 0445 exit /B 1 0446 ) 0447 if exist %pkg_root%-dbg.zip ( 0448 echo ERROR: Packaging debug zip already exists! Please remove or rename it first. 0449 exit /B 1 0450 ) 0451 0452 echo. 0453 0454 0455 if not "%ARG_NO_INTERACTIVE%" == "1" ( 0456 choice /c ny /n /m "Is the above ok? [y/n] " 0457 if errorlevel 3 exit 255 0458 if not errorlevel 2 ( 0459 exit /b 1 0460 ) 0461 echo. 0462 ) 0463 0464 0465 :: Initialize clean PATH 0466 set "PATH=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\" 0467 set "PATH=%MINGW_BIN_DIR%;%DEPS_INSTALL_DIR%\bin;%PATH%" 0468 0469 0470 echo. 0471 echo Trying to guess compiler version... 0472 for %%a in (g++ clang++) do ( 0473 %%a --version > NUL 0474 if not errorlevel 1 ( 0475 set CC=%%a 0476 ) 0477 ) 0478 if "%CC%" == "" ( 0479 echo ERROR: No working compiler. 0480 exit /B 1 0481 ) 0482 %CC% --version > NUL 0483 for /f "delims=" %%a in ('%CC% --version ^| find "g++"') do set GCC_VERSION_LINE=%%a 0484 :: The space in "clang " is essential to detect 0485 :: the version line and not the InstalledDir 0486 if "%GCC_VERSION_LINE%" == "" ( 0487 for /f "delims=" %%a in ('%CC% --version ^| find "clang "') do set GCC_VERSION_LINE=%%a 0488 ) 0489 if "%GCC_VERSION_LINE%" == "" ( 0490 echo ERROR: Failed to get version of g++. 0491 exit /B 1 0492 ) 0493 echo -- %GCC_VERSION_LINE% 0494 set IS_TDM= 0495 set IS_MSYS= 0496 set IS_CLANG= 0497 if not "%GCC_VERSION_LINE:tdm64=%" == "%GCC_VERSION_LINE%" ( 0498 echo Compiler looks like TDM64-GCC 0499 set IS_TDM=1 0500 ) else if not "%GCC_VERSION_LINE:MSYS=%" == "%GCC_VERSION_LINE%" ( 0501 echo Compiler looks like MSYS GCC 0502 set IS_MSYS=1 0503 ) else if not "%GCC_VERSION_LINE:clang=%" == "%GCC_VERSION_LINE%" ( 0504 echo Compiler looks like Clang 0505 set IS_CLANG=1 0506 ) else ( 0507 echo Compiler looks like plain old MinGW64 0508 ) 0509 set IS_LLVM_MINGW= 0510 set IS_MSYS_CLANG= 0511 if not x%IS_CLANG% == x ( 0512 rem Look for the multiarch target binary dirs. Unfortunately there is 0513 rem no surefire way to detect a llvm-mingw toolchain. 0514 if exist "%MINGW_BIN_DIR%\..\i686-w64-mingw32\bin\" ( 0515 if exist "%MINGW_BIN_DIR%\..\x86_64-w64-mingw32\bin\" ( 0516 echo Toolchain looks like llvm-mingw 0517 set IS_LLVM_MINGW=1 0518 ) 0519 ) 0520 if "!IS_LLVM_MINGW!" == "" ( 0521 echo Toolchain does not look like llvm-mingw, assuming MSYS Clang 0522 set IS_MSYS_CLANG=1 0523 ) 0524 ) 0525 0526 echo. 0527 echo Trying to guess target architecture... 0528 set OBJDUMP= 0529 for %%a in (objdump llvm-objdump) do ( 0530 %%a --version > NUL 0531 if not errorlevel 1 ( 0532 set OBJDUMP=%%a 0533 ) 0534 ) 0535 if "%OBJDUMP%" == "" ( 0536 echo ERROR: objdump is not working. 0537 exit /B 1 0538 ) 0539 for /f "delims=, tokens=1" %%a in ('%OBJDUMP% -f %KRITA_INSTALL_DIR%\bin\krita.exe ^| find "i386"') do set TARGET_ARCH_LINE=%%a 0540 if "%TARGET_ARCH_LINE%" == "" ( 0541 echo Possible LLVM objdump, trying to detect architecture... 0542 for /f "delims=" %%a in ('%OBJDUMP% -f %KRITA_INSTALL_DIR%\bin\krita.exe ^| find "coff"') do set TARGET_ARCH_LINE=%%a 0543 ) 0544 echo -- %TARGET_ARCH_LINE% 0545 if "%TARGET_ARCH_LINE:x86-64=%" == "%TARGET_ARCH_LINE%" ( 0546 echo Target looks like x86 0547 set IS_X64= 0548 ) else ( 0549 echo Target looks like x64 0550 set IS_x64=1 0551 ) 0552 0553 echo. 0554 echo Testing for objcopy... 0555 objcopy --version > NUL 0556 if errorlevel 1 ( 0557 echo ERROR: objcopy is not working. 0558 exit /B 1 0559 ) 0560 0561 echo. 0562 echo Testing for strip... 0563 strip --version > NUL 0564 if errorlevel 1 ( 0565 echo ERROR: strip is not working. 0566 exit /B 1 0567 ) 0568 0569 echo. 0570 echo Creating base directories... 0571 mkdir %pkg_root% && ^ 0572 mkdir %pkg_root%\bin && ^ 0573 mkdir %pkg_root%\etc && ^ 0574 mkdir %pkg_root%\lib && ^ 0575 mkdir %pkg_root%\share 0576 if errorlevel 1 ( 0577 echo ERROR: Cannot create packaging dir tree! 0578 %PAUSE% 0579 exit /B 1 0580 ) 0581 0582 echo. 0583 echo Copying GCC libraries... 0584 set "STDLIBS_DIR=%MINGW_BIN_DIR%" 0585 if not x%IS_TDM% == x ( 0586 if x%is_x64% == x ( 0587 :: TDM-GCC x86 0588 set "STDLIBS=libgomp-1" 0589 ) else ( 0590 :: TDM-GCC x64 0591 set "STDLIBS=libgomp_64-1" 0592 ) 0593 ) else if not x%IS_MSYS% == x ( 0594 if x%is_x64% == x ( 0595 :: msys-mingw-w64 x86 0596 set "STDLIBS=libgcc_s_dw2-1 libgomp-1 libstdc++-6 libwinpthread-1 libatomic-1 libiconv-2 zlib1 libexpat-1 libintl-8 libssl-1_1 libcrypto-1_1" 0597 ) else ( 0598 :: msys-mingw-w64 x64 0599 set "STDLIBS=libgcc_s_seh-1 libgomp-1 libstdc++-6 libwinpthread-1 libatomic-1 libiconv-2 zlib1 libexpat-1 libintl-8 libssl-1_1-x64 libcrypto-1_1-x64" 0600 ) 0601 ) else if not x%IS_MSYS_CLANG% == x ( 0602 if x%is_x64% == x ( 0603 :: msys-mingw-w64-clang64 x86 0604 set "STDLIBS=libomp libssp-0 libunwind libc++ libwinpthread-1 libiconv-2 zlib1 libexpat-1 libintl-8 libssl-1_1 libcrypto-1_1" 0605 ) else ( 0606 :: msys-mingw-w64-clang64 x64 0607 set "STDLIBS=libomp libssp-0 libunwind libc++ libwinpthread-1 libiconv-2 zlib1 libexpat-1 libintl-8 libssl-1_1-x64 libcrypto-1_1-x64" 0608 ) 0609 ) else if not x%IS_LLVM_MINGW% == x ( 0610 :: llvm-mingw 0611 set "STDLIBS=libc++ libomp libssp-0 libunwind libwinpthread-1" 0612 rem The toolchain does not include all of the DLLs in the compiler bin dir, 0613 rem so we need to copy them from the cross target bin dir. 0614 if x%is_x64% == x ( 0615 set "STDLIBS_DIR=%MINGW_BIN_DIR%\..\i686-w64-mingw32\bin" 0616 ) else ( 0617 set "STDLIBS_DIR=%MINGW_BIN_DIR%\..\x86_64-w64-mingw32\bin" 0618 ) 0619 ) else ( 0620 if x%is_x64% == x ( 0621 :: mingw-w64 x86 0622 set "STDLIBS=libgcc_s_dw2-1 libgomp-1 libstdc++-6 libwinpthread-1" 0623 ) else ( 0624 :: mingw-w64 x64 0625 set "STDLIBS=libgcc_s_seh-1 libgomp-1 libstdc++-6 libwinpthread-1" 0626 ) 0627 ) 0628 0629 for %%L in (%STDLIBS%) do copy "%STDLIBS_DIR%\%%L.dll" %pkg_root%\bin 0630 0631 echo. 0632 echo Copying files... 0633 :: krita.exe 0634 copy %KRITA_INSTALL_DIR%\bin\krita.exe %pkg_root%\bin 0635 copy %KRITA_INSTALL_DIR%\bin\krita.com %pkg_root%\bin 0636 :: kritarunner.exe 0637 copy %KRITA_INSTALL_DIR%\bin\kritarunner.exe %pkg_root%\bin 0638 copy %KRITA_INSTALL_DIR%\bin\kritarunner.com %pkg_root%\bin 0639 0640 if exist %KRITA_INSTALL_DIR%\bin\FreehandStrokeBenchmark.exe ( 0641 :: FreehandStrokeBenchmark.exe 0642 copy %KRITA_INSTALL_DIR%\bin\FreehandStrokeBenchmark.exe %pkg_root%\bin 0643 xcopy /S /Y /I %DEPS_INSTALL_DIR%\bin\data %pkg_root%\bin\data 0644 ) 0645 0646 :: qt.conf -- to specify the location to Qt translations 0647 copy %KRITA_SRC_DIR%\packaging\windows\qt.conf %pkg_root%\bin 0648 :: DLLs from bin/ 0649 echo INFO: Copying all DLLs except Qt5* from bin/ 0650 setlocal enableextensions enabledelayedexpansion 0651 for /f "delims=" %%F in ('dir /b "%KRITA_INSTALL_DIR%\bin\*.dll"') do ( 0652 set file=%%F 0653 set file=!file:~0,3! 0654 if not x!file! == xQt5 copy "%KRITA_INSTALL_DIR%\bin\%%F" %pkg_root%\bin 0655 ) 0656 for /f "delims=" %%F in ('dir /b "%DEPS_INSTALL_DIR%\bin\*.dll"') do ( 0657 set file=%%F 0658 set file=!file:~0,3! 0659 if not x!file! == xQt5 copy "%DEPS_INSTALL_DIR%\bin\%%F" %pkg_root%\bin 0660 ) 0661 endlocal 0662 :: symsrv.yes for Dr. Mingw 0663 copy %DEPS_INSTALL_DIR%\bin\symsrv.yes %pkg_root%\bin 0664 :: DLLs from lib/ 0665 echo INFO: Copying all DLLs from lib/ (deps) 0666 copy %DEPS_INSTALL_DIR%\lib\*.dll %pkg_root%\bin 0667 :: Boost, there might be more than one leftover but we can't really do much 0668 copy %DEPS_INSTALL_DIR%\bin\libboost_system-*.dll %pkg_root%\bin 0669 :: KF5 plugins may be placed at different locations depending on how Qt is built 0670 xcopy /S /Y /I %DEPS_INSTALL_DIR%\lib\plugins\imageformats %pkg_root%\bin\imageformats 0671 xcopy /S /Y /I %DEPS_INSTALL_DIR%\plugins\imageformats %pkg_root%\bin\imageformats 0672 xcopy /S /Y /I %DEPS_INSTALL_DIR%\lib\plugins\kf5 %pkg_root%\bin\kf5 0673 xcopy /S /Y /I %DEPS_INSTALL_DIR%\plugins\kf5 %pkg_root%\bin\kf5 0674 0675 :: Copy the sql drivers explicitly 0676 xcopy /S /Y /I %DEPS_INSTALL_DIR%\plugins\sqldrivers %pkg_root%\bin\sqldrivers 0677 0678 :: Qt Translations 0679 :: it seems that windeployqt does these, but only *some* of these??? 0680 mkdir %pkg_root%\bin\translations 0681 setlocal enableextensions enabledelayedexpansion 0682 for /f "delims=" %%F in ('dir /b "%DEPS_INSTALL_DIR%\translations\qt_*.qm"') do ( 0683 :: Exclude qt_help_*.qm 0684 set temp=%%F 0685 set temp2=!temp:_help=! 0686 if x!temp2! == x!temp! copy %DEPS_INSTALL_DIR%\translations\!temp! %pkg_root%\bin\translations\!temp! 0687 ) 0688 endlocal 0689 :: Krita plugins 0690 xcopy /Y %KRITA_INSTALL_DIR%\lib\kritaplugins\*.dll %pkg_root%\lib\kritaplugins\ 0691 xcopy /Y /S /I %DEPS_INSTALL_DIR%\lib\krita-python-libs %pkg_root%\lib\krita-python-libs 0692 xcopy /Y /S /I %KRITA_INSTALL_DIR%\lib\krita-python-libs %pkg_root%\lib\krita-python-libs 0693 0694 :: MLT plugins and their data 0695 xcopy /S /Y /I %DEPS_INSTALL_DIR%\lib\mlt %pkg_root%\lib\mlt 0696 xcopy /S /Y /I %DEPS_INSTALL_DIR%\share\mlt %pkg_root%\share\mlt 0697 0698 :: Fontconfig 0699 xcopy /Y /S /I %DEPS_INSTALL_DIR%\etc\fonts %pkg_root%\etc\fonts 0700 0701 :: Share 0702 xcopy /Y /S /I %KRITA_INSTALL_DIR%\share\color %pkg_root%\share\color 0703 xcopy /Y /S /I %KRITA_INSTALL_DIR%\share\color-schemes %pkg_root%\share\color-schemes 0704 xcopy /Y /S /I %KRITA_INSTALL_DIR%\share\icons %pkg_root%\share\icons 0705 xcopy /Y /S /I %KRITA_INSTALL_DIR%\share\krita %pkg_root%\share\krita 0706 xcopy /Y /S /I %KRITA_INSTALL_DIR%\share\kritaplugins %pkg_root%\share\kritaplugins 0707 xcopy /Y /S /I %DEPS_INSTALL_DIR%\share\kf5 %pkg_root%\share\kf5 0708 xcopy /Y /S /I %DEPS_INSTALL_DIR%\share\mime %pkg_root%\share\mime 0709 :: Python libs 0710 xcopy /Y /S /I %DEPS_INSTALL_DIR%\share\krita\pykrita %pkg_root%\share\krita\pykrita 0711 robocopy %DEPS_INSTALL_DIR%\lib\site-packages %pkg_root%\lib\site-packages /S /E ^ 0712 /XF "setuptools.pth" "easy-install.pth" ^ 0713 /XD "packaging*" "pip*" "ply*" "pyparsing*" "PyQt_builder*" "sip*" "toml*" "meson*" 0714 :: Not useful on Windows it seems 0715 rem xcopy /Y /S /I %KRITA_INSTALL_DIR%\share\appdata %pkg_root%\share\appdata 0716 rem xcopy /Y /S /I %KRITA_INSTALL_DIR%\share\applications %pkg_root%\share\applications 0717 rem xcopy /Y /S /I %DEPS_INSTALL_DIR%\share\doc %pkg_root%\share\doc 0718 rem xcopy /Y /S /I %DEPS_INSTALL_DIR%\share\kservices5 %pkg_root%\share\kservices5 0719 rem xcopy /Y /S /I %DEPS_INSTALL_DIR%\share\man %pkg_root%\share\man 0720 rem xcopy /Y /S /I %DEPS_INSTALL_DIR%\share\ocio %pkg_root%\share\ocio 0721 0722 :: Copy locale to bin 0723 xcopy /Y /S /I %KRITA_INSTALL_DIR%\share\locale %pkg_root%\bin\locale 0724 xcopy /Y /S /I %DEPS_INSTALL_DIR%\share\locale %pkg_root%\bin\locale 0725 0726 :: Copy shortcut link from source (can't create it dynamically) 0727 copy %KRITA_SRC_DIR%\packaging\windows\krita.lnk %pkg_root% 0728 copy %KRITA_SRC_DIR%\packaging\windows\krita-minimal.lnk %pkg_root% 0729 copy %KRITA_SRC_DIR%\packaging\windows\krita-animation.lnk %pkg_root% 0730 0731 set "QMLDIR_ARGS=--qmldir %DEPS_INSTALL_DIR%\qml" 0732 if exist "%KRITA_INSTALL_DIR%\lib\qml" ( 0733 xcopy /Y /S /I %KRITA_INSTALL_DIR%\lib\qml %pkg_root%\bin 0734 :: This doesn't really seem to do anything 0735 set "QMLDIR_ARGS=%QMLDIR_ARGS% --qmldir %KRITA_INSTALL_DIR%\lib\qml" 0736 ) 0737 0738 :: windeployqt 0739 windeployqt.exe %QMLDIR_ARGS% --release -gui -core -concurrent -network -printsupport -svg -xml -sql -qml -quick -quickwidgets %pkg_root%\bin\krita.exe %pkg_root%\bin\krita.dll 0740 if errorlevel 1 ( 0741 echo ERROR: WinDeployQt failed! 1>&2 0742 exit /B 1 0743 ) 0744 0745 :: ffmpeg 0746 copy %DEPS_INSTALL_DIR%\bin\ffmpeg.exe %pkg_root%\bin 0747 copy %DEPS_INSTALL_DIR%\bin\ffprobe.exe %pkg_root%\bin 0748 copy %DEPS_INSTALL_DIR%\bin\ffmpeg_LICENSE.txt %pkg_root%\bin 0749 copy %DEPS_INSTALL_DIR%\bin\ffmpeg_README.txt %pkg_root%\bin 0750 0751 0752 :: Copy embedded Python 0753 xcopy /Y /S /I %DEPS_INSTALL_DIR%\python %pkg_root%\python 0754 del /q %pkg_root%\python\python.exe %pkg_root%\python\pythonw.exe 0755 0756 :: For chopping relative path 0757 :: 512 should be enough 0758 :: n+2 to also account for a trailing backslash 0759 setlocal enableextensions enabledelayedexpansion 0760 for /L %%n in (1 1 512) do if "!pkg_root:~%%n,1!" neq "" set /a "pkg_root_len_plus_one=%%n+2" 0761 endlocal & set pkg_root_len_plus_one=%pkg_root_len_plus_one% 0762 0763 echo. 0764 setlocal enableextensions enabledelayedexpansion 0765 :: Remove Python cache files 0766 for /d /r "%pkg_root%" %%F in (__pycache__\) do ( 0767 if EXIST "%%F" ( 0768 set relpath=%%F 0769 set relpath=!relpath:~%pkg_root_len_plus_one%! 0770 echo Deleting Python cache !relpath! 0771 rmdir /S /Q "%%F" 0772 ) 0773 ) 0774 endlocal 0775 0776 echo. 0777 echo Splitting debug info from binaries... 0778 call :split-debug "%pkg_root%\bin\krita.exe" bin\krita.exe 0779 call :split-debug "%pkg_root%\bin\krita.com" bin\krita.com 0780 call :split-debug "%pkg_root%\bin\kritarunner.exe" bin\kritarunner.exe 0781 call :split-debug "%pkg_root%\bin\kritarunner.com" bin\kritarunner.com 0782 setlocal enableextensions enabledelayedexpansion 0783 :: Find all DLLs 0784 for /r "%pkg_root%" %%F in (*.dll) do ( 0785 set relpath=%%F 0786 set relpath=!relpath:~%pkg_root_len_plus_one%! 0787 call :split-debug "%%F" !relpath! 0788 ) 0789 endlocal 0790 setlocal enableextensions enabledelayedexpansion 0791 :: Find all Python native modules 0792 for /r "%pkg_root%\share\krita\pykrita\" %%F in (*.pyd) do ( 0793 set relpath=%%F 0794 set relpath=!relpath:~%pkg_root_len_plus_one%! 0795 call :split-debug "%%F" !relpath! 0796 ) 0797 for /r "%pkg_root%\lib\krita-python-libs\" %%F in (*.pyd) do ( 0798 set relpath=%%F 0799 set relpath=!relpath:~%pkg_root_len_plus_one%! 0800 call :split-debug "%%F" !relpath! 0801 ) 0802 for /r "%pkg_root%\lib\site-packages\" %%F in (*.pyd) do ( 0803 set relpath=%%F 0804 set relpath=!relpath:~%pkg_root_len_plus_one%! 0805 call :split-debug "%%F" !relpath! 0806 ) 0807 endlocal 0808 0809 if not "%ARG_PRE_ZIP_HOOK%" == "" ( 0810 echo Running pre-zip-hook... 0811 setlocal 0812 cmd /c ""%ARG_PRE_ZIP_HOOK%" "%pkg_root%\"" 0813 if errorlevel 1 ( 0814 echo ERROR: Got exit code !errorlevel! from pre-zip-hook! 1>&2 0815 exit /b 1 0816 ) 0817 endlocal 0818 ) 0819 0820 echo. 0821 echo Packaging stripped binaries... 0822 "%SEVENZIP_EXE%" a -tzip %pkg_name%.zip %pkg_root%\ "-xr^!.debug" 0823 echo -------- 0824 0825 if "%KRITA_SKIP_DEBUG_PACKAGE%" == "" ( 0826 echo. 0827 echo Packaging debug info... 0828 :: (note that the top-level package dir is not included) 0829 "%SEVENZIP_EXE%" a -tzip %pkg_name%-dbg.zip -r %pkg_root%\*.debug 0830 echo -------- 0831 ) 0832 0833 echo. 0834 echo. 0835 echo Krita packaged as %pkg_name%.zip 0836 if exist %pkg_name%-dbg.zip echo Debug info packaged as %pkg_name%-dbg.zip 0837 echo Packaging dir is %pkg_root% 0838 echo NOTE: Do not create installer with packaging dir. Extract from 0839 echo %pkg_name%.zip instead, 0840 echo and do _not_ run krita inside the extracted directory because it will 0841 echo create extra unnecessary files. 0842 echo. 0843 echo Please remember to actually test the package before releasing it. 0844 echo. 0845 %PAUSE% 0846 0847 exit /b 0848 0849 :split-debug 0850 echo Splitting debug info of %2 0851 objcopy --only-keep-debug %~1 %~1.debug 0852 if ERRORLEVEL 1 exit /b %ERRORLEVEL% 0853 :: If the debug file is small enough then consider there being no debug info. 0854 :: Discard these files since they somehow make gdb crash. 0855 call :getfilesize %~1.debug 0856 if /i %getfilesize_retval% LEQ 2048 ( 0857 echo Discarding %2.debug 0858 del %~1.debug 0859 exit /b 0 0860 ) 0861 if not exist %~dp1.debug mkdir %~dp1.debug 0862 move %~1.debug %~dp1.debug\ > NUL 0863 strip --strip-debug %~1 0864 :: Add debuglink 0865 :: FIXME: There is a problem with gdb that cause it to output this warning 0866 :: FIXME: "warning: section .gnu_debuglink not found in xxx.debug" 0867 :: FIXME: I tried adding a link to itself but this kills drmingw :( 0868 objcopy --add-gnu-debuglink="%~dp1.debug\%~nx1.debug" %~1 0869 exit /b %ERRORLEVEL% 0870 0871 :getfilesize 0872 set getfilesize_retval=%~z1 0873 goto :eof 0874 0875 :relpath_dirpath 0876 call :relpath_dirpath_internal "" "%~1" 0877 goto :eof 0878 0879 :relpath_dirpath_internal 0880 for /f "tokens=1* delims=\" %%a in ("%~2") do ( 0881 :: If part 2 is empty, it means part 1 is probably the file name 0882 if x%%b==x ( 0883 set relpath_dirpath_retval=%~1 0884 ) else ( 0885 call :relpath_dirpath_internal "%~1%%a\" %%b 0886 ) 0887 ) 0888 goto :eof