[clapack] Modernize CMake and revise (#50727)

This commit is contained in:
Kai Pastor 2026-03-28 00:43:12 +01:00 committed by GitHub
parent 654258dd9b
commit 515ffd8c4f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 144 additions and 201 deletions

View File

@ -6,52 +6,43 @@
#
# The module defines the same outputs as FindLAPACK by cmake
include(${CMAKE_ROOT}/Modules/SelectLibraryConfigurations.cmake)
include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)
set(CLAPACK_VERSION "3.2.1")
set(LAPACK_VERSION "${CLAPACK_VERSION}")
#set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
find_package(Threads)
find_package(clapack CONFIG REQUIRED) # This will be found !
# clapack config is installed together with this module,
# and it handles the BLAS dependency.
find_package(clapack CONFIG REQUIRED)
if(NOT TARGET lapack)
message(FATAL_ERROR "Target lapack was not created by find_package(clapack)!")
endif()
if(NOT TARGET f2c)
message(FATAL_ERROR "Target f2c was not created by find_package(clapack)!")
endif()
set(CLAPACK_VERSION "${clapack_VERSION}")
set(LAPACK_VERSION "${CLAPACK_VERSION}")
include(SelectLibraryConfigurations)
include(FindPackageHandleStandardArgs)
get_property(LAPACK_INCLUDE_DIR TARGET lapack PROPERTY INTERFACE_INCLUDE_DIRECTORIES) # Doesn't make much sense but ok.
get_property(LAPACK_LIBRARY_RELEASE TARGET lapack PROPERTY IMPORTED_LOCATION_RELEASE)
get_property(LAPACK_LIBRARY_DEBUG TARGET lapack PROPERTY IMPORTED_LOCATION_DEBUG)
select_library_configurations(LAPACK)
get_property(LAPACK_F2C_LIBRARY_RELEASE TARGET f2c PROPERTY IMPORTED_LOCATION_RELEASE)
get_property(LAPACK_F2C_LIBRARY_DEBUG TARGET f2c PROPERTY IMPORTED_LOCATION_DEBUG)
select_library_configurations(LAPACK_F2C)
list(APPEND LAPACK_LIBRARIES ${LAPACK_F2C_LIBRARIES} ${BLAS_LIBRARIES})
if(UNIX)
list(APPEND LAPACK_LIBRARIES "m")
endif()
set(LAPACK95_LIBRARIES "${LAPACK_LIBRARIES}")
set(LAPACK95_FOUND "TRUE")
set(LAPACK_LINKER_FLAGS "")
if(NOT TARGET LAPACK::LAPACK)
add_library(LAPACK::LAPACK INTERFACE IMPORTED)
target_link_libraries(LAPACK::LAPACK INTERFACE lapack)
set(lib_prop IMPORTED_LOCATION)
#if(@VCPKG_LIBRARY_LINKAGE@ STREQUAL "dynamic" AND WIN32)
# set(lib_prop IMPORTED_IMPLIB)
#endif()
get_property(LAPACK_LIBRARY_RELEASE TARGET lapack PROPERTY ${lib_prop}_RELEASE)
get_property(LAPACK_LIBRARY_DEBUG TARGET lapack PROPERTY ${lib_prop}_DEBUG)
get_property(LAPACK_INCLUDE_DIR TARGET lapack PROPERTY INTERFACE_INCLUDE_DIRECTORIES) # Doesn't make much sense but ok.
select_library_configurations(LAPACK)
get_property(LAPACK_LINKER_FLAGS_RELEASE TARGET lapack PROPERTY IMPORTED_LINK_INTERFACE_LIBRARIES_RELEASE)
get_property(LAPACK_LINKER_FLAGS_DEBUG TARGET lapack PROPERTY IMPORTED_LINK_INTERFACE_LIBRARIES_DEBUG)
if(TARGET f2c)
get_property(LAPACK_F2C_LIBRARY_RELEASE TARGET f2c PROPERTY ${lib_prop}_RELEASE)
get_property(LAPACK_F2C_LIBRARY_DEBUG TARGET f2c PROPERTY ${lib_prop}_DEBUG)
list(TRANSFORM LAPACK_LINKER_FLAGS_RELEASE REPLACE "^f2c$" "${LAPACK_F2C_LIBRARY_RELEASE}")
list(TRANSFORM LAPACK_LINKER_FLAGS_DEBUG REPLACE "^f2c$" "${LAPACK_F2C_LIBRARY_DEBUG}")
endif()
list(TRANSFORM LAPACK_LINKER_FLAGS_DEBUG PREPEND "$<$<CONFIG:DEBUG>:")
list(TRANSFORM LAPACK_LINKER_FLAGS_DEBUG APPEND ">")
list(TRANSFORM LAPACK_LINKER_FLAGS_RELEASE PREPEND "$<$<NOT:$<CONFIG:DEBUG>>:")
list(TRANSFORM LAPACK_LINKER_FLAGS_RELEASE APPEND ">")
set(LAPACK_LIBRARIES "${LAPACK_LIBRARIES};${LAPACK_LINKER_FLAGS_DEBUG};${LAPACK_LINKER_FLAGS_RELEASE}")
set(LAPACK95_LIBRARIES "${LAPACK_LIBRARIES}")
set(LAPACK95_FOUND "TRUE")
set(LAPACK_LINKER_FLAGS "${LAPACK_LIBRARIES}")
endif()
find_package_handle_standard_args(LAPACK DEFAULT_MSG LAPACK_LIBRARY LAPACK_INCLUDE_DIR )
mark_as_advanced(LAPACK_INCLUDE_DIR LAPACK_LIBRARY)
find_package_handle_standard_args(LAPACK DEFAULT_MSG LAPACK_LIBRARY LAPACK_INCLUDE_DIR)
mark_as_advanced(LAPACK_INCLUDE_DIR LAPACK_LIBRARY)

