diff --git a/README.md b/README.md
index 39e1105b..6484b94b 100644
--- a/README.md
+++ b/README.md
@@ -224,6 +224,8 @@ For example, if we want to use the same python3 executable on target and host bu
+ Option(Optional): `PROJECT_THIRD_PARTY_PACKAGE_DIR` : Where to place package sources.
+ Option(Optional): `PROJECT_THIRD_PARTY_INSTALL_DIR` : Where to place installed packages.
+ Option(Optional): `PROJECT_THIRD_PARTY_HOST_INSTALL_DIR` : Where to place installed packages of host system.
++ Option(Optional): `ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_USE_ABSOLUTE_RPATH` : Use absolute third-party prefix paths
+ instead of loader-relative paths for additional build `RPATH` entries(default: `OFF`).
+ Option(Optional): `FindConfigurePackageGitFetchDepth` : Fetch depth og git repository.
+ Option(Optional): `ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_BUILD_DIR` : Where to build packages.
+ Option(Optional): `ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_HOST_BUILD_DIR` : Where to build packages of host system.
@@ -240,6 +242,10 @@ For example, if we want to use the same python3 executable on target and host bu
+ Option(Optional): `ATFRAMEWORK_CMAKE_TOOLSET_CLEANUP_BUILD_CACHE` : Cleanup build cache directory after a package is built successfully.
+ Option(Optional): `ATFRAMEWORK_CMAKE_TOOLSET_CLEANUP_PACKAGE_SOURCE_DIR` : Cleanup souce cache directory after a package is built successfully.
+cmake-toolset does not modify `LD_LIBRARY_PATH`. Additional build `RPATH` entries use `$ORIGIN` on Unix or
+`@loader_path` on Apple by default; set `ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_USE_ABSOLUTE_RPATH=ON` to use absolute
+third-party prefix paths instead. Windows DLL lookup continues to use `PATH`.
+
```cmake
# set(PROJECT_THIRD_PARTY_PACKAGE_DIR "${PROJECT_SOURCE_DIR}/third_party/packages")
# set(PROJECT_THIRD_PARTY_INSTALL_DIR "${PROJECT_SOURCE_DIR}/third_party/install/${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_CXX_COMPILER_ID}")
diff --git a/ci/do_ci.sh b/ci/do_ci.sh
index bdc645c6..35b12e15 100644
--- a/ci/do_ci.sh
+++ b/ci/do_ci.sh
@@ -3,6 +3,7 @@
cd "$(cd "$(dirname $0)" && pwd)/.."
set -ex
+unset LD_LIBRARY_PATH
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
@@ -61,8 +62,6 @@ elif [[ "$1" == "gcc.no-rtti.test" ]]; then
exit $CMAKE_CONFIGURE_EXIT_CODE
fi
cmake --build . -j || cmake --build . || cmake --build . --verbose
- THIRD_PARTY_PREBUILT_DIR=$(ls -d $PWD/../third_party/install/*)
- export LD_LIBRARY_PATH="$THIRD_PARTY_PREBUILT_DIR/lib64:$THIRD_PARTY_PREBUILT_DIR/lib"
ctest . -V
elif [[ "$1" == "gcc.no-exceptions.test" ]]; then
echo "$1"
@@ -79,8 +78,6 @@ elif [[ "$1" == "gcc.no-exceptions.test" ]]; then
exit $CMAKE_CONFIGURE_EXIT_CODE
fi
cmake --build . -j || cmake --build . || cmake --build . --verbose
- THIRD_PARTY_PREBUILT_DIR=$(ls -d $PWD/../third_party/install/*)
- export LD_LIBRARY_PATH="$THIRD_PARTY_PREBUILT_DIR/lib64:$THIRD_PARTY_PREBUILT_DIR/lib"
ctest . -V
elif [[ "$1" == "gcc.static.test" ]]; then
echo "$1"
@@ -97,8 +94,6 @@ elif [[ "$1" == "gcc.static.test" ]]; then
exit $CMAKE_CONFIGURE_EXIT_CODE
fi
cmake --build . -j || cmake --build . || cmake --build . --verbose
- THIRD_PARTY_PREBUILT_DIR=$(ls -d $PWD/../third_party/install/*)
- export LD_LIBRARY_PATH="$THIRD_PARTY_PREBUILT_DIR/lib64:$THIRD_PARTY_PREBUILT_DIR/lib"
ctest . -V
elif [[ "$1" == "gcc.shared.test" ]]; then
echo "$1"
@@ -115,8 +110,6 @@ elif [[ "$1" == "gcc.shared.test" ]]; then
exit $CMAKE_CONFIGURE_EXIT_CODE
fi
cmake --build . -j || cmake --build . || cmake --build . --verbose
- THIRD_PARTY_PREBUILT_DIR=$(ls -d $PWD/../third_party/install/*)
- export LD_LIBRARY_PATH="$THIRD_PARTY_PREBUILT_DIR/lib64:$THIRD_PARTY_PREBUILT_DIR/lib"
ctest . -V
elif [[ "$1" == "gcc.libressl.test" ]]; then
echo "$1"
@@ -133,8 +126,6 @@ elif [[ "$1" == "gcc.libressl.test" ]]; then
exit $CMAKE_CONFIGURE_EXIT_CODE
fi
cmake --build . -j || cmake --build . || cmake --build . --verbose
- THIRD_PARTY_PREBUILT_DIR=$(ls -d $PWD/../third_party/install/*)
- export LD_LIBRARY_PATH="$THIRD_PARTY_PREBUILT_DIR/lib64:$THIRD_PARTY_PREBUILT_DIR/lib"
ctest . -V
elif [[ "$1" == "gcc.boringssl.test" ]]; then
echo "$1"
@@ -151,8 +142,6 @@ elif [[ "$1" == "gcc.boringssl.test" ]]; then
exit $CMAKE_CONFIGURE_EXIT_CODE
fi
cmake --build . -j || cmake --build . || cmake --build . --verbose
- THIRD_PARTY_PREBUILT_DIR=$(ls -d $PWD/../third_party/install/*)
- export LD_LIBRARY_PATH="$THIRD_PARTY_PREBUILT_DIR/lib64:$THIRD_PARTY_PREBUILT_DIR/lib"
ctest . -V
elif [[ "$1" == "gcc.mbedtls.test" ]]; then
echo "$1"
@@ -169,8 +158,6 @@ elif [[ "$1" == "gcc.mbedtls.test" ]]; then
exit $CMAKE_CONFIGURE_EXIT_CODE
fi
cmake --build . -j || cmake --build . || cmake --build . --verbose
- THIRD_PARTY_PREBUILT_DIR=$(ls -d $PWD/../third_party/install/*)
- export LD_LIBRARY_PATH="$THIRD_PARTY_PREBUILT_DIR/lib64:$THIRD_PARTY_PREBUILT_DIR/lib"
ctest . -V
elif [[ "$1" == "gcc.4.8.test" ]]; then
echo "$1"
@@ -187,8 +174,6 @@ elif [[ "$1" == "gcc.4.8.test" ]]; then
exit $CMAKE_CONFIGURE_EXIT_CODE
fi
cmake --build . -j || cmake --build . || cmake --build . --verbose
- THIRD_PARTY_PREBUILT_DIR=$(ls -d $PWD/../third_party/install/*)
- export LD_LIBRARY_PATH="$THIRD_PARTY_PREBUILT_DIR/lib64:$THIRD_PARTY_PREBUILT_DIR/lib"
ctest . -V
elif [[ "$1" == "gcc.standalone-upb.test" ]]; then
echo "$1"
@@ -205,7 +190,6 @@ elif [[ "$1" == "gcc.standalone-upb.test" ]]; then
exit $CMAKE_CONFIGURE_EXIT_CODE
fi
cmake --build . -j || cmake --build . || cmake --build . --verbose
- THIRD_PARTY_PREBUILT_DIR=$(ls -d $PWD/third_party/install/*)
elif [[ "$1" == "clang.test" ]]; then
echo "$1"
mkdir -p test/build_jobs_dir
@@ -245,8 +229,6 @@ elif [[ "$1" == "clang.test" ]]; then
exit $CMAKE_CONFIGURE_EXIT_CODE
fi
cmake --build . -j || cmake --build . || cmake --build . --verbose
- THIRD_PARTY_PREBUILT_DIR=$(ls -d $PWD/../third_party/install/*)
- export LD_LIBRARY_PATH="$THIRD_PARTY_PREBUILT_DIR/lib64:$THIRD_PARTY_PREBUILT_DIR/lib"
ctest . -V
elif [[ "$1" == "gcc.vcpkg.test" ]]; then
echo "$1"
@@ -272,8 +254,6 @@ elif [[ "$1" == "gcc.vcpkg.test" ]]; then
exit $CMAKE_CONFIGURE_EXIT_CODE
fi
cmake --build . -j || cmake --build . || cmake --build . --verbose
- THIRD_PARTY_PREBUILT_DIR=$(ls -d $PWD/../third_party/install/*)
- export LD_LIBRARY_PATH="$THIRD_PARTY_PREBUILT_DIR/lib64:$THIRD_PARTY_PREBUILT_DIR/lib"
ctest . -V
elif [[ "$1" == "msys2.mingw.static.test" ]]; then
echo "$1"
@@ -298,7 +278,6 @@ elif [[ "$1" == "msys2.mingw.static.test" ]]; then
fi
cmake --build . -j || cmake --build . || cmake --build . --verbose
THIRD_PARTY_PREBUILT_DIR=$(ls -d $PWD/../third_party/install/*)
- export LD_LIBRARY_PATH="$THIRD_PARTY_PREBUILT_DIR/lib64:$THIRD_PARTY_PREBUILT_DIR/lib"
export PATH="$PATH:$THIRD_PARTY_PREBUILT_DIR/bin"
ctest . -V
elif [[ "$1" == "msys2.mingw.shared.test" ]]; then
@@ -325,7 +304,6 @@ elif [[ "$1" == "msys2.mingw.shared.test" ]]; then
fi
cmake --build . -j || cmake --build . || cmake --build . --verbose
THIRD_PARTY_PREBUILT_DIR=$(ls -d $PWD/../third_party/install/*)
- export LD_LIBRARY_PATH="$THIRD_PARTY_PREBUILT_DIR/lib64:$THIRD_PARTY_PREBUILT_DIR/lib"
export PATH="$PATH:$THIRD_PARTY_PREBUILT_DIR/bin"
ctest . -V
elif [[ "$1" == "msvc.static.test" ]]; then
@@ -353,7 +331,6 @@ elif [[ "$1" == "msvc.static.test" ]]; then
fi
cmake --build . -j --config $CI_BUILD_CONFIGURE_TYPE || cmake --build . --config $CI_BUILD_CONFIGURE_TYPE
THIRD_PARTY_PREBUILT_DIR=$(ls -d $PWD/../third_party/install/*)
- export LD_LIBRARY_PATH="$THIRD_PARTY_PREBUILT_DIR/lib64:$THIRD_PARTY_PREBUILT_DIR/lib"
export PATH="$PATH:$THIRD_PARTY_PREBUILT_DIR/bin"
ctest . -V -C $CI_BUILD_CONFIGURE_TYPE
elif [[ "$1" == "msvc.shared.test" ]]; then
@@ -381,7 +358,6 @@ elif [[ "$1" == "msvc.shared.test" ]]; then
fi
cmake --build . -j --config $CI_BUILD_CONFIGURE_TYPE || cmake --build . --config $CI_BUILD_CONFIGURE_TYPE
THIRD_PARTY_PREBUILT_DIR=$(ls -d $PWD/../third_party/install/*)
- export LD_LIBRARY_PATH="$THIRD_PARTY_PREBUILT_DIR/lib64:$THIRD_PARTY_PREBUILT_DIR/lib"
export PATH="$PATH:$THIRD_PARTY_PREBUILT_DIR/bin"
ctest . -V
elif [[ "$1" == "msvc.vcpkg.test" ]]; then
@@ -419,7 +395,6 @@ elif [[ "$1" == "msvc.vcpkg.test" ]]; then
fi
cmake --build . -j --config $CI_BUILD_CONFIGURE_TYPE || cmake --build . --config $CI_BUILD_CONFIGURE_TYPE
THIRD_PARTY_PREBUILT_DIR=$(ls -d $PWD/../third_party/install/*)
- export LD_LIBRARY_PATH="$THIRD_PARTY_PREBUILT_DIR/lib64:$THIRD_PARTY_PREBUILT_DIR/lib"
export PATH="$PATH:$THIRD_PARTY_PREBUILT_DIR/bin"
ctest . -V -C $CI_BUILD_CONFIGURE_TYPE
elif [[ "$1" == "msvc2017.test" ]]; then
@@ -439,7 +414,6 @@ elif [[ "$1" == "msvc2017.test" ]]; then
fi
cmake --build . -j --config $CI_BUILD_CONFIGURE_TYPE || cmake --build . --config $CI_BUILD_CONFIGURE_TYPE
THIRD_PARTY_PREBUILT_DIR=$(ls -d $PWD/../third_party/install/*)
- export LD_LIBRARY_PATH="$THIRD_PARTY_PREBUILT_DIR/lib64:$THIRD_PARTY_PREBUILT_DIR/lib"
export PATH="$PATH:$THIRD_PARTY_PREBUILT_DIR/bin"
ctest . -V -C $CI_BUILD_CONFIGURE_TYPE
elif [[ "$1" == "android.arm64.test" ]]; then
diff --git a/ports/Configure.cmake b/ports/Configure.cmake
index 84e22dbd..1a98ae0b 100644
--- a/ports/Configure.cmake
+++ b/ports/Configure.cmake
@@ -310,32 +310,156 @@ if(NOT EXISTS ${PROJECT_THIRD_PARTY_INSTALL_DIR})
file(MAKE_DIRECTORY ${PROJECT_THIRD_PARTY_INSTALL_DIR})
endif()
-if(NOT CMAKE_BUILD_RPATH)
- add_list_flags_to_inherit_var(CMAKE_BUILD_RPATH "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib64"
- "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib")
+if(NOT EXISTS ${PROJECT_THIRD_PARTY_HOST_INSTALL_DIR})
+ file(MAKE_DIRECTORY ${PROJECT_THIRD_PARTY_HOST_INSTALL_DIR})
+endif()
- if(ANDROID OR CMAKE_SYSTEM_NAME MATCHES "Linux|Android")
- add_compiler_flags_to_inherit_var_unique(
- CMAKE_EXE_LINKER_FLAGS
- "-Wl,-rpath-link,${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib64:${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib")
- add_compiler_flags_to_inherit_var_unique(
- CMAKE_MODULE_LINKER_FLAGS
- "-Wl,-rpath-link,${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib64:${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib")
- add_compiler_flags_to_inherit_var_unique(
- CMAKE_SHARED_LINKER_FLAGS
- "-Wl,-rpath-link,${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib64:${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib")
+option(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_USE_ABSOLUTE_RPATH
+ "Use absolute paths instead of loader-relative paths for additional third-party build RPATH entries" OFF)
+
+if(APPLE)
+ set(_atframework_cmake_toolset_target_rpath_origin "@loader_path")
+elseif(UNIX)
+ set(_atframework_cmake_toolset_target_rpath_origin "$ORIGIN")
+endif()
+if(CMAKE_HOST_APPLE)
+ set(_atframework_cmake_toolset_host_rpath_origin "@loader_path")
+elseif(CMAKE_HOST_UNIX)
+ set(_atframework_cmake_toolset_host_rpath_origin "$ORIGIN")
+endif()
+
+# Build absolute and loader-relative RPATH lists for a third-party prefix.
+function(_atframework_cmake_toolset_make_build_rpath _atframework_cmake_toolset_out_var
+ _atframework_cmake_toolset_absolute_out_var _atframework_cmake_toolset_install_dir
+ _atframework_cmake_toolset_origin)
+ get_filename_component(_atframework_cmake_toolset_install_dir "${_atframework_cmake_toolset_install_dir}" ABSOLUTE
+ BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
+ foreach(_atframework_cmake_toolset_library_dir "${CMAKE_INSTALL_LIBDIR}" lib64 lib)
+ list(APPEND _atframework_cmake_toolset_absolute_rpath
+ "${_atframework_cmake_toolset_install_dir}/${_atframework_cmake_toolset_library_dir}")
+ list(APPEND _atframework_cmake_toolset_relative_rpath
+ "${_atframework_cmake_toolset_origin}/../${_atframework_cmake_toolset_library_dir}")
+ endforeach()
+ list(REMOVE_DUPLICATES _atframework_cmake_toolset_absolute_rpath)
+ if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_USE_ABSOLUTE_RPATH OR NOT _atframework_cmake_toolset_origin)
+ set(_atframework_cmake_toolset_rpath ${_atframework_cmake_toolset_absolute_rpath})
+ else()
+ list(PREPEND _atframework_cmake_toolset_relative_rpath "${_atframework_cmake_toolset_origin}")
+ foreach(_atframework_cmake_toolset_output_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
+ "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
+ if(NOT _atframework_cmake_toolset_output_dir OR _atframework_cmake_toolset_output_dir MATCHES "\\$<")
+ continue()
+ endif()
+ get_filename_component(_atframework_cmake_toolset_output_dir "${_atframework_cmake_toolset_output_dir}" ABSOLUTE
+ BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
+ foreach(_atframework_cmake_toolset_library_dir IN LISTS _atframework_cmake_toolset_absolute_rpath)
+ file(RELATIVE_PATH _atframework_cmake_toolset_relative_dir "${_atframework_cmake_toolset_output_dir}"
+ "${_atframework_cmake_toolset_library_dir}")
+ if(IS_ABSOLUTE "${_atframework_cmake_toolset_relative_dir}")
+ continue()
+ elseif(_atframework_cmake_toolset_relative_dir STREQUAL ".")
+ set(_atframework_cmake_toolset_relative_dir)
+ else()
+ set(_atframework_cmake_toolset_relative_dir "/${_atframework_cmake_toolset_relative_dir}")
+ endif()
+ list(APPEND _atframework_cmake_toolset_relative_rpath
+ "${_atframework_cmake_toolset_origin}${_atframework_cmake_toolset_relative_dir}")
+ if(CMAKE_CONFIGURATION_TYPES)
+ list(APPEND _atframework_cmake_toolset_relative_rpath
+ "${_atframework_cmake_toolset_origin}/..${_atframework_cmake_toolset_relative_dir}")
+ endif()
+ endforeach()
+ endforeach()
+ list(REMOVE_DUPLICATES _atframework_cmake_toolset_relative_rpath)
+ set(_atframework_cmake_toolset_rpath ${_atframework_cmake_toolset_relative_rpath})
endif()
-else()
- if(ANDROID OR CMAKE_SYSTEM_NAME MATCHES "Linux|Android")
- add_compiler_flags_to_inherit_var_unique(CMAKE_EXE_LINKER_FLAGS "-Wl,-rpath-link,${CMAKE_BUILD_RPATH}")
- add_compiler_flags_to_inherit_var_unique(CMAKE_MODULE_LINKER_FLAGS "-Wl,-rpath-link,${CMAKE_BUILD_RPATH}")
- add_compiler_flags_to_inherit_var_unique(CMAKE_SHARED_LINKER_FLAGS "-Wl,-rpath-link,${CMAKE_BUILD_RPATH}")
+ set(${_atframework_cmake_toolset_out_var}
+ ${_atframework_cmake_toolset_rpath}
+ PARENT_SCOPE)
+ set(${_atframework_cmake_toolset_absolute_out_var}
+ ${_atframework_cmake_toolset_absolute_rpath}
+ PARENT_SCOPE)
+endfunction()
+
+_atframework_cmake_toolset_make_build_rpath(
+ _atframework_cmake_toolset_target_runtime_library_dirs
+ _atframework_cmake_toolset_target_absolute_runtime_library_dirs "${PROJECT_THIRD_PARTY_INSTALL_DIR}"
+ "${_atframework_cmake_toolset_target_rpath_origin}")
+_atframework_cmake_toolset_make_build_rpath(
+ _atframework_cmake_toolset_host_runtime_library_dirs _atframework_cmake_toolset_host_absolute_runtime_library_dirs
+ "${PROJECT_THIRD_PARTY_HOST_INSTALL_DIR}" "${_atframework_cmake_toolset_host_rpath_origin}")
+
+if(NOT DEFINED CMAKE_BUILD_RPATH_USE_ORIGIN)
+ if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_USE_ABSOLUTE_RPATH)
+ set(CMAKE_BUILD_RPATH_USE_ORIGIN FALSE)
+ else()
+ set(CMAKE_BUILD_RPATH_USE_ORIGIN TRUE)
endif()
endif()
+if(NOT DEFINED CMAKE_HOST_BUILD_RPATH_USE_ORIGIN)
+ if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_USE_ABSOLUTE_RPATH)
+ set(CMAKE_HOST_BUILD_RPATH_USE_ORIGIN FALSE)
+ else()
+ set(CMAKE_HOST_BUILD_RPATH_USE_ORIGIN TRUE)
+ endif()
+endif()
+if(NOT DEFINED COMPILER_OPTION_INHERIT_CMAKE_BUILD_RPATH_USE_ORIGIN)
+ set(COMPILER_OPTION_INHERIT_CMAKE_BUILD_RPATH_USE_ORIGIN "${CMAKE_BUILD_RPATH_USE_ORIGIN}")
+endif()
+if(NOT DEFINED COMPILER_OPTION_INHERIT_CMAKE_HOST_BUILD_RPATH_USE_ORIGIN)
+ set(COMPILER_OPTION_INHERIT_CMAKE_HOST_BUILD_RPATH_USE_ORIGIN "${CMAKE_HOST_BUILD_RPATH_USE_ORIGIN}")
+endif()
-if(NOT EXISTS ${PROJECT_THIRD_PARTY_HOST_INSTALL_DIR})
- file(MAKE_DIRECTORY ${PROJECT_THIRD_PARTY_HOST_INSTALL_DIR})
+if(NOT DEFINED COMPILER_OPTION_INHERIT_CMAKE_BUILD_RPATH)
+ set(COMPILER_OPTION_INHERIT_CMAKE_BUILD_RPATH "${CMAKE_BUILD_RPATH}")
+endif()
+if(NOT DEFINED COMPILER_OPTION_INHERIT_CMAKE_HOST_BUILD_RPATH)
+ set(COMPILER_OPTION_INHERIT_CMAKE_HOST_BUILD_RPATH "${CMAKE_HOST_BUILD_RPATH}")
endif()
+foreach(_atframework_cmake_toolset_rpath_var CMAKE_BUILD_RPATH COMPILER_OPTION_INHERIT_CMAKE_BUILD_RPATH)
+ list(PREPEND ${_atframework_cmake_toolset_rpath_var} ${_atframework_cmake_toolset_target_runtime_library_dirs})
+ list(REMOVE_DUPLICATES ${_atframework_cmake_toolset_rpath_var})
+endforeach()
+foreach(_atframework_cmake_toolset_rpath_var CMAKE_HOST_BUILD_RPATH COMPILER_OPTION_INHERIT_CMAKE_HOST_BUILD_RPATH)
+ list(PREPEND ${_atframework_cmake_toolset_rpath_var} ${_atframework_cmake_toolset_host_runtime_library_dirs})
+ list(REMOVE_DUPLICATES ${_atframework_cmake_toolset_rpath_var})
+endforeach()
+unset(_atframework_cmake_toolset_rpath_var)
+
+# GNU-compatible ELF linkers use rpath-link only while resolving indirect shared-library dependencies. Runtime lookup is
+# provided by CMAKE_BUILD_RPATH above. Use one option per directory so Windows drive letters in cross builds are not
+# mistaken for path-list separators.
+if((ANDROID OR CMAKE_SYSTEM_NAME MATCHES "Linux|Android") AND NOT MSVC)
+ foreach(_atframework_cmake_toolset_runtime_library_dir IN
+ LISTS _atframework_cmake_toolset_target_absolute_runtime_library_dirs)
+ set(_atframework_cmake_toolset_rpath_link_option
+ "-Wl,-rpath-link,\"${_atframework_cmake_toolset_runtime_library_dir}\"")
+ foreach(_atframework_cmake_toolset_linker_type EXE MODULE SHARED)
+ add_compiler_flags_to_inherit_var_unique(CMAKE_${_atframework_cmake_toolset_linker_type}_LINKER_FLAGS
+ "${_atframework_cmake_toolset_rpath_link_option}")
+ endforeach()
+ endforeach()
+endif()
+if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
+ foreach(_atframework_cmake_toolset_runtime_library_dir IN
+ LISTS _atframework_cmake_toolset_host_absolute_runtime_library_dirs)
+ set(_atframework_cmake_toolset_rpath_link_option
+ "-Wl,-rpath-link,\"${_atframework_cmake_toolset_runtime_library_dir}\"")
+ foreach(_atframework_cmake_toolset_linker_type EXE MODULE SHARED)
+ add_compiler_flags_to_inherit_var_unique(CMAKE_HOST_${_atframework_cmake_toolset_linker_type}_LINKER_FLAGS
+ "${_atframework_cmake_toolset_rpath_link_option}")
+ endforeach()
+ endforeach()
+endif()
+unset(_atframework_cmake_toolset_linker_type)
+unset(_atframework_cmake_toolset_rpath_link_option)
+unset(_atframework_cmake_toolset_runtime_library_dir)
+unset(_atframework_cmake_toolset_target_runtime_library_dirs)
+unset(_atframework_cmake_toolset_host_runtime_library_dirs)
+unset(_atframework_cmake_toolset_target_absolute_runtime_library_dirs)
+unset(_atframework_cmake_toolset_host_absolute_runtime_library_dirs)
+unset(_atframework_cmake_toolset_target_rpath_origin)
+unset(_atframework_cmake_toolset_host_rpath_origin)
if(NOT EXISTS ${PROJECT_THIRD_PARTY_INSTALL_CMAKE_MODULE_DIR})
file(MAKE_DIRECTORY ${PROJECT_THIRD_PARTY_INSTALL_CMAKE_MODULE_DIR})
@@ -546,37 +670,11 @@ project_third_party_print_find_information()
mark_as_advanced(PROJECT_THIRD_PARTY_PACKAGE_DIR PROJECT_THIRD_PARTY_INSTALL_DIR)
-# Some libraries maybe has wrong RPATH
-string(FIND "$ENV{PATH}" "\;" PROJECT_THIRD_PARTY_TEST_PATH_SEP)
-if(PROJECT_THIRD_PARTY_TEST_PATH_SEP GREATER_EQUAL 0)
- set(PROJECT_THIRD_PARTY_PATH_SEPARATOR ";")
-else()
- set(PROJECT_THIRD_PARTY_PATH_SEPARATOR ":")
-endif()
-unset(PROJECT_THIRD_PARTY_TEST_PATH_SEP)
-
-# reset LD_LIBRARY_PATH may lead to conflict when external tools depends on our ports when ours are built with sanitizer
-if(NOT ((CMAKE_CROSSCOMPILING AND PROJECT_COMPILER_OPTIONS_HOST_USE_SANITIZER)
- OR PROJECT_COMPILER_OPTIONS_TARGET_USE_SANITIZER))
- if(UNIX
- OR MINGW
- OR MSYS)
- if(DEFINED ENV{LD_LIBRARY_PATH})
- set(ENV{LD_LIBRARY_PATH}
- "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib64${PROJECT_THIRD_PARTY_PATH_SEPARATOR}${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib${PROJECT_THIRD_PARTY_PATH_SEPARATOR}$ENV{LD_LIBRARY_PATH}"
- )
- else()
- set(ENV{LD_LIBRARY_PATH}
- "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib64${PROJECT_THIRD_PARTY_PATH_SEPARATOR}${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib"
- )
- endif()
- endif()
-endif()
-
-# Can not append PATH when corssing compiling, CMAKE_USE_SYSTEM_ENVIRONMENT_PATH will cause a invalid arch searching.
+# Do not append PATH when cross compiling. CMAKE_USE_SYSTEM_ENVIRONMENT_PATH may otherwise find target-architecture
+# tools while configuring host tools.
if(NOT CMAKE_CROSSCOMPILING)
set(ENV{PATH}
- "${PROJECT_THIRD_PARTY_HOST_INSTALL_DIR}/bin${PROJECT_THIRD_PARTY_PATH_SEPARATOR}${PROJECT_THIRD_PARTY_HOST_INSTALL_DIR}/libexec${PROJECT_THIRD_PARTY_PATH_SEPARATOR}$ENV{PATH}"
+ "${PROJECT_THIRD_PARTY_HOST_INSTALL_DIR}/bin${ATFRAMEWORK_CMAKE_TOOLSET_HOST_PATH_SEPARATOR}${PROJECT_THIRD_PARTY_HOST_INSTALL_DIR}/libexec${ATFRAMEWORK_CMAKE_TOOLSET_HOST_PATH_SEPARATOR}$ENV{PATH}"
)
endif()
diff --git a/ports/ssl/libsodium/libsodium-msvc.cmake b/ports/ssl/libsodium/libsodium-msvc.cmake
new file mode 100644
index 00000000..c1569afd
--- /dev/null
+++ b/ports/ssl/libsodium/libsodium-msvc.cmake
@@ -0,0 +1,378 @@
+include_guard(DIRECTORY)
+
+function(project_third_party_libsodium_msvc_import OUTPUT_LOCAL_FOUND)
+ set(_libsodium_debug_lib "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib/libsodium-dbg.lib")
+ set(_libsodium_release_lib "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib/libsodium.lib")
+ set(_libsodium_debug_dll "${PROJECT_THIRD_PARTY_INSTALL_DIR}/bin/libsodium-dbg.dll")
+ set(_libsodium_release_dll "${PROJECT_THIRD_PARTY_INSTALL_DIR}/bin/libsodium.dll")
+
+ set(_libsodium_local_found FALSE)
+ foreach(_libsodium_artifact
+ "${_libsodium_debug_lib}" "${_libsodium_release_lib}" "${_libsodium_debug_dll}" "${_libsodium_release_dll}"
+ "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib/sodium-dbg.lib" "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib/sodium.lib")
+ if(EXISTS "${_libsodium_artifact}")
+ set(_libsodium_local_found TRUE)
+ break()
+ endif()
+ endforeach()
+ set(${OUTPUT_LOCAL_FOUND}
+ "${_libsodium_local_found}"
+ PARENT_SCOPE)
+
+ if(TARGET sodium
+ OR TARGET unofficial-sodium::sodium
+ OR TARGET libsodium::libsodium
+ OR NOT EXISTS "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium.h"
+ OR NOT EXISTS "${_libsodium_debug_lib}"
+ OR NOT EXISTS "${_libsodium_release_lib}")
+ return()
+ endif()
+
+ if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_USE_SHARED)
+ if(NOT EXISTS "${_libsodium_debug_dll}" OR NOT EXISTS "${_libsodium_release_dll}")
+ return()
+ endif()
+ add_library(libsodium::libsodium SHARED IMPORTED)
+ set_target_properties(
+ libsodium::libsodium
+ PROPERTIES IMPORTED_IMPLIB "${_libsodium_release_lib}"
+ IMPORTED_IMPLIB_DEBUG "${_libsodium_debug_lib}"
+ IMPORTED_IMPLIB_RELEASE "${_libsodium_release_lib}"
+ IMPORTED_LOCATION "${_libsodium_release_dll}"
+ IMPORTED_LOCATION_DEBUG "${_libsodium_debug_dll}"
+ IMPORTED_LOCATION_RELEASE "${_libsodium_release_dll}")
+ else()
+ if(EXISTS "${_libsodium_debug_dll}" OR EXISTS "${_libsodium_release_dll}")
+ return()
+ endif()
+ add_library(libsodium::libsodium STATIC IMPORTED)
+ set_target_properties(
+ libsodium::libsodium
+ PROPERTIES IMPORTED_LOCATION "${_libsodium_release_lib}"
+ IMPORTED_LOCATION_DEBUG "${_libsodium_debug_lib}"
+ IMPORTED_LOCATION_RELEASE "${_libsodium_release_lib}"
+ INTERFACE_COMPILE_DEFINITIONS "SODIUM_STATIC=1")
+ endif()
+
+ set_target_properties(
+ libsodium::libsodium
+ PROPERTIES IMPORTED_CONFIGURATIONS "Debug;Release"
+ INTERFACE_INCLUDE_DIRECTORIES "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include"
+ INTERFACE_LINK_LIBRARIES "advapi32"
+ MAP_IMPORTED_CONFIG_MINSIZEREL Release
+ MAP_IMPORTED_CONFIG_RELWITHDEBINFO Release)
+endfunction()
+
+function(project_third_party_libsodium_msvc_select_project OUTPUT_PROJECT OUTPUT_VERSION)
+ if(MSVC_TOOLSET_VERSION)
+ if(MSVC_TOOLSET_VERSION GREATER_EQUAL 145)
+ set(_libsodium_requested_vs 2026)
+ elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 144)
+ set(_libsodium_requested_vs 2025)
+ elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 143)
+ set(_libsodium_requested_vs 2022)
+ elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 142)
+ set(_libsodium_requested_vs 2019)
+ elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 141)
+ set(_libsodium_requested_vs 2017)
+ elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 140)
+ set(_libsodium_requested_vs 2015)
+ elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 120)
+ set(_libsodium_requested_vs 2013)
+ elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 110)
+ set(_libsodium_requested_vs 2012)
+ else()
+ set(_libsodium_requested_vs 2010)
+ endif()
+ elseif(MSVC_VERSION)
+ if(MSVC_VERSION GREATER_EQUAL 1950)
+ set(_libsodium_requested_vs 2026)
+ elseif(MSVC_VERSION GREATER_EQUAL 1930)
+ set(_libsodium_requested_vs 2022)
+ elseif(MSVC_VERSION GREATER_EQUAL 1920)
+ set(_libsodium_requested_vs 2019)
+ elseif(MSVC_VERSION GREATER_EQUAL 1910)
+ set(_libsodium_requested_vs 2017)
+ elseif(MSVC_VERSION GREATER_EQUAL 1900)
+ set(_libsodium_requested_vs 2015)
+ elseif(MSVC_VERSION GREATER_EQUAL 1800)
+ set(_libsodium_requested_vs 2013)
+ elseif(MSVC_VERSION GREATER_EQUAL 1700)
+ set(_libsodium_requested_vs 2012)
+ else()
+ set(_libsodium_requested_vs 2010)
+ endif()
+ elseif(CMAKE_GENERATOR MATCHES "^Visual Studio\\s*[0-9]+\\s*([0-9]+)$")
+ set(_libsodium_requested_vs "${CMAKE_MATCH_1}")
+ else()
+ message(FATAL_ERROR "Dependency(${PROJECT_NAME}): Unable to detect the MSVC toolset for libsodium")
+ endif()
+
+ foreach(
+ _libsodium_vs_version
+ 2026
+ 2022
+ 2019
+ 2017
+ 2015
+ 2013
+ 2012
+ 2010)
+ if(_libsodium_vs_version GREATER _libsodium_requested_vs)
+ continue()
+ endif()
+ set(_libsodium_vcxproj
+ "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/builds/msvc/vs${_libsodium_vs_version}/libsodium/libsodium.vcxproj"
+ )
+ if(EXISTS "${_libsodium_vcxproj}")
+ set(${OUTPUT_PROJECT}
+ "${_libsodium_vcxproj}"
+ PARENT_SCOPE)
+ set(${OUTPUT_VERSION}
+ "${_libsodium_vs_version}"
+ PARENT_SCOPE)
+ return()
+ endif()
+ endforeach()
+
+ message(
+ FATAL_ERROR
+ "Dependency(${PROJECT_NAME}): No compatible libsodium MSVC project found for Visual Studio ${_libsodium_requested_vs}"
+ )
+endfunction()
+
+function(project_third_party_libsodium_msvc_find_msbuild OUTPUT_COMMAND)
+ if(CMAKE_VS_MSBUILD_COMMAND AND EXISTS "${CMAKE_VS_MSBUILD_COMMAND}")
+ set(${OUTPUT_COMMAND}
+ "${CMAKE_VS_MSBUILD_COMMAND}"
+ PARENT_SCOPE)
+ return()
+ endif()
+
+ unset(_libsodium_msbuild CACHE)
+ find_program(_libsodium_msbuild NAMES MSBuild.exe msbuild)
+ if(NOT _libsodium_msbuild)
+ unset(_libsodium_vswhere CACHE)
+ find_program(
+ _libsodium_vswhere
+ NAMES vswhere.exe
+ HINTS "$ENV{ProgramFiles\(x86\)}/Microsoft Visual Studio/Installer"
+ "$ENV{ProgramFiles}/Microsoft Visual Studio/Installer"
+ NO_DEFAULT_PATH)
+ if(_libsodium_vswhere)
+ execute_process(
+ COMMAND "${_libsodium_vswhere}" -latest -products "*" -requires Microsoft.Component.MSBuild -find
+ "MSBuild/**/Bin/MSBuild.exe"
+ OUTPUT_VARIABLE _libsodium_msbuild
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(_libsodium_msbuild)
+ string(REGEX REPLACE "[\r\n]+" ";" _libsodium_msbuild "${_libsodium_msbuild}")
+ list(GET _libsodium_msbuild 0 _libsodium_msbuild)
+ endif()
+ endif()
+ unset(_libsodium_vswhere CACHE)
+ endif()
+ set(_libsodium_msbuild_command "${_libsodium_msbuild}")
+ unset(_libsodium_msbuild CACHE)
+
+ if(NOT EXISTS "${_libsodium_msbuild_command}")
+ message(FATAL_ERROR "Dependency(${PROJECT_NAME}): MSBuild is required to build libsodium on MSVC")
+ endif()
+ set(${OUTPUT_COMMAND}
+ "${_libsodium_msbuild_command}"
+ PARENT_SCOPE)
+endfunction()
+
+function(project_third_party_libsodium_msvc_generate_version_header)
+ set(_libsodium_version_header_in
+ "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/version.h.in")
+ if(NOT EXISTS "${_libsodium_version_header_in}")
+ return()
+ endif()
+
+ string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" _libsodium_version_match
+ "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION}")
+ if(_libsodium_version_match)
+ set(VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
+ else()
+ set(VERSION "1.0.21")
+ endif()
+
+ set(SODIUM_LIBRARY_VERSION_MAJOR "26")
+ set(SODIUM_LIBRARY_VERSION_MINOR "3")
+ set(_libsodium_configure_ac "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/configure.ac")
+ if(EXISTS "${_libsodium_configure_ac}")
+ file(STRINGS "${_libsodium_configure_ac}" _libsodium_library_major REGEX "^SODIUM_LIBRARY_VERSION_MAJOR=[0-9]+")
+ file(STRINGS "${_libsodium_configure_ac}" _libsodium_library_minor REGEX "^SODIUM_LIBRARY_VERSION_MINOR=[0-9]+")
+ if(_libsodium_library_major)
+ string(REGEX REPLACE ".*=([0-9]+).*" "\\1" SODIUM_LIBRARY_VERSION_MAJOR "${_libsodium_library_major}")
+ endif()
+ if(_libsodium_library_minor)
+ string(REGEX REPLACE ".*=([0-9]+).*" "\\1" SODIUM_LIBRARY_VERSION_MINOR "${_libsodium_library_minor}")
+ endif()
+ endif()
+ set(SODIUM_LIBRARY_MINIMAL_DEF "")
+
+ configure_file(
+ "${_libsodium_version_header_in}"
+ "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/version.h" @ONLY
+ NEWLINE_STYLE LF)
+endfunction()
+
+function(project_third_party_libsodium_msvc_build)
+ set(_libsodium_git_args
+ URL "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_GIT_URL}" REPO_DIRECTORY
+ "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}" TAG
+ "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION}")
+ if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_PATCH_FILE
+ AND EXISTS "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_PATCH_FILE}")
+ list(APPEND _libsodium_git_args PATCH_FILES "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_PATCH_FILE}")
+ endif()
+ project_git_clone_repository(${_libsodium_git_args})
+
+ if(NOT EXISTS "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}")
+ message(WARNING "Dependency(${PROJECT_NAME}): libsodium source directory is unavailable")
+ return()
+ endif()
+ file(MAKE_DIRECTORY "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}")
+
+ if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_USE_SHARED)
+ set(_libsodium_linkage DLL)
+ else()
+ set(_libsodium_linkage LIB)
+ endif()
+
+ if(CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]64$")
+ set(_libsodium_platform ARM64)
+ elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]$")
+ set(_libsodium_platform ARM)
+ elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(_libsodium_platform x64)
+ else()
+ set(_libsodium_platform Win32)
+ endif()
+
+ project_third_party_libsodium_msvc_select_project(_libsodium_vcxproj _libsodium_vs_version)
+ project_third_party_libsodium_msvc_find_msbuild(_libsodium_msbuild)
+ message(STATUS "Dependency(${PROJECT_NAME}): Build libsodium with Visual Studio ${_libsodium_vs_version} project")
+
+ if(DEFINED ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSVC_STATIC_RUNTIME)
+ set(_libsodium_static_runtime "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSVC_STATIC_RUNTIME}")
+ elseif(VCPKG_CRT_LINKAGE STREQUAL "static")
+ set(_libsodium_static_runtime TRUE)
+ elseif(CMAKE_MSVC_RUNTIME_LIBRARY AND NOT CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "DLL")
+ set(_libsodium_static_runtime TRUE)
+ else()
+ set(_libsodium_static_runtime FALSE)
+ endif()
+ if(_libsodium_static_runtime)
+ set(_libsodium_debug_runtime MultiThreadedDebug)
+ set(_libsodium_release_runtime MultiThreaded)
+ else()
+ set(_libsodium_debug_runtime MultiThreadedDebugDLL)
+ set(_libsodium_release_runtime MultiThreadedDLL)
+ endif()
+
+ set(_libsodium_runtime_props "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/msvc-runtime.props")
+ set(_libsodium_runtime_props_content
+ [=[
+
+
+
+ @_libsodium_debug_runtime@
+ @_libsodium_release_runtime@
+
+
+
+]=])
+ string(CONFIGURE "${_libsodium_runtime_props_content}" _libsodium_runtime_props_content @ONLY)
+ if(EXISTS "${_libsodium_runtime_props}")
+ file(READ "${_libsodium_runtime_props}" _libsodium_runtime_props_old_content)
+ endif()
+ if(NOT _libsodium_runtime_props_content STREQUAL _libsodium_runtime_props_old_content)
+ file(WRITE "${_libsodium_runtime_props}" "${_libsodium_runtime_props_content}")
+ endif()
+
+ project_third_party_libsodium_msvc_generate_version_header()
+
+ set(_libsodium_msbuild_common_args "${_libsodium_vcxproj}" "/m" "/v:minimal" "/p:Platform=${_libsodium_platform}"
+ "/p:ForceImportBeforeCppTargets=${_libsodium_runtime_props}")
+ if(CMAKE_VS_PLATFORM_TOOLSET)
+ list(APPEND _libsodium_msbuild_common_args "/p:PlatformToolset=${CMAKE_VS_PLATFORM_TOOLSET}")
+ elseif(MSVC_TOOLSET_VERSION)
+ list(APPEND _libsodium_msbuild_common_args "/p:PlatformToolset=v${MSVC_TOOLSET_VERSION}")
+ endif()
+
+ foreach(_libsodium_build_type Debug Release)
+ if(_libsodium_build_type STREQUAL "Debug")
+ set(_libsodium_target_name "libsodium-dbg")
+ else()
+ set(_libsodium_target_name "libsodium")
+ endif()
+ set(_libsodium_output_dir
+ "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/msbuild/${_libsodium_build_type}")
+
+ execute_process(
+ COMMAND
+ "${_libsodium_msbuild}" ${_libsodium_msbuild_common_args}
+ "/p:Configuration=${_libsodium_build_type}${_libsodium_linkage}" "/p:TargetName=${_libsodium_target_name}"
+ "/p:OutDir=${_libsodium_output_dir}/" "/p:IntDir=${_libsodium_output_dir}/obj/"
+ WORKING_DIRECTORY "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}"
+ ${ATFRAMEWORK_CMAKE_TOOLSET_EXECUTE_PROCESS_OUTPUT_OPTIONS}
+ RESULT_VARIABLE _libsodium_build_result)
+ if(NOT _libsodium_build_result EQUAL 0)
+ message(WARNING "Dependency(${PROJECT_NAME}): libsodium ${_libsodium_build_type} MSBuild failed")
+ return()
+ endif()
+ endforeach()
+
+ set(_libsodium_debug_output "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/msbuild/Debug")
+ set(_libsodium_release_output "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/msbuild/Release")
+ set(_libsodium_debug_lib "${_libsodium_debug_output}/libsodium-dbg.lib")
+ set(_libsodium_release_lib "${_libsodium_release_output}/libsodium.lib")
+ if(NOT EXISTS "${_libsodium_debug_lib}" OR NOT EXISTS "${_libsodium_release_lib}")
+ message(WARNING "Dependency(${PROJECT_NAME}): libsodium MSBuild did not produce the expected libraries")
+ return()
+ endif()
+ if(_libsodium_linkage STREQUAL "DLL")
+ set(_libsodium_debug_dll "${_libsodium_debug_output}/libsodium-dbg.dll")
+ set(_libsodium_release_dll "${_libsodium_release_output}/libsodium.dll")
+ if(NOT EXISTS "${_libsodium_debug_dll}" OR NOT EXISTS "${_libsodium_release_dll}")
+ message(WARNING "Dependency(${PROJECT_NAME}): libsodium MSBuild did not produce the expected DLLs")
+ return()
+ endif()
+ endif()
+
+ file(INSTALL "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium.h"
+ DESTINATION "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include")
+ file(INSTALL "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium"
+ DESTINATION "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include")
+ file(REMOVE "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/Makefile.am"
+ "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium/version.h.in")
+
+ file(
+ REMOVE
+ "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib/libsodium-dbg.lib"
+ "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib/libsodium.lib"
+ "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib/sodium-dbg.lib"
+ "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib/sodium.lib"
+ "${PROJECT_THIRD_PARTY_INSTALL_DIR}/bin/libsodium-dbg.dll"
+ "${PROJECT_THIRD_PARTY_INSTALL_DIR}/bin/libsodium.dll"
+ "${PROJECT_THIRD_PARTY_INSTALL_DIR}/bin/libsodium-dbg.pdb"
+ "${PROJECT_THIRD_PARTY_INSTALL_DIR}/bin/libsodium.pdb")
+ file(INSTALL "${_libsodium_debug_lib}" "${_libsodium_release_lib}"
+ DESTINATION "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib")
+
+ if(_libsodium_linkage STREQUAL "DLL")
+ file(INSTALL "${_libsodium_debug_dll}" "${_libsodium_release_dll}"
+ DESTINATION "${PROJECT_THIRD_PARTY_INSTALL_DIR}/bin")
+ elseif(EXISTS "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium/export.h")
+ file(READ "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium/export.h" _libsodium_export_h)
+ string(REPLACE "#ifdef SODIUM_STATIC" "#if 1" _libsodium_patched_export_h "${_libsodium_export_h}")
+ if(NOT _libsodium_export_h STREQUAL _libsodium_patched_export_h)
+ file(WRITE "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium/export.h" "${_libsodium_patched_export_h}")
+ endif()
+ endif()
+
+ project_third_party_libsodium_msvc_import(_libsodium_local_found)
+endfunction()
diff --git a/ports/ssl/libsodium/libsodium.cmake b/ports/ssl/libsodium/libsodium.cmake
index b6567df1..5d893875 100644
--- a/ports/ssl/libsodium/libsodium.cmake
+++ b/ports/ssl/libsodium/libsodium.cmake
@@ -19,6 +19,21 @@ function(PROJECT_THIRD_PARTY_LIBSODIUM_IMPORT)
endif()
endfunction()
+project_third_party_check_build_shared_lib("libsodium" "" ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_USE_SHARED)
+
+set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LOCAL_INSTALL_FOUND FALSE)
+if(MSVC AND NOT MINGW)
+ include("${CMAKE_CURRENT_LIST_DIR}/libsodium-msvc.cmake")
+ if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_USE_SHARED)
+ set(sodium_USE_STATIC_LIBS FALSE)
+ else()
+ set(sodium_USE_STATIC_LIBS TRUE)
+ endif()
+ if(NOT VCPKG_TOOLCHAIN)
+ project_third_party_libsodium_msvc_import(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LOCAL_INSTALL_FOUND)
+ endif()
+endif()
+
if(NOT TARGET sodium
AND NOT TARGET unofficial-sodium::sodium
AND NOT TARGET libsodium::libsodium)
@@ -27,7 +42,7 @@ if(NOT TARGET sodium
if(NOT TARGET unofficial-sodium::sodium)
find_package(sodium QUIET)
endif()
- else()
+ elseif(NOT ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LOCAL_INSTALL_FOUND)
find_package(sodium QUIET)
if(NOT TARGET sodium)
find_package(libsodium QUIET CONFIG)
@@ -64,321 +79,9 @@ if(NOT TARGET sodium
set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR
"${PROJECT_THIRD_PARTY_PACKAGE_DIR}/${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SRC_DIRECTORY_NAME}")
- project_third_party_check_build_shared_lib("libsodium" "" ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_USE_SHARED)
-
# libsodium does not ship a CMakeLists.txt. On MSVC we build native vcxproj via MSBuild; on Unix we use autotools.
if(MSVC AND NOT MINGW)
- # ============ MSVC: MSBuild with vcxproj ============
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_GIT_ARGS
- URL "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_GIT_URL}" REPO_DIRECTORY
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}" TAG
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION}")
- if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_PATCH_FILE
- AND EXISTS "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_PATCH_FILE}")
- list(APPEND ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_GIT_ARGS PATCH_FILES
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_PATCH_FILE}")
- endif()
- project_git_clone_repository(${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_GIT_ARGS})
- unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_GIT_ARGS)
-
- if(EXISTS "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}")
- if(NOT EXISTS "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}")
- file(MAKE_DIRECTORY "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}")
- endif()
-
- # Determine linkage configuration
- if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_USE_SHARED)
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_LINKAGE "DLL")
- else()
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_LINKAGE "LIB")
- endif()
-
- # Determine platform
- if(CMAKE_SIZEOF_VOID_P EQUAL 8)
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_PLATFORM "x64")
- else()
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_PLATFORM "Win32")
- endif()
- if(CMAKE_GENERATOR_PLATFORM)
- string(TOUPPER "${CMAKE_GENERATOR_PLATFORM}" ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_GEN_PLATFORM_UC)
- if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_GEN_PLATFORM_UC STREQUAL "ARM64")
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_PLATFORM "ARM64")
- elseif(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_GEN_PLATFORM_UC STREQUAL "ARM")
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_PLATFORM "ARM")
- endif()
- unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_GEN_PLATFORM_UC)
- endif()
-
- # Select vcxproj path - prefer vs2022
- if(CMAKE_GENERATOR MATCHES "^Visual Studio\\s*([0-9]+)\\s*([0-9]+)$")
- # By Generator
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VS_START_VERSION ${CMAKE_MATCH_2})
- elseif(MSVC_TOOLSET_VERSION)
- # By toolset
- if(MSVC_TOOLSET_VERSION GREATER_EQUAL "144")
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VS_START_VERSION 2026)
- elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL "143")
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VS_START_VERSION 2022)
- elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL "142")
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VS_START_VERSION 2019)
- elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL "141")
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VS_START_VERSION 2017)
- else()
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VS_START_VERSION 2022)
- endif()
- else()
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VS_START_VERSION 2022)
- endif()
-
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VCXPROJ_SUBPATH
- "builds/msvc/vs2022/libsodium/libsodium.vcxproj")
- foreach(_test_msvc_toolset 2026 2022 2019 2017)
- if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VS_START_VERSION LESS _test_msvc_toolset)
- continue()
- endif()
- if(EXISTS
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/builds/msvc/vs${_test_msvc_toolset}/libsodium/libsodium.vcxproj"
- )
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VCXPROJ_SUBPATH
- "builds/msvc/vs${_test_msvc_toolset}/libsodium/libsodium.vcxproj")
- break()
- endif()
- endforeach()
-
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_CONFIG
- "Release${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_LINKAGE}")
-
- # Generate version.h from version.h.in (libsodium requires this before build)
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_IN
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/version.h.in")
- if(EXISTS "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_IN}")
- file(READ "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_IN}"
- ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT)
- # Extract version numbers from ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION e.g. "1.0.21-RELEASE" →
- # MAJOR=1, MINOR=0, PATCH=21
- string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)"
- ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_MATCH
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION}")
- if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_MATCH)
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_MAJOR "${CMAKE_MATCH_1}")
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_MINOR "${CMAKE_MATCH_2}")
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_PATCH "${CMAKE_MATCH_3}")
- else()
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_MAJOR "1")
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_MINOR "0")
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_PATCH "21")
- endif()
-
- # Extract SODIUM_LIBRARY_VERSION_MAJOR/MINOR from configure.ac
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_AC
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/configure.ac")
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MAJOR "26")
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MINOR "3")
- if(EXISTS "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_AC}")
- file(READ "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_AC}"
- ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_AC_CONTENT)
- string(REGEX MATCH "SODIUM_LIBRARY_VERSION_MAJOR=([0-9]+)"
- ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MAJOR_MATCH
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_AC_CONTENT}")
- if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MAJOR_MATCH)
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MAJOR "${CMAKE_MATCH_1}")
- endif()
- string(REGEX MATCH "SODIUM_LIBRARY_VERSION_MINOR=([0-9]+)"
- ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MINOR_MATCH
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_AC_CONTENT}")
- if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MINOR_MATCH)
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MINOR "${CMAKE_MATCH_1}")
- endif()
- unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_AC_CONTENT)
- endif()
-
- string(
- REPLACE
- "@VERSION@"
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_MAJOR}.${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_MINOR}.${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_PATCH}"
- ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT}")
- string(
- REPLACE "@SODIUM_LIBRARY_VERSION_MAJOR@" "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MAJOR}"
- ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT}")
- string(
- REPLACE "@SODIUM_LIBRARY_VERSION_MINOR@" "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MINOR}"
- ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT}")
- string(REPLACE "@SODIUM_LIBRARY_MINIMAL_DEF@" ""
- ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT}")
- file(WRITE
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/version.h"
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT}")
- unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT)
- endif()
- unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_IN)
-
- # Generate build script
- file(WRITE "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.ps1"
- "\$PSDefaultParameterValues['*:Encoding'] = 'UTF-8'${PROJECT_THIRD_PARTY_BUILDTOOLS_BASH_EOL}"
- "\$OutputEncoding = [System.Text.UTF8Encoding]::new()${PROJECT_THIRD_PARTY_BUILDTOOLS_BASH_EOL}")
- file(WRITE "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.bat"
- "@echo off${PROJECT_THIRD_PARTY_BUILDTOOLS_EOL}" "chcp 65001${PROJECT_THIRD_PARTY_BUILDTOOLS_EOL}")
- file(APPEND "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.bat"
- "set PATH=%PATH%${PROJECT_THIRD_PARTY_BUILDTOOLS_EOL}")
-
- project_third_party_generate_load_env_powershell(
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.ps1")
-
- project_make_executable("${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.ps1")
- project_make_executable("${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.bat")
-
- # MSBuild command
- project_expand_list_for_command_line_to_file(
- BAT
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.bat"
- msbuild
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VCXPROJ_SUBPATH}"
- "/m"
- "/v:minimal"
- "/p:Configuration=${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_CONFIG}"
- "/p:Platform=${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_PLATFORM}")
- project_expand_list_for_command_line_to_file(
- PWSH
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.ps1"
- "&"
- msbuild
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VCXPROJ_SUBPATH}"
- "/m"
- "/v:minimal"
- "/p:Configuration=${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_CONFIG}"
- "/p:Platform=${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_PLATFORM}")
-
- # Run build
- if(ATFRAMEWORK_CMAKE_TOOLSET_PWSH)
- execute_process(
- COMMAND
- "${ATFRAMEWORK_CMAKE_TOOLSET_PWSH}" "-NoProfile" "-InputFormat" "None" "-ExecutionPolicy" "Bypass"
- "-NonInteractive" "-NoLogo" "-File"
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.ps1"
- WORKING_DIRECTORY "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}"
- ${ATFRAMEWORK_CMAKE_TOOLSET_EXECUTE_PROCESS_OUTPUT_OPTIONS}
- RESULT_VARIABLE ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_RESULT)
- else()
- execute_process(
- COMMAND "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.bat"
- WORKING_DIRECTORY "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}"
- ${ATFRAMEWORK_CMAKE_TOOLSET_EXECUTE_PROCESS_OUTPUT_OPTIONS}
- RESULT_VARIABLE ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_RESULT)
- endif()
-
- if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_RESULT EQUAL 0)
- # Install headers
- file(INSTALL "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium.h"
- DESTINATION "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include")
- file(INSTALL "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium"
- DESTINATION "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include")
- # Install generated version.h
- if(NOT EXISTS "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium/version.h")
- if(EXISTS
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/version.h")
- file(INSTALL
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/version.h"
- DESTINATION "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium")
- endif()
- endif()
- # Remove build artifacts from include
- file(REMOVE "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/Makefile.am"
- "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium/version.h.in")
-
- # Install libraries - MSBuild outputs to
- # /bin///// (see
- # builds/msvc/properties/Output.props). Select only the active linkage directory to avoid mixing static and
- # dynamic libs with the same basename into one install path.
- if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_LINKAGE STREQUAL "DLL")
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_LINKAGE_DIR "dynamic")
- else()
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_LINKAGE_DIR "static")
- endif()
-
- set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_SEARCH_ROOT
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/bin/${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_PLATFORM}/Release"
- )
- file(
- GLOB_RECURSE
- ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_LIBS
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_SEARCH_ROOT}/*/${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_LINKAGE_DIR}/*.lib"
- )
- if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_LINKAGE STREQUAL "DLL")
- file(
- GLOB_RECURSE
- ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_DLLS
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_SEARCH_ROOT}/*/${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_LINKAGE_DIR}/*.dll"
- )
- else()
- unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_DLLS)
- endif()
-
- file(REMOVE "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib/libsodium.lib"
- "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib/sodium.lib" "${PROJECT_THIRD_PARTY_INSTALL_DIR}/bin/libsodium.dll"
- "${PROJECT_THIRD_PARTY_INSTALL_DIR}/bin/libsodium.pdb")
-
- if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_LIBS)
- file(INSTALL ${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_LIBS}
- DESTINATION "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib")
- endif()
- if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_DLLS)
- file(INSTALL ${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_DLLS}
- DESTINATION "${PROJECT_THIRD_PARTY_INSTALL_DIR}/bin")
- endif()
- unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_SEARCH_ROOT)
- unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_LINKAGE_DIR)
-
- # For static builds, patch export.h
- if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_LINKAGE STREQUAL "LIB")
- if(EXISTS "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium/export.h")
- file(READ "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium/export.h"
- ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_EXPORT_H_CONTENT)
- string(REPLACE "#ifdef SODIUM_STATIC" "#if 1"
- ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_EXPORT_H_CONTENT
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_EXPORT_H_CONTENT}")
- file(WRITE "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium/export.h"
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_EXPORT_H_CONTENT}")
- unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_EXPORT_H_CONTENT)
- endif()
- endif()
-
- # Create an imported target for find_package compatibility
- if(NOT TARGET libsodium::libsodium)
- add_library(libsodium::libsodium UNKNOWN IMPORTED)
- set_target_properties(libsodium::libsodium PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
- "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include")
- # Find the installed .lib
- file(GLOB ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_FILE
- "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib/libsodium*.lib"
- "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib/sodium*.lib")
- if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_FILE)
- list(GET ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_FILE 0
- ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_FILE_FIRST)
- set_target_properties(
- libsodium::libsodium PROPERTIES IMPORTED_LOCATION
- "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_FILE_FIRST}")
- unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_FILE_FIRST)
- endif()
- unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_FILE)
- if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_LINKAGE STREQUAL "LIB")
- set_target_properties(libsodium::libsodium PROPERTIES INTERFACE_COMPILE_DEFINITIONS "SODIUM_STATIC=1")
- endif()
- set_target_properties(libsodium::libsodium PROPERTIES INTERFACE_LINK_LIBRARIES "advapi32")
- endif()
- else()
- message(WARNING "Dependency(${PROJECT_NAME}): libsodium MSBuild build failed")
- endif()
-
- unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_LINKAGE)
- unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_PLATFORM)
- unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_CONFIG)
- unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VCXPROJ_SUBPATH)
- unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_RESULT)
- endif()
+ project_third_party_libsodium_msvc_build()
else()
# ============ Unix/Linux/macOS/MinGW: autotools (configure + make) ============
set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_OPTIONS)
@@ -467,3 +170,5 @@ if(NOT TARGET sodium
else()
project_third_party_libsodium_import()
endif()
+
+unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LOCAL_INSTALL_FOUND)
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 2616069f..d2299c5a 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -22,6 +22,31 @@ project(cmake-toolset-test LANGUAGES C CXX)
enable_testing()
+if(UNIX
+ AND NOT CYGWIN
+ AND NOT CMAKE_CROSSCOMPILING)
+ set(CMAKE_TOOLSET_RPATH_TEST_GENERATOR_OPTIONS -G "${CMAKE_GENERATOR}")
+ if(CMAKE_GENERATOR_PLATFORM)
+ list(APPEND CMAKE_TOOLSET_RPATH_TEST_GENERATOR_OPTIONS -A "${CMAKE_GENERATOR_PLATFORM}")
+ endif()
+ if(CMAKE_GENERATOR_TOOLSET)
+ list(APPEND CMAKE_TOOLSET_RPATH_TEST_GENERATOR_OPTIONS -T "${CMAKE_GENERATOR_TOOLSET}")
+ endif()
+ add_test(
+ NAME cmake-toolset.rpath-relative-configure
+ COMMAND
+ "${CMAKE_COMMAND}" -S "${CMAKE_CURRENT_LIST_DIR}/rpath" -B "${CMAKE_CURRENT_BINARY_DIR}/rpath-relative"
+ ${CMAKE_TOOLSET_RPATH_TEST_GENERATOR_OPTIONS} -DCMAKE_BUILD_RPATH_USE_ORIGIN=OFF
+ -DCMAKE_HOST_BUILD_RPATH_USE_ORIGIN=OFF -DCMAKE_TOOLSET_RPATH_TEST_EXPECT_USE_ORIGIN=OFF)
+ add_test(
+ NAME cmake-toolset.rpath-absolute-configure
+ COMMAND
+ "${CMAKE_COMMAND}" -S "${CMAKE_CURRENT_LIST_DIR}/rpath" -B "${CMAKE_CURRENT_BINARY_DIR}/rpath-absolute"
+ ${CMAKE_TOOLSET_RPATH_TEST_GENERATOR_OPTIONS} -DATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_USE_ABSOLUTE_RPATH=ON
+ -DCMAKE_BUILD_RPATH_USE_ORIGIN=ON -DCMAKE_HOST_BUILD_RPATH_USE_ORIGIN=ON
+ -DCMAKE_TOOLSET_RPATH_TEST_EXPECT_USE_ORIGIN=ON)
+endif()
+
if(NOT DEFINED __COMPILER_OPTION_LOADED)
set(CMAKE_TOOLSET_TEST_IS_TOP_LEVEL TRUE)
if(MSVC)
diff --git a/test/rpath/CMakeLists.txt b/test/rpath/CMakeLists.txt
new file mode 100644
index 00000000..c5c9c45a
--- /dev/null
+++ b/test/rpath/CMakeLists.txt
@@ -0,0 +1,108 @@
+cmake_minimum_required(VERSION 3.16)
+
+project(cmake-toolset-rpath-test LANGUAGES C CXX)
+
+set(ATFRAMEWORK_CMAKE_TOOLSET_DIR "${CMAKE_CURRENT_LIST_DIR}/../..")
+set(PROJECT_THIRD_PARTY_PACKAGE_DIR "${CMAKE_CURRENT_BINARY_DIR}/packages")
+set(PROJECT_THIRD_PARTY_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/target-prefix")
+set(PROJECT_THIRD_PARTY_HOST_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/host-prefix")
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib")
+set(CMAKE_TOOLSET_RPATH_TEST_TARGET_USER_RPATH "${CMAKE_CURRENT_BINARY_DIR}/target-user-rpath")
+set(CMAKE_TOOLSET_RPATH_TEST_HOST_USER_RPATH "${CMAKE_CURRENT_BINARY_DIR}/host-user-rpath")
+set(CMAKE_BUILD_RPATH
+ "${CMAKE_TOOLSET_RPATH_TEST_TARGET_USER_RPATH}"
+ CACHE STRING "Target build RPATH fixture" FORCE)
+set(CMAKE_HOST_BUILD_RPATH
+ "${CMAKE_TOOLSET_RPATH_TEST_HOST_USER_RPATH}"
+ CACHE STRING "Host build RPATH fixture" FORCE)
+
+set(ENV{LD_LIBRARY_PATH} "cmake-toolset-rpath-sentinel")
+include("${ATFRAMEWORK_CMAKE_TOOLSET_DIR}/Import.cmake")
+
+if(APPLE)
+ set(CMAKE_TOOLSET_RPATH_TEST_TARGET_ORIGIN "@loader_path")
+elseif(UNIX)
+ set(CMAKE_TOOLSET_RPATH_TEST_TARGET_ORIGIN "$ORIGIN")
+endif()
+if(CMAKE_HOST_APPLE)
+ set(CMAKE_TOOLSET_RPATH_TEST_HOST_ORIGIN "@loader_path")
+elseif(CMAKE_HOST_UNIX)
+ set(CMAKE_TOOLSET_RPATH_TEST_HOST_ORIGIN "$ORIGIN")
+endif()
+
+set(CMAKE_TOOLSET_RPATH_TEST_TARGET_PREFIX_RPATH "${PROJECT_THIRD_PARTY_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}")
+set(CMAKE_TOOLSET_RPATH_TEST_HOST_PREFIX_RPATH "${PROJECT_THIRD_PARTY_HOST_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}")
+set(CMAKE_TOOLSET_RPATH_TEST_TARGET_EXPECTED_RPATH "${CMAKE_TOOLSET_RPATH_TEST_TARGET_PREFIX_RPATH}")
+set(CMAKE_TOOLSET_RPATH_TEST_HOST_EXPECTED_RPATH "${CMAKE_TOOLSET_RPATH_TEST_HOST_PREFIX_RPATH}")
+if(NOT ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_USE_ABSOLUTE_RPATH AND CMAKE_TOOLSET_RPATH_TEST_TARGET_ORIGIN)
+ file(RELATIVE_PATH CMAKE_TOOLSET_RPATH_TEST_RELATIVE_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
+ "${CMAKE_TOOLSET_RPATH_TEST_TARGET_PREFIX_RPATH}")
+ set(CMAKE_TOOLSET_RPATH_TEST_TARGET_EXPECTED_RPATH
+ "${CMAKE_TOOLSET_RPATH_TEST_TARGET_ORIGIN}/${CMAKE_TOOLSET_RPATH_TEST_RELATIVE_DIR}")
+endif()
+if(NOT ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_USE_ABSOLUTE_RPATH AND CMAKE_TOOLSET_RPATH_TEST_HOST_ORIGIN)
+ file(RELATIVE_PATH CMAKE_TOOLSET_RPATH_TEST_RELATIVE_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
+ "${CMAKE_TOOLSET_RPATH_TEST_HOST_PREFIX_RPATH}")
+ set(CMAKE_TOOLSET_RPATH_TEST_HOST_EXPECTED_RPATH
+ "${CMAKE_TOOLSET_RPATH_TEST_HOST_ORIGIN}/${CMAKE_TOOLSET_RPATH_TEST_RELATIVE_DIR}")
+endif()
+
+foreach(cmake_toolset_rpath_test_var CMAKE_BUILD_RPATH COMPILER_OPTION_INHERIT_CMAKE_BUILD_RPATH)
+ if(NOT CMAKE_TOOLSET_RPATH_TEST_TARGET_EXPECTED_RPATH IN_LIST ${cmake_toolset_rpath_test_var}
+ OR NOT CMAKE_TOOLSET_RPATH_TEST_TARGET_USER_RPATH IN_LIST ${cmake_toolset_rpath_test_var})
+ message(FATAL_ERROR "${cmake_toolset_rpath_test_var} does not contain the expected target RPATH entries")
+ endif()
+endforeach()
+foreach(cmake_toolset_rpath_test_var CMAKE_HOST_BUILD_RPATH COMPILER_OPTION_INHERIT_CMAKE_HOST_BUILD_RPATH)
+ if(NOT CMAKE_TOOLSET_RPATH_TEST_HOST_EXPECTED_RPATH IN_LIST ${cmake_toolset_rpath_test_var}
+ OR NOT CMAKE_TOOLSET_RPATH_TEST_HOST_USER_RPATH IN_LIST ${cmake_toolset_rpath_test_var})
+ message(FATAL_ERROR "${cmake_toolset_rpath_test_var} does not contain the expected host RPATH entries")
+ endif()
+endforeach()
+if(NOT "${CMAKE_BUILD_RPATH}" STREQUAL "${COMPILER_OPTION_INHERIT_CMAKE_BUILD_RPATH}"
+ OR NOT "${CMAKE_HOST_BUILD_RPATH}" STREQUAL "${COMPILER_OPTION_INHERIT_CMAKE_HOST_BUILD_RPATH}")
+ message(FATAL_ERROR "Build RPATH is not inherited unchanged")
+endif()
+
+if(DEFINED CMAKE_TOOLSET_RPATH_TEST_EXPECT_USE_ORIGIN)
+ if(NOT "${CMAKE_BUILD_RPATH_USE_ORIGIN}" STREQUAL "${CMAKE_TOOLSET_RPATH_TEST_EXPECT_USE_ORIGIN}"
+ OR NOT "${CMAKE_HOST_BUILD_RPATH_USE_ORIGIN}" STREQUAL "${CMAKE_TOOLSET_RPATH_TEST_EXPECT_USE_ORIGIN}"
+ OR NOT "${COMPILER_OPTION_INHERIT_CMAKE_BUILD_RPATH_USE_ORIGIN}" STREQUAL
+ "${CMAKE_TOOLSET_RPATH_TEST_EXPECT_USE_ORIGIN}"
+ OR NOT "${COMPILER_OPTION_INHERIT_CMAKE_HOST_BUILD_RPATH_USE_ORIGIN}" STREQUAL
+ "${CMAKE_TOOLSET_RPATH_TEST_EXPECT_USE_ORIGIN}")
+ message(FATAL_ERROR "Outer BUILD_RPATH_USE_ORIGIN settings were changed")
+ endif()
+elseif(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_USE_ABSOLUTE_RPATH)
+ if(CMAKE_BUILD_RPATH_USE_ORIGIN OR CMAKE_HOST_BUILD_RPATH_USE_ORIGIN)
+ message(FATAL_ERROR "Absolute RPATH mode unexpectedly enables origin mode")
+ endif()
+elseif(NOT CMAKE_BUILD_RPATH_USE_ORIGIN OR NOT CMAKE_HOST_BUILD_RPATH_USE_ORIGIN)
+ message(FATAL_ERROR "Relative RPATH mode did not enable origin mode")
+elseif(CMAKE_TOOLSET_RPATH_TEST_TARGET_ORIGIN AND CMAKE_TOOLSET_RPATH_TEST_TARGET_PREFIX_RPATH IN_LIST
+ CMAKE_BUILD_RPATH)
+ message(FATAL_ERROR "Target RPATH is not loader-relative")
+elseif(CMAKE_TOOLSET_RPATH_TEST_HOST_ORIGIN AND CMAKE_TOOLSET_RPATH_TEST_HOST_PREFIX_RPATH IN_LIST
+ CMAKE_HOST_BUILD_RPATH)
+ message(FATAL_ERROR "Host RPATH is not loader-relative")
+endif()
+if(NOT "$ENV{LD_LIBRARY_PATH}" STREQUAL "cmake-toolset-rpath-sentinel")
+ message(FATAL_ERROR "Import.cmake changed LD_LIBRARY_PATH")
+endif()
+
+file(
+ GENERATE
+ OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/rpath-test.c"
+ CONTENT "#if defined(_WIN32)\n__declspec(dllexport)\n#endif\nint cmake_toolset_rpath_test(void) { return 0; }\n")
+add_library(cmake-toolset-rpath-test SHARED "${CMAKE_CURRENT_BINARY_DIR}/rpath-test.c")
+set_target_properties(
+ cmake-toolset-rpath-test PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_TOOLSET_RPATH_TEST_TARGET_PREFIX_RPATH}"
+ RUNTIME_OUTPUT_DIRECTORY "${PROJECT_THIRD_PARTY_INSTALL_DIR}/bin")
+
+file(
+ GENERATE
+ OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/rpath-test-main.c"
+ CONTENT "int cmake_toolset_rpath_test(void);\nint main(void) { return cmake_toolset_rpath_test(); }\n")
+add_executable(cmake-toolset-rpath-run "${CMAKE_CURRENT_BINARY_DIR}/rpath-test-main.c")
+target_link_libraries(cmake-toolset-rpath-run PRIVATE cmake-toolset-rpath-test)