diff options
Diffstat (limited to 'vcpkg/ports/vcpkg-make/vcpkg_scripts.cmake')
| -rw-r--r-- | vcpkg/ports/vcpkg-make/vcpkg_scripts.cmake | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/vcpkg/ports/vcpkg-make/vcpkg_scripts.cmake b/vcpkg/ports/vcpkg-make/vcpkg_scripts.cmake new file mode 100644 index 0000000..6489635 --- /dev/null +++ b/vcpkg/ports/vcpkg-make/vcpkg_scripts.cmake @@ -0,0 +1,203 @@ +include_guard(GLOBAL)
+function(vcpkg_insert_into_path)
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ ""
+ "PATH_OUT;APPENDED_OUT"
+ "BEFORE;INSERT"
+ )
+ z_vcpkg_unparsed_args(FATAL_ERROR)
+ cmake_path(CONVERT "$ENV{PATH}" TO_CMAKE_PATH_LIST path_list NORMALIZE)
+
+ string(TOUPPER "${arg_BEFORE}" before_upper)
+
+ set(index 0)
+ set(appending TRUE)
+ foreach(item IN LISTS path_list)
+ string(TOUPPER "${item}" item_upper)
+ if(item IN_LIST arg_BEFORE OR item_upper IN_LIST before_upper)
+ set(appending FALSE)
+ break()
+ endif()
+ math(EXPR index "${index} + 1")
+ endforeach()
+
+ vcpkg_list(INSERT path_list "${index}" ${arg_INSERT})
+
+ cmake_path(CONVERT "${path_list}" TO_NATIVE_PATH_LIST native_path_list)
+ set(ENV{PATH} "${native_path_list}")
+ if(DEFINED arg_PATH_OUT)
+ set("${arg_PATH_OUT}" "${path_list}" PARENT_SCOPE)
+ endif()
+ if(appending)
+ set("${arg_APPENDED_OUT}" "TRUE" PARENT_SCOPE)
+ else()
+ set("${arg_APPENDED_OUT}" "FALSE" PARENT_SCOPE)
+ endif()
+endfunction()
+
+function(vcpkg_insert_program_into_path prog)
+ set(filepath "${prog}")
+ cmake_path(GET filepath FILENAME ${prog})
+ find_program(z_vcm_prog_found NAMES "${${prog}}" PATHS ENV PATH NO_DEFAULT_PATH NO_CACHE)
+ if(NOT z_vcm_prog_found STREQUAL filepath)
+ cmake_path(GET z_vcm_prog_found PARENT_PATH before_dir)
+ cmake_path(GET filepath PARENT_PATH dir)
+ vcpkg_insert_into_path(
+ INSERT "${dir}"
+ BEFORE "${before_dir}"
+ )
+ endif()
+endfunction()
+
+function(vcpkg_insert_msys_into_path msys_out)
+ cmake_parse_arguments(PARSE_ARGV 1 arg
+ ""
+ "PATH_OUT"
+ "PACKAGES"
+ )
+ z_vcpkg_unparsed_args(FATAL_ERROR)
+ vcpkg_acquire_msys(MSYS_ROOT PACKAGES ${arg_PACKAGES})
+ cmake_path(CONVERT "$ENV{SystemRoot}" TO_CMAKE_PATH_LIST system_root NORMALIZE)
+ cmake_path(CONVERT "$ENV{LOCALAPPDATA}" TO_CMAKE_PATH_LIST local_app_data NORMALIZE)
+ file(REAL_PATH "${system_root}" system_root)
+
+ vcpkg_list(SET find_system_dirs
+ "${system_root}/system32"
+ "${system_root}/System32"
+ "${system_root}/system32/"
+ "${system_root}/System32/"
+ "${local_app_data}/Microsoft/WindowsApps"
+ "${local_app_data}/Microsoft/WindowsApps/"
+ )
+
+ vcpkg_insert_into_path(
+ INSERT "${MSYS_ROOT}/usr/bin"
+ BEFORE ${find_system_dirs}
+ PATH_OUT path_out
+ APPENDED_OUT appending
+ )
+
+ if(appending)
+ message(WARNING "Unable to find system dir in the PATH variable! Appending required msys paths!")
+ endif()
+
+ if(DEFINED arg_PATH_OUT)
+ set("${arg_PATH_OUT}" "${path_out}" PARENT_SCOPE)
+ endif()
+
+ set("${msys_out}" "${MSYS_ROOT}" PARENT_SCOPE)
+endfunction()
+
+### Helper macros for argument checking
+macro(z_vcpkg_unparsed_args warning_level)
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message("${warning_level}" "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+endmacro()
+
+macro(z_vcpkg_conflicting_args)
+ set(conflicting_args_set "")
+ foreach(z_vcpkg_conflicting_args_index RANGE 0 "${ARGC}")
+ if(${ARGV${z_vcpkg_conflicting_args_index}})
+ list(APPEND conflicting_args_set "${ARGV${z_vcpkg_conflicting_args_index}}")
+ endif()
+ endforeach()
+ list(LENGTH conflicting_args_set conflicting_args_set_length)
+ if(conflicting_args_set_length GREATER 1)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed conflicting arguments:'${conflicting_args_set}'. Only one of those arguments can be passed")
+ endif()
+ unset(conflicting_args_set_length)
+ unset(conflicting_args_set)
+ unset(z_vcpkg_conflicting_args_index)
+endmacro()
+
+macro(z_vcpkg_required_args arg)
+ foreach(arg IN ITEMS ${ARGN})
+ if(NOT DEFINED arg_${arg})
+ message("FATAL_ERROR" "${CMAKE_CURRENT_FUNCTION} requires argument: ${arg}")
+ endif()
+ endforeach()
+endmacro()
+
+function(z_vcpkg_set_global_property property value)
+ if(NOT ARGN STREQUAL "" AND NOT ARGN MATCHES "^APPEND(_STRING)?$")
+ message(FATAL_ERROR "'${CMAKE_CURRENT_FUNCTION}' called with invalid arguments '${ARGN}'")
+ endif()
+ set_property(GLOBAL ${ARGN} PROPERTY "z_vcpkg_global_property_${property}" "${value}")
+endfunction()
+
+function(z_vcpkg_get_global_property outvar property)
+ if(NOT ARGN STREQUAL "" AND NOT ARGN STREQUAL "SET")
+ message(FATAL_ERROR "'${CMAKE_CURRENT_FUNCTION}' called with invalid arguments '${ARGN}'")
+ endif()
+ get_property(outprop GLOBAL PROPERTY "z_vcpkg_global_property_${property}" ${ARGN})
+ set(${outvar} "${outprop}" PARENT_SCOPE)
+endfunction()
+
+function(vcpkg_prepare_pkgconfig config)
+ set(subdir "")
+ if(config MATCHES "(DEBUG|debug)")
+ set(subdir "/debug")
+ endif()
+
+ z_vcpkg_get_global_property(has_backup "make-pkg-config-backup-${envvar}" SET)
+ if(has_backup)
+ message(FATAL_ERROR "'${CMAKE_CURRENT_FUNCTION}' does not (yet) support recursive backups. Need to restore previous state first!")
+ endif()
+
+ foreach(envvar IN ITEMS PKG_CONFIG PKG_CONFIG_PATH)
+ if(DEFINED ENV{${envvar}})
+ z_vcpkg_set_global_property("make-pkg-config-backup-${envvar}" "$ENV{${envvar}}")
+ else()
+ z_vcpkg_set_global_property("make-pkg-config-backup-${envvar}" "")
+ endif()
+ endforeach()
+
+ vcpkg_find_acquire_program(PKGCONFIG)
+ set(ENV{PKG_CONFIG} "${PKGCONFIG}")
+
+ vcpkg_host_path_list(PREPEND ENV{PKG_CONFIG_PATH}
+ # After installation, (merged) 'lib' is always searched before 'share'.
+ "${CURRENT_PACKAGES_DIR}${subdir}/lib/pkgconfig"
+ "${CURRENT_INSTALLED_DIR}${subdir}/lib/pkgconfig"
+ "${CURRENT_PACKAGES_DIR}/share/pkgconfig"
+ "${CURRENT_INSTALLED_DIR}/share/pkgconfig"
+ )
+endfunction()
+
+function(vcpkg_restore_pkgconfig)
+ foreach(envvar IN ITEMS PKG_CONFIG PKG_CONFIG_PATH)
+ z_vcpkg_get_global_property(has_backup "make-pkg-config-backup-${envvar}" SET)
+ if(has_backup)
+ z_vcpkg_get_global_property(backup "make-pkg-config-backup-${envvar}")
+ set("ENV{${envvar}}" "${backup}")
+ z_vcpkg_set_global_property("make-pkg-config-backup-${envvar}" "")
+ else()
+ unset("ENV{${envvar}}")
+ endif()
+ endforeach()
+endfunction()
+
+function(z_vcpkg_escape_spaces_in_path outvar invar)
+ string(REPLACE " " "\\ " current_installed_dir_escaped "${invar}")
+ set("${outvar}" "${current_installed_dir_escaped}" PARENT_SCOPE)
+endfunction()
+
+function(z_vcpkg_warn_path_with_spaces)
+ vcpkg_list(SET z_vcm_paths_with_spaces)
+ if(CURRENT_BUILDTREES_DIR MATCHES " ")
+ vcpkg_list(APPEND z_vcm_paths_with_spaces "${CURRENT_BUILDTREES_DIR}")
+ endif()
+ if(CURRENT_PACKAGES_DIR MATCHES " ")
+ vcpkg_list(APPEND z_vcm_paths_with_spaces "${CURRENT_PACKAGES_DIR}")
+ endif()
+ if(CURRENT_INSTALLED_DIR MATCHES " ")
+ vcpkg_list(APPEND z_vcm_paths_with_spaces "${CURRENT_INSTALLED_DIR}")
+ endif()
+ if(z_vcm_paths_with_spaces)
+ # Don't bother with whitespace. The tools will probably fail and I tried very hard trying to make it work (no success so far)!
+ vcpkg_list(APPEND z_vcm_paths_with_spaces "Please move the path to one without whitespaces!")
+ list(JOIN z_vcm_paths_with_spaces "\n " z_vcm_paths_with_spaces)
+ message(STATUS "Warning: Paths with embedded space may be handled incorrectly by configure:\n ${z_vcm_paths_with_spaces}")
+ endif()
+endfunction()
|