86
ports/clapack/cmake.diff Normal file
View File

@ -0,0 +1,86 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 320ccc6..31a4083 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 2.6)
+cmake_minimum_required(VERSION 3.10)
project(CLAPACK C)
enable_testing()
include(CTest)
@@ -19,16 +19,21 @@ if(NOT USE_BLAS_WRAP)
endif()
include_directories(${CLAPACK_SOURCE_DIR}/INCLUDE)
add_subdirectory(F2CLIBS)
-add_subdirectory(BLAS)
+find_package(BLAS REQUIRED)
add_subdirectory(SRC)
-add_subdirectory(TESTING)
set(CLAPACK_VERSION 3.2.1)
set(CPACK_PACKAGE_VERSION_MAJOR 3)
set(CPACK_PACKAGE_VERSION_MINOR 2)
set(CPACK_PACKAGE_VERSION_PATCH 1)
include(CPack)
-export(TARGETS f2c blas lapack FILE clapack-targets.cmake)
+install(EXPORT clapack-targets
+ FILE clapack-targets.cmake
+ DESTINATION share/clapack
+ )
configure_file(${CLAPACK_SOURCE_DIR}/clapack-config-version.cmake.in
${CLAPACK_BINARY_DIR}/clapack-config-version.cmake @ONLY)
configure_file(${CLAPACK_SOURCE_DIR}/clapack-config.cmake.in
${CLAPACK_BINARY_DIR}/clapack-config.cmake @ONLY)
+install(FILES ${CLAPACK_BINARY_DIR}/clapack-config.cmake ${CLAPACK_BINARY_DIR}/clapack-config-version.cmake
+ DESTINATION share/clapack
+ )
diff --git a/F2CLIBS/libf2c/CMakeLists.txt b/F2CLIBS/libf2c/CMakeLists.txt
index 43d7b3f..0e988d1 100644
--- a/F2CLIBS/libf2c/CMakeLists.txt
+++ b/F2CLIBS/libf2c/CMakeLists.txt
@@ -60,3 +60,16 @@ include_directories(${CLAPACK_SOURCE_DIR}/F2CLIBS/libf2c)
include_directories(${CLAPACK_BINARY_DIR}/F2CLIBS/libf2c)
add_library(f2c ${OFILES} ${CMAKE_CURRENT_BINARY_DIR}/arith.h)
set_property(TARGET f2c PROPERTY PREFIX lib)
+if(UNIX)
+ target_link_libraries(f2c PRIVATE m)
+endif()
+install(TARGETS f2c
+ EXPORT clapack-targets
+ RUNTIME DESTINATION bin
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib
+ INCLUDES DESTINATION include
+ )
+install(FILES ${PROJECT_SOURCE_DIR}/INCLUDE/f2c.h
+ DESTINATION include
+)
diff --git a/SRC/CMakeLists.txt b/SRC/CMakeLists.txt
index ac4cce3..746ebe5 100644
--- a/SRC/CMakeLists.txt
+++ b/SRC/CMakeLists.txt
@@ -376,5 +376,14 @@ if(BUILD_COMPLEX16)
set(ALLOBJ ${ZLASRC} ${ALLAUX} ${DZLAUX})
endif()
add_library(lapack ${ALLOBJ} ${ALLXOBJ})
-target_link_libraries(lapack blas)
-
+target_link_libraries(lapack PRIVATE ${BLAS_LIBRARIES} f2c)
+install(TARGETS lapack
+ EXPORT clapack-targets
+ RUNTIME DESTINATION bin
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib
+ INCLUDES DESTINATION include
+ )
+install(FILES ${PROJECT_SOURCE_DIR}/INCLUDE/clapack.h
+ DESTINATION include
+)
diff --git a/clapack-config.cmake.in b/clapack-config.cmake.in
index cd19f1d..7fa272f 100644
--- a/clapack-config.cmake.in
+++ b/clapack-config.cmake.in
@@ -1 +1,3 @@
-include("@CLAPACK_BINARY_DIR@/clapack-targets.cmake")
+include(CMakeFindDependencyMacro)
+find_dependency(BLAS)
+include("${CMAKE_CURRENT_LIST_DIR}/clapack-targets.cmake")

