diff options
| author | Robert Schumacher <roschuma@microsoft.com> | 2018-03-11 23:01:33 -0700 |
|---|---|---|
| committer | Robert Schumacher <roschuma@microsoft.com> | 2018-03-11 23:42:53 -0700 |
| commit | a773c59f05ddfbe3fd68517ed4c91aa179e57f89 (patch) | |
| tree | d0b99a52a6b351a648a0415cbb2397f92683b211 /ports/boost-modular-build-helper | |
| parent | 81b58d1868a0f7edf324b2f366426e2973ac80b7 (diff) | |
| download | vcpkg-a773c59f05ddfbe3fd68517ed4c91aa179e57f89.tar.gz vcpkg-a773c59f05ddfbe3fd68517ed4c91aa179e57f89.zip | |
[boost-build] Split out into boost-modular-build-helper and support non-Windows targets
Diffstat (limited to 'ports/boost-modular-build-helper')
| -rw-r--r-- | ports/boost-modular-build-helper/CMakeLists.txt | 120 | ||||
| -rw-r--r-- | ports/boost-modular-build-helper/CONTROL | 2 | ||||
| -rw-r--r-- | ports/boost-modular-build-helper/Jamroot.jam | 150 | ||||
| -rw-r--r-- | ports/boost-modular-build-helper/boost-modular-build.cmake | 329 | ||||
| -rw-r--r-- | ports/boost-modular-build-helper/nothing.bat | 0 | ||||
| -rw-r--r-- | ports/boost-modular-build-helper/portfile.cmake | 11 | ||||
| -rw-r--r-- | ports/boost-modular-build-helper/user-config.jam | 47 |
7 files changed, 659 insertions, 0 deletions
diff --git a/ports/boost-modular-build-helper/CMakeLists.txt b/ports/boost-modular-build-helper/CMakeLists.txt new file mode 100644 index 000000000..20306e7ed --- /dev/null +++ b/ports/boost-modular-build-helper/CMakeLists.txt @@ -0,0 +1,120 @@ +cmake_minimum_required(VERSION 3.9)
+project(boost CXX)
+
+find_path(ZLIB_INCLUDE zlib.h)
+find_path(BZIP2_INCLUDE bzlib.h)
+find_path(ICU_PATH include/unicode/utf.h)
+
+set(VCPKG_PLATFORM_TOOLSET external)
+
+set(B2_OPTIONS)
+
+# Add build type specific options
+if(BUILD_SHARED_LIBS)
+ list(APPEND B2_OPTIONS runtime-link=shared)
+ set(LIB_RUNTIME_LINK "shared")
+else()
+ list(APPEND B2_OPTIONS runtime-link=static)
+ set(LIB_RUNTIME_LINK "static")
+endif()
+
+if(BUILD_SHARED_LIBS)
+ list(APPEND B2_OPTIONS link=shared)
+else()
+ list(APPEND B2_OPTIONS link=static)
+endif()
+
+if(CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64")
+ list(APPEND B2_OPTIONS address-model=64)
+endif()
+
+list(APPEND B2_OPTIONS target-os=linux toolset=gcc)
+
+string(REPLACE " " " <compileflags>" CXXFLAGS "${CMAKE_CXX_FLAGS}")
+#set(CXXFLAGS "${CXXFLAGS} <compileflags>-Wno-error=unused-command-line-argument")
+if(CMAKE_CXX_COMPILER_TARGET)
+ set(CXXFLAGS "${CXXFLAGS} <compileflags>${CMAKE_CXX_COMPILE_OPTIONS_TARGET} <compileflags>${CMAKE_CXX_COMPILER_TARGET}")
+endif()
+if(CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN)
+ set(CXXFLAGS "${CXXFLAGS} <compileflags>${CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN} <compileflags>${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN}")
+endif()
+if(CMAKE_SYSROOT AND CMAKE_CXX_COMPILE_OPTIONS_SYSROOT)
+ set(CXXFLAGS "${CXXFLAGS} <compileflags>${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT}")
+endif()
+foreach(INCDIR ${CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES})
+ set(CXXFLAGS "${CXXFLAGS} <compileflags>${CMAKE_INCLUDE_FLAG_C}${CMAKE_INCLUDE_FLAG_C_SEP}${INCDIR}")
+endforeach()
+
+find_library(ZLIB_LIBPATH z)
+list(APPEND B2_OPTIONS
+ -sZLIB_BINARY=z
+ -sZLIB_LIBPATH="${ZLIB_LIBPATH}"
+)
+if(CMAKE_BUILD_TYPE STREQUAL "Release")
+ find_library(BZIP2_LIBPATH bz2)
+ list(APPEND B2_OPTIONS
+ -sBZIP2_BINARY=bz2
+ -sBZIP2_LIBPATH="${BZIP2_LIBPATH}"
+ variant=release
+ )
+elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
+ find_library(BZIP2_LIBPATH bz2d)
+ list(APPEND B2_OPTIONS
+ -sBZIP2_BINARY=bz2d
+ -sBZIP2_LIBPATH="${BZIP2_LIBPATH}"
+ variant=debug
+ )
+endif()
+
+configure_file(${CMAKE_CURRENT_LIST_DIR}/user-config.jam ${CMAKE_CURRENT_BINARY_DIR}/user-config.jam @ONLY)
+
+set(NUMBER_OF_PROCESSORS 1)
+if(DEFINED ENV{NUMBER_OF_PROCESSORS})
+ set(NUMBER_OF_PROCESSORS $ENV{NUMBER_OF_PROCESSORS})
+elseif(CMAKE_HOST_LINUX)
+ execute_process(
+ COMMAND nproc
+ OUTPUT_VARIABLE NUMBER_OF_PROCESSORS
+ )
+ string(REPLACE "\n" "" NUMBER_OF_PROCESSORS "${NUMBER_OF_PROCESSORS}")
+ string(REPLACE " " "" NUMBER_OF_PROCESSORS "${NUMBER_OF_PROCESSORS}")
+endif()
+if(NOT NUMBER_OF_PROCESSORS)
+ set(NUMBER_OF_PROCESSORS 1)
+endif()
+
+add_custom_target(boost ALL
+ COMMAND "${B2_EXE}"
+ --user-config=${CMAKE_CURRENT_BINARY_DIR}/user-config.jam
+ --stagedir=${CMAKE_CURRENT_BINARY_DIR}/stage
+ --build-dir=${CMAKE_CURRENT_BINARY_DIR}
+ ${B2_OPTIONS}
+ --layout=system
+ --with-atomic
+ --with-random
+ --with-date_time
+ --with-filesystem
+ --with-system
+ --with-thread
+ --with-chrono
+ -sZLIB_INCLUDE="${ZLIB_INCLUDE}"
+ -sBZIP2_INCLUDE="${BZIP2_INCLUDE}"
+ -sICU_PATH="${ICU_PATH}"
+ -j${NUMBER_OF_PROCESSORS}
+ -sBOOST_ROOT=${BOOST_BUILD_PATH}
+ -sBOOST_BUILD_PATH=${BOOST_BUILD_PATH}
+ --debug-configuration
+ --ignore-site-config
+ --hash
+ -q
+
+ architecture=x86
+ threading=multi
+ threadapi=pthread
+ debug-symbols=on
+ WORKING_DIRECTORY ${SOURCE_PATH}
+)
+
+install(
+ CODE "file(GLOB LIBS ${CMAKE_CURRENT_BINARY_DIR}/boost/build/*/*.a)\nif(LIBS)\nfile(INSTALL \${LIBS} DESTINATION \"\${CMAKE_INSTALL_PREFIX}/lib\")\nendif()"
+)
diff --git a/ports/boost-modular-build-helper/CONTROL b/ports/boost-modular-build-helper/CONTROL new file mode 100644 index 000000000..eb2257a01 --- /dev/null +++ b/ports/boost-modular-build-helper/CONTROL @@ -0,0 +1,2 @@ +Source: boost-modular-build-helper
+Version: 1
diff --git a/ports/boost-modular-build-helper/Jamroot.jam b/ports/boost-modular-build-helper/Jamroot.jam new file mode 100644 index 000000000..e498483c3 --- /dev/null +++ b/ports/boost-modular-build-helper/Jamroot.jam @@ -0,0 +1,150 @@ +constant BOOST_VERSION : 1.66.0 ;
+constant BOOST_VERSION_ABI_TAG : 1_66 ;
+constant BOOST_JAMROOT_MODULE : $(__name__) ;
+
+import boostcpp ;
+import feature ;
+
+boostcpp.set-version $(BOOST_VERSION) ;
+
+project boost : requirements
+ <include>include&&"@CURRENT_INSTALLED_DIR@/include"
+ <define>BOOST_ALL_NO_LIB=1
+ <tag>@$(__name__).tag
+ @REQUIREMENTS@
+ ;
+
+rule boost-install ( libraries * )
+{
+ stagedir = [ option.get stagedir ] ;
+ install stage
+ : $(libraries)
+ : <location>$(stagedir)/lib ;
+}
+
+rule tag ( name : type ? : property-set )
+{
+ return [ boostcpp.tag $(name) : $(type) : $(property-set) ] ;
+}
+
+rule python-tag ( name : type ? : property-set )
+{
+ return [ tag $(name) : $(type) : $(property-set) ] ;
+}
+
+if "@PORT@" != "boost-system"
+{
+ use-project /boost/system : . ;
+
+ lib boost_system : : <file>"@CURRENT_INSTALLED_DIR@/lib/@BOOST_LIB_PREFIX@boost_system@BOOST_LIB_RELEASE_SUFFIX@" <variant>release ;
+ lib boost_system : : <file>"@CURRENT_INSTALLED_DIR@/debug/lib/@BOOST_LIB_PREFIX@boost_system@BOOST_LIB_DEBUG_SUFFIX@" <variant>debug ;
+ explicit boost_system ;
+}
+
+if "@PORT@" != "boost-chrono"
+{
+ use-project /boost/chrono : . ;
+
+ lib boost_chrono : : <file>"@CURRENT_INSTALLED_DIR@/lib/@BOOST_LIB_PREFIX@boost_chrono@BOOST_LIB_RELEASE_SUFFIX@" <variant>release ;
+ lib boost_chrono : : <file>"@CURRENT_INSTALLED_DIR@/debug/lib/@BOOST_LIB_PREFIX@boost_chrono@BOOST_LIB_DEBUG_SUFFIX@" <variant>debug ;
+ explicit boost_chrono ;
+}
+
+if "@PORT@" != "boost-regex"
+{
+ use-project /boost/regex : . ;
+
+ lib boost_regex : : <file>"@CURRENT_INSTALLED_DIR@/lib/@BOOST_LIB_PREFIX@boost_regex@BOOST_LIB_RELEASE_SUFFIX@" <variant>release ;
+ lib boost_regex : : <file>"@CURRENT_INSTALLED_DIR@/debug/lib/@BOOST_LIB_PREFIX@boost_regex@BOOST_LIB_DEBUG_SUFFIX@" <variant>debug ;
+ explicit boost_regex ;
+}
+
+if "@PORT@" != "boost-date-time"
+{
+ use-project /boost/date_time : . ;
+
+ lib boost_date_time : : <file>"@CURRENT_INSTALLED_DIR@/lib/@BOOST_LIB_PREFIX@boost_date_time@BOOST_LIB_RELEASE_SUFFIX@" <variant>release -<library>/boost/date_time//boost_date_time ;
+ lib boost_date_time : : <file>"@CURRENT_INSTALLED_DIR@/debug/lib/@BOOST_LIB_PREFIX@boost_date_time@BOOST_LIB_DEBUG_SUFFIX@" <variant>debug -<library>/boost/date_time//boost_date_time ;
+ explicit boost_date_time ;
+}
+
+if "@PORT@" != "boost-thread"
+{
+ use-project /boost/thread : . ;
+
+ lib boost_thread : : <file>"@CURRENT_INSTALLED_DIR@/lib/@BOOST_LIB_PREFIX@boost_thread@BOOST_LIB_RELEASE_SUFFIX@" <variant>release : : <library>/boost/date_time//boost_date_time ;
+ lib boost_thread : : <file>"@CURRENT_INSTALLED_DIR@/debug/lib/@BOOST_LIB_PREFIX@boost_thread@BOOST_LIB_DEBUG_SUFFIX@" <variant>debug : : <library>/boost/date_time//boost_date_time ;
+ explicit boost_thread ;
+}
+
+if "@PORT@" != "boost-timer"
+{
+ use-project /boost/timer : . ;
+
+ lib boost_timer : : <file>"@CURRENT_INSTALLED_DIR@/lib/@BOOST_LIB_PREFIX@boost_timer@BOOST_LIB_RELEASE_SUFFIX@" <variant>release ;
+ lib boost_timer : : <file>"@CURRENT_INSTALLED_DIR@/debug/lib/@BOOST_LIB_PREFIX@boost_timer@BOOST_LIB_DEBUG_SUFFIX@" <variant>debug ;
+ explicit boost_timer ;
+}
+
+if "@PORT@" != "boost-filesystem"
+{
+ use-project /boost/filesystem : . ;
+
+ lib boost_filesystem : : <file>"@CURRENT_INSTALLED_DIR@/lib/@BOOST_LIB_PREFIX@boost_filesystem@BOOST_LIB_RELEASE_SUFFIX@" <variant>release : : <library>/boost/system//boost_system ;
+ lib boost_filesystem : : <file>"@CURRENT_INSTALLED_DIR@/debug/lib/@BOOST_LIB_PREFIX@boost_filesystem@BOOST_LIB_DEBUG_SUFFIX@" <variant>debug : : <library>/boost/system//boost_system ;
+ explicit boost_filesystem ;
+}
+
+if "@PORT@" != "boost-atomic"
+{
+ use-project /boost/atomic : . ;
+
+ lib boost_atomic : : <file>"@CURRENT_INSTALLED_DIR@/lib/@BOOST_LIB_PREFIX@boost_atomic@BOOST_LIB_RELEASE_SUFFIX@" <variant>release ;
+ lib boost_atomic : : <file>"@CURRENT_INSTALLED_DIR@/debug/lib/@BOOST_LIB_PREFIX@boost_atomic@BOOST_LIB_DEBUG_SUFFIX@" <variant>debug ;
+ explicit boost_atomic ;
+}
+
+if "@PORT@" != "boost-context"
+{
+ feature.feature segmented-stacks : on : optional propagated composite ;
+ feature.compose <segmented-stacks>on : <define>BOOST_USE_SEGMENTED_STACKS ;
+
+ use-project /boost/context : . ;
+
+ lib boost_context : : <file>"@CURRENT_INSTALLED_DIR@/lib/@BOOST_LIB_PREFIX@boost_context@BOOST_LIB_RELEASE_SUFFIX@" <variant>release ;
+ lib boost_context : : <file>"@CURRENT_INSTALLED_DIR@/debug/lib/@BOOST_LIB_PREFIX@boost_context@BOOST_LIB_DEBUG_SUFFIX@" <variant>debug ;
+ explicit boost_context ;
+}
+
+if "@PORT@" != "boost-test"
+{
+ use-project /boost/test : . ;
+
+ lib boost_unit_test_framework : : <file>"@CURRENT_INSTALLED_DIR@/lib/@BOOST_LIB_PREFIX@boost_unit_test_framework@BOOST_LIB_RELEASE_SUFFIX@" <variant>release ;
+ lib boost_unit_test_framework : : <file>"@CURRENT_INSTALLED_DIR@/debug/lib/@BOOST_LIB_PREFIX@boost_unit_test_framework@BOOST_LIB_DEBUG_SUFFIX@" <variant>debug ;
+ explicit boost_unit_test_framework ;
+}
+
+if "@PORT@" != "boost-serialization"
+{
+ use-project /boost/serialization : . ;
+
+ lib boost_serialization : : <file>@CURRENT_INSTALLED_DIR@/lib/@BOOST_LIB_PREFIX@boost_serialization@BOOST_LIB_RELEASE_SUFFIX@ <variant>release ;
+ lib boost_serialization : : <file>@CURRENT_INSTALLED_DIR@/debug/lib/@BOOST_LIB_PREFIX@boost_serialization@BOOST_LIB_DEBUG_SUFFIX@ <variant>debug ;
+ explicit boost_serialization ;
+}
+
+rule requires ( foo * )
+{
+}
+
+rule boost-lib ( name : sources * : requirements * : default-build * : usage-requirements * )
+{
+ name = boost_$(name) ;
+ lib $(name) : $(sources) : $(requirements) : $(default-build) : $(usage-requirements) ;
+ boost-install $(name) ;
+}
+
+use-project /boost/@PORT@ : build ;
+
+build-project build ;
diff --git a/ports/boost-modular-build-helper/boost-modular-build.cmake b/ports/boost-modular-build-helper/boost-modular-build.cmake new file mode 100644 index 000000000..557e089dd --- /dev/null +++ b/ports/boost-modular-build-helper/boost-modular-build.cmake @@ -0,0 +1,329 @@ +function(boost_modular_build)
+ cmake_parse_arguments(_bm "" "SOURCE_PATH;REQUIREMENTS" "OPTIONS" ${ARGN})
+
+ if(NOT DEFINED _bm_SOURCE_PATH)
+ message(FATAL_ERROR "SOURCE_PATH is a required argument to boost_modular_build.")
+ endif()
+
+ # Todo: this serves too similar a purpose as vcpkg_find_acquire_program()
+ if(CMAKE_HOST_WIN32 AND VCPKG_CMAKE_SYSTEM_NAME AND NOT VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ get_filename_component(BOOST_BUILD_PATH "${CURRENT_INSTALLED_DIR}/../x86-windows/tools/boost-build" ABSOLUTE)
+ elseif(NOT VCPKG_TARGET_ARCHITECTURE STREQUAL "x64" AND NOT VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ get_filename_component(BOOST_BUILD_PATH "${CURRENT_INSTALLED_DIR}/../x86-windows/tools/boost-build" ABSOLUTE)
+ else()
+ set(BOOST_BUILD_PATH "${CURRENT_INSTALLED_DIR}/tools/boost-build")
+ endif()
+
+ if(NOT EXISTS "${BOOST_BUILD_PATH}")
+ message(FATAL_ERROR "The x86 boost-build tools must be installed to build for non-x86/x64 platforms. Please run `vcpkg install boost-build:x86-windows`.")
+ endif()
+
+ if(EXISTS "${BOOST_BUILD_PATH}/b2.exe")
+ set(B2_EXE "${BOOST_BUILD_PATH}/b2.exe")
+ elseif(EXISTS "${BOOST_BUILD_PATH}/b2")
+ set(B2_EXE "${BOOST_BUILD_PATH}/b2")
+ else()
+ message(FATAL_ERROR "Could not find b2 in ${BOOST_BUILD_PATH}")
+ endif()
+
+ if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ list(APPEND _bm_OPTIONS windows-api=store)
+ endif()
+
+ set(_bm_DIR ${CURRENT_INSTALLED_DIR}/share/boost-build)
+
+ if(EXISTS "${_bm_SOURCE_PATH}/Jamfile.v2")
+ file(REMOVE_RECURSE "${_bm_SOURCE_PATH}/Jamfile.v2")
+ endif()
+
+ set(REQUIREMENTS ${_bm_REQUIREMENTS})
+
+ if(NOT VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ set(BOOST_LIB_PREFIX)
+ set(BOOST_LIB_RELEASE_SUFFIX -vc140-mt.lib)
+ set(BOOST_LIB_DEBUG_SUFFIX -vc140-mt-gd.lib)
+ else()
+ set(BOOST_LIB_PREFIX lib)
+ set(BOOST_LIB_RELEASE_SUFFIX .a)
+ set(BOOST_LIB_DEBUG_SUFFIX .a)
+ endif()
+
+ # boost thread superfluously builds has_atomic_flag_lockfree on windows.
+ if(EXISTS "${_bm_SOURCE_PATH}/build/Jamfile.v2")
+ file(READ ${_bm_SOURCE_PATH}/build/Jamfile.v2 _contents)
+ string(REPLACE
+ "\n\nexe has_atomic_flag_lockfree"
+ "\n\nexplicit has_atomic_flag_lockfree ;\nexe has_atomic_flag_lockfree"
+ _contents
+ "${_contents}"
+ )
+ string(REPLACE "\nimport ../../config/checks/config : requires ;" "\n# import ../../config/checks/config : requires ;" _contents "${_contents}")
+ string(REGEX REPLACE
+ "\.\./\.\./([^/ ]+)/build//(boost_[^/ ]+)"
+ "/boost/\\1//\\2"
+ _contents
+ "${_contents}"
+ )
+ string(REGEX REPLACE " /boost//([^/ ]+)" " /boost/\\1//boost_\\1" _contents "${_contents}")
+ file(WRITE ${_bm_SOURCE_PATH}/build/Jamfile.v2 "${_contents}")
+ endif()
+
+ if(EXISTS "${_bm_SOURCE_PATH}/build/log-architecture.jam")
+ file(READ ${_bm_SOURCE_PATH}/build/log-architecture.jam _contents)
+ string(REPLACE
+ "\nproject.load [ path.join [ path.make $(here:D) ] ../../config/checks/architecture ] ;"
+ "\n# project.load [ path.join [ path.make $(here:D) ] ../../config/checks/architecture ] ;"
+ _contents "${_contents}")
+ file(WRITE ${_bm_SOURCE_PATH}/build/log-architecture.jam "${_contents}")
+ endif()
+
+ configure_file(${_bm_DIR}/Jamroot.jam ${_bm_SOURCE_PATH}/Jamroot.jam @ONLY)
+
+ if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Android" OR VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ vcpkg_configure_cmake(
+ SOURCE_PATH ${CURRENT_INSTALLED_DIR}/share/boost-build
+ PREFER_NINJA
+ OPTIONS
+ "-DB2_EXE=${B2_EXE}"
+ "-DSOURCE_PATH=${_bm_SOURCE_PATH}"
+ "-DBOOST_BUILD_PATH=${BOOST_BUILD_PATH}"
+ )
+ vcpkg_install_cmake()
+ return()
+ endif()
+
+ #####################
+ # Cleanup previous builds
+ ######################
+ file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
+ if(EXISTS ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
+ # It is possible for a file in this folder to be locked due to antivirus or vctip
+ execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1)
+ file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
+ if(EXISTS ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
+ message(FATAL_ERROR "Unable to remove directory: ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel\n Files are likely in use.")
+ endif()
+ endif()
+
+ file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
+ if(EXISTS ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
+ # It is possible for a file in this folder to be locked due to antivirus or vctip
+ execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1)
+ file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
+ if(EXISTS ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
+ message(FATAL_ERROR "Unable to remove directory: ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg\n Files are likely in use.")
+ endif()
+ endif()
+
+ if(EXISTS ${CURRENT_PACKAGES_DIR}/debug)
+ message(FATAL_ERROR "Error: directory exists: ${CURRENT_PACKAGES_DIR}/debug\n The previous package was not fully cleared. This is an internal error.")
+ endif()
+ file(MAKE_DIRECTORY
+ ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
+ ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
+ )
+
+ if(DEFINED ENV{NUMBER_OF_PROCESSORS})
+ set(NUMBER_OF_PROCESSORS $ENV{NUMBER_OF_PROCESSORS})
+ else()
+ execute_process(
+ COMMAND nproc
+ OUTPUT_VARIABLE NUMBER_OF_PROCESSORS
+ )
+ string(REPLACE "\n" "" NUMBER_OF_PROCESSORS "${NUMBER_OF_PROCESSORS}")
+ string(REPLACE " " "" NUMBER_OF_PROCESSORS "${NUMBER_OF_PROCESSORS}")
+ endif()
+
+ ######################
+ # Generate configuration
+ ######################
+ list(APPEND _bm_OPTIONS
+ -j${NUMBER_OF_PROCESSORS}
+ --debug-configuration
+ --debug-building
+ --debug-generators
+ --disable-icu
+ --ignore-site-config
+ --hash
+ -q
+ -sZLIB_INCLUDE="${CURRENT_INSTALLED_DIR}/include"
+ -sBZIP2_INCLUDE="${CURRENT_INSTALLED_DIR}/include"
+ threading=multi
+ )
+ if(NOT VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ list(APPEND _bm_OPTIONS threadapi=win32)
+ else()
+ list(APPEND _bm_OPTIONS threadapi=pthread)
+ endif()
+ set(_bm_OPTIONS_DBG
+ -sZLIB_BINARY=zlibd
+ -sZLIB_LIBPATH="${CURRENT_INSTALLED_DIR}/debug/lib"
+ -sBZIP2_BINARY=bz2d
+ -sBZIP2_LIBPATH="${CURRENT_INSTALLED_DIR}/debug/lib"
+ )
+
+ set(_bm_OPTIONS_REL
+ -sZLIB_BINARY=zlib
+ -sZLIB_LIBPATH="${CURRENT_INSTALLED_DIR}/lib"
+ -sBZIP2_BINARY=bz2
+ -sBZIP2_LIBPATH="${CURRENT_INSTALLED_DIR}/lib"
+ )
+
+
+ # Add build type specific options
+ if(VCPKG_CRT_LINKAGE STREQUAL "dynamic")
+ list(APPEND _bm_OPTIONS runtime-link=shared)
+ else()
+ list(APPEND _bm_OPTIONS runtime-link=static)
+ endif()
+
+ if (VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
+ list(APPEND _bm_OPTIONS link=shared)
+ else()
+ list(APPEND _bm_OPTIONS link=static)
+ endif()
+
+ if(VCPKG_TARGET_ARCHITECTURE MATCHES "x64")
+ list(APPEND _bm_OPTIONS address-model=64 architecture=x86)
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
+ list(APPEND _bm_OPTIONS address-model=32 architecture=arm)
+ else()
+ list(APPEND _bm_OPTIONS address-model=32 architecture=x86)
+ endif()
+
+ file(TO_CMAKE_PATH "${_bm_DIR}/nothing.bat" NOTHING_BAT)
+ set(TOOLSET_OPTIONS " <cxxflags>/EHsc <compileflags>-Zm800 <compileflags>-nologo")
+ if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ if(VCPKG_PLATFORM_TOOLSET MATCHES "v141")
+ find_path(PATH_TO_CL cl.exe)
+ find_path(PLATFORM_WINMD_DIR platform.winmd PATHS "${PATH_TO_CL}/../../../lib/x86/store/references" NO_DEFAULT_PATH)
+ if(PLATFORM_WINMD_DIR MATCHES "NOTFOUND")
+ message(FATAL_ERROR "Could not find `platform.winmd` in VS2017. Do you have the Universal Windows Platform development workload installed?")
+ endif()
+ else()
+ find_path(PLATFORM_WINMD_DIR platform.winmd PATHS "$ENV{VS140COMNTOOLS}/../../VC/LIB/store/references")
+ if(PLATFORM_WINMD_DIR MATCHES "NOTFOUND")
+ message(FATAL_ERROR "Could not find `platform.winmd` in VS2015.")
+ endif()
+ endif()
+ file(TO_NATIVE_PATH "${PLATFORM_WINMD_DIR}" PLATFORM_WINMD_DIR)
+ string(REPLACE "\\" "\\\\" PLATFORM_WINMD_DIR ${PLATFORM_WINMD_DIR}) # escape backslashes
+
+ set(TOOLSET_OPTIONS "${TOOLSET_OPTIONS} <cflags>-Zl <compileflags>\"/AI\"${PLATFORM_WINMD_DIR}\"\" <linkflags>WindowsApp.lib <cxxflags>/ZW <compileflags>-DVirtualAlloc=VirtualAllocFromApp <compileflags>-D_WIN32_WINNT=0x0A00")
+ else()
+ set(TOOLSET_OPTIONS "${TOOLSET_OPTIONS} <compileflags>-D_WIN32_WINNT=0x0602")
+ endif()
+
+ configure_file(${_bm_DIR}/user-config.jam ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/user-config.jam @ONLY)
+ configure_file(${_bm_DIR}/user-config.jam ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/user-config.jam @ONLY)
+
+ if(VCPKG_PLATFORM_TOOLSET MATCHES "v141")
+ list(APPEND _bm_OPTIONS toolset=msvc-14.1)
+ elseif(VCPKG_PLATFORM_TOOLSET MATCHES "v140")
+ list(APPEND _bm_OPTIONS toolset=msvc-14.0)
+ elseif(VCPKG_PLATFORM_TOOLSET MATCHES "external")
+ list(APPEND _bm_OPTIONS toolset=gcc)
+ else()
+ message(FATAL_ERROR "Unsupported value for VCPKG_PLATFORM_TOOLSET: '${VCPKG_PLATFORM_TOOLSET}'")
+ endif()
+
+ ######################
+ # Perform build + Package
+ ######################
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ message(STATUS "Building ${TARGET_TRIPLET}-rel")
+ set(ENV{BOOST_BUILD_PATH} "${BOOST_BUILD_PATH}")
+ vcpkg_execute_required_process(
+ COMMAND "${B2_EXE}"
+ --stagedir=${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/stage
+ --build-dir=${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
+ --user-config=${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/user-config.jam
+ ${_bm_OPTIONS}
+ ${_bm_OPTIONS_REL}
+ variant=release
+ debug-symbols=on
+ WORKING_DIRECTORY ${_bm_SOURCE_PATH}
+ LOGNAME build-${TARGET_TRIPLET}-rel
+ )
+ message(STATUS "Building ${TARGET_TRIPLET}-rel done")
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ message(STATUS "Building ${TARGET_TRIPLET}-dbg")
+ set(ENV{BOOST_BUILD_PATH} "${BOOST_BUILD_PATH}")
+ vcpkg_execute_required_process(
+ COMMAND "${B2_EXE}"
+ --stagedir=${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/stage
+ --build-dir=${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
+ --user-config=${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/user-config.jam
+ ${_bm_OPTIONS}
+ ${_bm_OPTIONS_DBG}
+ variant=debug
+ WORKING_DIRECTORY ${_bm_SOURCE_PATH}
+ LOGNAME build-${TARGET_TRIPLET}-dbg
+ )
+ message(STATUS "Building ${TARGET_TRIPLET}-dbg done")
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ message(STATUS "Packaging ${TARGET_TRIPLET}-rel")
+ file(GLOB REL_LIBS
+ ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/boost/build/*/*.lib
+ ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/boost/build/*/*.a
+ ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/boost/build/*/*.so
+ )
+ file(COPY ${REL_LIBS}
+ DESTINATION ${CURRENT_PACKAGES_DIR}/lib)
+ if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
+ file(GLOB REL_DLLS ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/boost/build/*/*.dll)
+ file(COPY ${REL_DLLS}
+ DESTINATION ${CURRENT_PACKAGES_DIR}/bin
+ FILES_MATCHING PATTERN "*.dll")
+ endif()
+ message(STATUS "Packaging ${TARGET_TRIPLET}-rel done")
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ message(STATUS "Packaging ${TARGET_TRIPLET}-dbg")
+ file(GLOB DBG_LIBS
+ ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/boost/build/*/*.lib
+ ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/boost/build/*/*.a
+ ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/boost/build/*/*.so
+ )
+ file(COPY ${DBG_LIBS}
+ DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib)
+ if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
+ file(GLOB DBG_DLLS ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/boost/build/*/*.dll)
+ file(COPY ${DBG_DLLS}
+ DESTINATION ${CURRENT_PACKAGES_DIR}/debug/bin
+ FILES_MATCHING PATTERN "*.dll")
+ endif()
+ message(STATUS "Packaging ${TARGET_TRIPLET}-dbg done")
+ endif()
+
+ file(GLOB INSTALLED_LIBS ${CURRENT_PACKAGES_DIR}/debug/lib/*.lib ${CURRENT_PACKAGES_DIR}/lib/*.lib)
+ foreach(LIB ${INSTALLED_LIBS})
+ get_filename_component(OLD_FILENAME ${LIB} NAME)
+ get_filename_component(DIRECTORY_OF_LIB_FILE ${LIB} DIRECTORY)
+ string(REPLACE "libboost_" "boost_" NEW_FILENAME ${OLD_FILENAME})
+ string(REPLACE "-s-" "-" NEW_FILENAME ${NEW_FILENAME}) # For Release libs
+ string(REPLACE "-vc141-" "-vc140-" NEW_FILENAME ${NEW_FILENAME}) # To merge VS2017 and VS2015 binaries
+ string(REPLACE "-sgd-" "-gd-" NEW_FILENAME ${NEW_FILENAME}) # For Debug libs
+ string(REPLACE "-sgyd-" "-gyd-" NEW_FILENAME ${NEW_FILENAME}) # For Debug libs
+ string(REPLACE "-x32-" "-" NEW_FILENAME ${NEW_FILENAME}) # To enable CMake 3.10 and earlier to locate the binaries
+ string(REPLACE "-x64-" "-" NEW_FILENAME ${NEW_FILENAME}) # To enable CMake 3.10 and earlier to locate the binaries
+ string(REPLACE "-a32-" "-" NEW_FILENAME ${NEW_FILENAME}) # To enable CMake 3.10 and earlier to locate the binaries
+ string(REPLACE "-a64-" "-" NEW_FILENAME ${NEW_FILENAME}) # To enable CMake 3.10 and earlier to locate the binaries
+ string(REPLACE "-1_66" "" NEW_FILENAME ${NEW_FILENAME}) # To enable CMake > 3.10 to locate the binaries
+ string(REPLACE "_python3-" "_python-" NEW_FILENAME ${NEW_FILENAME})
+ if("${DIRECTORY_OF_LIB_FILE}/${NEW_FILENAME}" STREQUAL "${DIRECTORY_OF_LIB_FILE}/${OLD_FILENAME}")
+ # nothing to do
+ elseif(EXISTS ${DIRECTORY_OF_LIB_FILE}/${NEW_FILENAME})
+ file(REMOVE ${DIRECTORY_OF_LIB_FILE}/${OLD_FILENAME})
+ else()
+ file(RENAME ${DIRECTORY_OF_LIB_FILE}/${OLD_FILENAME} ${DIRECTORY_OF_LIB_FILE}/${NEW_FILENAME})
+ endif()
+ endforeach()
+
+ vcpkg_copy_pdbs()
+endfunction()
diff --git a/ports/boost-modular-build-helper/nothing.bat b/ports/boost-modular-build-helper/nothing.bat new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/ports/boost-modular-build-helper/nothing.bat diff --git a/ports/boost-modular-build-helper/portfile.cmake b/ports/boost-modular-build-helper/portfile.cmake new file mode 100644 index 000000000..1c34f2fec --- /dev/null +++ b/ports/boost-modular-build-helper/portfile.cmake @@ -0,0 +1,11 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
+
+file(
+ COPY
+ ${CMAKE_CURRENT_LIST_DIR}/boost-modular-build.cmake
+ ${CMAKE_CURRENT_LIST_DIR}/Jamroot.jam
+ ${CMAKE_CURRENT_LIST_DIR}/nothing.bat
+ ${CMAKE_CURRENT_LIST_DIR}/user-config.jam
+ ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt
+ DESTINATION ${CURRENT_PACKAGES_DIR}/share/boost-build
+)
diff --git a/ports/boost-modular-build-helper/user-config.jam b/ports/boost-modular-build-helper/user-config.jam new file mode 100644 index 000000000..e045d622b --- /dev/null +++ b/ports/boost-modular-build-helper/user-config.jam @@ -0,0 +1,47 @@ +import toolset ;
+
+if "@VCPKG_PLATFORM_TOOLSET@" != "external"
+{
+ using msvc : : cl.exe :
+ <setup>"@NOTHING_BAT@"
+ @TOOLSET_OPTIONS@
+ ;
+}
+else
+{
+ using gcc : 5.4.1 : @CMAKE_CXX_COMPILER@
+ :
+ <ranlib>@CMAKE_RANLIB@
+ <archiver>@CMAKE_AR@
+ @CXXFLAGS@
+ # MINGW here causes b2 to not run cygpath
+ <flavor>mingw
+ ;
+}
+
+if "@PORT@" = "boost-python"
+{
+ using python : @PYTHON_VERSION@ : : "@PYTHON_INCLUDE_PATH@" : "@PYTHONLIBS_RELEASE@" ;
+ using python : @PYTHON_VERSION@ : : "@PYTHON_INCLUDE_PATH@" : "@PYTHONLIBS_DEBUG@" : <python-debugging>on ;
+}
+
+if "@PORT@" = "boost-mpi"
+{
+ using mpi : :
+ <library-path>@CURRENT_INSTALLED_DIR@/lib
+ <include>@CURRENT_INSTALLED_DIR@/include
+ <find-shared-library>msmpi ;
+}
+
+project user-config : ;
+
+lib advapi32 ;
+
+lib icuuc : : <file>"@CURRENT_INSTALLED_DIR@/lib/icuuc.lib" <variant>release : : <library>advapi32 ;
+lib icuuc : : <file>"@CURRENT_INSTALLED_DIR@/debug/lib/icuucd.lib" <variant>debug : : <library>advapi32 ;
+
+lib icuin : : <file>"@CURRENT_INSTALLED_DIR@/lib/icuin.lib" <variant>release : : ;
+lib icuin : : <file>"@CURRENT_INSTALLED_DIR@/debug/lib/icuind.lib" <variant>debug : : ;
+
+lib icudt : : <file>"@CURRENT_INSTALLED_DIR@/lib/icudt.lib" <variant>release : : ;
+lib icudt : : <file>"@CURRENT_INSTALLED_DIR@/debug/lib/icudtd.lib" <variant>debug : : ;
|
