LogDoctor/builder.bat

293 lines
6.2 KiB
Batchfile

@ECHO off
:: Store the actual path
SET actual_path=%1
:: Get Qt base path
SET qt_base_path=C:/Qt
IF EXIST "%qt_base_path%" GOTO :step0
SET qt_base_path=C:/Program Files/Qt
IF EXIST "%qt_base_path%" GOTO :step0
SET qt_base_path=C:/Program Files (x86)/Qt
IF EXIST "%qt_base_path%" GOTO :step0
SET qt_base_path=%USERPROFILE%\Qt
IF EXIST "%qt_base_path%" GOTO :step0
SET qt_base_path=NONE
:step0
SET qt_path=%qt_base_path%
IF "%qt_base_path%" == "NONE" GOTO :step1
SET qt_base_path=%qt_base_path:\=/%
IF "%qt_base_path:~-1%"=="/" SET qt_base_path=%qt_base_path:~0,-1%
:: Get Qt version
SET qt_path=%qt_base_path%/5.15.2
IF EXIST "%qt_path%" GOTO :step1
SET qt_path=%qt_base_path%/6.0
IF EXIST "%qt_path%" GOTO :step1
SET qt_path=%qt_base_path%/6.2
IF EXIST "%qt_path%" GOTO :step1
SET qt_path=%qt_base_path%/6.4
IF EXIST "%qt_path%" GOTO :step1
SET qt_path=NONE
:step1
IF NOT "%qt_path%" == "NONE" GOTO :step2
:loop1
ECHO:
ECHO Qt not found, please insert the path of your Qt installation, including the version
ECHO Ex: C:/your/path/to/Qt/5.15.2
SET /P qt_path= :
IF NOT EXIST "%qt_path%" (
ECHO Error: the given path doesn't exist
GOTO :loop1
)
:step2
SET qt_path=%qt_path:\=/%
IF "%qt_path:~-1%"=="/" SET qt_path=%qt_path:~0,-1%
:: Get CMake path
SET cmake_path=%qt_base_path%/Tools/CMake_64/bin/cmake.exe
IF EXIST "%cmake_path%" GOTO :step4
where /Q cmake
IF ERRORLEVEL 0 (
FOR /F "tokens=* USEBACKQ" %%e IN (`where cmake`) DO SET cmake_path=%%e
IF EXIST "%cmake_path%" GOTO :step4
)
SET cmake_path=C:/Program Files/CMake/bin/cmake.exe
IF EXIST "%cmake_path%" GOTO :step4
SET cmake_path=C:/Program Files (x86)/CMake/bin/cmake.exe
IF EXIST "%cmake_path%" GOTO :step4
SET cmake_path=C:/CMake/bin/cmake.exe
IF EXIST "%cmake_path%" GOTO :step4
SET cmake_path=C:/msys64/usr/bin/cmake.exe
IF EXIST "%cmake_path%" GOTO :step4
SET cmake_path=C:/msys64/mingw64/bin/cmake.exe
IF EXIST "%cmake_path%" GOTO :step4
:loop3
ECHO:
ECHO CMake not found, please insert the path of your CMake installation, including the executable
ECHO Ex: C:/your/path/to/cmake.exe
SET /P cmake_path= :
IF EXIST "%cmake_path%" (
IF NOT "%cmake_path:~-9%" == "cmake.exe" (
ECHO Error: the given path doesn't point to a cmake executable
GOTO :loop3
)
) ELSE (
ECHO Error: the given path doesn't exist
GOTO :loop3
)
:step4
SET cmake_path=%cmake_path:\=/%
:: Get the C++ compiler path
SET cxx_compiler=%qt_base_path%/Tools/mingw1120_64/bin/g++.exe
IF EXIST "%cxx_compiler%" GOTO :step6
SET cxx_compiler=%qt_base_path%/Tools/mingw810_64/bin/g++.exe
IF EXIST "%cxx_compiler%" GOTO :step6
where /Q g++
IF ERRORLEVEL 0 (
FOR /F "tokens=* USEBACKQ" %%e IN (`where g++`) DO SET cxx_compiler=%%e
IF EXIST "%cxx_compiler%" GOTO :step6
)
SET cxx_compiler=C:/msys64/mingw64/bin/g++.exe
IF EXIST "%cxx_compiler%" GOTO :step6
:loop5
ECHO:
ECHO G++ not found, please insert the path of the C++ compiler
ECHO Ex: C:/your/path/to/g++.exe
SET /P cxx_compiler= :
IF EXIST "%cxx_compiler%" (
IF NOT "%cxx_compiler:~-7%" == "g++.exe" (
ECHO Error: the given path doesn't point to a g++ executable
GOTO :loop5
)
) ELSE (
ECHO Error: the given path doesn't exist
GOTO :loop5
)
:step6
SET cxx_compiler=%cxx_compiler:\=/%
SET prefix_path=%qt_path%/mingw112_64
IF EXIST "%prefix_path%" GOTO :step7
SET prefix_path=%qt_path%/mingw81_64
IF EXIST "%prefix_path%" GOTO :step7
ECHO:
ECHO Error: CMAKE_PREFIX_PATH not found
PAUSE
EXIT /B 1
:step7
IF "%prefix_path:~-1%"=="/" SET prefix_path=%prefix_path:~0,-1%
SET qt_dir=%prefix_path%/lib/cmake/Qt5
IF EXIST "%qt_dir%" GOTO :step8
ECHO:
ECHO Error: QT_DIR not found
PAUSE
EXIT /B 1
:step8
IF "%qt_dir:~-1%"=="/" SET qt_dir=%qt_dir:~0,-1%
:: Check if JOM is in PATH
where /Q jom
IF ERRORLEVEL 0 (
FOR /F "tokens=* USEBACKQ" %%e IN (`where jom`) DO SET jom_path=%%e
IF EXIST "%jom_path%" GOTO :step9_a
)
SET jom_path=%qt_base_path%/Tools/QtCreator/bin/jom
IF EXIST "%jom_path%" SET PATH=%PATH%;%jom_path%
where /Q jom
IF ERRORLEVEL 0 (
FOR /F "tokens=* USEBACKQ" %%e IN (`where jom`) DO SET jom_path=%%e
IF EXIST "%jom_path%" GOTO :step9_a
)
ECHO:
ECHO Error: JOM not found in PATH, please add it or compilation won't succeed
PAUSE
EXIT /B 1
:step9_a
:: Check if libwinpthread-1.dll is in PATH
where /Q libwinpthread-1.dll
IF ERRORLEVEL 0 (
FOR /F "tokens=* USEBACKQ" %%e IN (`where libwinpthread-1.dll`) DO SET lib_path=%%e
IF EXIST "%lib_path%" GOTO :step9_b2
)
SET lib_path=%qt_base_path%/Tools/mingw1120_64/bin
IF EXIST "%lib_path%" GOTO :step9_b1
SET lib_path=%qt_base_path%/Tools/mingw810_64/bin
IF EXIST "%lib_path%" GOTO :step9_b1
SET lib_path=C:/msys64/mingw64/bin
IF EXIST "%lib_path%" GOTO :step9_b1
:step9_b1
SET PATH=%PATH%;%lib_path%
where /Q libwinpthread-1.dll
IF ERRORLEVEL 0 (
FOR /F "tokens=* USEBACKQ" %%e IN (`where libwinpthread-1.dll`) DO SET lib_path=%%e
IF EXIST "%lib_path%" GOTO :step9_b2
)
ECHO:
ECHO Error: libwinpthread-1.dll not found in PATH, please add it or compilation won't succeed
PAUSE
EXIT /B 1
:step9_b2
:: Start the compilation process
ECHO:
ECHO Starting compilation process
ECHO:
:: Make a build folder
IF EXIST build rmdir /S /Q build
mkdir build
IF ERRORLEVEL 1 (
ECHO:
ECHO Error: failed to create directory: 'build'
cd "%actual_path%"
PAUSE
EXIT /B 1
)
cd build
:: Prepare build files
"%cmake_path%" "%logdocdir%/logdoctor" "-DCMAKE_BUILD_TYPE:STRING=MinSizeRel" "-DCMAKE_GENERATOR:STRING=NMake Makefiles JOM" "-DCMAKE_MAKE_PROGRAM:STRING=jom" "-DCMAKE_CXX_COMPILER:FILEPATH=%cxx_compiler%" "-DCMAKE_PREFIX_PATH:PATH=%prefix_path%" "-DQT_DIR:PATH=%qt_dir%"
IF ERRORLEVEL 1 (
ECHO:
ECHO Error: failed to prepare cmake files
cd "%actual_path%"
PAUSE
EXIT /B 1
)
:: Build the project
"%cmake_path%" --build ./ --target all
IF ERRORLEVEL 1 (
ECHO:
ECHO Error: failed to compile
cd "%actual_path%"
PAUSE
EXIT /B 1
)
:: Deploy the static libraries
IF EXIST LogDoctor rmdir /S /Q LogDoctor
mkdir LogDoctor
move LogDoctor.exe LogDoctor\
SET prefix_path=%prefix_path:/=\%
"%prefix_path%\bin\windeployqt.exe" LogDoctor\
copy /V /Y "%prefix_path%\bin\libstdc++-6.dll" LogDoctor\
copy /V /Y "%prefix_path%\bin\libwinpthread-1.dll" LogDoctor\
copy /V /Y "%prefix_path%\bin\libgcc_s_seh-1.dll" LogDoctor\
:: Compilation finished
ECHO:
ECHO Compilation finished