Skip to content

Commit

Permalink
[z_vcpkg_setup_pkgconfig_path] debug needs share/pkgconfig (microso…
Browse files Browse the repository at this point in the history
…ft#36151)

Pass `share/pkgconfig` instead of `debug/share/pkgconfig`: The `share`
location is for config-independent data.
Integrate `CURRENT_PACKAGES_DIR` locations.
Change the function interface to take a CONFIG parameter instead of
prefix list (suggested below).
Use `z_vcpkg_setup_pkgconfig_path` also for `vcpkg_fixup_pkgconfig`
(which already had proper handling of `CURRENT_PACKAGES_DIR` and
`share`).
Remove redundant trailing slash.
Extend unit test.

Fixes consuming `wayland-protocols` and similar.
  • Loading branch information
dg0yt authored Mar 2, 2024
1 parent 836a2d6 commit 215a253
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 35 deletions.
3 changes: 2 additions & 1 deletion scripts/cmake/vcpkg_configure_make.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -809,7 +809,8 @@ function(vcpkg_configure_make)
set(relative_build_path .)
endif()

z_vcpkg_setup_pkgconfig_path(BASE_DIRS "${CURRENT_INSTALLED_DIR}${path_suffix_${current_buildtype}}")
# Setup PKG_CONFIG_PATH
z_vcpkg_setup_pkgconfig_path(CONFIG "${current_buildtype}")

# Setup environment
set(ENV{CPPFLAGS} "${CPPFLAGS_${current_buildtype}}")
Expand Down
6 changes: 1 addition & 5 deletions scripts/cmake/vcpkg_configure_meson.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -418,11 +418,7 @@ function(vcpkg_configure_meson)
file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${suffix_${buildtype}}")
#setting up PKGCONFIG
if(NOT arg_NO_PKG_CONFIG)
if ("${buildtype}" STREQUAL "DEBUG")
z_vcpkg_setup_pkgconfig_path(BASE_DIRS "${CURRENT_INSTALLED_DIR}/debug")
else()
z_vcpkg_setup_pkgconfig_path(BASE_DIRS "${CURRENT_INSTALLED_DIR}")
endif()
z_vcpkg_setup_pkgconfig_path(CONFIG "${buildtype}")
endif()

z_vcpkg_meson_setup_variables(${buildtype})
Expand Down
4 changes: 2 additions & 2 deletions scripts/cmake/vcpkg_configure_qmake.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ function(vcpkg_configure_qmake)
endif()

if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
z_vcpkg_setup_pkgconfig_path(BASE_DIRS "${CURRENT_INSTALLED_DIR}" "${CURRENT_PACKAGES_DIR}")
z_vcpkg_setup_pkgconfig_path(CONFIG RELEASE)

set(current_binary_dir "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel")

Expand Down Expand Up @@ -120,7 +120,7 @@ function(vcpkg_configure_qmake)
endif()

if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
z_vcpkg_setup_pkgconfig_path(BASE_DIRS "${CURRENT_INSTALLED_DIR}/debug" "${CURRENT_PACKAGES_DIR}/debug")
z_vcpkg_setup_pkgconfig_path(CONFIG DEBUG)

set(current_binary_dir "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")

Expand Down
20 changes: 3 additions & 17 deletions scripts/cmake/vcpkg_fixup_pkgconfig.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -116,18 +116,7 @@ function(z_vcpkg_fixup_pkgconfig_check_files arg_file arg_config)
set(path_suffix_DEBUG /debug)
set(path_suffix_RELEASE "")

if(DEFINED ENV{PKG_CONFIG_PATH})
set(backup_env_pkg_config_path "$ENV{PKG_CONFIG_PATH}")
else()
unset(backup_env_pkg_config_path)
endif()

vcpkg_host_path_list(PREPEND ENV{PKG_CONFIG_PATH}
"${CURRENT_PACKAGES_DIR}${path_suffix_${arg_config}}/lib/pkgconfig"
"${CURRENT_PACKAGES_DIR}/share/pkgconfig"
"${CURRENT_INSTALLED_DIR}${path_suffix_${arg_config}}/lib/pkgconfig"
"${CURRENT_INSTALLED_DIR}/share/pkgconfig"
)
z_vcpkg_setup_pkgconfig_path(CONFIG "${arg_config}")

# First make sure everything is ok with the package and its deps
cmake_path(GET arg_file STEM LAST_ONLY package_name)
Expand All @@ -149,11 +138,8 @@ function(z_vcpkg_fixup_pkgconfig_check_files arg_file arg_config)
else()
debug_message("pkg-config --exists ${package_name} output: ${output}")
endif()
if(DEFINED backup_env_pkg_config_path)
set(ENV{PKG_CONFIG_PATH} "${backup_env_pkg_config_path}")
else()
unset(ENV{PKG_CONFIG_PATH})
endif()

z_vcpkg_restore_pkgconfig_path()
endfunction()

function(vcpkg_fixup_pkgconfig)
Expand Down
24 changes: 15 additions & 9 deletions scripts/cmake/z_vcpkg_setup_pkgconfig_path.cmake
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
function(z_vcpkg_setup_pkgconfig_path)
cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "" "BASE_DIRS")
cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "CONFIG" "")

