Skip to content

Commit fb9e3b0

Browse files
committed
CMake: Make libint2 Fortran interface explicit
1 parent f47820b commit fb9e3b0

3 files changed

Lines changed: 30 additions & 19 deletions

File tree

cmake/libint2-config.cmake.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
# oo - search for + orca = orca
4141
# bs - search for bagel + standard = bagel
4242
# bo - search for + orca
43+
# Fortran - require the Fortran interface target
4344

4445
@PACKAGE_INIT@
4546

@@ -55,6 +56,8 @@ list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
5556
# check library language component
5657
include(CMakeFindDependencyMacro)
5758

59+
set(${L2}_Fortran_FOUND @LIBINT2_ENABLE_FORTRAN@)
60+
5861
if(NOT TARGET Eigen3::Eigen)
5962
set(Eigen3_CONFIG @Eigen3_CONFIG@)
6063
if (NOT Eigen3_CONFIG OR NOT EXISTS ${Eigen3_CONFIG})

export/CMakeLists.txt.export

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ set(LIBINT2_INSTALL_DATADIR "${CMAKE_INSTALL_DATADIR}/libint/${LIBINT_VERSION}"
125125
set(LIBINT2_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/libint2"
126126
CACHE PATH "LIBINT2 CMAKE install directory")
127127

128+
if(NOT CMAKE_INSTALL_Fortran_MODULES)
129+
set(CMAKE_INSTALL_Fortran_MODULES "${LIBINT2_INSTALL_INCLUDEDIR}")
130+
endif()
131+
128132

129133
# ==== Dependencies ===========================================================
130134

@@ -668,21 +672,13 @@ if (LIBINT2_ENABLE_FORTRAN)
668672
)
669673

670674
# build module
671-
add_library(
672-
libint_f
673-
OBJECT
674-
fortran/libint_f.F90
675-
)
675+
add_library(libint_f OBJECT fortran/libint_f.F90)
676676
set_source_files_properties(
677677
fortran/libint_f.F90
678678
PROPERTIES
679679
OBJECT_DEPENDS "${PROJECT_BINARY_DIR}/fortran/libint2_types_f.h;${PROJECT_BINARY_DIR}/fortran/fortran_incldefs.h"
680680
)
681-
target_compile_definitions(
682-
libint_f
683-
PRIVATE
684-
__COMPILING_LIBINT2
685-
)
681+
target_compile_definitions(libint_f PRIVATE __COMPILING_LIBINT2)
686682
set_target_properties(
687683
libint_f
688684
PROPERTIES
@@ -700,6 +696,21 @@ if (LIBINT2_ENABLE_FORTRAN)
700696
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/${BUILDTREE_FMODDIR}/>
701697
)
702698

699+
add_library(int_f STATIC $<TARGET_OBJECTS:libint_f>)
700+
set_target_properties(int_f PROPERTIES OUTPUT_NAME "int2_f")
701+
if (L2_BUILD_SHARED_LIBS)
702+
target_link_libraries(int_f INTERFACE int-shared)
703+
else()
704+
target_link_libraries(int_f INTERFACE int-static)
705+
endif()
706+
target_include_directories(
707+
int_f
708+
INTERFACE
709+
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/fortran>
710+
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/${BUILDTREE_FMODDIR}>
711+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_Fortran_MODULES}>
712+
)
713+
703714
# Fortran tests merged into rest of tests
704715

705716
endif (LIBINT2_ENABLE_FORTRAN)
@@ -733,6 +744,9 @@ endif()
733744
if (L2_BUILD_STATIC_LIBS)
734745
list(APPEND _libint2_install_targets int-static)
735746
endif()
747+
if (LIBINT2_ENABLE_FORTRAN)
748+
list(APPEND _libint2_install_targets int_f)
749+
endif()
736750

737751
install(
738752
TARGETS ${_libint2_install_targets}
@@ -839,7 +853,7 @@ endif()
839853
if (LIBINT2_ENABLE_FORTRAN)
840854
install(
841855
DIRECTORY ${PROJECT_BINARY_DIR}/${BUILDTREE_FMODDIR}/
842-
DESTINATION "${LIBINT2_INSTALL_INCLUDEDIR}"
856+
DESTINATION "${CMAKE_INSTALL_Fortran_MODULES}"
843857
)
844858
endif()
845859

export/tests/CMakeLists.txt

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -242,10 +242,6 @@ endif (LIBINT2_REQUIRE_CXX_API)
242242

243243
if (LIBINT2_ENABLE_FORTRAN)
244244

245-
# Note: if forming compile line by hand rather than using targets, you'll
246-
# need to include the Fortran module file directory:
247-
# `target_include_directories(... PRIVATE $<TARGET_PROPERTY:libint_f,Fortran_MODULE_DIRECTORY>)`
248-
249245
add_executable(
250246
fortran_example-libint2
251247
EXCLUDE_FROM_ALL
@@ -254,8 +250,7 @@ if (LIBINT2_ENABLE_FORTRAN)
254250
target_link_libraries(
255251
fortran_example-libint2
256252
PRIVATE
257-
Libint2::int2
258-
libint_f
253+
int_f
259254
)
260255
add_test( # Test #14
261256
NAME libint2/fortran_example/build
@@ -283,14 +278,13 @@ if (LIBINT2_ENABLE_FORTRAN)
283278
EXCLUDE_FROM_ALL
284279
fortran/test.cc
285280
fortran/test-eri.cc
286-
$<TARGET_OBJECTS:libint_f>
287281
)
288282
target_link_libraries(
289283
fortran_test-libint2
290284
PRIVATE
291285
$<IF:$<TARGET_EXISTS:Libint2::int2-cxx>,Libint2::int2-cxx,Libint2::cxx>
292286
# N.B. cxx compiled library if LIBINT2_REQUIRE_CXX_API_COMPILED=ON else header-only library
293-
libint_f
287+
int_f
294288
)
295289
add_test( # Test #16
296290
NAME libint2/fortran_test/build

0 commit comments

Comments
 (0)