Skip to content

Commit 47c85ca

Browse files
committed
Export CMake config from meson
1 parent 8db6455 commit 47c85ca

10 files changed

Lines changed: 129 additions & 26 deletions

File tree

.github/workflows/build.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,18 @@ jobs:
198198
ninja -C ${{ env.BUILD_DIR }} install
199199
echo "MCTCLIB_PREFIX=$PWD/_dist" >> $GITHUB_ENV
200200
201+
- name: Discover installed files (CMake)
202+
if: ${{ matrix.build != 'fpm' }}
203+
run: |
204+
cmake -S test/export -B ${{ env.BUILD_DIR }}/discover-cmake -G Ninja -DCMAKE_PREFIX_PATH=$PWD/_dist/lib/cmake
205+
cmake --build ${{ env.BUILD_DIR }}/discover-cmake
206+
207+
- name: Discover installed files (Meson)
208+
if: ${{ matrix.build != 'fpm' }}
209+
run: |
210+
meson setup ${{ env.BUILD_DIR }}/discover-meson test/export --pkg-config-path=$PWD/_dist/lib/pkgconfig
211+
meson compile -C ${{ env.BUILD_DIR }}/discover-meson
212+
201213
- name: Create package
202214
if: ${{ matrix.build == 'meson' }}
203215
run: |

CMakeLists.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ include(GNUInstallDirs)
2828
add_subdirectory("config")
2929

