From fb9e3b06cb8510f4ac47610cdf114ea6cd3c8eaa Mon Sep 17 00:00:00 2001 From: Growl Date: Tue, 23 Jun 2026 12:49:46 +0800 Subject: [PATCH] CMake: Make libint2 Fortran interface explicit --- cmake/libint2-config.cmake.in | 3 +++ export/CMakeLists.txt.export | 36 ++++++++++++++++++++++++----------- export/tests/CMakeLists.txt | 10 ++-------- 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/cmake/libint2-config.cmake.in b/cmake/libint2-config.cmake.in index dce83a3f4..54c4da929 100644 --- a/cmake/libint2-config.cmake.in +++ b/cmake/libint2-config.cmake.in @@ -40,6 +40,7 @@ # oo - search for + orca = orca # bs - search for bagel + standard = bagel # bo - search for + orca +# Fortran - require the Fortran interface target @PACKAGE_INIT@ @@ -55,6 +56,8 @@ list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) # check library language component include(CMakeFindDependencyMacro) +set(${L2}_Fortran_FOUND @LIBINT2_ENABLE_FORTRAN@) + if(NOT TARGET Eigen3::Eigen) set(Eigen3_CONFIG @Eigen3_CONFIG@) if (NOT Eigen3_CONFIG OR NOT EXISTS ${Eigen3_CONFIG}) diff --git a/export/CMakeLists.txt.export b/export/CMakeLists.txt.export index 5474b1ff1..3e938c8b9 100644 --- a/export/CMakeLists.txt.export +++ b/export/CMakeLists.txt.export @@ -125,6 +125,10 @@ set(LIBINT2_INSTALL_DATADIR "${CMAKE_INSTALL_DATADIR}/libint/${LIBINT_VERSION}" set(LIBINT2_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/libint2" CACHE PATH "LIBINT2 CMAKE install directory") +if(NOT CMAKE_INSTALL_Fortran_MODULES) + set(CMAKE_INSTALL_Fortran_MODULES "${LIBINT2_INSTALL_INCLUDEDIR}") +endif() + # ==== Dependencies =========================================================== @@ -668,21 +672,13 @@ if (LIBINT2_ENABLE_FORTRAN) ) # build module - add_library( - libint_f - OBJECT - fortran/libint_f.F90 - ) + add_library(libint_f OBJECT fortran/libint_f.F90) set_source_files_properties( fortran/libint_f.F90 PROPERTIES OBJECT_DEPENDS "${PROJECT_BINARY_DIR}/fortran/libint2_types_f.h;${PROJECT_BINARY_DIR}/fortran/fortran_incldefs.h" ) - target_compile_definitions( - libint_f - PRIVATE - __COMPILING_LIBINT2 - ) + target_compile_definitions(libint_f PRIVATE __COMPILING_LIBINT2) set_target_properties( libint_f PROPERTIES @@ -700,6 +696,21 @@ if (LIBINT2_ENABLE_FORTRAN) $ ) + add_library(int_f STATIC $) + set_target_properties(int_f PROPERTIES OUTPUT_NAME "int2_f") + if (L2_BUILD_SHARED_LIBS) + target_link_libraries(int_f INTERFACE int-shared) + else() + target_link_libraries(int_f INTERFACE int-static) + endif() + target_include_directories( + int_f + INTERFACE + $ + $ + $ + ) + # Fortran tests merged into rest of tests endif (LIBINT2_ENABLE_FORTRAN) @@ -733,6 +744,9 @@ endif() if (L2_BUILD_STATIC_LIBS) list(APPEND _libint2_install_targets int-static) endif() +if (LIBINT2_ENABLE_FORTRAN) + list(APPEND _libint2_install_targets int_f) +endif() install( TARGETS ${_libint2_install_targets} @@ -839,7 +853,7 @@ endif() if (LIBINT2_ENABLE_FORTRAN) install( DIRECTORY ${PROJECT_BINARY_DIR}/${BUILDTREE_FMODDIR}/ - DESTINATION "${LIBINT2_INSTALL_INCLUDEDIR}" + DESTINATION "${CMAKE_INSTALL_Fortran_MODULES}" ) endif() diff --git a/export/tests/CMakeLists.txt b/export/tests/CMakeLists.txt index ca2b48249..4995eec13 100644 --- a/export/tests/CMakeLists.txt +++ b/export/tests/CMakeLists.txt @@ -242,10 +242,6 @@ endif (LIBINT2_REQUIRE_CXX_API) if (LIBINT2_ENABLE_FORTRAN) - # Note: if forming compile line by hand rather than using targets, you'll - # need to include the Fortran module file directory: - # `target_include_directories(... PRIVATE $)` - add_executable( fortran_example-libint2 EXCLUDE_FROM_ALL @@ -254,8 +250,7 @@ if (LIBINT2_ENABLE_FORTRAN) target_link_libraries( fortran_example-libint2 PRIVATE - Libint2::int2 - libint_f + int_f ) add_test( # Test #14 NAME libint2/fortran_example/build @@ -283,14 +278,13 @@ if (LIBINT2_ENABLE_FORTRAN) EXCLUDE_FROM_ALL fortran/test.cc fortran/test-eri.cc - $ ) target_link_libraries( fortran_test-libint2 PRIVATE $,Libint2::int2-cxx,Libint2::cxx> # N.B. cxx compiled library if LIBINT2_REQUIRE_CXX_API_COMPILED=ON else header-only library - libint_f + int_f ) add_test( # Test #16 NAME libint2/fortran_test/build