View File

@ -1,7 +0,0 @@
diff --git a/clapack-config.cmake.in b/clapack-config.cmake.in
index cd19f1d..49af4f0 100644
--- a/clapack-config.cmake.in
+++ b/clapack-config.cmake.in
@@ -1 +1 @@
-include("@CLAPACK_BINARY_DIR@/clapack-targets.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/clapack-targets.cmake")

View File

@ -1,45 +0,0 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 414ac8e..db58b4e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -19,7 +19,7 @@ include_directories(${CLAPACK_SOURCE_DIR}/INCLUDE)
add_subdirectory(F2CLIBS)
add_subdirectory(SRC)
set(CLAPACK_VERSION 3.2.1)
-export(TARGETS f2c lapack FILE ${CMAKE_INSTALL_PREFIX}/share/clapack/clapack-targets.cmake)
+install(EXPORT clapack-targets FILE clapack-targets.cmake DESTINATION share/clapack)
configure_file(${CLAPACK_SOURCE_DIR}/clapack-config-version.cmake.in
${CMAKE_INSTALL_PREFIX}/share/clapack/clapack-config-version.cmake @ONLY)
configure_file(${CLAPACK_SOURCE_DIR}/clapack-config.cmake.in
diff --git a/F2CLIBS/libf2c/CMakeLists.txt b/F2CLIBS/libf2c/CMakeLists.txt
index 6fa3598..c855e38 100644
--- a/F2CLIBS/libf2c/CMakeLists.txt
+++ b/F2CLIBS/libf2c/CMakeLists.txt
@@ -63,8 +63,9 @@ set_property(TARGET f2c PROPERTY PREFIX lib)
if(UNIX)
target_link_libraries(f2c m)
endif()
-install(TARGETS f2c
+install(TARGETS f2c EXPORT clapack-targets
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib)
+ ARCHIVE DESTINATION lib
+ INCLUDES DESTINATION include)
diff --git a/SRC/CMakeLists.txt b/SRC/CMakeLists.txt
index 07dc8c7..2355225 100644
--- a/SRC/CMakeLists.txt
+++ b/SRC/CMakeLists.txt
@@ -377,8 +377,9 @@ if(BUILD_COMPLEX16)
endif()
add_library(lapack ${ALLOBJ} ${ALLXOBJ})
target_link_libraries(lapack ${BLAS_LIBRARIES} f2c)
-install(TARGETS lapack
+install(TARGETS lapack EXPORT clapack-targets
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib)
+ ARCHIVE DESTINATION lib
+ INCLUDES DESTINATION include)

View File

@ -14,10 +14,8 @@ vcpkg_extract_source_archive(
SOURCE_PATH
ARCHIVE "${ARCHIVE}"
PATCHES
remove_internal_blas.patch
fix-ConfigFile.patch
fix-install.patch
support-uwp.patch
cmake.diff
support-uwp.patch
)
set(ARITH_PATH)
@ -52,14 +50,11 @@ vcpkg_cmake_configure(
vcpkg_cmake_install()
vcpkg_copy_pdbs()
#TODO: fix the official exported targets, since they are broken (luckily it seems that no-one uses them for now)
vcpkg_cmake_config_fixup(CONFIG_PATH share/clapack)
vcpkg_cmake_config_fixup()
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
# Install clapack wrappers.
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}/wrapper")
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/FindLAPACK.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
file(INSTALL "${SOURCE_PATH}/COPYING" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYING")

View File

@ -1,77 +0,0 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 320ccc6..414ac8e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,6 @@
cmake_minimum_required(VERSION 2.6)
project(CLAPACK C)
-enable_testing()
-include(CTest)
+find_package(BLAS REQUIRED)
if(WIN32 AND NOT CYGWIN)
set(SECOND_SRC ${CLAPACK_SOURCE_DIR}/INSTALL/winsecond.c)
@@ -11,7 +10,6 @@ else()
set(SECOND_SRC ${CLAPACK_SOURCE_DIR}/INSTALL/second.c)
set(DSECOND_SRC ${CLAPACK_SOURCE_DIR}/INSTALL/dsecnd.c)
endif()
-enable_testing()
option(USE_BLAS_WRAP "pre-pend f2c_ to each function in blas" OFF)
if(NOT USE_BLAS_WRAP)
# _zrotg_ seems to be missing in the wrap header
@@ -19,16 +17,15 @@ if(NOT USE_BLAS_WRAP)
endif()
include_directories(${CLAPACK_SOURCE_DIR}/INCLUDE)
add_subdirectory(F2CLIBS)
-add_subdirectory(BLAS)
add_subdirectory(SRC)
-add_subdirectory(TESTING)
set(CLAPACK_VERSION 3.2.1)
-set(CPACK_PACKAGE_VERSION_MAJOR 3)
-set(CPACK_PACKAGE_VERSION_MINOR 2)
-set(CPACK_PACKAGE_VERSION_PATCH 1)
-include(CPack)
-export(TARGETS f2c blas lapack FILE clapack-targets.cmake)
+export(TARGETS f2c lapack FILE ${CMAKE_INSTALL_PREFIX}/share/clapack/clapack-targets.cmake)
configure_file(${CLAPACK_SOURCE_DIR}/clapack-config-version.cmake.in
- ${CLAPACK_BINARY_DIR}/clapack-config-version.cmake @ONLY)
+ ${CMAKE_INSTALL_PREFIX}/share/clapack/clapack-config-version.cmake @ONLY)
configure_file(${CLAPACK_SOURCE_DIR}/clapack-config.cmake.in
- ${CLAPACK_BINARY_DIR}/clapack-config.cmake @ONLY)
+ ${CMAKE_INSTALL_PREFIX}/share/clapack/clapack-config.cmake @ONLY)
+install(FILES
+ ${CMAKE_CURRENT_LIST_DIR}/INCLUDE/clapack.h
+ ${CMAKE_CURRENT_LIST_DIR}/INCLUDE/f2c.h
+ DESTINATION include)
+
diff --git a/F2CLIBS/libf2c/CMakeLists.txt b/F2CLIBS/libf2c/CMakeLists.txt
index 43d7b3f..6fa3598 100644
--- a/F2CLIBS/libf2c/CMakeLists.txt
+++ b/F2CLIBS/libf2c/CMakeLists.txt
@@ -60,3 +60,11 @@ include_directories(${CLAPACK_SOURCE_DIR}/F2CLIBS/libf2c)
include_directories(${CLAPACK_BINARY_DIR}/F2CLIBS/libf2c)
add_library(f2c ${OFILES} ${CMAKE_CURRENT_BINARY_DIR}/arith.h)
set_property(TARGET f2c PROPERTY PREFIX lib)
+if(UNIX)
+ target_link_libraries(f2c m)
+endif()
+install(TARGETS f2c
+ RUNTIME DESTINATION bin
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib)
+
diff --git a/SRC/CMakeLists.txt b/SRC/CMakeLists.txt
index ac4cce3..07dc8c7 100644
--- a/SRC/CMakeLists.txt
+++ b/SRC/CMakeLists.txt
@@ -376,5 +376,9 @@ if(BUILD_COMPLEX16)
set(ALLOBJ ${ZLASRC} ${ALLAUX} ${DZLAUX})
endif()
add_library(lapack ${ALLOBJ} ${ALLXOBJ})
-target_link_libraries(lapack blas)
+target_link_libraries(lapack ${BLAS_LIBRARIES} f2c)
+install(TARGETS lapack
+ RUNTIME DESTINATION bin
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib)