3030
# Dependencies
31-
if(NOT TARGET "jonquild::jonquil" AND WITH_JSON)
31+
if(NOT TARGET "jonquil::jonquil" AND MCTCLIB_WITH_JSON)
3232
find_package("toml-f" REQUIRED)
3333
find_package("jonquil" REQUIRED)
3434
endif()
@@ -42,12 +42,13 @@ add_library(
4242
"${PROJECT_NAME}-lib"
4343
"${srcs}"
4444
)
45+
add_library("${PROJECT_NAME}::${PROJECT_NAME}-lib" ALIAS "${PROJECT_NAME}-lib")
4546
target_compile_definitions(
4647
"${PROJECT_NAME}-lib"
4748
PRIVATE
4849
"WITH_JSON=$<BOOL:${WITH_JSON}>"
4950
)
50-
if(WITH_OpenMP)
51+
if(MCTCLIB_WITH_OpenMP)
5152
find_package(OpenMP REQUIRED)
5253
target_link_libraries(
5354
"${PROJECT_NAME}-lib"
@@ -89,6 +90,7 @@ add_subdirectory("app")
8990

9091
# Export targets for other projects
9192
add_library("${PROJECT_NAME}" INTERFACE)
93+
add_library("${PROJECT_NAME}::${PROJECT_NAME}" ALIAS "${PROJECT_NAME}")
9294
target_link_libraries("${PROJECT_NAME}" INTERFACE "${PROJECT_NAME}-lib")
9395
install(
9496
TARGETS

config/CMakeLists.txt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,16 @@
1414

1515
option(BUILD_SHARED_LIBS "Whether the libraries built should be shared" FALSE)
1616

17-
option(WITH_OpenMP "Enable support for shared memory parallelisation with OpenMP" TRUE)
18-
option(WITH_JSON "Enable support for JSON parsing via jonquil" FALSE)
17+
if(NOT DEFINED WITH_OpenMP)
18+
set(WITH_OpenMP TRUE)
19+
endif()
20+
if(NOT DEFINED WITH_JSON)
21+
set(WITH_JSON FALSE)
22+
endif()
23+
option(MCTCLIB_WITH_OpenMP "Enable support for shared memory parallelisation with OpenMP" ${WITH_OpenMP})
24+
option(MCTCLIB_WITH_JSON "Enable support for JSON parsing via jonquil" ${WITH_JSON})
25+
set(MCTCLIB_USE_JONQUIL ${MCTCLIB_WITH_JSON})
26+
set(MCTCLIB_USE_TOMLF ${MCTCLIB_WITH_JSON})
1927

2028
set(
2129
"${PROJECT_NAME}-module-dir"
@@ -65,7 +73,7 @@ endif()
6573

6674
include(CMakePackageConfigHelpers)
6775
configure_package_config_file(
68-
"${CMAKE_CURRENT_SOURCE_DIR}/template.cmake"
76+
"${CMAKE_CURRENT_SOURCE_DIR}/template-config.cmake"
6977
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
7078
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
7179
)

config/template-config.cmake

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
@PACKAGE_INIT@
2+
3+
set(MCTCLIB_WITH_OpenMP @MCTCLIB_WITH_OpenMP@)
4+
set(MCTCLIB_WITH_JSON @MCTCLIB_WITH_JSON@)
5+
set(MCTCLIB_USE_JONQUIL @MCTCLIB_USE_JONQUIL@)
6+
set(MCTCLIB_USE_TOMLF @MCTCLIB_USE_TOMLF@)
7+
8+
enable_language("Fortran")
9+
10+
if(NOT TARGET "@PROJECT_NAME@::@PROJECT_NAME@")
11+
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake")
12+
include(CMakeFindDependencyMacro)
13+
14+
if(NOT TARGET "OpenMP::OpenMP_Fortran" AND MCTCLIB_WITH_OpenMP)
15+
find_dependency("OpenMP")
16+
endif()
17+
18+
if(NOT TARGET "tomlf::tomlf" AND MCTCLIB_USE_TOMLF)
19+
find_dependency("tomlf")
20+
endif()
21+
22+
if(NOT TARGET "jonquil::jonquil" AND MCTCLIB_USE_JONQUIL)
23+
find_dependency("jonquil")
24+
endif()
25+
endif()

config/template-targets.cmake

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
set(CMAKE_IMPORT_FILE_VERSION 1)
2+
3+
set(
4+
MCTCLIB_INCLUDEDIRS
5+
"@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@"
6+
"@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@/@module-dir@"
7+
)
8+
find_library(
9+
MCTCLIB_LIBRARIES
10+
"@PROJECT_NAME@"
11+
PATHS "@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@"
12+
NO_DEFAULT_PATH
13+
)
14+
set(
15+
MCTCLIB_DEPENDENCIES
16+
"$<$<BOOL:${MCTCLIB_USE_JONQUIL}>:jonquil::jonquil>"
17+
"$<$<BOOL:${MCTCLIB_USE_TOMLF}>:toml-f::toml-f>"
18+
"$<$<BOOL:${MCTCLIB_WITH_OpenMP}>:OpenMP::OpenMP_Fortran>"
19+
)
20+
21+
add_library(@PROJECT_NAME@::@PROJECT_NAME@-lib INTERFACE IMPORTED)
22+
add_library(@PROJECT_NAME@::@PROJECT_NAME@ ALIAS @PROJECT_NAME@::@PROJECT_NAME@-lib)
23+
target_link_libraries(@PROJECT_NAME@::@PROJECT_NAME@-lib INTERFACE ${MCTCLIB_LIBRARIES} ${MCTCLIB_DEPENDENCIES})
24+
target_include_directories(@PROJECT_NAME@::@PROJECT_NAME@-lib INTERFACE ${MCTCLIB_INCLUDEDIRS})

config/template.cmake

Lines changed: 0 additions & 21 deletions
This file was deleted.

meson.build

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,40 @@ if install
8787
subdirs: ['', module_id],
8888
)
8989

90+
cmake_data = configuration_data({
91+
'PROJECT_NAME': meson.project_name(),
92+
'PROJECT_VERSION': meson.project_version(),
93+
'PACKAGE_INIT': '',
94+
'CMAKE_INSTALL_PREFIX': get_option('prefix'),
95+
'CMAKE_INSTALL_INCLUDEDIR': get_option('includedir'),
96+
'CMAKE_INSTALL_LIBDIR': get_option('libdir'),
97+
'MCTCLIB_WITH_OpenMP': get_option('openmp') ? 'ON' : 'OFF',
98+
'MCTCLIB_WITH_JSON': get_option('json') ? 'ON' : 'OFF',
99+
'MCTCLIB_USE_JONQUIL': 'OFF',
100+
'MCTCLIB_USE_TOMLF': 'OFF',
101+
'module-dir': module_id,
102+
})
103+
cmake_files = [
104+
configure_file(
105+
input: files('config'/'template-config.cmake'),
106+
output: meson.project_name() + '-config.cmake',
107+
configuration: cmake_data,
108+
),
109+
configure_file(
110+
input: files('config'/'template-targets.cmake'),
111+
output: meson.project_name() + '-targets.cmake',
112+
configuration: cmake_data,
113+
),
114+
files('config'/'cmake'/'Findjonquil.cmake'),
115+
files('config'/'cmake'/'Findtoml-f.cmake'),
116+
files('config'/'cmake'/'mctc-utils.cmake'),
117+
]
118+
install_data(
119+
cmake_files,
120+
install_dir: get_option('libdir')/'cmake'/meson.project_name(),
121+
install_tag: 'devel',
122+
)
123+
90124
asciidoc = find_program('asciidoctor', required: false)
91125
if asciidoc.found()
92126
install_man(

test/export/CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
cmake_minimum_required(VERSION 3.18)
2+
project(test-test Fortran)
3+
4+
find_package(mctc-lib CONFIG REQUIRED)
5+
6+
add_executable(test-test "example.f90")
7+
target_link_libraries(test-test PUBLIC mctc-lib::mctc-lib)

test/export/example.f90

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
program tester
2+
use mctc_env, only : error_type
3+
implicit none
4+
type(error_type), allocatable :: error
5+
end program tester

test/export/meson.build

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
project('test-test', 'fortran')
2+
3+
executable(
4+
'test-test',
5+
sources: ['example.f90'],
6+
dependencies: [dependency('mctc-lib')],
7+
)

0 commit comments

Comments
 (0)