From cecc411c2ead4b50c2cfa48387048b2dee1ac8f2 Mon Sep 17 00:00:00 2001 From: AsTonyshment Date: Mon, 20 Jul 2026 19:47:18 +0800 Subject: [PATCH 1/2] Fix: Restore incremental builds with pkg-config ELPA --- cmake/modules/FindELPA.cmake | 40 ++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/cmake/modules/FindELPA.cmake b/cmake/modules/FindELPA.cmake index ce548b34c7..9ff8ac5a88 100644 --- a/cmake/modules/FindELPA.cmake +++ b/cmake/modules/FindELPA.cmake @@ -7,6 +7,17 @@ # Deprecated (TODO: Remove this part) # ======================================================================== +# Migrate caches created when FindPkgConfig used the public ELPA prefix. +if(DEFINED CACHE{ELPA_LIBRARIES}) + get_property(_elpa_libraries_cache_type CACHE ELPA_LIBRARIES PROPERTY TYPE) + if(_elpa_libraries_cache_type STREQUAL "INTERNAL") + unset(ELPA_LIBRARIES CACHE) + unset(ELPA_INCLUDE_DIRS CACHE) + unset(ELPA_LINK_LIBRARIES CACHE) + endif() +endif() +unset(_elpa_libraries_cache_type) + # Compatible layer towards old manual routines if(DEFINED ELPA_DIR) message(WARNING "ELPA_DIR is deprecated and will be removed in the future release.") @@ -47,6 +58,8 @@ endif() # ======================================================================== +# TODO: Make pkg-config discovery unconditional after removing the deprecated +# manual discovery path. if(NOT ELPA_INCLUDE_DIRS) find_package(PkgConfig) if(NOT PKG_CONFIG_FOUND) @@ -54,13 +67,17 @@ if(NOT ELPA_INCLUDE_DIRS) endif() # Find preferred library corresponding with ABACUS configuration first if(ENABLE_OPENMP) - pkg_search_module(ELPA REQUIRED IMPORTED_TARGET GLOBAL elpa_openmp elpa) + pkg_search_module(ELPA_PKG REQUIRED IMPORTED_TARGET GLOBAL elpa_openmp elpa) else() - pkg_search_module(ELPA REQUIRED IMPORTED_TARGET GLOBAL elpa) + pkg_search_module(ELPA_PKG REQUIRED IMPORTED_TARGET GLOBAL elpa) endif() - if(${ELPA_VERSION} VERSION_LESS "2021.05.001") + if(${ELPA_PKG_VERSION} VERSION_LESS "2021.05.001") message(FATAL_ERROR "ELPA version >= 2021.05.001 is required.") endif() + set(ELPA_INCLUDE_DIRS ${ELPA_PKG_INCLUDE_DIRS}) + set(ELPA_LINK_LIBRARIES ${ELPA_PKG_LINK_LIBRARIES}) + set(ELPA_LIBRARIES ${ELPA_PKG_LIBRARIES}) + set(ELPA_VERSION ${ELPA_PKG_VERSION}) endif() # Handle the QUIET and REQUIRED arguments and @@ -73,18 +90,23 @@ if(ELPA_FOUND) list(GET ELPA_LINK_LIBRARIES 0 ELPA_LIBRARY) set(ELPA_INCLUDE_DIR ${ELPA_INCLUDE_DIRS}) if(NOT TARGET ELPA::ELPA) - add_library(ELPA::ELPA UNKNOWN IMPORTED) - set_target_properties(ELPA::ELPA PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGES "C" - IMPORTED_LOCATION "${ELPA_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${ELPA_INCLUDE_DIR}") + # TODO: Remove the manual target fallback with the deprecated ELPA inputs. + if(TARGET PkgConfig::ELPA_PKG) + add_library(ELPA::ELPA ALIAS PkgConfig::ELPA_PKG) + else() + add_library(ELPA::ELPA UNKNOWN IMPORTED) + set_target_properties(ELPA::ELPA PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${ELPA_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${ELPA_INCLUDE_DIR}") + endif() endif() endif() set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${ELPA_INCLUDE_DIR}) # Compability workaround for ELPA_DIR -# TODO: Remove this check +# TODO: Remove this check with the deprecated ELPA_DIR path. include(CheckCXXSourceCompiles) check_cxx_source_compiles(" #include From 6d9b0beae2137bc3abd3273b4257f6487dcba920 Mon Sep 17 00:00:00 2001 From: AsTonyshment Date: Mon, 20 Jul 2026 20:09:05 +0800 Subject: [PATCH 2/2] Change ${ELPA_PKG_VERSION} to ELPA_PKG_VERSION --- cmake/modules/FindELPA.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/modules/FindELPA.cmake b/cmake/modules/FindELPA.cmake index 9ff8ac5a88..90594e467d 100644 --- a/cmake/modules/FindELPA.cmake +++ b/cmake/modules/FindELPA.cmake @@ -71,7 +71,7 @@ if(NOT ELPA_INCLUDE_DIRS) else() pkg_search_module(ELPA_PKG REQUIRED IMPORTED_TARGET GLOBAL elpa) endif() - if(${ELPA_PKG_VERSION} VERSION_LESS "2021.05.001") + if(ELPA_PKG_VERSION VERSION_LESS "2021.05.001") message(FATAL_ERROR "ELPA version >= 2021.05.001 is required.") endif() set(ELPA_INCLUDE_DIRS ${ELPA_PKG_INCLUDE_DIRS})