mirror of
https://github.com/cpm-cmake/CPM.cmake.git
synced 2025-11-24 13:18:07 -05:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d7614381ab | ||
|
|
97023e8b97 | ||
|
|
0f231080d9 | ||
|
|
33efd5f5d2 | ||
|
|
4b3a60fb32 | ||
|
|
cd28d445ae | ||
|
|
2a9e203320 | ||
|
|
22381df399 | ||
|
|
c3807eb774 |
3
.git_archival.txt
Normal file
3
.git_archival.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
node: $Format:%H$
|
||||||
|
node-date: $Format:%cI$
|
||||||
|
describe-name: $Format:%(describe:tags=true,match=?[0-9.]*)$
|
||||||
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.git_archival.txt export-subst
|
||||||
28
CMakeLists.txt
Normal file
28
CMakeLists.txt
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
|
||||||
|
|
||||||
|
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git/")
|
||||||
|
find_package(Git REQUIRED)
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${GIT_EXECUTABLE}" describe --tags --match=?[0-9.]*
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
OUTPUT_VARIABLE DESCRIBE_NAME COMMAND_ERROR_IS_FATAL ANY
|
||||||
|
)
|
||||||
|
set(CPM_DEVELOPMENT "-development-version")
|
||||||
|
else()
|
||||||
|
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/.git_archival.txt" DESCRIBE_NAME
|
||||||
|
REGEX "^describe-name:.*"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(REGEX MATCH "([0-9\\.]+)" EXTRACTED_CPM_VERSION "${DESCRIBE_NAME}")
|
||||||
|
|
||||||
|
project(
|
||||||
|
CPM.cmake
|
||||||
|
VERSION "${EXTRACTED_CPM_VERSION}"
|
||||||
|
DESCRIPTION
|
||||||
|
"CMake's missing package manager. A small CMake script for setup-free, cross-platform, reproducible dependency management."
|
||||||
|
HOMEPAGE_URL "https://github.com/cpm-cmake/CPM.cmake"
|
||||||
|
LANGUAGES NONE
|
||||||
|
)
|
||||||
|
|
||||||
|
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/CPM.cmake")
|
||||||
30
README.md
30
README.md
@@ -80,6 +80,7 @@ On the other hand, if `VERSION` hasn't been explicitly specified, CPM can automa
|
|||||||
`GIT_TAG` can also be set to a specific commit or a branch name such as `master`, however this isn't recommended, as such packages will only be updated when the cache is cleared.
|
`GIT_TAG` can also be set to a specific commit or a branch name such as `master`, however this isn't recommended, as such packages will only be updated when the cache is cleared.
|
||||||
|
|
||||||
`PATCHES` takes a list of patch files to apply sequentially. For a basic example, see [Highway](examples/highway/CMakeLists.txt).
|
`PATCHES` takes a list of patch files to apply sequentially. For a basic example, see [Highway](examples/highway/CMakeLists.txt).
|
||||||
|
We recommend that if you use `PATCHES`, you also set `CPM_SOURCE_CACHE`. See [issue 577](https://github.com/cpm-cmake/CPM.cmake/issues/577).
|
||||||
|
|
||||||
If an additional optional parameter `EXCLUDE_FROM_ALL` is set to a truthy value, then any targets defined inside the dependency won't be built by default. See the [CMake docs](https://cmake.org/cmake/help/latest/prop_tgt/EXCLUDE_FROM_ALL.html) for details.
|
If an additional optional parameter `EXCLUDE_FROM_ALL` is set to a truthy value, then any targets defined inside the dependency won't be built by default. See the [CMake docs](https://cmake.org/cmake/help/latest/prop_tgt/EXCLUDE_FROM_ALL.html) for details.
|
||||||
|
|
||||||
@@ -87,7 +88,7 @@ If an additional optional parameter `SYSTEM` is set to a truthy value, the SYSTE
|
|||||||
See the [add_subdirectory ](https://cmake.org/cmake/help/latest/command/add_subdirectory.html?highlight=add_subdirectory)
|
See the [add_subdirectory ](https://cmake.org/cmake/help/latest/command/add_subdirectory.html?highlight=add_subdirectory)
|
||||||
and [SYSTEM](https://cmake.org/cmake/help/latest/prop_tgt/SYSTEM.html#prop_tgt:SYSTEM) target property for details.
|
and [SYSTEM](https://cmake.org/cmake/help/latest/prop_tgt/SYSTEM.html#prop_tgt:SYSTEM) target property for details.
|
||||||
|
|
||||||
A single-argument compact syntax is also supported:
|
A shorthand syntax is also supported:
|
||||||
|
|
||||||
```cmake
|
```cmake
|
||||||
# A git package from a given uri with a version
|
# A git package from a given uri with a version
|
||||||
@@ -111,6 +112,19 @@ CPMAddPackage("https://example.com/my-package-1.2.3.zip#MD5=68e20f674a48be38d60e
|
|||||||
CPMAddPackage("https://example.com/my-package.zip@1.2.3")
|
CPMAddPackage("https://example.com/my-package.zip@1.2.3")
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Additionally, if needed, extra arguments can be provided while using single argument syntax by using the shorthand syntax with the `URI` specifier.
|
||||||
|
|
||||||
|
```cmake
|
||||||
|
CPMAddPackage(
|
||||||
|
URI "gh:nlohmann/json@3.9.1"
|
||||||
|
OPTIONS "JSON_BuildTests OFF"
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
The `URI` argument must be the first argument to `CPMAddPackage`.
|
||||||
|
`URI` automatically sets `EXCLUDE_FROM_ALL YES` and `SYSTEM YES`.
|
||||||
|
If this is not desired, `EXCLUDE_FROM_ALL NO` and `SYSTEM NO` can be set afterwards.
|
||||||
|
|
||||||
After calling `CPMAddPackage`, the following variables are defined in the local scope, where `<dependency>` is the name of the dependency.
|
After calling `CPMAddPackage`, the following variables are defined in the local scope, where `<dependency>` is the name of the dependency.
|
||||||
|
|
||||||
- `<dependency>_SOURCE_DIR` is the path to the source of the dependency.
|
- `<dependency>_SOURCE_DIR` is the path to the source of the dependency.
|
||||||
@@ -411,11 +425,8 @@ CPMAddPackage("gh:jbeder/yaml-cpp#yaml-cpp-0.6.3@0.6.3")
|
|||||||
|
|
||||||
```cmake
|
```cmake
|
||||||
CPMAddPackage(
|
CPMAddPackage(
|
||||||
NAME nlohmann_json
|
URI "gh:nlohmann/json@3.9.1"
|
||||||
VERSION 3.9.1
|
OPTIONS "JSON_BuildTests OFF"
|
||||||
GITHUB_REPOSITORY nlohmann/json
|
|
||||||
OPTIONS
|
|
||||||
"JSON_BuildTests OFF"
|
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -445,8 +456,7 @@ For a working example of using CPM to download and configure the Boost C++ Libra
|
|||||||
```cmake
|
```cmake
|
||||||
# the install option has to be explicitly set to allow installation
|
# the install option has to be explicitly set to allow installation
|
||||||
CPMAddPackage(
|
CPMAddPackage(
|
||||||
GITHUB_REPOSITORY jarro2783/cxxopts
|
URI "gh:jarro2783/cxxopts@2.2.1"
|
||||||
VERSION 2.2.1
|
|
||||||
OPTIONS "CXXOPTS_BUILD_EXAMPLES NO" "CXXOPTS_BUILD_TESTS NO" "CXXOPTS_ENABLE_INSTALL YES"
|
OPTIONS "CXXOPTS_BUILD_EXAMPLES NO" "CXXOPTS_BUILD_TESTS NO" "CXXOPTS_ENABLE_INSTALL YES"
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
@@ -455,9 +465,7 @@ CPMAddPackage(
|
|||||||
|
|
||||||
```cmake
|
```cmake
|
||||||
CPMAddPackage(
|
CPMAddPackage(
|
||||||
NAME benchmark
|
URI "gh:google/benchmark@1.5.2"
|
||||||
GITHUB_REPOSITORY google/benchmark
|
|
||||||
VERSION 1.5.2
|
|
||||||
OPTIONS "BENCHMARK_ENABLE_TESTING Off"
|
OPTIONS "BENCHMARK_ENABLE_TESTING Off"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,11 @@ if(NOT COMMAND cpm_message)
|
|||||||
endfunction()
|
endfunction()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CURRENT_CPM_VERSION 1.0.0-development-version)
|
if(DEFINED EXTRACTED_CPM_VERSION)
|
||||||
|
set(CURRENT_CPM_VERSION "${EXTRACTED_CPM_VERSION}${CPM_DEVELOPMENT}")
|
||||||
|
else()
|
||||||
|
set(CURRENT_CPM_VERSION 1.0.0-development-version)
|
||||||
|
endif()
|
||||||
|
|
||||||
get_filename_component(CPM_CURRENT_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}" REALPATH)
|
get_filename_component(CPM_CURRENT_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}" REALPATH)
|
||||||
if(CPM_DIRECTORY)
|
if(CPM_DIRECTORY)
|
||||||
@@ -277,10 +281,10 @@ function(cpm_create_module_file Name)
|
|||||||
# https://cmake.org/cmake/help/latest/module/FetchContent.html#fetchcontent-find-package-integration-examples
|
# https://cmake.org/cmake/help/latest/module/FetchContent.html#fetchcontent-find-package-integration-examples
|
||||||
string(TOLOWER ${Name} NameLower)
|
string(TOLOWER ${Name} NameLower)
|
||||||
file(WRITE ${CMAKE_FIND_PACKAGE_REDIRECTS_DIR}/${NameLower}-config.cmake
|
file(WRITE ${CMAKE_FIND_PACKAGE_REDIRECTS_DIR}/${NameLower}-config.cmake
|
||||||
"include(\"${CMAKE_CURRENT_LIST_DIR}/${NameLower}-extra.cmake\" OPTIONAL)\n"
|
"include(\"\${CMAKE_CURRENT_LIST_DIR}/${NameLower}-extra.cmake\" OPTIONAL)\n"
|
||||||
"include(\"${CMAKE_CURRENT_LIST_DIR}/${Name}Extra.cmake\" OPTIONAL)\n"
|
"include(\"\${CMAKE_CURRENT_LIST_DIR}/${Name}Extra.cmake\" OPTIONAL)\n"
|
||||||
)
|
)
|
||||||
file(WRITE ${CMAKE_FIND_PACKAGE_REDIRECTS_DIR}/${NameLower}-version.cmake
|
file(WRITE ${CMAKE_FIND_PACKAGE_REDIRECTS_DIR}/${NameLower}-config-version.cmake
|
||||||
"set(PACKAGE_VERSION_COMPATIBLE TRUE)\n" "set(PACKAGE_VERSION_EXACT TRUE)\n"
|
"set(PACKAGE_VERSION_COMPATIBLE TRUE)\n" "set(PACKAGE_VERSION_EXACT TRUE)\n"
|
||||||
)
|
)
|
||||||
else()
|
else()
|
||||||
@@ -490,7 +494,7 @@ function(cpm_add_patches)
|
|||||||
|
|
||||||
# Find the patch program.
|
# Find the patch program.
|
||||||
find_program(PATCH_EXECUTABLE patch)
|
find_program(PATCH_EXECUTABLE patch)
|
||||||
if(WIN32 AND NOT PATCH_EXECUTABLE)
|
if(CMAKE_HOST_WIN32 AND NOT PATCH_EXECUTABLE)
|
||||||
# The Windows git executable is distributed with patch.exe. Find the path to the executable, if
|
# The Windows git executable is distributed with patch.exe. Find the path to the executable, if
|
||||||
# it exists, then search `../usr/bin` and `../../usr/bin` for patch.exe.
|
# it exists, then search `../usr/bin` and `../../usr/bin` for patch.exe.
|
||||||
find_package(Git QUIET)
|
find_package(Git QUIET)
|
||||||
@@ -590,14 +594,6 @@ endfunction()
|
|||||||
function(CPMAddPackage)
|
function(CPMAddPackage)
|
||||||
cpm_set_policies()
|
cpm_set_policies()
|
||||||
|
|
||||||
list(LENGTH ARGN argnLength)
|
|
||||||
if(argnLength EQUAL 1)
|
|
||||||
cpm_parse_add_package_single_arg("${ARGN}" ARGN)
|
|
||||||
|
|
||||||
# The shorthand syntax implies EXCLUDE_FROM_ALL and SYSTEM
|
|
||||||
set(ARGN "${ARGN};EXCLUDE_FROM_ALL;YES;SYSTEM;YES;")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(oneValueArgs
|
set(oneValueArgs
|
||||||
NAME
|
NAME
|
||||||
FORCE
|
FORCE
|
||||||
@@ -620,10 +616,26 @@ function(CPMAddPackage)
|
|||||||
|
|
||||||
set(multiValueArgs URL OPTIONS DOWNLOAD_COMMAND PATCHES)
|
set(multiValueArgs URL OPTIONS DOWNLOAD_COMMAND PATCHES)
|
||||||
|
|
||||||
|
list(LENGTH ARGN argnLength)
|
||||||
|
|
||||||
|
# Parse single shorthand argument
|
||||||
|
if(argnLength EQUAL 1)
|
||||||
|
cpm_parse_add_package_single_arg("${ARGN}" ARGN)
|
||||||
|
|
||||||
|
# The shorthand syntax implies EXCLUDE_FROM_ALL and SYSTEM
|
||||||
|
set(ARGN "${ARGN};EXCLUDE_FROM_ALL;YES;SYSTEM;YES;")
|
||||||
|
|
||||||
|
# Parse URI shorthand argument
|
||||||
|
elseif(argnLength GREATER 1 AND "${ARGV0}" STREQUAL "URI")
|
||||||
|
list(REMOVE_AT ARGN 0 1) # remove "URI gh:<...>@version#tag"
|
||||||
|
cpm_parse_add_package_single_arg("${ARGV1}" ARGV0)
|
||||||
|
|
||||||
|
set(ARGN "${ARGV0};EXCLUDE_FROM_ALL;YES;SYSTEM;YES;${ARGN}")
|
||||||
|
endif()
|
||||||
|
|
||||||
cmake_parse_arguments(CPM_ARGS "" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}")
|
cmake_parse_arguments(CPM_ARGS "" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}")
|
||||||
|
|
||||||
# Set default values for arguments
|
# Set default values for arguments
|
||||||
|
|
||||||
if(NOT DEFINED CPM_ARGS_VERSION)
|
if(NOT DEFINED CPM_ARGS_VERSION)
|
||||||
if(DEFINED CPM_ARGS_GIT_TAG)
|
if(DEFINED CPM_ARGS_GIT_TAG)
|
||||||
cpm_get_version_from_git_tag("${CPM_ARGS_GIT_TAG}" CPM_ARGS_VERSION)
|
cpm_get_version_from_git_tag("${CPM_ARGS_GIT_TAG}" CPM_ARGS_VERSION)
|
||||||
@@ -863,7 +875,9 @@ function(CPMAddPackage)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
cpm_create_module_file(${CPM_ARGS_NAME} "CPMAddPackage(\"${ARGN}\")")
|
if(NOT "${DOWNLOAD_ONLY}")
|
||||||
|
cpm_create_module_file(${CPM_ARGS_NAME} "CPMAddPackage(\"${ARGN}\")")
|
||||||
|
endif()
|
||||||
|
|
||||||
if(CPM_PACKAGE_LOCK_ENABLED)
|
if(CPM_PACKAGE_LOCK_ENABLED)
|
||||||
if((CPM_ARGS_VERSION AND NOT CPM_ARGS_SOURCE_DIR) OR CPM_INCLUDE_ALL_IN_PACKAGE_LOCK)
|
if((CPM_ARGS_VERSION AND NOT CPM_ARGS_SOURCE_DIR) OR CPM_INCLUDE_ALL_IN_PACKAGE_LOCK)
|
||||||
@@ -884,8 +898,9 @@ function(CPMAddPackage)
|
|||||||
# Calling FetchContent_MakeAvailable will then internally forward these options to
|
# Calling FetchContent_MakeAvailable will then internally forward these options to
|
||||||
# add_subdirectory. Up until these changes, we had to call FetchContent_Populate and
|
# add_subdirectory. Up until these changes, we had to call FetchContent_Populate and
|
||||||
# add_subdirectory separately, which is no longer necessary and has been deprecated as of 3.30.
|
# add_subdirectory separately, which is no longer necessary and has been deprecated as of 3.30.
|
||||||
|
# A Bug in CMake prevents us to use the non-deprecated functions until 3.30.3.
|
||||||
set(fetchContentDeclareExtraArgs "")
|
set(fetchContentDeclareExtraArgs "")
|
||||||
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.28.0")
|
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.30.3")
|
||||||
if(${CPM_ARGS_EXCLUDE_FROM_ALL})
|
if(${CPM_ARGS_EXCLUDE_FROM_ALL})
|
||||||
list(APPEND fetchContentDeclareExtraArgs EXCLUDE_FROM_ALL)
|
list(APPEND fetchContentDeclareExtraArgs EXCLUDE_FROM_ALL)
|
||||||
endif()
|
endif()
|
||||||
@@ -911,7 +926,7 @@ function(CPMAddPackage)
|
|||||||
if(CPM_SOURCE_CACHE AND download_directory)
|
if(CPM_SOURCE_CACHE AND download_directory)
|
||||||
file(LOCK ${download_directory}/../cmake.lock RELEASE)
|
file(LOCK ${download_directory}/../cmake.lock RELEASE)
|
||||||
endif()
|
endif()
|
||||||
if(${populated} AND ${CMAKE_VERSION} VERSION_LESS "3.28.0")
|
if(${populated} AND ${CMAKE_VERSION} VERSION_LESS "3.30.3")
|
||||||
cpm_add_subdirectory(
|
cpm_add_subdirectory(
|
||||||
"${CPM_ARGS_NAME}"
|
"${CPM_ARGS_NAME}"
|
||||||
"${DOWNLOAD_ONLY}"
|
"${DOWNLOAD_ONLY}"
|
||||||
@@ -1113,7 +1128,7 @@ function(cpm_fetch_package PACKAGE DOWNLOAD_ONLY populated)
|
|||||||
string(TOLOWER "${PACKAGE}" lower_case_name)
|
string(TOLOWER "${PACKAGE}" lower_case_name)
|
||||||
|
|
||||||
if(NOT ${lower_case_name}_POPULATED)
|
if(NOT ${lower_case_name}_POPULATED)
|
||||||
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.28.0")
|
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.30.3")
|
||||||
if(DOWNLOAD_ONLY)
|
if(DOWNLOAD_ONLY)
|
||||||
# MakeAvailable will call add_subdirectory internally which is not what we want when
|
# MakeAvailable will call add_subdirectory internally which is not what we want when
|
||||||
# DOWNLOAD_ONLY is set. Populate will only download the dependency without adding it to the
|
# DOWNLOAD_ONLY is set. Populate will only download the dependency without adding it to the
|
||||||
|
|||||||
@@ -13,10 +13,12 @@ include(../../cmake/CPM.cmake)
|
|||||||
|
|
||||||
CPMAddPackage(
|
CPMAddPackage(
|
||||||
NAME Boost
|
NAME Boost
|
||||||
VERSION 1.84.0
|
VERSION 1.86.0 # Versions less than 1.85.0 may need patches for installation targets.
|
||||||
URL https://github.com/boostorg/boost/releases/download/boost-1.84.0/boost-1.84.0.tar.xz
|
URL https://github.com/boostorg/boost/releases/download/boost-1.86.0/boost-1.86.0-cmake.tar.xz
|
||||||
URL_HASH SHA256=2e64e5d79a738d0fa6fb546c6e5c2bd28f88d268a2a080546f74e5ff98f29d0e
|
URL_HASH SHA256=2c5ec5edcdff47ff55e27ed9560b0a0b94b07bd07ed9928b476150e16b0efc57
|
||||||
OPTIONS "BOOST_ENABLE_CMAKE ON" "BOOST_INCLUDE_LIBRARIES container\\\;asio" # Note the escapes!
|
OPTIONS "BOOST_ENABLE_CMAKE ON" "BOOST_SKIP_INSTALL_RULES ON" # Set `OFF` for installation
|
||||||
|
"BUILD_SHARED_LIBS OFF" "BOOST_INCLUDE_LIBRARIES container\\\;asio" # Note the escapes!
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# `Boost::headers` is also valid
|
||||||
target_link_libraries(CPMExampleBoost PRIVATE Boost::asio Boost::container)
|
target_link_libraries(CPMExampleBoost PRIVATE Boost::asio Boost::container)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ include(../../cmake/CPM.cmake)
|
|||||||
|
|
||||||
CPMAddPackage(
|
CPMAddPackage(
|
||||||
NAME lua
|
NAME lua
|
||||||
GIT_REPOSITORY https://github.com/lua/lua.git
|
GITHUB_REPOSITORY lua/lua
|
||||||
VERSION 5.3.5
|
VERSION 5.3.5
|
||||||
DOWNLOAD_ONLY YES
|
DOWNLOAD_ONLY YES
|
||||||
)
|
)
|
||||||
@@ -21,7 +21,13 @@ if(lua_ADDED)
|
|||||||
target_include_directories(lua SYSTEM PUBLIC $<BUILD_INTERFACE:${lua_SOURCE_DIR}>)
|
target_include_directories(lua SYSTEM PUBLIC $<BUILD_INTERFACE:${lua_SOURCE_DIR}>)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
CPMAddPackage("gh:ThePhD/sol2@3.3.0")
|
CPMAddPackage(
|
||||||
|
NAME sol2
|
||||||
|
GITHUB_REPOSITORY ThePhD/sol2
|
||||||
|
VERSION 3.3.0
|
||||||
|
# fix for clang 18.1.0, see https://github.com/ThePhD/sol2/issues/1581#issuecomment-2103463524
|
||||||
|
PATCHES fix_for_clang.patch
|
||||||
|
)
|
||||||
|
|
||||||
# ---- Executable ----
|
# ---- Executable ----
|
||||||
|
|
||||||
|
|||||||
18
examples/sol2/fix_for_clang.patch
Normal file
18
examples/sol2/fix_for_clang.patch
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
diff -u a/include/sol/function_types_stateless.hpp b/include/types/function_types_stateless.hpp
|
||||||
|
--- a/include/sol/function_types_stateless.hpp
|
||||||
|
+++ b/include/sol/function_types_stateless.hpp
|
||||||
|
@@ -322,7 +322,13 @@ namespace sol { namespace function_detail {
|
||||||
|
}
|
||||||
|
|
||||||
|
template <bool is_yielding, bool no_trampoline>
|
||||||
|
- static int call(lua_State* L) noexcept(std::is_nothrow_copy_assignable_v<T>) {
|
||||||
|
+ static int call(lua_State* L)
|
||||||
|
+#if SOL_IS_ON(SOL_COMPILER_CLANG)
|
||||||
|
+ // apparent regression in clang 18 - llvm/llvm-project#91362
|
||||||
|
+#else
|
||||||
|
+ noexcept(std::is_nothrow_copy_assignable_v<T>)
|
||||||
|
+#endif
|
||||||
|
+ {
|
||||||
|
int nr;
|
||||||
|
if constexpr (no_trampoline) {
|
||||||
|
nr = real_call(L);
|
||||||
86
test/integration/test_shorthand_syntax.rb
Normal file
86
test/integration/test_shorthand_syntax.rb
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
require_relative './lib'
|
||||||
|
|
||||||
|
class TestShorthandSyntax < IntegrationTest
|
||||||
|
|
||||||
|
def get_project_binaries prj
|
||||||
|
exe_dir = File.join(prj.bin_dir, 'bin')
|
||||||
|
assert File.directory? exe_dir
|
||||||
|
return Dir[exe_dir + '/**/*'].filter {
|
||||||
|
# on multi-configuration generators (like Visual Studio) the executables will be in bin/<Config>
|
||||||
|
# also filter-out other artifacts like .pdb or .dsym
|
||||||
|
!File.directory?(_1) && File.stat(_1).executable?
|
||||||
|
}.map {
|
||||||
|
# remove .exe extension if any (there will be one on Windows)
|
||||||
|
File.basename(_1, '.exe')
|
||||||
|
}.sort
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_create_with_commit_sha
|
||||||
|
prj = make_project from_template: 'using-adder'
|
||||||
|
prj.create_lists_from_default_template package:
|
||||||
|
'CPMAddPackage("gh:cpm-cmake/testpack-adder#cad1cd4b4cdf957c5b59e30bc9a1dd200dbfc716")'
|
||||||
|
assert_success prj.configure
|
||||||
|
|
||||||
|
cache = prj.read_cache
|
||||||
|
assert_equal 1, cache.packages.size
|
||||||
|
assert_equal '0', cache.packages['testpack-adder'].ver
|
||||||
|
|
||||||
|
assert_success prj.build
|
||||||
|
exes = get_project_binaries prj
|
||||||
|
# No adder projects were built as EXCLUDE_FROM_ALL is implicitly set
|
||||||
|
assert_equal ['using-adder'], exes
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_create_with_version
|
||||||
|
prj = make_project from_template: 'using-adder'
|
||||||
|
prj.create_lists_from_default_template package:
|
||||||
|
'CPMAddPackage("gh:cpm-cmake/testpack-adder@1.0.0")'
|
||||||
|
assert_success prj.configure
|
||||||
|
|
||||||
|
cache = prj.read_cache
|
||||||
|
assert_equal 1, cache.packages.size
|
||||||
|
assert_equal '1.0.0', cache.packages['testpack-adder'].ver
|
||||||
|
|
||||||
|
assert_success prj.build
|
||||||
|
exes = get_project_binaries prj
|
||||||
|
assert_equal ['using-adder'], exes
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_create_with_all
|
||||||
|
prj = make_project from_template: 'using-adder'
|
||||||
|
prj.create_lists_from_default_template package:
|
||||||
|
'CPMAddPackage(
|
||||||
|
URI "gh:cpm-cmake/testpack-adder@1.0.0"
|
||||||
|
EXCLUDE_FROM_ALL false
|
||||||
|
)'
|
||||||
|
assert_success prj.configure
|
||||||
|
|
||||||
|
cache = prj.read_cache
|
||||||
|
assert_equal cache.packages.size, 1
|
||||||
|
assert_equal cache.packages['testpack-adder'].ver, '1.0.0'
|
||||||
|
|
||||||
|
assert_success prj.build
|
||||||
|
exes = get_project_binaries prj
|
||||||
|
assert_equal exes, ['simple', 'test-adding', 'using-adder']
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_create_with_tests_but_without_examples
|
||||||
|
prj = make_project from_template: 'using-adder'
|
||||||
|
prj.create_lists_from_default_template package:
|
||||||
|
'CPMAddPackage(
|
||||||
|
URI "gh:cpm-cmake/testpack-adder@1.0.0"
|
||||||
|
OPTIONS "ADDER_BUILD_EXAMPLES OFF" "ADDER_BUILD_TESTS TRUE"
|
||||||
|
EXCLUDE_FROM_ALL false
|
||||||
|
)'
|
||||||
|
assert_success prj.configure
|
||||||
|
|
||||||
|
cache = prj.read_cache
|
||||||
|
assert_equal cache.packages.size, 1
|
||||||
|
assert_equal cache.packages['testpack-adder'].ver, '1.0.0'
|
||||||
|
|
||||||
|
assert_success prj.build
|
||||||
|
exes = get_project_binaries prj
|
||||||
|
assert_equal exes, ['test-adding', 'using-adder']
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user