View File

@ -1,8 +1,8 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index db58b4e..0fb61a0 100644
index 31a4083..ced7a68 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -15,6 +15,9 @@ if(NOT USE_BLAS_WRAP)
@@ -17,6 +17,9 @@ if(NOT USE_BLAS_WRAP)
# _zrotg_ seems to be missing in the wrap header
add_definitions(-DNO_BLAS_WRAP)
endif()
@ -11,17 +11,17 @@ index db58b4e..0fb61a0 100644
+endif()
include_directories(${CLAPACK_SOURCE_DIR}/INCLUDE)
add_subdirectory(F2CLIBS)
add_subdirectory(SRC)
find_package(BLAS REQUIRED)
diff --git a/F2CLIBS/libf2c/CMakeLists.txt b/F2CLIBS/libf2c/CMakeLists.txt
index 094614a..e5b40ab 100644
index 0e988d1..23d2451 100644
--- a/F2CLIBS/libf2c/CMakeLists.txt
+++ b/F2CLIBS/libf2c/CMakeLists.txt
@@ -44,12 +44,19 @@ if(UNIX)
@@ -44,11 +44,19 @@ if(UNIX)
endif()
set_target_properties(arithchk PROPERTIES COMPILE_DEFINITIONS
"NO_FPINIT;NO_LONG_LONG")
+
+if (ARITH_PATH)
+
+if(ARITH_PATH)
+configure_file(
+ "${ARITH_PATH}"
+ "${CMAKE_CURRENT_BINARY_DIR}/arith.h"
@ -32,11 +32,10 @@ index 094614a..e5b40ab 100644
COMMAND arithchk > ${CMAKE_CURRENT_BINARY_DIR}/arith.h
DEPENDS arithchk
)
-
+endif()
set(OFILES ${MISC} ${POW} ${CX} ${DCX} ${REAL} ${DBL} ${INT}
${HALF} ${CMP} ${EFL} ${CHAR} ${I77} ${TIME})
diff --git a/F2CLIBS/libf2c/inquire.c b/F2CLIBS/libf2c/inquire.c
index 5936a67..4846d41 100644
--- a/F2CLIBS/libf2c/inquire.c

