Skip to content

Commit 269a1d8

Browse files
committed
Update CMake build files
1 parent 49add53 commit 269a1d8

File tree

6 files changed

+123
-78
lines changed

6 files changed

+123
-78
lines changed

CMakeLists.txt

Lines changed: 34 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -45,55 +45,45 @@ set_target_properties(
4545
OUTPUT_NAME "${PROJECT_NAME}"
4646
VERSION "${PROJECT_VERSION}"
4747
SOVERSION "${PROJECT_VERSION_MAJOR}"
48-
Fortran_MODULE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include"
48+
Fortran_MODULE_DIRECTORY "${PROJECT_BINARY_DIR}/include"
4949
)
5050
target_include_directories(
5151
"${PROJECT_NAME}-lib"
52-
INTERFACE
53-
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
54-
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
52+
PUBLIC
53+
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>
54+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${module-dir}>
5555
)
5656

57-
if(NOT is-subproject OR BUILD_SHARED_LIBS)
58-
# Export targets for other projects
59-
add_library("${PROJECT_NAME}" INTERFACE)
60-
target_link_libraries("${PROJECT_NAME}" INTERFACE "${PROJECT_NAME}-lib")
61-
install(
62-
TARGETS
63-
"${PROJECT_NAME}"
64-
"${PROJECT_NAME}-lib"
65-
EXPORT
66-
"${PROJECT_NAME}-targets"
67-
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
68-
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
69-
)
70-
install(
71-
EXPORT
72-
"${PROJECT_NAME}-targets"
73-
NAMESPACE
74-
"${PROJECT_NAME}::"
75-
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
76-
)
77-
install(
78-
DIRECTORY
79-
"${CMAKE_CURRENT_BINARY_DIR}/include/"
80-
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
81-
)
82-
# Package license files
83-
install(
84-
FILES
85-
"LICENSE"
86-
DESTINATION "${CMAKE_INSTALL_DATADIR}/licenses/${PROJECT_NAME}"
87-
)
88-
else()
89-
# Expose license files to parent project
90-
set(
91-
"${PROJECT_NAME}-lic"
92-
"${CMAKE_CURRENT_SOURCE_DIR}/LICENSE-Apache"
93-
"${CMAKE_CURRENT_SOURCE_DIR}/LICENSE-MIT"
94-
PARENT_SCOPE
95-
)
96-
endif()
57+
# Export targets for other projects
58+
add_library("${PROJECT_NAME}" INTERFACE)
59+
target_link_libraries("${PROJECT_NAME}" INTERFACE "${PROJECT_NAME}-lib")
60+
install(
61+
TARGETS
62+
"${PROJECT_NAME}"
63+
"${PROJECT_NAME}-lib"
64+
EXPORT
65+
"${PROJECT_NAME}-targets"
66+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
67+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
68+
)
69+
install(
70+
EXPORT
71+
"${PROJECT_NAME}-targets"
72+
NAMESPACE
73+
"${PROJECT_NAME}::"
74+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
75+
)
76+
install(
77+
DIRECTORY
78+
"${PROJECT_BINARY_DIR}/include/"
79+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${module-dir}"
80+
)
81+
# Package license files
82+
install(
83+
FILES
84+
"LICENSE"
85+
DESTINATION "${CMAKE_INSTALL_DATADIR}/licenses/${PROJECT_NAME}"
86+
)
9787

9888
# add the testsuite
9989
enable_testing()

config/CMakeLists.txt

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@
1515

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

18+
set(
19+
module-dir
20+
"${PROJECT_NAME}/${CMAKE_Fortran_COMPILER_ID}-${CMAKE_Fortran_COMPILER_VERSION}"
21+
)
22+
set(module-dir "${module-dir}" PARENT_SCOPE)
23+
1824
# Set build type as CMake does not provide defaults
1925
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
2026
set(
@@ -28,33 +34,31 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
2834
)
2935
endif()
3036

