Skip to content

Instantly share code, notes, and snippets.

@TNick
Created October 14, 2015 11:40
Show Gist options
  • Save TNick/debb79e0c9a2a1526fb2 to your computer and use it in GitHub Desktop.
Save TNick/debb79e0c9a2a1526fb2 to your computer and use it in GitHub Desktop.
System-wide setup script for Windows machines; deals with Qt, MSVC, CMake
:: =========================================================
::
:: This script is intended to initialize the environment
:: with common variables usable across projects. It
:: calls vcvarsall.bat on your behalf.
::
:: The easiest way to use it is to define ENVSETUP
:: environment variable that points to it, then use
:: call %ENVSETUP% %~dp0
:: in your script.
::
:: =========================================================
::
:: Arguments to this script:
:: - %1: project base directory
::
:: =========================================================
::
:: Following variables are unconditionally set by the script:
:: - CURRENT_WORKING_DIR: current working directory
:: - PROJECT_DIR: project base directory (1st argument)
:: - CMAKE_PREFIX_PATH: based on provided options
:: - CMAKE_MODULE_PATH: based on provided options
:: - CMAKE: path to CMake executable
:: - DEST_DRIVE_LETTER: drive where build takes place
::
:: =========================================================
::
:: Following variables can be set by the caller and, if
:: they are not, will be set by this script as follows:
:: - BUILD_CONFIG: can be either Debug or Release
:: default: Debug;
:: - BITS_COUNT: can be either 32 or 64
:: default: 64;
:: - SOURCE_DIR: path to the directory where the source lies
:: default: %PROJECT_DIR%\src
:: - DEST_DIR: path to the directory where to build it
:: default: %PROJECT_DIR%\build-Debug-64
:: - CMAKE_PATH: where CMake is installed
:: default: %ProgramFiles%\CMake
:: - CMAKE_GENERATOR: one of the generators in cmake --help
:: default: "NMake Makefiles";
:: - VCINSTALLDIR: install directory for Microsoft compiler
:: default: %ProgramFiles%\msvc-2015
:: - VCVARSALL_ARG: argument to use with vcvarsall.bat
:: default: amd64_x86 in 64 bit, x86 in 32 bit
:: - VCVARSALL: path to vcvarsall.bat
:: default: based on VCINSTALLDIR and VCVARSALL_DEFAULT
:: - QTDIR: directory where Qt is installed
:: default: %ProgramFiles%\Qt\5.5\%QT_DIR_NAME%
:: - QT_DIR_NAME: name of the directory in Qt installation
:: default: msvc2013_64 in 64 bit, msvc2013 in 32 bit
:: - SSL_PATH: path towards OpenSSL
:: default:
:: - PILES_PATH: path towards cmake scripts for piles
:: default:
::
:: =========================================================
::
:: Internal variables:
:: - VCVARSALL_DEFAULT
::
:: =========================================================
:: Some common variables
SET CURRENT_WORKING_DIR=%cd%
SET PROJECT_DIR=%1
:: default configuration parameters
IF NOT [%BUILD_CONFIG%] == [] GOTO BuildConfigSet
SET BUILD_CONFIG=Debug
:BuildConfigSet
IF NOT [%BITS_COUNT%] == [] GOTO BitsCountSet
SET BITS_COUNT=64
:BitsCountSet
:: Set things up according to bits count
IF "%BITS_COUNT%"=="32" GOTO bit32_variant
:: . . . . . . . . . . . . . . . . . . . . . . . . .
:bit64_variant
SET CMAKE_GENERATOR="NMake Makefiles"
SET VCVARSALL_DEFAULT=vcvarsall.bat
:: x86_amd64\vcvarsx86_amd64.bat
SET VCVARSALL_ARG=amd64_x86
SET QT_DIR_NAME=msvc2013_64
goto done_bit_variant
:: . . . . . . . . . . . . . . . . . . . . . . . . .
:bit32_variant
SET BUILD_BIT_CONFIG=32
SET VCVARSALL_DEFAULT=vcvarsall.bat
::vcvars32.bat
SET VCVARSALL_ARG=x86
SET CMAKE_GENERATOR="NMake Makefiles"
SET QT_DIR_NAME=msvc2013
:done_bit_variant
echo BUILDING A %BITS_COUNT% BIT VERSION
:: . . . . . . . . . . . . . . . . . . . . . . . . .
:: Source folder
IF NOT [%SOURCE_DIR%] == [] GOTO SourceDirSet
SET SOURCE_DIR=%PROJECT_DIR%src
:SourceDirSet
:: Destination folder
IF NOT [%DEST_DIR%] == [] GOTO DestinationDirSet
SET DEST_DIR=%PROJECT_DIR%build-%BUILD_CONFIG%-%BITS_COUNT%
:DestinationDirSet
SET DEST_DRIVE_LETTER=%DEST_DIR:~0,2%
:: Qt installation folder
IF NOT [%QTDIR%] == [] GOTO QtDirCheck
SET QTDIR=%ProgramFiles%\Qt\5.5\%QT_DIR_NAME%
IF EXIST %QTDIR%\NUL GOTO QtDirSet
SET QTDIR=C:\pf\Qt\5.5\%QT_DIR_NAME%
IF EXIST %QTDIR%\NUL GOTO QtDirSet
SET QTDIR=%ProgramFiles%\Qt\5.4\%QT_DIR_NAME%
IF EXIST %QTDIR%\NUL GOTO QtDirSet
SET QTDIR=C:\pf\Qt\5.4\%QT_DIR_NAME%
IF EXIST %QTDIR%\NUL GOTO QtDirSet
SET QTDIR=%ProgramFiles%\Qt\5.3\%QT_DIR_NAME%
IF EXIST %QTDIR%\NUL GOTO QtDirSet
SET QTDIR=C:\pf\Qt\5.3\%QT_DIR_NAME%
IF EXIST %QTDIR%\NUL GOTO QtDirSet
SET QTDIR=%ProgramFiles%\Qt\5.2\%QT_DIR_NAME%
IF EXIST %QTDIR%\NUL GOTO QtDirSet
SET QTDIR=C:\pf\Qt\5.2\%QT_DIR_NAME%
:QtDirCheck
IF EXIST %QTDIR%\NUL GOTO QtDirSet
SET QTDIR=
echo WARNING! Qt directory could not be found
:QtDirSet
:: CMake installation folder
IF NOT [%CMAKE_PATH%] == [] GOTO CmakeDirCheck
SET CMAKE_PATH=%ProgramFiles%\Cmake
IF EXIST %CMAKE_PATH%\NUL GOTO CmakeDirSet
SET CMAKE_PATH=C:\pf\Cmake
:CmakeDirCheck
IF EXIST %CMAKE_PATH%\NUL GOTO CmakeDirSet
SET CMAKE_PATH=
echo WARNING! CMake directory could not be found
:CmakeDirSet
:: Visual C++ installation folder
IF NOT [%VCINSTALLDIR%] == [] GOTO VcInstallDirCheck
SET VCINSTALLDIR=%ProgramFiles%\msvc-2015\VC\
IF EXIST %VCINSTALLDIR%\NUL GOTO VcInstallDirSet
SET VCINSTALLDIR=%ProgramFiles%\msvc-2013\VC\
IF EXIST %VCINSTALLDIR%\NUL GOTO VcInstallDirSet
SET VCINSTALLDIR=C:\pf\msvc-2015\VC\
IF EXIST %VCINSTALLDIR%\NUL GOTO VcInstallDirSet
SET VCINSTALLDIR=C:\pf\msvc-2013\VC\
:VcInstallDirCheck
IF EXIST %VCINSTALLDIR%\NUL GOTO VcInstallDirSet
SET VCINSTALLDIR=
echo WARNING! MSVC directory could not be found
:VcInstallDirSet
:: Visual C++ config script
IF NOT [%VCVARSALL%] == [] GOTO VcConfigScriptCheck
SET VCVARSALL=%VCINSTALLDIR%%VCVARSALL_DEFAULT%
:VcConfigScriptCheck
IF EXIST %VCVARSALL% GOTO VcConfigScriptSet
SET VCVARSALL=
echo WARNING! MSVC config script could not be found
:VcConfigScriptSet
:: OpenSSL installation folder
IF NOT [%SSL_PATH%] == [] GOTO OpenSslDirCheck
SET SSL_PATH=%ProgramFiles%\OpenSSL_9\bin
IF EXIST %SSL_PATH%\NUL GOTO OpenSslDirSet
SET SSL_PATH=C:\pf\OpenSSL_9\bin
:OpenSslDirCheck
IF EXIST %SSL_PATH%\NUL GOTO OpenSslDirSet
SET SSL_PATH=
echo WARNING! OpenSSL path could not be found
:OpenSslDirSet
:: Piles CMake scripts installation folder
IF NOT [%PILES_PATH%] == [] GOTO PilesDirCheck
SET PILES_PATH=%ProgramFiles%\piles\pile-cmake
IF EXIST %PILES_PATH%\NUL GOTO PilesDirSet
SET PILES_PATH=K:\prog\piles\pile-cmake\src
IF EXIST %PILES_PATH%\NUL GOTO PilesDirSet
SET PILES_PATH=L:\prog\piles\pile-cmake\src
IF EXIST %PILES_PATH%\NUL GOTO PilesDirSet
SET PILES_PATH=H:\prog\piles\pile-cmake\src
:PilesDirCheck
IF EXIST %PILES_PATH%\NUL GOTO PilesDirSet
SET PILES_PATH=
echo WARNING! Piles CMake script path could not be found
:PilesDirSet
:: =========================================================
:: load environment variables from MSVC
IF [%VCVARSALL%] == [] GOTO NoVcVar
call %VCVARSALL% %VCVARSALL_ARG%
:NoVcVar
:: configure CMake
SET CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%QTDIR%;%SSL_PATH%
SET CMAKE_MODULE_PATH=%CMAKE_MODULE_PATH%;%PILES_PATH%;%SSL_PATH%
call set CMAKE_MODULE_PATH=%%CMAKE_MODULE_PATH:\=/%%
SET CMAKE=%CMAKE_PATH%\bin\cmake.exe
:: change to proper drive letter
%DEST_DRIVE_LETTER%
:: =========================================================
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment