cmake: set version for project() and add CPack support

Note: the version like `8.11.0-DEV` is not a valid version for
`project()`, so need to extract the major, minor and patch parts.

Previous, manual, `CURL_VERSION` macro is defined by `project()`
after this patch, so rename existing `CURL_VERSION*` variables to
`_curl_version*`.

Closes #15281
This commit is contained in:
zjyhjqs 2024-10-13 16:09:48 +08:00 committed by Viktor Szakats
parent 1b155f034a
commit fbc0da376f
No known key found for this signature in database
GPG Key ID: B5ABD165E2AEF201

View File

@ -63,13 +63,34 @@ foreach(_cache_var ${_cache_vars})
endif() endif()
endforeach() endforeach()
function(curl_dumpvars) # Dump all defined variables with their values
message("::group::CMake Variable Dump")
get_cmake_property(_vars VARIABLES)
foreach(_var ${_vars})
message("${_var} = ${${_var}}")
endforeach()
message("::endgroup::")
endfunction()
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}") set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}")
include(Utilities) include(Utilities)
include(Macros) include(Macros)
include(CMakeDependentOption) include(CMakeDependentOption)
include(CheckCCompilerFlag) include(CheckCCompilerFlag)
project(CURL C) file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/include/curl/curlver.h" _curl_version_h_contents REGEX "#define LIBCURL_VERSION( |_NUM )")
string(REGEX MATCH "#define LIBCURL_VERSION \"[^\"]*" _curl_version ${_curl_version_h_contents})
string(REGEX REPLACE "[^\"]+\"" "" _curl_version ${_curl_version})
string(REGEX MATCH "#define LIBCURL_VERSION_NUM 0x[0-9a-fA-F]+" _curl_version_num ${_curl_version_h_contents})
string(REGEX REPLACE "[^0]+0x" "" _curl_version_num ${_curl_version_num})
unset(_curl_version_h_contents)
message(STATUS "curl version=[${_curl_version}]")
string(REGEX REPLACE "([0-9]+\.[0-9]+\.[0-9]+).+" "\\1" _curl_version_sem "${_curl_version}")
project(CURL
VERSION "${_curl_version_sem}"
LANGUAGES C)
unset(_target_flags) unset(_target_flags)
if(APPLE) if(APPLE)
@ -110,24 +131,6 @@ if(CMAKE_CROSSCOMPILING)
"${CMAKE_SYSTEM_NAME}/${CMAKE_SYSTEM_PROCESSOR}") "${CMAKE_SYSTEM_NAME}/${CMAKE_SYSTEM_PROCESSOR}")
endif() endif()
function(curl_dumpvars) # Dump all defined variables with their values
message("::group::CMake Variable Dump")
get_cmake_property(_vars VARIABLES)
foreach(_var ${_vars})
message("${_var} = ${${_var}}")
endforeach()
message("::endgroup::")
endfunction()
file(STRINGS "${CURL_SOURCE_DIR}/include/curl/curlver.h" _curl_version_h_contents REGEX "#define LIBCURL_VERSION( |_NUM )")
string(REGEX MATCH "#define LIBCURL_VERSION \"[^\"]*" CURL_VERSION ${_curl_version_h_contents})
string(REGEX REPLACE "[^\"]+\"" "" CURL_VERSION ${CURL_VERSION})
string(REGEX MATCH "#define LIBCURL_VERSION_NUM 0x[0-9a-fA-F]+" CURL_VERSION_NUM ${_curl_version_h_contents})
string(REGEX REPLACE "[^0]+0x" "" CURL_VERSION_NUM ${CURL_VERSION_NUM})
unset(_curl_version_h_contents)
message(STATUS "curl version=[${CURL_VERSION}]")
if(CMAKE_C_COMPILER_TARGET) if(CMAKE_C_COMPILER_TARGET)
set(OS "\"${CMAKE_C_COMPILER_TARGET}\"") set(OS "\"${CMAKE_C_COMPILER_TARGET}\"")
else() else()
@ -2024,8 +2027,8 @@ if(NOT CURL_DISABLE_INSTALL)
set(CC "${CMAKE_C_COMPILER}") set(CC "${CMAKE_C_COMPILER}")
# TODO: probably put a -D... options here? # TODO: probably put a -D... options here?
set(CONFIGURE_OPTIONS "") set(CONFIGURE_OPTIONS "")
set(CURLVERSION "${CURL_VERSION}") set(CURLVERSION "${_curl_version}")
set(VERSIONNUM "${CURL_VERSION_NUM}") set(VERSIONNUM "${_curl_version_num}")
set(prefix "${CMAKE_INSTALL_PREFIX}") set(prefix "${CMAKE_INSTALL_PREFIX}")
set(exec_prefix "\${prefix}") set(exec_prefix "\${prefix}")
if(IS_ABSOLUTE ${CMAKE_INSTALL_INCLUDEDIR}) if(IS_ABSOLUTE ${CMAKE_INSTALL_INCLUDEDIR})
@ -2210,7 +2213,7 @@ if(NOT CURL_DISABLE_INSTALL)
include(CMakePackageConfigHelpers) include(CMakePackageConfigHelpers)
write_basic_package_version_file( write_basic_package_version_file(
"${_version_config}" "${_version_config}"
VERSION ${CURL_VERSION} VERSION ${_curl_version}
COMPATIBILITY SameMajorVersion) COMPATIBILITY SameMajorVersion)
file(READ "${_version_config}" _generated_version_config) file(READ "${_version_config}" _generated_version_config)
file(WRITE "${_version_config}" " file(WRITE "${_version_config}" "
@ -2265,6 +2268,11 @@ if(NOT CURL_DISABLE_INSTALL)
OWNER_READ OWNER_WRITE OWNER_EXECUTE OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE) WORLD_READ WORLD_EXECUTE)
# The `-DEV` part is important
string(REGEX REPLACE "([0-9]+\.[0-9]+)\.([0-9]+.*)" "\\2" CPACK_PACKAGE_VERSION_PATCH "${_curl_version}")
set(CPACK_GENERATOR "TGZ")
include(CPack)
endif() endif()
# Save build info for test runner to pick up and log # Save build info for test runner to pick up and log