31-
if(NOT is-subproject OR BUILD_SHARED_LIBS)
32-
include(CMakePackageConfigHelpers)
33-
configure_package_config_file(
34-
"${CMAKE_CURRENT_SOURCE_DIR}/template.cmake"
35-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
36-
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
37-
)
38-
write_basic_package_version_file(
39-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
40-
VERSION "${PROJECT_VERSION}"
41-
COMPATIBILITY SameMinorVersion
42-
)
43-
install(
44-
FILES
45-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
46-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
47-
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
48-
)
37+
include(CMakePackageConfigHelpers)
38+
configure_package_config_file(
39+
"${CMAKE_CURRENT_SOURCE_DIR}/template.cmake"
40+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
41+
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
42+
)
43+
write_basic_package_version_file(
44+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
45+
VERSION "${PROJECT_VERSION}"
46+
COMPATIBILITY SameMinorVersion
47+
)
48+
install(
49+
FILES
50+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
51+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
52+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
53+
)
4954

50-
configure_file(
51-
"${CMAKE_CURRENT_SOURCE_DIR}/template.pc"
52-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc"
53-
@ONLY
54-
)
55-
install(
56-
FILES
57-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc"
58-
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
59-
)
60-
endif()
55+
configure_file(
56+
"${CMAKE_CURRENT_SOURCE_DIR}/template.pc"
57+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc"
58+
@ONLY
59+
)
60+
install(
61+
FILES
62+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc"
63+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
64+
)

config/install-mod.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/usr/bin/env python
2+
# This file is part of test-drive.
3+
# SPDX-Identifier: Apache-2.0
4+
#
5+
# Licensed under the Apache License, Version 2.0 (the "License");
6+
# you may not use this file except in compliance with the License.
7+
# You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing, software
12+
# distributed under the License is distributed on an "AS IS" BASIS,
13+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
# See the License for the specific language governing permissions and
15+
# limitations under the License.
16+
17+
from os import environ, listdir, makedirs
18+
from os.path import join, isdir, exists
19+
from sys import argv
20+
from shutil import copy
21+
22+
build_dir = environ["MESON_BUILD_ROOT"]
23+
if "MESON_INSTALL_DESTDIR_PREFIX" in environ:
24+
install_dir = environ["MESON_INSTALL_DESTDIR_PREFIX"]
25+
else:
26+
install_dir = environ["MESON_INSTALL_PREFIX"]
27+
28+
include_dir = argv[1] if len(argv) > 1 else "include"
29+
module_dir = join(install_dir, include_dir)
30+
31+
modules = []
32+
for d in listdir(build_dir):
33+
bd = join(build_dir, d)
34+
if isdir(bd):
35+
for f in listdir(bd):
36+
if f.endswith(".mod"):
37+
modules.append(join(bd, f))
38+
39+
if not exists(module_dir):
40+
makedirs(module_dir)
41+
42+
for mod in modules:
43+
print("Installing", mod, "to", module_dir)
44+
copy(mod, module_dir)

config/template.pc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ Name: @PROJECT_NAME@
66
Description: @PROJECT_DESCRIPTION@
77
Version: @PROJECT_VERSION@
88
Libs: -L${libdir} -l@PROJECT_NAME@
9-
Cflags: -I${includedir}
9+
Cflags: -I${includedir} -I${includedir}/@module-dir@

meson.build

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,17 @@ if install
6363
install_dir: get_option('datadir')/'licenses'/meson.project_name()
6464
)
6565

66+
module_id = meson.project_name() / fc_id + '-' + fc.version()
67+
meson.add_install_script(
68+
'config'/'install-mod.py',
69+
get_option('includedir') / module_id,
70+
)
71+
6672
pkg = import('pkgconfig')
6773
pkg.generate(
6874
testdrive_lib,
6975
description: 'The simple testing framework',
76+
subdirs: ['', module_id],
7077
)
7178
endif
7279

test/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,17 @@ foreach(t IN LISTS tests)
2929
endforeach()
3030

3131
add_executable(
32-
tester
32+
"${PROJECT_NAME}-tester"
3333
"${test-srcs}"
3434
)
3535
target_link_libraries(
36-
tester
36+
"${PROJECT_NAME}-tester"
3737
PRIVATE
3838
"${PROJECT_NAME}-lib"
3939
)
4040

41-
add_test("all-tests" tester)
41+
add_test("all-tests" "${PROJECT_NAME}-tester")
4242

4343
foreach(t IN LISTS tests)
44-
add_test("${t}" tester "${t}")
44+
add_test("${t}" "${PROJECT_NAME}-tester" "${t}")
4545
endforeach()

0 commit comments

Comments
 (0)