if(NOT DEFINED arg_BASE_DIRS OR "${arg_BASE_DIRS}" STREQUAL "")
message(FATAL_ERROR "BASE_DIRS is required.")
if("${arg_CONFIG}" STREQUAL "")
message(FATAL_ERROR "CONFIG is required.")
endif()
if(DEFINED arg_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
Expand All @@ -22,13 +22,19 @@ function(z_vcpkg_setup_pkgconfig_path)

set(ENV{PKG_CONFIG} "${PKGCONFIG}") # Set via native file?

foreach(base_dir IN LISTS arg_BASE_DIRS)
vcpkg_host_path_list(PREPEND ENV{PKG_CONFIG_PATH} "${base_dir}/share/pkgconfig/")
endforeach()

foreach(base_dir IN LISTS arg_BASE_DIRS)
vcpkg_host_path_list(PREPEND ENV{PKG_CONFIG_PATH} "${base_dir}/lib/pkgconfig/")
foreach(prefix IN ITEMS "${CURRENT_INSTALLED_DIR}" "${CURRENT_PACKAGES_DIR}")
vcpkg_host_path_list(PREPEND ENV{PKG_CONFIG_PATH} "${prefix}/share/pkgconfig")
if(arg_CONFIG STREQUAL "RELEASE")
vcpkg_host_path_list(PREPEND ENV{PKG_CONFIG_PATH} "${prefix}/lib/pkgconfig")
# search order is lib, share, external
elseif(arg_CONFIG STREQUAL "DEBUG")
vcpkg_host_path_list(PREPEND ENV{PKG_CONFIG_PATH} "${prefix}/debug/lib/pkgconfig")
# search order is debug/lib, share, external
else()
message(FATAL_ERROR "CONFIG must be either RELEASE or DEBUG.")
endif()
endforeach()
# total search order is current packages dir, current installed dir, external
endfunction()

function(z_vcpkg_restore_pkgconfig_path)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,23 @@ set(ENV{PKG_CONFIG} "/a/pkgconf")
set(ENV{PKG_CONFIG_PATH} "1")
set(saved_path "$ENV{PATH}")

z_vcpkg_setup_pkgconfig_path(BASE_DIRS "/2")
block(SCOPE_FOR VARIABLES)

set(CURRENT_PACKAGES_DIR "P")
set(CURRENT_INSTALLED_DIR "I")

z_vcpkg_setup_pkgconfig_path(CONFIG RELEASE)
unit_test_check_variable_equal([[]] ENV{PKG_CONFIG} [[/a/pkgconf]])
unit_test_match([[]] ENV{PKG_CONFIG_PATH} "^P.lib.pkgconfig.P.share.pkgconfig.I.lib.pkgconfig.I.share.pkgconfig.1\$")

z_vcpkg_restore_pkgconfig_path()
unit_test_check_variable_equal([[]] ENV{PKG_CONFIG} [[/a/pkgconf]])
unit_test_check_variable_equal([[]] ENV{PKG_CONFIG_PATH} "1")

z_vcpkg_setup_pkgconfig_path(CONFIG DEBUG)
unit_test_check_variable_equal([[]] ENV{PKG_CONFIG} [[/a/pkgconf]])
unit_test_check_variable_not_equal([[]] ENV{PKG_CONFIG_PATH} "1")
unit_test_match([[]] ENV{PKG_CONFIG_PATH} "^P.debug.lib.pkgconfig.P.share.pkgconfig.I.debug.lib.pkgconfig.I.share.pkgconfig.1\$")

z_vcpkg_restore_pkgconfig_path()
unit_test_check_variable_equal([[]] ENV{PKG_CONFIG} [[/a/pkgconf]])
Expand All @@ -20,3 +34,8 @@ unit_test_check_variable_equal([[]] ENV{PKG_CONFIG_PATH} "1")
# It is hard to see which side effects a restore would have, so
# this is expected behaviour for now.
unit_test_check_variable_not_equal([[]] ENV{PATH} "${saved_path}")

unit_test_ensure_fatal_error([[ z_vcpkg_setup_pkgconfig_path() ]])
unit_test_ensure_fatal_error([[ z_vcpkg_setup_pkgconfig_path(CONFIG unknown) ]])

endblock()

0 comments on commit 215a253

Please sign in to comment.