diff --git a/scripts/get_triplet_environment.cmake b/scripts/get_triplet_environment.cmake
index 24ff409058b..e561492debd 100644
--- a/scripts/get_triplet_environment.cmake
+++ b/scripts/get_triplet_environment.cmake
@@ -1,4 +1,7 @@
include(${CMAKE_TRIPLET_FILE})
+if (DEFINED CMAKE_PORTFILE_SETTINGS)
+ include(${CMAKE_PORTFILE_SETTINGS} OPTIONAL)
+endif()
# GUID used as a flag - "cut here line"
message("c35112b6-d1ba-415b-aa5d-81de856ef8eb")
diff --git a/toolsrc/include/vcpkg/build.h b/toolsrc/include/vcpkg/build.h
index e26597376f0..0d10d12a4f1 100644
--- a/toolsrc/include/vcpkg/build.h
+++ b/toolsrc/include/vcpkg/build.h
@@ -140,29 +140,6 @@ namespace vcpkg::Build
{"VCPKG_ENV_PASSTHROUGH", VcpkgTripletVar::ENV_PASSTHROUGH},
};
- ///
- /// Settings from the triplet file which impact the build environment and post-build checks
- ///
- struct PreBuildInfo
- {
- ///
- /// Runs the triplet file in a "capture" mode to create a PreBuildInfo
- ///
- static PreBuildInfo from_triplet_file(const VcpkgPaths& paths, const Triplet& triplet);
-
- std::string triplet_abi_tag;
- std::string target_architecture;
- std::string cmake_system_name;
- std::string cmake_system_version;
- Optional platform_toolset;
- Optional visual_studio_path;
- Optional external_toolchain_file;
- Optional build_type;
- std::vector passthrough_env_vars;
- };
-
- std::string make_build_env_cmd(const PreBuildInfo& pre_build_info, const Toolset& toolset);
-
struct ExtendedBuildResult
{
ExtendedBuildResult(BuildResult code);
@@ -200,6 +177,31 @@ namespace vcpkg::Build
const BuildPackageConfig& config,
const StatusParagraphs& status_db);
+ ///
+ /// Settings from the triplet file which impact the build environment and post-build checks
+ ///
+ struct PreBuildInfo
+ {
+ ///
+ /// Runs the triplet file in a "capture" mode to create a PreBuildInfo
+ ///
+ static PreBuildInfo from_triplet_file(const VcpkgPaths& paths,
+ const Triplet& triplet,
+ Optional port = nullopt);
+
+ std::string triplet_abi_tag;
+ std::string target_architecture;
+ std::string cmake_system_name;
+ std::string cmake_system_version;
+ Optional platform_toolset;
+ Optional visual_studio_path;
+ Optional external_toolchain_file;
+ Optional build_type;
+ std::vector passthrough_env_vars;
+ };
+
+ std::string make_build_env_cmd(const PreBuildInfo& pre_build_info, const Toolset& toolset);
+
enum class BuildPolicy
{
EMPTY_PACKAGE,
diff --git a/toolsrc/src/vcpkg/build.cpp b/toolsrc/src/vcpkg/build.cpp
index dd2beec9d9f..646da739825 100644
--- a/toolsrc/src/vcpkg/build.cpp
+++ b/toolsrc/src/vcpkg/build.cpp
@@ -782,7 +782,8 @@ namespace vcpkg::Build
AbiEntry{status_it->get()->package.spec.name(), status_it->get()->package.abi});
}
- const auto pre_build_info = PreBuildInfo::from_triplet_file(paths, triplet);
+ const auto pre_build_info =
+ PreBuildInfo::from_triplet_file(paths, triplet, config.scf.core_paragraph->name);
auto maybe_abi_tag_and_file = compute_abi_tag(paths, config, pre_build_info, dependency_abis);
@@ -997,7 +998,9 @@ namespace vcpkg::Build
return inner_create_buildinfo(*pghs.get());
}
- PreBuildInfo PreBuildInfo::from_triplet_file(const VcpkgPaths& paths, const Triplet& triplet)
+ PreBuildInfo PreBuildInfo::from_triplet_file(const VcpkgPaths& paths,
+ const Triplet& triplet,
+ Optional port)
{
static constexpr CStringView FLAG_GUID = "c35112b6-d1ba-415b-aa5d-81de856ef8eb";
@@ -1005,11 +1008,19 @@ namespace vcpkg::Build
const fs::path ports_cmake_script_path = paths.scripts / "get_triplet_environment.cmake";
const fs::path triplet_file_path = paths.get_triplet_file_path(triplet);
+ std::vector args{{"CMAKE_TRIPLET_FILE", triplet_file_path}};
+
+ if (port)
+ {
+ args.emplace_back(
+ "CMAKE_PORT_SETTINGS",
+ paths.ports / port.value_or_exit(VCPKG_LINE_INFO) / "port_settings.cmake");
+ }
+
const auto cmd_launch_cmake = System::make_cmake_cmd(cmake_exe_path,
ports_cmake_script_path,
- {
- {"CMAKE_TRIPLET_FILE", triplet_file_path},
- });
+ args);
+
const auto ec_data = System::cmd_execute_and_capture_output(cmd_launch_cmake);
Checks::check_exit(VCPKG_LINE_INFO, ec_data.exit_code == 0, ec_data.output);
diff --git a/toolsrc/src/vcpkg/commands.ci.cpp b/toolsrc/src/vcpkg/commands.ci.cpp
index c12c26ff7ba..493c052cb7e 100644
--- a/toolsrc/src/vcpkg/commands.ci.cpp
+++ b/toolsrc/src/vcpkg/commands.ci.cpp
@@ -254,7 +254,14 @@ namespace vcpkg::Commands::CI
return {spec.name(), it->second};
});
const auto& pre_build_info = pre_build_info_cache.get_lazy(
- triplet, [&]() { return Build::PreBuildInfo::from_triplet_file(paths, triplet); });
+ triplet,
+ [&]() {
+ return Build::PreBuildInfo::from_triplet_file(
+ paths,
+ triplet,
+ scfl->source_control_file->core_paragraph->name);
+ }
+ );
auto maybe_tag_and_file =
Build::compute_abi_tag(paths, build_config, pre_build_info, dependency_abis);