View File

@ -1,11 +1,11 @@
message(STATUS "Using VCPKG FindLAPACK from package 'clapack'")
set(LAPACK_PREV_MODULE_PATH ${CMAKE_MODULE_PATH})
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
message(STATUS "Using vcpkg FindLAPACK.cmake from port 'clapack'.")
set(LAPACK_PREV_MODULE_PATH "${CMAKE_MODULE_PATH}")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
list(REMOVE_ITEM ARGS "NO_MODULE")
list(REMOVE_ITEM ARGS "CONFIG")
list(REMOVE_ITEM ARGS "MODULE")
_find_package(${ARGS})
_find_package(${ARGS} MODULE)
set(CMAKE_MODULE_PATH ${LAPACK_PREV_MODULE_PATH})

View File

@ -1,7 +1,7 @@
{
"name": "clapack",
"version": "3.2.1",
"port-version": 24,
"port-version": 25,
"description": "CLAPACK (f2c'ed version of LAPACK)",
"homepage": "https://netlib.org/lapack/",
"license": null,

View File

@ -101,6 +101,8 @@ clamav:arm64-windows=fail
clapack:arm-neon-android=skip # These skips/pass need to match the decision tree for which backends we use; see ports/blas/portfile.cmake
clapack:arm64-android=skip
clapack:arm64-osx=skip
clapack:arm64-windows-static-md=pass
clapack:arm64-windows-static=pass
clapack:x64-android=skip
clapack:x64-linux=skip
clapack:x64-windows-release=skip

View File

@ -186,14 +186,8 @@ chartdir=skip # chartdir does not offer stable download URLs
chmlib:arm64-linux=fail
chronoengine:arm64-linux=fail
clamav:arm64-windows=fail
clapack:arm64-linux=skip
clapack:arm64-osx=skip
clapack:x64-linux=skip
clapack:x64-windows-release=skip
clapack:x64-windows=skip
clapack:x86-windows=skip
clapack:arm64-linux=fail # needs target configuration data
clapack(android)=fail # needs target configuration data
clapack(x64 & windows & static)=skip # conflicts with lapack-reference which provides blas
clblas:arm-neon-android=fail
clblas:arm64-android=fail
clblas:x64-android=fail

View File

@ -1778,7 +1778,7 @@
},
"clapack": {
"baseline": "3.2.1",
"port-version": 24
"port-version": 25
},
"clara": {
"baseline": "1.1.5",

View File

@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "c906c4d2a4d74d625a897c3afc0558588f8fc50c",
"version": "3.2.1",
"port-version": 25
},
{
"git-tree": "f4fba3e37630b21e78f871e558e74efd5ea4a936",
"version": "3.2.1",