-
Notifications
You must be signed in to change notification settings - Fork 7.4k
[vcpkg/meson] fix some details #15756
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
1415cf4
0e414ba
ea74740
b786caa
abaf085
db6f17c
db69b42
dff02cb
1da6dce
5d66e98
eab9254
c25a94f
5b8ac64
a58e1fc
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,19 @@ | ||
| # native file used to make the build machine compiler unusable | ||
|
|
||
| [host_machine] | ||
| system = 'none' | ||
| cpu_family = 'none' | ||
| cpu = 'none' | ||
| endian = 'little' | ||
|
|
||
| [properties] | ||
|
|
||
| [binaries] | ||
| c = ['false'] | ||
| cpp = ['false'] | ||
| objc = ['false'] | ||
| objcpp = ['false'] | ||
| ar = ['false'] | ||
| pkgconfig = ['false'] | ||
| cmake = ['false'] | ||
| ninja = ['false'] | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -69,7 +69,10 @@ function(vcpkg_internal_meson_generate_native_file _additional_binaries) #https: | |
|
|
||
| string(APPEND NATIVE "[built-in options]\n") #https://mesonbuild.com/Builtin-options.html | ||
| if(VCPKG_DETECTED_CMAKE_C_COMPILER MATCHES "cl.exe") | ||
| string(APPEND NATIVE "cpp_eh='none'\n") # To make sure meson is not adding eh flags by itself using msvc | ||
| # This is currently wrongly documented in the meson docs or buggy. The docs say: 'none' = no flags | ||
| # In reality however 'none' tries to deactivate eh and meson passes the flags for it resulting in a lot of warnings | ||
| # about overriden flags. Until this is fixed in meson vcpkg should not pass this here. | ||
| # string(APPEND NATIVE "cpp_eh='none'\n") # To make sure meson is not adding eh flags by itself using msvc | ||
| endif() | ||
| if(VCPKG_TARGET_IS_WINDOWS) | ||
| string(REGEX REPLACE "( |^)(-|/)" ";\\2" WIN_C_STANDARD_LIBRARIES "${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES}") | ||
|
|
@@ -92,51 +95,56 @@ function(vcpkg_internal_meson_generate_native_file _additional_binaries) #https: | |
| endfunction() | ||
|
|
||
| function(vcpkg_internal_meson_convert_compiler_flags_to_list _out_var _compiler_flags) | ||
| string(REGEX REPLACE [=[( +|^)((\"(\\\"|[^"])+\"|\\\"|\\ |[^ ])+)]=] ";\\2" ${_out_var} "${_compiler_flags}") | ||
| string(REPLACE ";" "\\\;" tmp_var "${_compiler_flags}") | ||
| string(REGEX REPLACE [=[( +|^)((\"(\\\"|[^"])+\"|\\\"|\\ |[^ ])+)]=] ";\\2" ${_out_var} "${tmp_var}") | ||
| list(POP_FRONT ${_out_var}) # The first element is always empty due to the above replacement | ||
| list(TRANSFORM ${_out_var} STRIP) # Strip leading trailing whitespaces from each element in the list. | ||
| set(${_out_var} "${${_out_var}}" PARENT_SCOPE) | ||
| endfunction() | ||
|
|
||
| function(vcpkg_internal_meson_generate_native_file_config _config) #https://mesonbuild.com/Native-environments.html | ||
| function(vcpkg_internal_meson_convert_list_to_python_array _out_var) | ||
| set(FLAG_LIST ${ARGN}) | ||
| list(TRANSFORM FLAG_LIST APPEND "'") | ||
| list(TRANSFORM FLAG_LIST PREPEND "'") | ||
| list(JOIN FLAG_LIST ", " ${_out_var}) | ||
| string(REPLACE "'', " "" ${_out_var} "${${_out_var}}") # remove empty elements if any | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This won't remove a single empty element. It might be easier to construct this list using
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
It will remove empty strings
Yeah I also thought about that but did not want to deal with strange corner cases if there are elements containing |
||
| set(${_out_var} "[${${_out_var}}]" PARENT_SCOPE) | ||
| endfunction() | ||
|
|
||
| # Generates the required compiler properties for meson | ||
| function(vcpkg_internal_meson_generate_flags_properties_string _out_var _config) | ||
| if(VCPKG_TARGET_IS_WINDOWS) | ||
| set(L_FLAG /LIBPATH:) | ||
| else() | ||
| set(L_FLAG -L) | ||
| endif() | ||
| set(PATH_SUFFIX_DEBUG /debug) | ||
| set(LIBPATH_${_config} "'${L_FLAG}${CURRENT_INSTALLED_DIR}${PATH_SUFFIX_${_config}}/lib'") | ||
|
|
||
| set(NATIVE_${_config} "[properties]\n") #https://mesonbuild.com/Builtin-options.html | ||
| set(LIBPATH_${_config} "${L_FLAG}${CURRENT_INSTALLED_DIR}${PATH_SUFFIX_${_config}}/lib") | ||
| vcpkg_internal_meson_convert_compiler_flags_to_list(MESON_CFLAGS_${_config} "${VCPKG_DETECTED_CMAKE_C_FLAGS_${_config}}") | ||
| list(TRANSFORM MESON_CFLAGS_${_config} APPEND "'") | ||
| list(TRANSFORM MESON_CFLAGS_${_config} PREPEND "'") | ||
| #list(APPEND MESON_CFLAGS_${_config} "${LIBPATH_${_config}}") | ||
| list(APPEND MESON_CFLAGS_${_config} "'-I${CURRENT_INSTALLED_DIR}/include'") | ||
| list(JOIN MESON_CFLAGS_${_config} ", " MESON_CFLAGS_${_config}) | ||
| string(REPLACE "'', " "" MESON_CFLAGS_${_config} "${MESON_CFLAGS_${_config}}") | ||
| string(APPEND NATIVE_${_config} "c_args = [${MESON_CFLAGS_${_config}}]\n") | ||
| list(APPEND MESON_CFLAGS_${_config} "-I\"${CURRENT_INSTALLED_DIR}/include\"") | ||
| vcpkg_internal_meson_convert_list_to_python_array(MESON_CFLAGS_${_config} ${MESON_CFLAGS_${_config}}) | ||
| string(APPEND ${_out_var} "c_args = ${MESON_CFLAGS_${_config}}\n") | ||
| vcpkg_internal_meson_convert_compiler_flags_to_list(MESON_CXXFLAGS_${_config} "${VCPKG_DETECTED_CMAKE_CXX_FLAGS_${_config}}") | ||
| list(TRANSFORM MESON_CXXFLAGS_${_config} APPEND "'") | ||
| list(TRANSFORM MESON_CXXFLAGS_${_config} PREPEND "'") | ||
| #list(APPEND MESON_CXXFLAGS_${_config} "${LIBPATH_${_config}}") | ||
| list(APPEND MESON_CXXFLAGS_${_config} "'-I${CURRENT_INSTALLED_DIR}/include'") | ||
| list(JOIN MESON_CXXFLAGS_${_config} ", " MESON_CXXFLAGS_${_config}) | ||
| string(REPLACE "'', " "" MESON_CXXFLAGS_${_config} "${MESON_CXXFLAGS_${_config}}") | ||
| string(APPEND NATIVE_${_config} "cpp_args = [${MESON_CXXFLAGS_${_config}}]\n") | ||
|
|
||
| list(APPEND MESON_CXXFLAGS_${_config} "-I\"${CURRENT_INSTALLED_DIR}/include\"") | ||
| vcpkg_internal_meson_convert_list_to_python_array(MESON_CXXFLAGS_${_config} ${MESON_CXXFLAGS_${_config}}) | ||
| string(APPEND ${_out_var} "cpp_args = ${MESON_CXXFLAGS_${_config}}\n") | ||
| if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic") | ||
| set(LINKER_FLAGS_${_config} "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_${_config}}") | ||
| else() | ||
| set(LINKER_FLAGS_${_config} "${VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS_${_config}}") | ||
| endif() | ||
| vcpkg_internal_meson_convert_compiler_flags_to_list(LINKER_FLAGS_${_config} "${LINKER_FLAGS_${_config}}") | ||
| list(TRANSFORM LINKER_FLAGS_${_config} APPEND "'") | ||
| list(TRANSFORM LINKER_FLAGS_${_config} PREPEND "'") | ||
| list(APPEND LINKER_FLAGS_${_config} "${LIBPATH_${_config}}") | ||
| list(JOIN LINKER_FLAGS_${_config} ", " LINKER_FLAGS_${_config}) | ||
| string(REPLACE "'', " "" LINKER_FLAGS_${_config} "${LINKER_FLAGS_${_config}}") | ||
| string(APPEND NATIVE_${_config} "c_link_args = [${LINKER_FLAGS_${_config}}]\n") | ||
| string(APPEND NATIVE_${_config} "cpp_link_args = [${LINKER_FLAGS_${_config}}]\n") | ||
| vcpkg_internal_meson_convert_list_to_python_array(LINKER_FLAGS_${_config} ${LINKER_FLAGS_${_config}}) | ||
| string(APPEND ${_out_var} "c_link_args = ${LINKER_FLAGS_${_config}}\n") | ||
| string(APPEND ${_out_var} "cpp_link_args = ${LINKER_FLAGS_${_config}}\n") | ||
| set(${_out_var} "${${_out_var}}" PARENT_SCOPE) | ||
| endfunction() | ||
|
|
||
| function(vcpkg_internal_meson_generate_native_file_config _config) #https://mesonbuild.com/Native-environments.html | ||
| set(NATIVE_${_config} "[properties]\n") #https://mesonbuild.com/Builtin-options.html | ||
| vcpkg_internal_meson_generate_flags_properties_string(NATIVE_PROPERTIES ${_config}) | ||
| string(APPEND NATIVE_${_config} "${NATIVE_PROPERTIES}") | ||
| #Setup CMake properties | ||
| string(APPEND NATIVE_${_config} "cmake_toolchain_file = '${SCRIPTS}/buildsystems/vcpkg.cmake'\n") | ||
| string(APPEND NATIVE_${_config} "[cmake]\n") | ||
|
|
@@ -254,7 +262,7 @@ function(vcpkg_internal_meson_generate_cross_file _additional_binaries) #https:/ | |
| endforeach() | ||
|
|
||
| string(APPEND CROSS "[properties]\n") | ||
| string(APPEND CROSS "skip_sanity_check = true\n") | ||
|
|
||
| string(APPEND CROSS "[host_machine]\n") | ||
| string(APPEND CROSS "endian = 'little'\n") | ||
| if(NOT VCPKG_CMAKE_SYSTEM_NAME) | ||
|
|
@@ -278,54 +286,18 @@ function(vcpkg_internal_meson_generate_cross_file _additional_binaries) #https:/ | |
| string(APPEND CROSS "cpu_family = '${BUILD_CPU_FAM}'\n") | ||
| string(APPEND CROSS "cpu = '${BUILD_CPU}'\n") | ||
|
|
||
| if(NOT BUILD_CPU_FAM STREQUAL HOST_CPU_FAM OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_IOS) | ||
| if(NOT BUILD_CPU_FAM MATCHES "${HOST_CPU_FAM}" OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_IOS OR VCPKG_TARGET_IS_UWP) | ||
| set(_file "${CURRENT_BUILDTREES_DIR}/meson-cross-${TARGET_TRIPLET}.log") | ||
| set(VCPKG_MESON_CROSS_FILE "${_file}" PARENT_SCOPE) | ||
| file(WRITE "${_file}" "${CROSS}") | ||
| endif() | ||
| endfunction() | ||
|
|
||
| function(vcpkg_internal_meson_generate_cross_file_config _config) #https://mesonbuild.com/Native-environments.html | ||
| if(VCPKG_TARGET_IS_WINDOWS) | ||
| set(L_FLAG /LIBPATH:) | ||
| else() | ||
| set(L_FLAG -L) | ||
| endif() | ||
| set(PATH_SUFFIX_DEBUG /debug) | ||
| set(LIBPATH_${_config} "'${L_FLAG}${CURRENT_INSTALLED_DIR}${PATH_SUFFIX_${_config}}/lib'") | ||
|
|
||
|
|
||
| set(NATIVE_${_config} "[properties]\n") #https://mesonbuild.com/Builtin-options.html | ||
| vcpkg_internal_meson_convert_compiler_flags_to_list(MESON_CFLAGS_${_config} "${VCPKG_DETECTED_CMAKE_C_FLAGS_${_config}}") | ||
| list(TRANSFORM MESON_CFLAGS_${_config} APPEND "'") | ||
| list(TRANSFORM MESON_CFLAGS_${_config} PREPEND "'") | ||
| list(APPEND MESON_CFLAGS_${_config} "'-I\"${CURRENT_INSTALLED_DIR}/include\"'") | ||
| list(JOIN MESON_CFLAGS_${_config} ", " MESON_CFLAGS_${_config}) | ||
| string(REPLACE "'', " "" MESON_CFLAGS_${_config} "${MESON_CFLAGS_${_config}}") | ||
| string(APPEND NATIVE_${_config} "c_args = [${MESON_CFLAGS_${_config}}]\n") | ||
| vcpkg_internal_meson_convert_compiler_flags_to_list(MESON_CXXFLAGS_${_config} "${VCPKG_DETECTED_CMAKE_CXX_FLAGS_${_config}}") | ||
| list(TRANSFORM MESON_CXXFLAGS_${_config} APPEND "'") | ||
| list(TRANSFORM MESON_CXXFLAGS_${_config} PREPEND "'") | ||
| list(APPEND MESON_CXXFLAGS_${_config} "'-I\"${CURRENT_INSTALLED_DIR}/include\"'") | ||
| list(JOIN MESON_CXXFLAGS_${_config} ", " MESON_CXXFLAGS_${_config}) | ||
| string(REPLACE "'', " "" MESON_CXXFLAGS_${_config} "${MESON_CXXFLAGS_${_config}}") | ||
| string(APPEND NATIVE_${_config} "cpp_args = [${MESON_CXXFLAGS_${_config}}]\n") | ||
|
|
||
| if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic") | ||
| set(LINKER_FLAGS_${_config} "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_${_config}}") | ||
| else() | ||
| set(LINKER_FLAGS_${_config} "${VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS_${_config}}") | ||
| endif() | ||
| vcpkg_internal_meson_convert_compiler_flags_to_list(LINKER_FLAGS_${_config} "${LINKER_FLAGS_${_config}}") | ||
| list(TRANSFORM LINKER_FLAGS_${_config} APPEND "'") | ||
| list(TRANSFORM LINKER_FLAGS_${_config} PREPEND "'") | ||
| list(APPEND LINKER_FLAGS_${_config} "${LIBPATH_${_config}}") | ||
| list(JOIN LINKER_FLAGS_${_config} ", " LINKER_FLAGS_${_config}) | ||
| string(REPLACE "'', " "" LINKER_FLAGS_${_config} "${LINKER_FLAGS_${_config}}") | ||
| string(APPEND NATIVE_${_config} "c_link_args = [${LINKER_FLAGS_${_config}}]\n") | ||
| string(APPEND NATIVE_${_config} "cpp_link_args = [${LINKER_FLAGS_${_config}}]\n") | ||
|
|
||
| string(APPEND NATIVE_${_config} "[built-in options]\n") | ||
| set(CROSS_${_config} "[properties]\n") #https://mesonbuild.com/Builtin-options.html | ||
| vcpkg_internal_meson_generate_flags_properties_string(CROSS_PROPERTIES ${_config}) | ||
| string(APPEND CROSS_${_config} "${CROSS_PROPERTIES}") | ||
| string(APPEND CROSS_${_config} "[built-in options]\n") | ||
| if(VCPKG_TARGET_IS_WINDOWS) | ||
| if(VCPKG_CRT_LINKAGE STREQUAL "static") | ||
| set(CRT mt) | ||
|
|
@@ -335,22 +307,21 @@ function(vcpkg_internal_meson_generate_cross_file_config _config) #https://meson | |
| if(${_config} STREQUAL DEBUG) | ||
| set(CRT ${CRT}d) | ||
| endif() | ||
| string(APPEND NATIVE_${_config} "b_vscrt = '${CRT}'\n") | ||
| string(APPEND CROSS_${_config} "b_vscrt = '${CRT}'\n") | ||
| endif() | ||
|
|
||
| string(TOLOWER "${_config}" lowerconfig) | ||
| set(_file "${CURRENT_BUILDTREES_DIR}/meson-cross-${TARGET_TRIPLET}-${lowerconfig}.log") | ||
| set(VCPKG_MESON_CROSS_FILE_${_config} "${_file}" PARENT_SCOPE) | ||
| file(WRITE "${_file}" "${NATIVE_${_config}}") | ||
| file(WRITE "${_file}" "${CROSS_${_config}}") | ||
| endfunction() | ||
|
|
||
|
|
||
| function(vcpkg_configure_meson) | ||
| # parse parameters such that semicolons in options arguments to COMMAND don't get erased | ||
| cmake_parse_arguments(PARSE_ARGV 0 _vcm "" "SOURCE_PATH" "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE;ADDITIONAL_NATIVE_BINARIES;ADDITIONAL_CROSS_BINARIES") | ||
|
|
||
| file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel) | ||
| file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg) | ||
| file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel") | ||
| file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg") | ||
|
|
||
| vcpkg_internal_get_cmake_vars(OUTPUT_FILE _VCPKG_CMAKE_VARS_FILE) | ||
| set(_VCPKG_CMAKE_VARS_FILE "${_VCPKG_CMAKE_VARS_FILE}" PARENT_SCOPE) | ||
|
|
@@ -375,19 +346,6 @@ function(vcpkg_configure_meson) | |
|
|
||
| list(APPEND _vcm_OPTIONS --buildtype plain --backend ninja --wrap-mode nodownload) | ||
|
|
||
| if(NOT VCPKG_MESON_NATIVE_FILE) | ||
| vcpkg_internal_meson_generate_native_file("_vcm_ADDITIONAL_NATIVE_BINARIES") | ||
| endif() | ||
| if(NOT VCPKG_MESON_NATIVE_FILE_DEBUG) | ||
| vcpkg_internal_meson_generate_native_file_config(DEBUG) | ||
| endif() | ||
| if(NOT VCPKG_MESON_NATIVE_FILE_RELEASE) | ||
| vcpkg_internal_meson_generate_native_file_config(RELEASE) | ||
| endif() | ||
| list(APPEND _vcm_OPTIONS --native "${VCPKG_MESON_NATIVE_FILE}") | ||
| list(APPEND _vcm_OPTIONS_DEBUG --native "${VCPKG_MESON_NATIVE_FILE_DEBUG}") | ||
| list(APPEND _vcm_OPTIONS_RELEASE --native "${VCPKG_MESON_NATIVE_FILE_RELEASE}") | ||
|
|
||
| if(NOT VCPKG_MESON_CROSS_FILE) | ||
| vcpkg_internal_meson_generate_cross_file("_vcm_ADDITIONAL_CROSS_BINARIES") | ||
| endif() | ||
|
|
@@ -400,14 +358,29 @@ function(vcpkg_configure_meson) | |
| if(VCPKG_MESON_CROSS_FILE) | ||
| list(APPEND _vcm_OPTIONS --cross "${VCPKG_MESON_CROSS_FILE}") | ||
| endif() | ||
|
|
||
| if(VCPKG_MESON_CROSS_FILE_DEBUG) | ||
| list(APPEND _vcm_OPTIONS_DEBUG --cross "${VCPKG_MESON_CROSS_FILE_DEBUG}") | ||
| endif() | ||
| if(VCPKG_MESON_CROSS_FILE_RELEASE) | ||
| list(APPEND _vcm_OPTIONS_RELEASE --cross "${VCPKG_MESON_CROSS_FILE_RELEASE}") | ||
| endif() | ||
|
|
||
| if(NOT VCPKG_MESON_NATIVE_FILE AND NOT VCPKG_MESON_CROSS_FILE) | ||
| vcpkg_internal_meson_generate_native_file("_vcm_ADDITIONAL_NATIVE_BINARIES") | ||
| endif() | ||
| if(NOT VCPKG_MESON_NATIVE_FILE_DEBUG AND NOT VCPKG_MESON_CROSS_FILE) | ||
| vcpkg_internal_meson_generate_native_file_config(DEBUG) | ||
| endif() | ||
| if(NOT VCPKG_MESON_NATIVE_FILE_RELEASE AND NOT VCPKG_MESON_CROSS_FILE) | ||
| vcpkg_internal_meson_generate_native_file_config(RELEASE) | ||
| endif() | ||
| if(VCPKG_MESON_NATIVE_FILE AND NOT VCPKG_MESON_CROSS_FILE) | ||
Neumann-A marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| list(APPEND _vcm_OPTIONS --native "${VCPKG_MESON_NATIVE_FILE}") | ||
| list(APPEND _vcm_OPTIONS_DEBUG --native "${VCPKG_MESON_NATIVE_FILE_DEBUG}") | ||
| list(APPEND _vcm_OPTIONS_RELEASE --native "${VCPKG_MESON_NATIVE_FILE_RELEASE}") | ||
| else() | ||
| list(APPEND _vcm_OPTIONS --native "${SCRIPTS}/buildsystems/meson/none.txt") | ||
| endif() | ||
| if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic") | ||
| list(APPEND _vcm_OPTIONS --default-library shared) | ||
| else() | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.