1
0
mirror of https://git.suyu.dev/suyu/suyu synced 2025-09-10 08:16:33 -05:00

Initial commit

This commit is contained in:
Crimson-Hawk
2024-03-05 16:42:40 +08:00
commit f1e4595ebf
39576 changed files with 7006612 additions and 0 deletions

View File

@@ -0,0 +1,279 @@
cmake_minimum_required(VERSION 3.9)
project(boost NONE)
# The following variables are used in user-config.jam file
set(USER_CONFIG_TOOLSET "")
set(USER_CONFIG_TOOLSET_VERSION "")
set(USER_CONFIG_TOOLSET_INVOCATION_COMMAND "")
set(USER_CONFIG_TOOLSET_OPTIONS "")
set(USER_CONFIG_EXTRA_LINES "")
set(USER_CONFIG_REQUIREMENTS "")
set(B2_OPTIONS)
include("${VCPKG_CMAKE_VARS_FILE}")
# Add build type specific options
if(VCPKG_CRT_LINKAGE STREQUAL "dynamic")
list(APPEND B2_OPTIONS runtime-link=shared)
else()
list(APPEND B2_OPTIONS runtime-link=static)
endif()
if(BUILD_SHARED_LIBS)
list(APPEND B2_OPTIONS link=shared)
else()
list(APPEND B2_OPTIONS link=static)
endif()
if(VCPKG_DETECTED_CMAKE_SIZEOF_VOID_P EQUAL "8")
list(APPEND B2_OPTIONS address-model=64)
else()
list(APPEND B2_OPTIONS address-model=32)
endif()
if(VCPKG_TARGET_ARCHITECTURE STREQUAL "s390x")
list(APPEND B2_OPTIONS architecture=s390x)
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm" OR VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
list(APPEND B2_OPTIONS architecture=arm)
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "ppc64le")
list(APPEND B2_OPTIONS architecture=power)
else()
list(APPEND B2_OPTIONS architecture=x86)
endif()
if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86" AND WIN32)
list(APPEND B2_OPTIONS "asmflags=/safeseh")
endif()
if(VCPKG_DETECTED_MSVC)
if(VCPKG_DETECTED_CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(USER_CONFIG_TOOLSET clang-win)
else()
set(USER_CONFIG_TOOLSET msvc)
endif()
if(VCPKG_DETECTED_MSVC_VERSION LESS "1900")
math(EXPR USER_CONFIG_TOOLSET_VERSION "${VCPKG_DETECTED_MSVC_VERSION} / 10 - 60")
else()
math(EXPR USER_CONFIG_TOOLSET_VERSION "${VCPKG_DETECTED_MSVC_VERSION} / 10 - 50")
endif()
elseif(VCPKG_DETECTED_CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(USER_CONFIG_TOOLSET clang)
else()
set(USER_CONFIG_TOOLSET gcc)
endif()
if(WIN32)
list(APPEND B2_OPTIONS target-os=windows)
elseif(APPLE)
list(APPEND B2_OPTIONS target-os=darwin)
elseif(ANDROID)
list(APPEND B2_OPTIONS target-os=android)
else()
list(APPEND B2_OPTIONS target-os=linux)
endif()
# Properly handle compiler and linker flags passed by VCPKG
string(TOUPPER "${CMAKE_BUILD_TYPE}" UPPER_BUILD_TYPE)
set(CXXFLAGS "${VCPKG_COMBINED_CXX_FLAGS_${UPPER_BUILD_TYPE}}")
set(CFLAGS "${VCPKG_COMBINED_C_FLAGS_${UPPER_BUILD_TYPE}}")
set(LDFLAGS "${VCPKG_COMBINED_SHARED_LINKER_FLAGS_${UPPER_BUILD_TYPE}}")
set(ARFLAGS "${VCPKG_COMBINED_STATIC_LINKER_FLAGS_${UPPER_BUILD_TYPE}}")
if(APPLE)
string(APPEND COMPILEFLAGS " -D_DARWIN_C_SOURCE")
if(NOT CXXFLAGS MATCHES " -std=")
# If the user hasn't provided their own standard flag, use at least c++11
string(APPEND CXXFLAGS " -std=c++11")
endif()
endif()
if(VCPKG_DETECTED_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
# cl in b2 appears to not receive `LIBPATH` for finding winmd files, so we transform them to `/AI` options.
set(libpath_args "$ENV{LIBPATH}")
# Apply: {x -> /AI"x"}
list(TRANSFORM libpath_args PREPEND "/AI\"")
list(TRANSFORM libpath_args APPEND "\"")
list(JOIN libpath_args " " libpath_arg)
string(APPEND COMPILEFLAGS " ${libpath_arg} /D_WIN32_WINNT=0x0A00")
list(APPEND B2_OPTIONS windows-api=store)
list(APPEND B2_OPTIONS linkflags=WindowsApp.lib)
endif()
set(USER_CONFIG_TOOLSET_INVOCATION_COMMAND "\"${VCPKG_DETECTED_CMAKE_CXX_COMPILER}\"")
string(APPEND CXXFLAGS "${COMPILEFLAGS}")
string(APPEND CFLAGS "${COMPILEFLAGS}")
foreach(var CXXFLAGS CFLAGS LDFLAGS ARFLAGS)
string(REPLACE [[\]] [[\\]] ${var} "${${var}}")
string(REPLACE [["]] [[\"]] ${var} "${${var}}")
string(REGEX REPLACE "[ \t\r\n]+" " " ${var} "${${var}}")
string(STRIP "${${var}}" ${var})
endforeach()
if(USER_CONFIG_TOOLSET STREQUAL "msvc")
file(TO_CMAKE_PATH "${CMAKE_CURRENT_LIST_DIR}/nothing.bat" NOTHING_BAT)
string(APPEND USER_CONFIG_TOOLSET_OPTIONS
" <setup>\"${NOTHING_BAT}\"\n"
)
if(NOT ARFLAGS STREQUAL "")
# Only apply these flags for MSVC
string(APPEND USER_CONFIG_REQUIREMENTS "<archiveflags>\"${ARFLAGS}\"\n ")
endif()
else()
string(APPEND USER_CONFIG_TOOLSET_OPTIONS
" <ranlib>\"${VCPKG_DETECTED_CMAKE_RANLIB}\"\n"
" <archiver>\"${VCPKG_DETECTED_CMAKE_AR}\"\n"
)
endif()
if(NOT CXXFLAGS STREQUAL "")
string(APPEND USER_CONFIG_TOOLSET_OPTIONS " <cxxflags>\"${CXXFLAGS}\"\n")
endif()
if(NOT CFLAGS STREQUAL "")
string(APPEND USER_CONFIG_TOOLSET_OPTIONS " <cflags>\"${CFLAGS}\"\n <asmflags>\"${CFLAGS}\"\n")
endif()
if(NOT LDFLAGS STREQUAL "")
string(APPEND USER_CONFIG_REQUIREMENTS "<linkflags>\"${LDFLAGS}\"\n ")
string(APPEND USER_CONFIG_TOOLSET_OPTIONS " <linkflags>\"${LDFLAGS}\"\n")
endif()
if(WIN32 AND NOT USER_CONFIG_TOOLSET STREQUAL "msvc")
# MINGW here causes b2 to not run cygpath
string(APPEND USER_CONFIG_TOOLSET_OPTIONS
" <flavor>mingw\n"
)
endif()
if(WIN32)
list(APPEND B2_OPTIONS threadapi=win32)
else()
list(APPEND B2_OPTIONS threadapi=pthread)
endif()
if(CMAKE_BUILD_TYPE STREQUAL "Release")
list(APPEND B2_OPTIONS variant=release)
else()
list(APPEND B2_OPTIONS variant=debug)
endif()
if(NOT WIN32)
list(APPEND B2_OPTIONS "--layout=system")
endif()
include(ProcessorCount)
ProcessorCount(NUMBER_OF_PROCESSORS)
if(NOT NUMBER_OF_PROCESSORS)
set(NUMBER_OF_PROCESSORS 1)
endif()
# Handle ICU
if(WIN32)
list(APPEND B2_OPTIONS "--disable-icu")
else()
find_path(ICU_PATH include/unicode/utf.h)
list(APPEND B2_OPTIONS "-sICU_PATH=\"${ICU_PATH}\"")
endif()
# Handle Python
set(python_versions "")
if(WITH_PYTHON2)
# Find Python2 in the current installed directory
file(GLOB python2_include_dir "${CURRENT_INSTALLED_DIR}/include/python2.*")
string(REGEX REPLACE ".*python([0-9\.]+).*" "\\1" python2_version "${python2_include_dir}")
string(APPEND USER_CONFIG_EXTRA_LINES
"using python : ${python2_version} : : \"${python2_include_dir}\" : \"${CURRENT_INSTALLED_DIR}/lib\" ;\n"
"using python : ${python2_version} : : \"${python2_include_dir}\" : \"${CURRENT_INSTALLED_DIR}/debug/lib\" : <python-debugging>on ;\n"
)
list(APPEND python_versions "${python2_version}")
endif()
if(WITH_PYTHON3)
# Find Python3 in the current installed directory
file(GLOB python3_include_dir "${CURRENT_INSTALLED_DIR}/include/python3.*")
string(REGEX REPLACE ".*python([0-9\.]+).*" "\\1" python3_version "${python3_include_dir}")
string(APPEND USER_CONFIG_EXTRA_LINES
"using python : ${python3_version} : : \"${python3_include_dir}\" : \"${CURRENT_INSTALLED_DIR}/lib\" ;\n"
"using python : ${python3_version} : : \"${python3_include_dir}\" : \"${CURRENT_INSTALLED_DIR}/debug/lib\" : <python-debugging>on ;\n"
)
list(APPEND python_versions "${python3_version}")
endif()
if("${PORT}" STREQUAL "boost-mpi" OR "${PORT}" STREQUAL "boost-graph-parallel")
string(APPEND USER_CONFIG_EXTRA_LINES
"using mpi : : <library-path>\"${CURRENT_INSTALLED_DIR}/lib\"\n"
" <include>\"${CURRENT_INSTALLED_DIR}/include\"\n"
)
if(WIN32)
string(APPEND USER_CONFIG_EXTRA_LINES
" <find-shared-library>msmpi ;\n"
)
else()
string(APPEND USER_CONFIG_EXTRA_LINES
" <find-shared-library>openmpi ;\n"
)
endif()
endif()
if(NOT python_versions STREQUAL "")
list(JOIN python_versions "," python_versions)
list(APPEND B2_OPTIONS "python=${python_versions}")
endif()
# Include port specific CMake fragment
if(DEFINED BOOST_CMAKE_FRAGMENT)
message(STATUS "Including ${BOOST_CMAKE_FRAGMENT}")
include(${BOOST_CMAKE_FRAGMENT})
endif()
configure_file(${CMAKE_CURRENT_LIST_DIR}/user-config.jam.in ${CMAKE_CURRENT_BINARY_DIR}/user-config.jam @ONLY)
add_custom_target(boost ALL
COMMAND "${B2_EXE}"
toolset=${USER_CONFIG_TOOLSET}
--user-config=${CMAKE_CURRENT_BINARY_DIR}/user-config.jam
--stagedir=${CMAKE_CURRENT_BINARY_DIR}/stage
--build-dir=${CMAKE_CURRENT_BINARY_DIR}
${B2_OPTIONS}
--with-atomic
--with-random
--with-date_time
--with-filesystem
--with-system
--with-thread
--with-chrono
-j${NUMBER_OF_PROCESSORS}
-sBOOST_ROOT=${BOOST_BUILD_PATH}
-sBOOST_BUILD_PATH=${BOOST_BUILD_PATH}
--debug-configuration
--debug-building
--debug-generators
--ignore-site-config
--hash
-q
debug-symbols=on
# Enable debugging level 2.
-d +2
threading=multi
stage
WORKING_DIRECTORY ${SOURCE_PATH}/build
)
set(SUBDIR ${CMAKE_CURRENT_BINARY_DIR}/stage/lib)
install(
CODE "
file(GLOB LIBS \"${SUBDIR}/*.so.*\" \"${SUBDIR}/*.so\" \"${SUBDIR}/*.a\" \"${SUBDIR}/*.dylib\" \"${SUBDIR}/*.dylib.*\" \"${SUBDIR}/*.lib\")
if(LIBS)
file(INSTALL \${LIBS} DESTINATION \"\${CMAKE_INSTALL_PREFIX}/lib\")
endif()
file(GLOB DLLS \"${SUBDIR}/*.dll\" \"${SUBDIR}/*.pyd\")
if(DLLS)
file(INSTALL \${DLLS} DESTINATION \"\${CMAKE_INSTALL_PREFIX}/bin\")
endif()
"
)

View File

@@ -0,0 +1,180 @@
constant BOOST_VERSION : @BOOST_VERSION@ ;
constant BOOST_VERSION_ABI_TAG : @BOOST_VERSION_ABI_TAG@ ;
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
@B2_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 [ boostcpp.python-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 ;
use-project /boost : . ;
alias system : 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 ;
}
if "@PORT@" != "boost-mpi"
{
use-project /boost/mpi : . ;
lib boost_mpi : : <file>"@CURRENT_INSTALLED_DIR@/lib/@BOOST_LIB_PREFIX@boost_mpi@BOOST_LIB_RELEASE_SUFFIX@" <variant>release : : <library>/boost/serialization//boost_serialization ;
lib boost_mpi : : <file>"@CURRENT_INSTALLED_DIR@/debug/lib/@BOOST_LIB_PREFIX@boost_mpi@BOOST_LIB_DEBUG_SUFFIX@" <variant>debug : : <library>/boost/serialization//boost_serialization ;
explicit boost_mpi ;
}
if "@PORT@" != "boost-container"
{
use-project /boost/container : . ;
lib boost_container : : <file>"@CURRENT_INSTALLED_DIR@/lib/@BOOST_LIB_PREFIX@boost_container@BOOST_LIB_RELEASE_SUFFIX@" <variant>release ;
lib boost_container : : <file>"@CURRENT_INSTALLED_DIR@/debug/lib/@BOOST_LIB_PREFIX@boost_container@BOOST_LIB_DEBUG_SUFFIX@" <variant>debug ;
explicit boost_container ;
}
if "@PORT@" != "boost-python"
{
use-project /boost/python : . ;
lib boost_python : : <file>"@CURRENT_INSTALLED_DIR@/lib/@BOOST_LIB_PREFIX@boost_python@PYTHON_VERSION_TAG@@BOOST_LIB_RELEASE_SUFFIX@" <variant>release ;
lib boost_python : : <file>"@CURRENT_INSTALLED_DIR@/debug/lib/@BOOST_LIB_PREFIX@boost_python@PYTHON_VERSION_TAG@@BOOST_LIB_DEBUG_SUFFIX@" <variant>debug ;
explicit boost_python ;
}
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 ;

View File

@@ -0,0 +1,198 @@
include_guard(GLOBAL)
include("${CMAKE_CURRENT_LIST_DIR}/../vcpkg-cmake/vcpkg-port-config.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/../vcpkg-cmake-get-vars/vcpkg-port-config.cmake")
get_filename_component(BOOST_BUILD_INSTALLED_DIR "${CMAKE_CURRENT_LIST_DIR}" DIRECTORY)
get_filename_component(BOOST_BUILD_INSTALLED_DIR "${BOOST_BUILD_INSTALLED_DIR}" DIRECTORY)
set(BOOST_VERSION 1.79.0)
string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" BOOST_VERSION_MATCH "${BOOST_VERSION}")
if("${CMAKE_MATCH_3}" GREATER 0)
set(BOOST_VERSION_ABI_TAG "${CMAKE_MATCH_1}_${CMAKE_MATCH_2}_${CMAKE_MATCH_3}")
else()
set(BOOST_VERSION_ABI_TAG "${CMAKE_MATCH_1}_${CMAKE_MATCH_2}")
endif()
function(boost_modular_build)
cmake_parse_arguments(_bm "" "SOURCE_PATH;BOOST_CMAKE_FRAGMENT" "" ${ARGN})
if(NOT DEFINED _bm_SOURCE_PATH)
message(FATAL_ERROR "SOURCE_PATH is a required argument to boost_modular_build.")
endif()
# The following variables are used in the Jamroot.jam
set(B2_REQUIREMENTS)
# Some CMake variables may be overridden in the file specified in ${_bm_BOOST_CMAKE_FRAGMENT}
if(DEFINED _bm_BOOST_CMAKE_FRAGMENT)
message(STATUS "Including ${_bm_BOOST_CMAKE_FRAGMENT}")
include(${_bm_BOOST_CMAKE_FRAGMENT})
endif()
set(BOOST_BUILD_PATH "${BOOST_BUILD_INSTALLED_DIR}/tools/boost-build")
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(NOT VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
set(BOOST_LIB_PREFIX)
if(VCPKG_PLATFORM_TOOLSET MATCHES "v14.")
set(BOOST_LIB_RELEASE_SUFFIX -vc140-mt.lib)
set(BOOST_LIB_DEBUG_SUFFIX -vc140-mt-gd.lib)
elseif(VCPKG_PLATFORM_TOOLSET MATCHES "v120")
set(BOOST_LIB_RELEASE_SUFFIX -vc120-mt.lib)
set(BOOST_LIB_DEBUG_SUFFIX -vc120-mt-gd.lib)
else()
set(BOOST_LIB_RELEASE_SUFFIX .lib)
set(BOOST_LIB_DEBUG_SUFFIX d.lib)
endif()
else()
set(BOOST_LIB_PREFIX lib)
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
set(BOOST_LIB_RELEASE_SUFFIX .a)
set(BOOST_LIB_DEBUG_SUFFIX .a)
elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set(BOOST_LIB_RELEASE_SUFFIX .dylib)
set(BOOST_LIB_DEBUG_SUFFIX .dylib)
elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "MinGW")
set(BOOST_LIB_RELEASE_SUFFIX .dll.a)
set(BOOST_LIB_DEBUG_SUFFIX .dll.a)
else()
set(BOOST_LIB_RELEASE_SUFFIX .so)
set(BOOST_LIB_DEBUG_SUFFIX .so)
endif()
endif()
set(_jamfile)
if(EXISTS "${_bm_SOURCE_PATH}/build/Jamfile.v2")
set(_jamfile "${_bm_SOURCE_PATH}/build/Jamfile.v2")
elseif(EXISTS "${_bm_SOURCE_PATH}/build/Jamfile")
set(_jamfile "${_bm_SOURCE_PATH}/build/Jamfile")
endif()
if(_jamfile)
file(READ "${_jamfile}" _contents)
string(REGEX REPLACE
"\.\./\.\./([^/ ]+)/build//(boost_[^/ ]+)"
"/boost/\\1//\\2"
_contents
"${_contents}"
)
string(REGEX REPLACE "/boost//([^/ ]+)" "/boost/\\1//boost_\\1" _contents "${_contents}")
file(WRITE "${_jamfile}" "${_contents}")
endif()
if("python2" IN_LIST FEATURES)
# Find Python2 in the current installed directory
file(GLOB python2_include_dir "${CURRENT_INSTALLED_DIR}/include/python2.*")
string(REGEX REPLACE ".*python([0-9\.]+).*" "\\1" python2_version "${python2_include_dir}")
string(REPLACE "." "" PYTHON_VERSION_TAG "${python2_version}")
endif()
if("python3" IN_LIST FEATURES)
# Find Python3 in the current installed directory
file(GLOB python3_include_dir "${CURRENT_INSTALLED_DIR}/include/python3.*")
string(REGEX REPLACE ".*python([0-9\.]+).*" "\\1" python3_version "${python3_include_dir}")
string(REPLACE "." "" PYTHON_VERSION_TAG "${python3_version}")
endif()
configure_file(${BOOST_BUILD_INSTALLED_DIR}/share/boost-build/Jamroot.jam.in ${_bm_SOURCE_PATH}/Jamroot.jam @ONLY)
set(configure_options)
if(_bm_BOOST_CMAKE_FRAGMENT)
list(APPEND configure_options "-DBOOST_CMAKE_FRAGMENT=${_bm_BOOST_CMAKE_FRAGMENT}")
endif()
vcpkg_cmake_get_vars(cmake_vars_file)
vcpkg_check_features(
OUT_FEATURE_OPTIONS feature_options
FEATURES
python2 WITH_PYTHON2
python3 WITH_PYTHON3
)
vcpkg_cmake_configure(
SOURCE_PATH ${BOOST_BUILD_INSTALLED_DIR}/share/boost-build
GENERATOR Ninja
OPTIONS
"-DPORT=${PORT}"
"-DFEATURES=${FEATURES}"
${feature_options}
"-DCURRENT_INSTALLED_DIR=${CURRENT_INSTALLED_DIR}"
"-DB2_EXE=${B2_EXE}"
"-DSOURCE_PATH=${_bm_SOURCE_PATH}"
"-DBOOST_BUILD_PATH=${BOOST_BUILD_PATH}"
"-DVCPKG_CRT_LINKAGE=${VCPKG_CRT_LINKAGE}"
"-DVCPKG_CMAKE_VARS_FILE=${cmake_vars_file}"
${configure_options}
MAYBE_UNUSED_VARIABLES
FEATURES
)
vcpkg_cmake_install()
vcpkg_copy_pdbs(
BUILD_PATHS
"${CURRENT_PACKAGES_DIR}/bin/*.dll"
"${CURRENT_PACKAGES_DIR}/bin/*.pyd"
"${CURRENT_PACKAGES_DIR}/debug/bin/*.dll"
"${CURRENT_PACKAGES_DIR}/debug/bin/*.pyd"
)
file(GLOB INSTALLED_LIBS "${CURRENT_PACKAGES_DIR}/debug/lib/*.lib" "${CURRENT_PACKAGES_DIR}/lib/*.lib")
foreach(LIB IN LISTS 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 "-vc142-" "-vc140-" NEW_FILENAME ${NEW_FILENAME}) # To merge VS2019 and VS2015 binaries
string(REPLACE "-vc143-" "-vc140-" NEW_FILENAME ${NEW_FILENAME}) # To merge VS2022 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 "-${BOOST_VERSION_ABI_TAG}" "" NEW_FILENAME ${NEW_FILENAME}) # To enable CMake > 3.10 to locate the binaries
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()
# Similar for mingw
file(GLOB INSTALLED_LIBS "${CURRENT_PACKAGES_DIR}/debug/lib/*-mgw*-*.a" "${CURRENT_PACKAGES_DIR}/lib/*-mgw*-*.a")
foreach(LIB IN LISTS INSTALLED_LIBS)
get_filename_component(OLD_FILENAME "${LIB}" NAME)
get_filename_component(DIRECTORY_OF_LIB_FILE "${LIB}" DIRECTORY)
string(REGEX REPLACE "-mgw[0-9]+-.*[0-9](\\.dll\\.a|\\.a)$" "\\1" NEW_FILENAME "${OLD_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()
# boost-regex[icu] and boost-locale[icu] generate has_icu.lib
if(EXISTS "${CURRENT_PACKAGES_DIR}/debug/lib/has_icu.lib")
file(REMOVE "${CURRENT_PACKAGES_DIR}/debug/lib/has_icu.lib")
endif()
if(EXISTS "${CURRENT_PACKAGES_DIR}/lib/has_icu.lib")
file(REMOVE "${CURRENT_PACKAGES_DIR}/lib/has_icu.lib")
endif()
if(NOT EXISTS "${CURRENT_PACKAGES_DIR}/lib")
message(FATAL_ERROR "No libraries were produced. This indicates a failure while building the boost library.")
endif()
configure_file(${BOOST_BUILD_INSTALLED_DIR}/share/boost-build/usage ${CURRENT_PACKAGES_DIR}/share/${PORT}/usage COPYONLY)
endfunction()

View File

@@ -0,0 +1,4 @@
The package boost is compatible with built-in CMake targets:
find_package(Boost REQUIRED [COMPONENTS <libs>...])
target_link_libraries(main PRIVATE Boost::boost Boost::<lib1> Boost::<lib2> ...)

View File

@@ -0,0 +1,53 @@
import toolset ;
using @USER_CONFIG_TOOLSET@ : @USER_CONFIG_TOOLSET_VERSION@ : @USER_CONFIG_TOOLSET_INVOCATION_COMMAND@
:
@USER_CONFIG_TOOLSET_OPTIONS@
;
@USER_CONFIG_EXTRA_LINES@
project user-config : requirements @USER_CONFIG_REQUIREMENTS@ ;
if "@USER_CONFIG_TOOLSET@" = "msvc" || "@USER_CONFIG_TOOLSET@" = "clang-win"
{
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 : : ;
}
else
{
if "@CMAKE_SYSTEM_NAME@" = "Windows" # We are hopelessly stuck inside boost-modular-build-helper, only this works
{
lib icuuc : : <name>icuuc <search>"@CURRENT_INSTALLED_DIR@/lib" <variant>release : : ;
lib icuuc : : <name>icuucd <search>"@CURRENT_INSTALLED_DIR@/debug/lib" <variant>debug : : ;
lib icuin : : <name>icuin <search>"@CURRENT_INSTALLED_DIR@/lib" <variant>release : : ;
lib icuin : : <name>icuind <search>"@CURRENT_INSTALLED_DIR@/debug/lib" <variant>debug : : ;
lib icudt : : <name>icudt <search>"@CURRENT_INSTALLED_DIR@/lib" <variant>release : : ;
lib icudt : : <name>icudtd <search>"@CURRENT_INSTALLED_DIR@/debug/lib" <variant>debug : : ;
}
else
{
lib dl ;
lib icuuc : : <name>icuuc <search>"@CURRENT_INSTALLED_DIR@/lib" <variant>release : : <library>dl ;
lib icuuc : : <name>icuuc <search>"@CURRENT_INSTALLED_DIR@/debug/lib" <variant>debug : : <library>dl ;
lib icuin : : <name>icui18n <search>"@CURRENT_INSTALLED_DIR@/lib" <variant>release : : ;
lib icuin : : <name>icui18n <search>"@CURRENT_INSTALLED_DIR@/debug/lib" <variant>debug : : ;
lib icudt : : <name>icudata <search>"@CURRENT_INSTALLED_DIR@/lib" <variant>release : : ;
lib icudt : : <name>icudata <search>"@CURRENT_INSTALLED_DIR@/debug/lib" <variant>debug : : ;
}
}
lib iconv : : <file>"@VCPKG_ICONV_LIBRARY_RELEASE@" <link>shared <runtime-link>shared <variant>release : : ;
lib iconv : : <file>"@VCPKG_ICONV_LIBRARY_DEBUG@" <link>shared <runtime-link>shared <variant>debug : : ;