This commit is contained in:
Stinkfist0
2015-10-28 19:43:10 +02:00
parent c9ff455812
commit 5c0eb05482
16 changed files with 813 additions and 0 deletions
+4
View File
@@ -0,0 +1,4 @@
# Dependency and build folders created by the build scripts
deps*/
build*/
install*/
+404
View File
@@ -0,0 +1,404 @@
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: ::
:: This file is part of IfcOpenShell. ::
:: ::
:: IfcOpenShell is free software: you can redistribute it and/or modify ::
:: it under the terms of the Lesser GNU General Public License as published by ::
:: the Free Software Foundation, either version 3.0 of the License, or ::
:: (at your option) any later version. ::
:: ::
:: IfcOpenShell is distributed in the hope that it will be useful, ::
:: but WITHOUT ANY WARRANTY; without even the implied warranty of ::
:: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ::
:: Lesser GNU General Public License for more details. ::
:: ::
:: You should have received a copy of the Lesser GNU General Public License ::
:: along with this program. If not, see <http://www.gnu.org/licenses/>. ::
:: ::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: This batch file expects CMake generator as %1 and build configuration type as %2. If not provided,
:: the GENERATOR_DEFAULT will be used for %1 and BUILD_CFG_DEFAULT for %2 (both set in vs-cfg.cmd)
:: Optionally a build type (Build/Rebuild/Clean) can be passed as %3.
@echo off
echo.
:: Enable the delayed environment variable expansion needed in vs-cfg.cmd.
setlocal EnableDelayedExpansion
:: Make sure vcvarsall.bat is called and dev env set is up.
IF "%VSINSTALLDIR%"=="" (
utils\cecho {0C}Visual Studio environment variables not set - cannot proceed!{# #}{\n}
GOTO :Error
)
set PROJECT_NAME=IfcOpenShell
utils\cecho {F0}This script fetches and builds all %PROJECT_NAME% dependencies{# #}{\n}
echo.
:: Set up variables depending on the used Visual Studio version
call vs-cfg.cmd %1 %2
IF NOT %ERRORLEVEL%==0 GOTO :Error
set BUILD_TYPE=%3
IF %GENERATOR%=="" (
cecho {0C}GENERATOR not specified - cannot proceed!{# #}{\n}
GOTO :Error
)
IF "%BUILD_TYPE%"=="" set BUILD_TYPE=Build
IF NOT "!BUILD_TYPE!"=="Build" IF NOT "!BUILD_TYPE!"=="Rebuild" IF NOT "!BUILD_TYPE!"=="Clean" (
utils\cecho {0C}Invalid build type passed: !BUILD_TYPE!. Cannot proceed, aborting!{# #}{\n}
GOTO :Error
)
:: Make sure deps and install folders exists.
IF NOT EXIST %DEPS_DIR%. mkdir %DEPS_DIR%
IF NOT EXIST %INSTALL_DIR%. mkdir %INSTALL_DIR%
:: If we use VS2008, framework path (for MSBuild) may not be correctly set. Manually attempt to add in that case
IF %VS_VER%==2008 set PATH=C:\Windows\Microsoft.NET\Framework\v3.5;%PATH%
:: User-configurable build options
IF "%IFCOS_INSTALL_PYTHON%"=="" set IFCOS_INSTALL_PYTHON=TRUE
IF "%IFCOS_NUM_BUILD_PROCESSES%"=="" set IFCOS_NUM_BUILD_PROCESSES=%NUMBER_OF_PROCESSORS%
:: For subroutines
set MSBUILD_CMD=MSBuild.exe /nologo /m:%IFCOS_NUM_BUILD_PROCESSES% /t:%BUILD_TYPE%
REM /clp:ErrorsOnly;WarningsOnly
:: Note BUILD_TYPE not passed, Clean e.g. wouldn't delete the installed files.
set INSTALL_CMD=MSBuild.exe /nologo /m:%IFCOS_NUM_BUILD_PROCESSES%
set BUILD_DIR=build-vs%VS_VER%-%TARGET_ARCH%
REM echo.
REM cecho {F0}This script fetches and builds all %PROJECT_NAME% dependencies{# #}{\n}
:: Print build configuration information
echo.
cecho {0A}Script configuration:{# #}{\n}
cecho {0D} CMake Generator = %GENERATOR%{# #}{\n}
echo - Passed to CMake -G option.
cecho {0D} Target Architecture = %TARGET_ARCH%{# #}{\n}
echo - Whether were doing 32-bit (x86) or 64-bit (x64) build.
cecho {0D} Dependency Directory = %DEPS_DIR%{# #}{\n}
echo - The directory where %PROJECT_NAME% dependencies are fetched and built.
cecho {0D} Installation Directory = %INSTALL_DIR%{# #}{\n}
echo - The directory where %PROJECT_NAME% dependencies are installed.
cecho {0D} Build Config Type = %BUILD_CFG%{# #}{\n}
echo - The used build configuration type for the dependencies.
echo Defaults to RelWithDebInfo if not specified.
IF %BUILD_CFG%==MinSizeRel cecho {0E} WARNING: MinSizeRel build can suffer from a significant performance loss.{# #}{\n}
cecho {0D} Build Type = %BUILD_TYPE%{# #}{\n}
echo - The used build type for the dependencies (Build, Rebuild, Clean).
echo Defaults to Build if not specified.
cecho {0D} IFCOS_INSTALL_PYTHON = %IFCOS_INSTALL_PYTHON%{# #}{\n}
echo - Download and install Python.
echo Set to something other than TRUE if you wish to use an already installed version of Python.
cecho {0D} IFCOS_NUM_BUILD_PROCESSES = %IFCOS_NUM_BUILD_PROCESSES%{# #}{\n}
echo - How many MSBuild.exe processes may be run in parallel.
echo Defaults to NUMBER_OF_PROCESSORS.
echo.
:: Print script's usage information
cecho {0A}Requirements for a successful execution:{# #}{\n}
echo 1. Install Git and make sure 'git' is accessible from PATH.
echo - http://code.google.com/p/tortoisegit/
echo 2. Install CMake and make sure 'cmake' is accessible from PATH.
echo - http://www.cmake.org/
echo 3. Visual Studio 2008 or newer (2013 or newer recommended).
echo 4. Run this batch script with Visual Studio environment variables set.
echo.
REM TODO 3ds Max SDK?
echo If you are not ready with the above, press Ctrl-C to abort!
pause
echo.
cd %DEPS_DIR%
goto :Python
:Boost
set BOOST_VERSION=1.59.0
:: DEPENDENCY_NAME is used for logging and DEPENDENCY_DIR for saving from some redundant typing
set DEPENDENCY_NAME=Boost %BOOST_VERSION%
set DEPENDENCY_DIR="%DEPS_DIR%\boost"
:: Version string with underscores instead of dots.
set BOOST_VER=%BOOST_VERSION:.=_%
set BOOST_ROOT=%DEPS_DIR%\boost
REM set BOOST_INCLUDEDIR=%DEPS_DIR%\boost
set BOOST_LIBRARYDIR=%DEPS_DIR%\boost\stage\%VS_PLATFORM%\lib
:: NOTE Also zip download exists, if encountering problems with 7z for some reason.
set ZIP_EXT=7z
set BOOST_ZIP=boost_%BOOST_VER%.%ZIP_EXT%
call :DownloadFile http://downloads.sourceforge.net/project/boost/boost/%BOOST_VERSION%/%BOOST_ZIP% "%DEPS_DIR%" %BOOST_ZIP%
IF NOT %ERRORLEVEL%==0 GOTO :Error
call :ExtractArchive %BOOST_ZIP% "%DEPS_DIR%" "%DEPS_DIR%\boost"
IF NOT %ERRORLEVEL%==0 GOTO :Error
:: Build Boost build script
IF EXIST "%DEPS_DIR%\boost_%BOOST_VER%". (
cd "%DEPS_DIR%"
ren boost_%BOOST_VER% boost
IF NOT EXIST "%DEPS_DIR%\boost\boost.css" GOTO :Error
cd "%DEPS_DIR%\boost"
cecho {0D}Building Boost build script.{# #}{\n}
call bootstrap vc%VC_VER%
IF NOT %ERRORLEVEL%==0 GOTO :Error
)
set BOOST_LIBS=--with-system --with-regex --with-thread --with-program_options --with-date_time
:: NOTE Boost is fast to build with limited set of libraries so build it always.
cd "%DEPS_DIR%\boost"
cecho {0D}Building %DEPENDENCY_NAME% %BOOST_LIBS% Please be patient, this will take a while.{# #}{\n}
IF EXIST "%DEPS_DIR%\boost\bin.v2\project-cache.jam" del "%DEPS_DIR%\boost\bin.v2\project-cache.jam"
call .\b2 toolset=msvc-%VC_VER%.0 runtime-link=static address-model=%ARCH_BITS% -j%IFCOS_NUM_BUILD_PROCESSES% ^
%BOOST_LIBS% stage --stagedir=stage/vs%VS_VER%-%VS_PLATFORM%
:ICU
set DEPENDENCY_NAME=ICU
set DEPENDENCY_DIR=N/A
set ICU_ZIP=icu-55.1-vs%VS_VER%.7z
cd "%DEPS_DIR%"
call :DownloadFile http://www.npcglib.org/~stathis/downloads/%ICU_ZIP% "%DEPS_DIR%" %ICU_ZIP%
IF NOT %ERRORLEVEL%==0 GOTO :Error
call :ExtractArchive %ICU_ZIP% "%DEPS_DIR%" "%INSTALL_DIR%\icu"
IF NOT %ERRORLEVEL%==0 GOTO :Error
:: Rename lib and bin directories to predictable form
IF EXIST "%DEPS_DIR%\icu-55.1-vs%VS_VER%". (
pushd "%DEPS_DIR%\icu-55.1-vs%VS_VER%"
IF EXIST bin. ren bin bin%ARCH_BITS%"
IF EXIST lib. ren lib lib%ARCH_BITS%"
popd
)
IF EXIST "%DEPS_DIR%\icu-55.1-vs%VS_VER%\". (
robocopy "%DEPS_DIR%\icu-55.1-vs%VS_VER%\include" "%INSTALL_DIR%\icu\include" /E /IS /njh /njs
IF NOT EXIST "%INSTALL_DIR%\icu\lib". mkdir "%INSTALL_DIR%\icu\lib"
copy /y "%DEPS_DIR%\icu-55.1-vs%VS_VER%\lib%ARCH_BITS%\sicutest%POSTFIX_D%.lib" "%INSTALL_DIR%\icu\lib\icutest.lib"
copy /y "%DEPS_DIR%\icu-55.1-vs%VS_VER%\lib%ARCH_BITS%\sicutu%POSTFIX_D%.lib" "%INSTALL_DIR%\icu\lib\icutu.lib"
copy /y "%DEPS_DIR%\icu-55.1-vs%VS_VER%\lib%ARCH_BITS%\sicuuc%POSTFIX_D%.lib" "%INSTALL_DIR%\icu\lib\icuuc.lib"
copy /y "%DEPS_DIR%\icu-55.1-vs%VS_VER%\lib%ARCH_BITS%\sicudt%POSTFIX_D%.lib" "%INSTALL_DIR%\icu\lib\icudt.lib"
copy /y "%DEPS_DIR%\icu-55.1-vs%VS_VER%\lib%ARCH_BITS%\sicuin%POSTFIX_D%.lib" "%INSTALL_DIR%\icu\lib\icuin.lib"
copy /y "%DEPS_DIR%\icu-55.1-vs%VS_VER%\lib%ARCH_BITS%\sicuio%POSTFIX_D%.lib" "%INSTALL_DIR%\icu\lib\icuio.lib"
copy /y "%DEPS_DIR%\icu-55.1-vs%VS_VER%\lib%ARCH_BITS%\sicule%POSTFIX_D%.lib" "%INSTALL_DIR%\icu\lib\icule.lib"
copy /y "%DEPS_DIR%\icu-55.1-vs%VS_VER%\lib%ARCH_BITS%\siculx%POSTFIX_D%.lib" "%INSTALL_DIR%\icu\lib\iculx.lib"
)
:OpenCOLLADA
:: Note OpenCOLLADA has only Release and Debug builds.
set DEPENDENCY_NAME=OpenCOLLADA
set DEPENDENCY_DIR=%DEPS_DIR%\OpenCOLLADA
:: TODO Temporarily use our own repo until the upstream has static VC runtime option
call :GitCloneOrPullRepository https://github.com/Tridify/OpenCOLLADA.git "%DEPENDENCY_DIR%"
REM call :GitCloneOrPullRepository https://github.com/KhronosGroup/OpenCOLLADA.git "%DEPENDENCY_DIR%"
IF NOT %ERRORLEVEL%==0 GOTO :Error
IF NOT EXIST "%DEPENDENCY_DIR%\%BUILD_DIR%". (
cd "%DEPENDENCY_DIR%"
call git branch vs-static-rt origin/vs-static-rt
IF NOT %ERRORLEVEL%==0 GOTO :Error
call git checkout vs-static-rt
IF NOT %ERRORLEVEL%==0 GOTO :Error
)
cd "%DEPENDENCY_DIR%"
:: NOTE OpenCOLLADA has been observed to have problems with switching between debug and release builds so
:: uncomment to following line in order to delete the CMakeCache.txt always if experiencing problems.
REM IF EXIST "%DEPENDENCY_DIR%\%BUILD_DIR%\CMakeCache.txt". del "%DEPENDENCY_DIR%\%BUILD_DIR%\CMakeCache.txt"
call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\OpenCOLLADA" -DUSE_STATIC_MSVC_RUNTIME=1
IF NOT %ERRORLEVEL%==0 GOTO :Error
REM TODO OpenCOLLADA takes a long time to build; build only if needed
REM IF NOT EXIST "%DEPS_DIR%\OpenCOLLADA\%BUILD_DIR%\lib\%DEBUG_OR_RELEASE%\OpenCOLLADASaxFrameworkLoader.lib".
call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\OPENCOLLADA.sln" %DEBUG_OR_RELEASE%
IF NOT %ERRORLEVEL%==0 GOTO :Error
call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %DEBUG_OR_RELEASE%
IF NOT %ERRORLEVEL%==0 GOTO :Error
:oce-win-bundle
set DEPENDENCY_NAME=oce-win-bundle
set DEPENDENCY_DIR=%DEPS_DIR%\oce-win-bundle
:: TODO Temporarily use our own repo until the upstream is fixed
REM call :GitCloneOrPullRepository https://github.com/QbProg/oce-win-bundle.git "%DEPENDENCY_DIR%"
call :GitCloneOrPullRepository https://github.com/Tridify/oce-win-bundle.git "%DEPENDENCY_DIR%"
IF NOT %ERRORLEVEL%==0 GOTO :Error
IF NOT EXIST "%DEPENDENCY_DIR%\%BUILD_DIR%". (
cd "%DEPENDENCY_DIR%"
call git branch msvc-enhancements origin/msvc-enhancements
IF NOT %ERRORLEVEL%==0 GOTO :Error
call git checkout msvc-enhancements
IF NOT %ERRORLEVEL%==0 GOTO :Error
)
cd "%DEPENDENCY_DIR%"
call :RunCMake -DOCE_WIN_BUNDLE_INSTALL_DIR="%INSTALL_DIR%\oce-win-bundle" -DBUNDLE_USE_STATIC_MSVC_RUNTIME=1
IF NOT %ERRORLEVEL%==0 GOTO :Error
REM IF NOT EXIST "%DEPENDENCY_DIR%\%BUILD_DIR%\FreeImage.cmake\%BUILD_CFG%\FreeImage.dll"
call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\oce-win-bundle.sln" %BUILD_CFG%
IF NOT %ERRORLEVEL%==0 GOTO :Error
call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG%
IF NOT %ERRORLEVEL%==0 GOTO :Error
:OCE
set DEPENDENCY_NAME=Open CASCADE Community Edition
set DEPENDENCY_DIR=%DEPS_DIR%\oce
:: TODO Temporarily use our own repo until the upstream has static VC runtime option
REM call :GitCloneOrPullRepository https://github.com/tpaviot/oce.git "%DEPENDENCY_DIR%"
call :GitCloneOrPullRepository https://github.com/Tridify/oce.git "%DEPENDENCY_DIR%"
IF NOT %ERRORLEVEL%==0 GOTO :Error
IF NOT EXIST "%DEPENDENCY_DIR%\%BUILD_DIR%". (
cd "%DEPENDENCY_DIR%"
call git branch temp-vs-static-lib-build-fixes origin/temp-vs-static-lib-build-fixes
IF NOT %ERRORLEVEL%==0 GOTO :Error
call git checkout temp-vs-static-lib-build-fixes
IF NOT %ERRORLEVEL%==0 GOTO :Error
)
cd "%DEPENDENCY_DIR%"
set OCE_BUNDLE_ROOT_PATH="%INSTALL_DIR%\oce-win-bundle"
REM -DOCE_USE_BUNDLE_SOURCE=1 REM set OCE_BUNDLE_ROOT_PATH=%DEPS_DIR%\oce-win-bundle
:: NOTE Specify OCE_NO_LIBRARY_VERSION as rc.exe can fail due to long filenames and huge command-line parameter
:: input (more than 32,000 characters). Could maybe try using subst for the build dir to overcome this.
call :RunCMake -DOCE_BUILD_SHARED_LIB=0 -DOCE_USE_BUNDLE=1 -DOCE_BUNDLE_ROOT_PATH="%OCE_BUNDLE_ROOT_PATH%" ^
-DOCE_INSTALL_PREFIX="%INSTALL_DIR%\oce" -DOCE_TESTING=0 -DOCE_NO_LIBRARY_VERSION=1 ^
-DOCE_USE_STATIC_MSVC_RUNTIME=1
IF NOT %ERRORLEVEL%==0 GOTO :Error
REM TODO OCE takes a long time to build; build only if needed
call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\OCE.sln" %BUILD_CFG%
IF NOT %ERRORLEVEL%==0 GOTO :Error
call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG%
IF NOT %ERRORLEVEL%==0 GOTO :Error
:Python
IF "%IFCOS_INSTALL_PYTHON%"=="TRUE" (
set PYTHON_AMD64_POSTFIX=.amd64
IF NOT %TARGET_ARCH%==x64 set PYTHON_AMD64_POSTFIX=
:: TODO Update to 3.5 when it's released as it will have an option to install debug libraries.
set PYTHON_VERSION=3.4.3
set DEPENDENCY_NAME=Python %PYTHON_VERSION%
set DEPENDENCY_DIR=N/A
set PYTHON_INSTALLER=python-%PYTHON_VERSION%%PYTHON_AMD64_POSTFIX%.msi
cd "%DEPS_DIR%"
call :DownloadFile https://www.python.org/ftp/python/%PYTHON_VERSION%/%PYTHON_INSTALLER% "%DEPS_DIR%" %PYTHON_INSTALLER%
IF NOT %ERRORLEVEL%==0 GOTO :Error
:: TODO Uninstall if build type == Clean
IF NOT EXIST "%INSTALL_DIR%\Python". (
cecho {0D}Installing %DEPENDENCY_NAME%. Please be patient, this will take a while.{# #}{\n}
msiexec /qn /i %PYTHON_INSTALLER% TARGETDIR=%INSTALL_DIR%\Python
echo %ERRORLEVEL%
) ELSE (
cecho {0D}%DEPENDENCY_NAME% already installed. Skipping.{# #}{\n}
)
) ELSE (
cecho {0D}IFCOS_INSTALL_PYTHON not true, skipping installation of Python.{# #}{\n}
)
pause
:SWIG
set SWIG_VERSION=3.0.5
set DEPENDENCY_NAME=SWIG %SWIG_VERSION%
set DEPENDENCY_DIR=N/A
set SWIG_ZIP=swigwin-%SWIG_VERSION%.zip
cd "%DEPS_DIR%"
call :DownloadFile http://sourceforge.net/projects/swig/files/swigwin/swigwin-%SWIG_VERSION%/%SWIG_ZIP% "%DEPS_DIR%" %SWIG_ZIP%
IF NOT %ERRORLEVEL%==0 GOTO :Error
call :ExtractArchive %SWIG_ZIP% "%DEPS_DIR%" "%DEPS_DIR%\swigwin"
IF NOT %ERRORLEVEL%==0 GOTO :Error
IF EXIST "%DEPS_DIR%\swigwin-%SWIG_VERSION%". (
pushd %DEPS%
ren swigwin-%SWIG_VERSION% swigwin
popd
)
IF EXIST "%DEPS_DIR%\swigwin\". robocopy "%DEPS_DIR%\swigwin" "%INSTALL_DIR%\swigwin" /E /IS /MOVE /njh /njs
:Successful
echo.
%TOOLS%\utils\cecho {0A}%PROJECT_NAME% dependencies built.{# #}{\n}
goto :Finish
:Error
echo.
%TOOLS%\utils\cecho {0C}An error occurred! Aborting!{# #}{\n}
goto :Finish
:Finish
set PATH=%ORIGINAL_PATH%
cd %TOOLS%
endlocal
goto :EOF
::::::::::::::::::::::::::::::::::::: Subroutines :::::::::::::::::::::::::::::::::::::
:: DownloadFile - Downloads a file using wget
:: Params: %1 url, %2 destinationDir, %3 filename
:DownloadFile
pushd %2
IF NOT EXIST "%3". (
cecho {0D}Downloading %DEPENDENCY_NAME% into %2.{# #}{\n}
wget --no-check-certificate %1
) ELSE (
cecho {0D}%DEPENDENCY_NAME% already downloaded. Skipping.{# #}{\n}
)
set RET=%ERRORLEVEL%
popd
exit /b %RET%
:: ExtractArchive - Extracts an archive file using 7-zip
:: Params: %1 filename, %2 destinationDir, %3 dirAfterExtraction
:ExtractArchive
IF NOT EXIST "%3". (
cecho {0D}Extracting %DEPENDENCY_NAME% into %2.{# #}{\n}
7za x %1 -y -o%2
) ELSE (
cecho {0D}%DEPENDENCY_NAME% already extracted into %3. Skipping.{# #}{\n}
)
exit /b %ERRORLEVEL%
:: GitCloneOrPullRepository - Clones or pulls (if repository already cloned) a Git repository
:: Params: %1 gitUrl, %2 destDir
:: F.ex. call :GitCloneRepository https://github.com/KhronosGroup/OpenCOLLADA.git "%DEPS_DIR%\OpenCOLLADA\"
:GitCloneOrPullRepository
IF NOT EXIST %2. (
cecho {0D}Cloning %DEPENDENCY_NAME% into %2.{# #}{\n}
pushd "%DEPS_DIR%"
call git clone %1 %2
) ELSE (
cecho {0D}%DEPENDENCY_NAME% already cloned. Pulling latest changes.{# #}{\n}
pushd %2
call git pull
)
set RET=%ERRORLEVEL%
popd
exit /b %RET%
:: RunCMake - Runs CMake for a CMake-based project
:: Params: %* cmakeOptions
:: NOTE cd to root CMakeLists.txt folder before calling this if the CMakeLists.txt is not in the repo root.
:RunCMake
cecho {0D}Running CMake for %DEPENDENCY_NAME%.{# #}{\n}
IF NOT EXIST %BUILD_DIR%. mkdir %BUILD_DIR%
IF NOT %ERRORLEVEL%==0 GOTO :Error
pushd %BUILD_DIR%
:: TODO make deleting cache a parameter for this subroutine? We probably want to delete the
:: cache always e.g. when we've had new changes in the repository.
IF %BUILD_TYPE%==Rebuild IF EXIST CMakeCache.txt. del CMakeCache.txt
cmake .. -G %GENERATOR% %*
set RET=%ERRORLEVEL%
popd
exit /b %RET%
:: BuildSolution - Builds/Rebuilds/Cleans a solution using MSBuild
:: Params: %1 solutioName, %2 configuration
:BuildSolution
cecho {0D}%BUILD_TYPE%ing %2 %DEPENDENCY_NAME%. Please be patient, this will take a while.{# #}{\n}
%MSBUILD_CMD% %1 /p:configuration=%2;platform=%VS_PLATFORM%
exit /b %ERRORLEVEL%
:: InstallCMakeProject - Builds the INSTALL project of CMake-based project
:: Params: %1 buildDir, %2 == configuration
:: NOTE the actual install dir is set during cmake run.
:InstallCMakeProject
pushd %1
cecho {0D}Installing %2 %DEPENDENCY_NAME%. Please be patient, this will take a while.{# #}{\n}
%INSTALL_CMD% INSTALL.%VCPROJ_FILE_EXT% /p:configuration=%2;platform=%VS_PLATFORM%
set RET=%ERRORLEVEL%
popd
exit /b %RET%
+48
View File
@@ -0,0 +1,48 @@
== Windows Build Tools and Scripts ==
This folder contains build tools and script for automatic building and deployment of IfcOpenShell's
(IFCOS) dependencies.
As a general guideline, .cmd files are non-standalone batch files that need to be run from command
prompt or from other batch file and/or Visual Studio environment variables set and .bat files are
standalone batch files that can be run from File Explorer too.
== Usage Instructions ==
Execute build-deps.cmd to fetch, build and install the dependencies. The batch file will print
requirements for a successful execution. The script allows a few user-configurable build options
which are listed in the usage instructions. Either edit the script file or set these values before
running the script.
build-deps.cmd expects a CMake generator as %1 and a build configuration type as %2. If the parameters
are not provided, the default values are used ("Visual Studio 12 Win64" and RelWithDebInfo respectively).
A build type (Build/Rebuild/Clean) can be provided as %3, if wanted (defaults to Build). See vs-cfg.cmd
if you want to change the defaults. The batch file will create deps\ and deps-vs<VERSION>-<ARCHITECTURE>-installed\
directories to the project root. Note that currently only libraries for one build configuration type
can be installed at a time, so if wanting to switch between release and debug builds, run the build-deps.cmd
again with the appropriate build type as %2.
After the dependencies are build, execute run-cmake.bat. The batch file expects a CMake generator as
%1, or alternatively if more parameters are provided, %* is passed for the CMake inkovation. If no %1
is provided, the same default value as above is used. This batch script will create a folder of form
build-vs<VERSION>-<ARCHITECTURE> which will contain the solution and project files for Visual Studio.
All of the dependencies are build as static libraries against the static run-time allowing the developer
to effortlessly deploy standalone binaries.
You can now build the project using the IfcOpenShell.sln file in the build folder. Build the INSTALL
project if wanted. The project will installed to installed-vs<VERSION>-<ARCHITECTURE> folder in the
project's root folder and the required IfcOpenShell-Python parts are deployed to the Python's Lib
folder.
== Directory Structure ==
| build-deps.cmd - Fetches and builds all needed dependencies for IFCOS
| readme.txt - This file
| run-cmake.bat - Sets environment variables for the dependencies and runs CMake for IFCOS
| vs-cfg.cmd - Utility file used by the build scripts
|
+---sln - Contains the old Visual Studio solution and project files
\---utils - Contains various utilities for the build scripts
+101
View File
@@ -0,0 +1,101 @@
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: ::
:: This file is part of IfcOpenShell. ::
:: ::
:: IfcOpenShell is free software: you can redistribute it and/or modify ::
:: it under the terms of the Lesser GNU General Public License as published by ::
:: the Free Software Foundation, either version 3.0 of the License, or ::
:: (at your option) any later version. ::
:: ::
:: IfcOpenShell is distributed in the hope that it will be useful, ::
:: but WITHOUT ANY WARRANTY; without even the implied warranty of ::
:: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ::
:: Lesser GNU General Public License for more details. ::
:: ::
:: You should have received a copy of the Lesser GNU General Public License ::
:: along with this program. If not, see <http://www.gnu.org/licenses/>. ::
:: ::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off
echo.
set PROJECT_NAME=IfcOpenShell
:: Enable the delayed environment variable expansion needed in vs-cfg.cmd.
setlocal EnableDelayedExpansion
call vs-cfg.cmd %1
set CMAKE_INSTALL_PREFIX=%CD%\..\installed-vs%VS_VER%-%TARGET_ARCH%
set BUILD_DIR=build-vs%VS_VER%-%TARGET_ARCH%
IF NOT EXIST ..\%BUILD_DIR%. mkdir ..\%BUILD_DIR%
pushd ..\%BUILD_DIR%
set BOOST_ROOT=%DEPS_DIR%\boost
REM set BOOST_INCLUDEDIR=%DEPS_DIR%\boost
set BOOST_LIBRARYDIR=%DEPS_DIR%\boost\stage\vs%VS_VER%-%VS_PLATFORM%\lib
set ICU_INCLUDE_DIR=%INSTALL_DIR%\icu\include
set ICU_LIBRARY_DIR=%INSTALL_DIR%\icu\lib
set OCC_INCLUDE_DIR=%INSTALL_DIR%\oce\include\oce
set OCC_LIBRARY_DIR=%INSTALL_DIR%\oce\Win%ARCH_BITS%\lib
set OPENCOLLADA_INCLUDE_DIR=%INSTALL_DIR%\OpenCOLLADA\include\opencollada
set OPENCOLLADA_LIBRARY_DIR=%INSTALL_DIR%\OpenCOLLADA\lib\opencollada
:: TODO 3ds Max SDK?
set SWIG_DIR=%INSTALL_DIR%\swigwin
set PATH=%PATH%;%SWIG_DIR%
echo.
cecho {0A}Script configuration:{# #}{\n}
echo CMake Generator = %GENERATOR%
echo All arguments = %*
echo.
cecho {0A}Dependency Environment Variables for %PROJECT_NAME%:{# #}{\n}
echo BOOST_ROOT = %BOOST_ROOT%
REM echo BOOST_INCLUDEDIR = %BOOST_INCLUDEDIR%
echo BOOST_LIBRARYDIR = %BOOST_LIBRARYDIR%
echo ICU_INCLUDE_DIR = %ICU_INCLUDE_DIR%
echo ICU_LIBRARY_DIR = %ICU_LIBRARY_DIR%
echo OCC_INCLUDE_DIR = %OCC_INCLUDE_DIR%
echo OCC_LIBRARY_DIR = %OCC_LIBRARY_DIR%
echo OPENCOLLADA_INCLUDE_DIR = %OPENCOLLADA_INCLUDE_DIR%
echo OPENCOLLADA_LIBRARY_DIR = %OPENCOLLADA_LIBRARY_DIR%
:: TODO Python
echo SWIG_DIR = %SWIG_DIR%
echo.
echo CMAKE_INSTALL_PREFIX = %CMAKE_INSTALL_PREFIX%
echo.
set CMAKELISTS_DIR=..\cmake
REM IF NOT EXIST %PROJECT_NAME%.sln. (
IF EXIST CMakeCache.txt. del /Q CMakeCache.txt
cecho {0D}Running CMake for %PROJECT_NAME%.{# #}{\n}
IF "%2"=="" (
REM No extra arguments provided, trust that GENERATOR is set properly.
cmake.exe %CMAKELISTS_DIR% -G %GENERATOR% -DCMAKE_INSTALL_PREFIX="%CMAKE_INSTALL_PREFIX%"
) ELSE (
REM Extra arguments has been provided. As CMake options are typically of format -DSOMETHING:BOOL=ON,
REM i.e. they contain an equal sign, they will mess up the batch file argument parsing if the arguments are passed on
REM by splitting them %2 %3 %4 %5 %6 %7 %8 %9. In the extra argument case trust that user has provided the generator
REM as the first argument as pass all arguments as is by using %*.
cmake.exe %CMAKELISTS_DIR% -G %*
)
IF NOT %ERRORLEVEL%==0 GOTO :Error
REM ) ELSE (
REM cecho {0A}%PROJECT_NAME%.sln exists. Skipping CMake call for %PROJECT_NAME%.{# #}{\n}
REM cecho {0A}Delete %CD%\%PROJECT_NAME%.sln to trigger a CMake rerun.{# #}{\n}
REM )
echo.
goto :Finish
:Error
echo.
cecho {0C}An error occurred! Aborting!{# #}{\n}
goto :Finish
:Finish
popd
set PATH=%ORIGINAL_PATH%
endlocal
BIN
View File
Binary file not shown.
+65
View File
@@ -0,0 +1,65 @@
@echo off
::
:: cecho by thomas_polaert@yahoo.fr
::
echo cecho by thomas_polaert@yahoo.fr
cecho
cecho {00}00 - black{\n}
cecho {01}01 - navy{\n}
cecho {02}02 - green{\n}
cecho {03}03 - teal{\n}
cecho {04}04 - maroon{\n}
cecho {05}05 - purple{\n}
cecho {06}06 - olive{\n}
cecho {07}07 - silver{\n}
cecho {08}08 - gray{\n}
cecho {09}09 - blue{\n}
cecho {0A}0A - lime{\n}
cecho {0B}0B - aqua{\n}
cecho {0C}0C - red{\n}
cecho {0D}0D - fuchisa{\n}
cecho {0E}0E - yellow{\n}
cecho {0F}0F - white{\n}
echo.
cecho {00}00 {10}10 {20}20 {30}30 {40}40 {50}50 {60}60 {70}70 {80}80 {90}90 {A0}A0 {B0}B0 {C0}80 {D0}90 {E0}A0 {F0}B0{\n}
cecho {01}01 {11}11 {21}21 {31}31 {41}41 {51}51 {61}61 {71}71 {81}81 {91}91 {A1}A1 {B1}B1 {C1}81 {D1}91 {E1}A1 {F1}B1{\n}
cecho {02}02 {12}12 {22}22 {32}32 {42}42 {52}52 {62}62 {72}72 {82}82 {92}92 {A2}A2 {B2}B2 {C2}82 {D2}92 {E2}A2 {F2}B2{\n}
cecho {03}03 {13}13 {23}23 {33}33 {43}43 {53}53 {63}63 {73}73 {83}83 {93}93 {A3}A3 {B3}B3 {C3}83 {D3}93 {E3}A3 {F3}B3{\n}
cecho {04}04 {14}14 {24}24 {34}34 {44}44 {54}54 {64}64 {74}74 {84}84 {94}94 {A4}A4 {B4}B4 {C4}84 {D4}94 {E4}A4 {F4}B4{\n}
cecho {05}05 {15}15 {25}25 {35}35 {45}45 {55}55 {65}65 {75}75 {85}85 {95}95 {A5}A5 {B5}B5 {C5}85 {D5}95 {E5}A5 {F5}B5{\n}
cecho {06}06 {16}16 {26}26 {36}36 {46}46 {56}56 {66}66 {76}76 {86}86 {96}96 {A6}A6 {B6}B6 {C6}86 {D6}96 {E6}A6 {F6}B6{\n}
cecho {07}07 {17}17 {27}27 {37}37 {47}47 {57}57 {67}67 {77}77 {87}87 {97}97 {A7}A7 {B7}B7 {C7}87 {D7}97 {E7}A7 {F7}B7{\n}
cecho {08}08 {18}18 {28}28 {38}38 {48}48 {58}58 {68}68 {78}78 {88}88 {98}98 {A8}A8 {B8}B8 {C8}88 {D8}98 {E8}A8 {F8}B8{\n}
cecho {09}09 {19}19 {29}29 {39}39 {49}49 {59}59 {69}69 {79}79 {89}89 {99}99 {A9}A9 {B9}B9 {C9}89 {D9}99 {E9}A9 {F9}B9{\n}
cecho {0A}0A {1A}1A {2A}2A {3A}3A {4A}4A {5A}5A {6A}6A {7A}7A {8A}8A {9A}9A {AA}AA {BA}BA {CA}8A {DA}9A {EA}AA {FA}BA{\n}
cecho {0B}0B {1B}1B {2B}2B {3B}3B {4B}4B {5B}5B {6B}6B {7B}7B {8B}8B {9B}9B {AB}AB {BB}BB {CB}8B {DB}9B {EB}AB {FB}BB{\n}
cecho {0C}0C {1C}1C {2C}2C {3C}3C {4C}4C {5C}5C {6C}6C {7C}7C {8C}8C {9C}9C {AC}AC {BC}BC {CC}8C {DC}9C {EC}AC {FC}BC{\n}
cecho {0D}0D {1D}1D {2D}2D {3D}3D {4D}4D {5D}5D {6D}6D {7D}7D {8D}8D {9D}9D {AD}AD {BD}BD {CD}8D {DD}9D {ED}AD {FD}BD{\n}
cecho {0E}0E {1E}1E {2E}2E {3E}3E {4E}4E {5E}5E {6E}6E {7E}7E {8E}8E {9E}9E {AE}AE {BE}BE {CE}8E {DE}9E {EE}AE {FE}BE{\n}
cecho {0F}0F {1F}1F {2F}2F {3F}3F {4F}4F {5F}5F {6F}6F {7F}7F {8F}8F {9F}9F {AF}AF {BF}BF {CF}8F {DF}9F {EF}AF {FF}BF{\n}
echo.
cecho {silver}
cecho {\uDA}
cecho Escape charater {{
echo.
cecho {\u07 \u07}beep x2
echo.
cecho {\t}line #1{\n\t}line #2{\n\t}line #3
echo.
cecho {green}print green {default} and back to initial color
echo.
cecho {a red foreground on a white background}a red foreground on a white background {# #} and back to initial colors
echo.
cecho {blue gray}blue gray
echo.
cecho {purple yellow}purple yellow{\n silver}
pause
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
cecho is from http://www.codeproject.com/Articles/17033/Add-Colors-to-Batch-Files
+1
View File
@@ -0,0 +1 @@
http://gnuwin32.sourceforge.net/license.html
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+29
View File
@@ -0,0 +1,29 @@
7-Zip Command line version
~~~~~~~~~~~~~~~~~~~~~~~~~~
License for use and distribution
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7-Zip Copyright (C) 1999-2010 Igor Pavlov.
7za.exe is distributed under the GNU LGPL license
Notes:
You can use 7-Zip on any computer, including a computer in a commercial
organization. You don't need to register or pay for 7-Zip.
GNU LGPL information
--------------------
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You can receive a copy of the GNU Lesser General Public License from
http://www.gnu.org/
Binary file not shown.
+160
View File
@@ -0,0 +1,160 @@
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: ::
:: This file is part of IfcOpenShell. ::
:: ::
:: IfcOpenShell is free software: you can redistribute it and/or modify ::
:: it under the terms of the Lesser GNU General Public License as published by ::
:: the Free Software Foundation, either version 3.0 of the License, or ::
:: (at your option) any later version. ::
:: ::
:: IfcOpenShell is distributed in the hope that it will be useful, ::
:: but WITHOUT ANY WARRANTY; without even the implied warranty of ::
:: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ::
:: Lesser GNU General Public License for more details. ::
:: ::
:: You should have received a copy of the Lesser GNU General Public License ::
:: along with this program. If not, see <http://www.gnu.org/licenses/>. ::
:: ::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: This script initializes various Visual Studio -related environment variables needed for building
:: This batch file expects CMake generator as %1 and build configuration type as %2.
:: NOTE: The delayed environment variable expansion needs to be enabled before calling this.
@echo off
:: TOOLS is the path where the Windows build scripts reside.
set TOOLS=%CD%
set GENERATOR=%1
:: TODO IDEA: Take more user-friendly VS generators and convert them to the CMake ones?
:: F.ex. "vs2013-32" and/or "vc14-64"
:: TODO Print CMake and VS versions. Maybe in build-deps.cmd would be better than here.
:: Make CMake missing a fatal error and abort the script.
:: Supported Visual Studio versions:
set GENERATOR_VS2015_32="Visual Studio 14 2015"
set GENERATOR_VS2015_64="Visual Studio 14 2015 Win64"
:: TODO Check CMake version and convert possible new format (>= 3.0) generator names
:: to the old versions if using older CMake for VS <= 2013,
:: see http://www.cmake.org/cmake/help/v3.0/release/3.0.0.html#other-changes
set GENERATOR_VS2013_32="Visual Studio 12"
set GENERATOR_VS2013_64="Visual Studio 12 Win64"
set GENERATOR_VS2012_32="Visual Studio 11"
set GENERATOR_VS2012_64="Visual Studio 11 Win64"
set GENERATOR_VS2010_32="Visual Studio 10"
set GENERATOR_VS2010_64="Visual Studio 10 Win64"
set GENERATOR_VS2008_32="Visual Studio 9 2008"
set GENERATOR_VS2008_64="Visual Studio 9 2008 Win64"
set GENERATOR_DEFAULT=%GENERATOR_VS2015_64%
IF "!GENERATOR!"=="" (
set GENERATOR=%GENERATOR_DEFAULT%
utils\cecho {0E}vs-cfg.cmd: Warning: Generator not passed - using the default %GENERATOR_DEFAULT%.{# #}{\n}
)
IF NOT !GENERATOR!==%GENERATOR_VS2008_32% IF NOT !GENERATOR!==%GENERATOR_VS2008_64% (
IF NOT !GENERATOR!==%GENERATOR_VS2010_32% IF NOT !GENERATOR!==%GENERATOR_VS2010_64% (
IF NOT !GENERATOR!==%GENERATOR_VS2012_32% IF NOT !GENERATOR!==%GENERATOR_VS2012_64% (
IF NOT !GENERATOR!==%GENERATOR_VS2013_32% IF NOT !GENERATOR!==%GENERATOR_VS2013_64% (
IF NOT !GENERATOR!==%GENERATOR_VS2015_32% IF NOT !GENERATOR!==%GENERATOR_VS2015_64% (
utils\cecho {0C}vs-cfg.cmd: Invalid or unsupported CMake generator string passed: !GENERATOR!. Cannot proceed, aborting!{# #}{\n}
GOTO :EOF
)))))
:: Figure out the build configuration from the CMake generator string.
:: Are we building 32-bit or 64-bit version.
set ARCH_BITS=32
set TARGET_ARCH=x86
:: Visual Studio platform name, Win32 (i.e. x86) or x64.
set VS_PLATFORM=Win32
:: Split the string for closer inspection.
:: VS_VER and VC_VER are convenience variables used f.ex. for filenames.
set GENERATOR_NO_DOUBLEQUOTES=%GENERATOR:"=%
set GENERATOR_SPLIT=%GENERATOR_NO_DOUBLEQUOTES: =,%
FOR %%i IN (%GENERATOR_SPLIT%) DO (
IF %%i==14 (
set VS_VER=2015
set VC_VER=14
)
IF %%i==12 (
set VS_VER=2013
set VC_VER=12
)
IF %%i==11 (
set VS_VER=2012
set VC_VER=11
)
IF %%i==10 (
set VS_VER=2010
set VC_VER=10
)
IF %%i==2008 (
set VS_VER=2008
set VC_VER=9
)
REM Are going to perform a 64-bit build?
IF %%i==Win64 (
set ARCH_BITS=64
set TARGET_ARCH=x64
set VS_PLATFORM=x64
)
)
:: VS project file extension is different on older VS versions
set VCPROJ_FILE_EXT=vcxproj
IF %VS_VER%==2008 set VCPROJ_FILE_EXT=vcproj
:: Set up variables depending on the used build configuration type.
set BUILD_CFG=%2
:: The default build types provided by CMake
set BUILD_CFG_MINSIZEREL=MinSizeRel
set BUILD_CFG_RELEASE=Release
set BUILD_CFG_RELWITHDEBINFO=RelWithDebInfo
set BUILD_CFG_DEBUG=Debug
set BUILD_CFG_DEFAULT=%BUILD_CFG_RELWITHDEBINFO%
IF "!BUILD_CFG!"=="" (
set BUILD_CFG=%BUILD_CFG_DEFAULT%
utils\cecho {0E}vs-cfg.cmd: Warning: BUILD_CFG not specified - using the default %BUILD_CFG_DEFAULT%{# #}{\n}
)
IF NOT !BUILD_CFG!==%BUILD_CFG_MINSIZEREL% IF NOT !BUILD_CFG!==%BUILD_CFG_RELEASE% (
IF NOT !BUILD_CFG!==%BUILD_CFG_RELWITHDEBINFO% IF NOT !BUILD_CFG!==%BUILD_CFG_DEBUG% (
utils\cecho {0C}vs-cfg.cmd: Invalid or unsupported CMake build configuration type passed: !BUILD_CFG!. Cannot proceed, aborting!{# #}{\n}
exit /b 1
))
:: DEBUG_OR_RELEASE and DEBUG_OR_RELEASE_LOWERCASE are "Debug" and "debug" for Debug build and "Release" and
:: "release" for all of the Release variants.
:: POSTFIX_D, POSTFIX_UNDERSCORE_D and POSTFIX_UNDERSCORE_DEBUG are helpers for performing file copies and
:: checking for existence of files. In release build these variables are empty.
set DEBUG_OR_RELEASE=Release
set DEBUG_OR_RELEASE_LOWERCASE=release
set POSTFIX_D=
set POSTFIX_UNDERSCORE_D=
set POSTFIX_UNDERSCORE_DEBUG=
IF %BUILD_CFG%==Debug (
set DEBUG_OR_RELEASE=Debug
set DEBUG_OR_RELEASE_LOWERCASE=debug
set POSTFIX_D=d
set POSTFIX_UNDERSCORE_D=_d
set POSTFIX_UNDERSCORE_DEBUG=_debug
)
:: Populate path variables
cd ..\
set ORIGINAL_PATH=%PATH%
set PATH=%PATH%;"%CD%\win\utils"
:: Fetch and build the dependencies to a dedicated directory depending on the used VS version and target architecture.
:: NOTE For IfcOpenShell we can build all of our deps both x86 and x64 using different VS versions in the same directories
:: so no need for -%VS_VER%-%TARGET_ARCH% postfix.
:: set DEPS_DIR=%CD%\deps-%VS_VER%-%TARGET_ARCH%
set DEPS_DIR=%CD%\deps
set INSTALL_DIR=%CD%\deps-vs%VS_VER%-%TARGET_ARCH%-installed
REM set INSTALL_DIR=%CD%\deps-vs%VS_VER%-%TARGET_ARCH%-%DEBUG_OR_RELEASE_LOWERCASE%-installed
cd %TOOLS%