Skip to content

Commit 8757e8b

Browse files
Merge pull request #12 from jchristopherson/v2.0.1
2 parents 5c58f00 + a8a62cd commit 8757e8b

File tree

13 files changed

+222
-171
lines changed

13 files changed

+222
-171
lines changed

CMakeLists.txt

Lines changed: 9 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,49 +3,23 @@ cmake_minimum_required(VERSION 3.24)
33
project(
44
nonlin
55
LANGUAGES Fortran
6-
VERSION 2.0.0
6+
VERSION 2.0.1
77
)
8-
9-
# Get helper macros and functions
10-
include("${PROJECT_SOURCE_DIR}/cmake/helper.cmake")
8+
set(CMAKE_Fortran_STANDARD 2018)
9+
set(CMAKE_Fortran_STANDARD_REQUIRED TRUE)
1110

1211
# Confgiure everything
1312
add_subdirectory(configure)
1413

15-
# Deal with the dependencies
16-
find_package(BLAS)
17-
find_package(LAPACK)
18-
add_subdirectory(dependencies)
19-
20-
if (NOT BLAS_FOUND OR NOT LAPACK_FOUND)
21-
message(STATUS "BLAS/LAPACK could not be found. A reference version will be employed.")
22-
include(FetchContent)
23-
FetchContent_Declare(
24-
lapack
25-
GIT_REPOSITORY "https://github.com/Reference-LAPACK/lapack"
26-
)
27-
FetchContent_MakeAvailable(lapack)
28-
set(BLAS_LIBRARIES blas)
29-
set(LAPACK_LIBRARIES lapack)
30-
endif()
31-
3214
# Source
3315
add_subdirectory(src)
34-
add_fortran_library(
35-
${PROJECT_NAME}
36-
${PROJECT_INCLUDE_DIR}
37-
${CMAKE_INSTALL_INCLUDEDIR}
38-
${PROJECT_VERSION}
39-
${PROJECT_VERSION_MAJOR}
40-
${NONLIN_SOURCES}
41-
)
42-
target_link_libraries(
43-
${PROJECT_NAME}
44-
${BLAS_LIBRARIES}
45-
${LAPACK_LIBRARIES}
16+
17+
# Installation Instructions
18+
install(
19+
EXPORT ${PROJECT_NAME}-targets
20+
NAMESPACE ${PROJECT_NAME}::
21+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
4622
)
47-
link_library(${PROJECT_NAME} ${ferror_LIBRARY} ${ferror_INCLUDE_DIR})
48-
link_library(${PROJECT_NAME} ${linalg_LIBRARY} ${linalg_INCLUDE_DIR})
4923

5024
# Testing
5125
option(BUILD_TESTING "Build tests")

cmake/helper.cmake

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

configure/CMakeLists.txt

Lines changed: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
# Get the macros and functions we'll need
2-
include("${PROJECT_SOURCE_DIR}/cmake/helper.cmake")
3-
41
# Set a default build type if none was specified
52
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
63
message(STATUS "Setting build type to 'Release' as none was specified.")
@@ -13,11 +10,64 @@ endif()
1310
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
1411

1512
# Export all symbols on Windows when building libraries
16-
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
13+
SET(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
1714

1815
# Utilize the GNU installation structure
1916
include(GNUInstallDirs)
2017

21-
# Locate the local include directory
22-
set(PROJECT_INCLUDE_DIR ${PROJECT_BINARY_DIR}/include)
23-
set(PROJECT_INCLUDE_DIR ${PROJECT_INCLUDE_DIR} PARENT_SCOPE)
18+
# Module directory
19+
if(NOT DEFINED CMAKE_INSTALL_MODULEDIR)
20+
set(
21+
CMAKE_INSTALL_MODULEDIR
22+
"${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/${CMAKE_Fortran_COMPILER_ID}-${CMAKE_Fortran_COMPILER_VERSION}"
23+
CACHE
24+
STRING
25+
"Directory in prefix to install generated module files"
26+
)
27+
endif()
28+
29+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
30+
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" PARENT_SCOPE)
31+
32+
# Export a pkg-config file
33+
configure_file(
34+
"${CMAKE_CURRENT_SOURCE_DIR}/template.pc"
35+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc"
36+
@ONLY
37+
)
38+
39+
install(
40+
FILES
41+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc"
42+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
43+
)
44+
45+
# Export CMake package file
46+
include(CMakePackageConfigHelpers)
47+
configure_package_config_file(
48+
"${CMAKE_CURRENT_SOURCE_DIR}/template.cmake"
49+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
50+
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
51+
)
52+
53+
if(BUILD_SHARED_LIBS OR PROJECT_VERSION_MAJOR EQUAL 0)
54+
# Due to the uncertain ABI compatibility of Fortran shared libraries
55+
# limit compatibility for dynamic linking to same minor version.
56+
set(COMPATIBILITY SameMinorVersion)
57+
else()
58+
# Require API compatibility via semantic versioning for static linking.
59+
set(COMPATIBILITY SameMajorVersion)
60+
endif()
61+
62+
write_basic_package_version_file(
63+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
64+
VERSION "${PROJECT_VERSION}"
65+
COMPATIBILITY ${COMPATIBILITY}
66+
)
67+
68+
install(
69+
FILES
70+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
71+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
72+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
73+
)

configure/template.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
@PACKAGE_INIT@
2+
3+
if(NOT TARGET "@PROJECT_NAME@::@PROJECT_NAME@")
4+
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake")
5+
endif()

configure/template.pc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
prefix=@CMAKE_INSTALL_PREFIX@
2+
libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
3+
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
4+
moduledir=${prefix}/@CMAKE_INSTALL_MODULEDIR@
5+
6+
Name: @PROJECT_NAME@
7+
Description: @PROJECT_DESCRIPTION@
8+
Version: @PROJECT_VERSION@
9+
Libs: -L${libdir} -l@PROJECT_NAME@
10+
Cflags: -I${includedir} -I${moduledir}

dependencies/CMakeLists.txt

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

dependencies/ferror/CMakeLists.txt

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

dependencies/linalg/CMakeLists.txt

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

examples/CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,14 @@ target_link_libraries(newton_example_2 nonlin)
4141
# Polynomial Roots Example
4242
add_executable(polynomial_roots_example nonlin_poly_roots_example.f90)
4343
target_link_libraries(polynomial_roots_example nonlin)
44+
45+
if (${BUILD_SHARED_LIBS} AND WIN32)
46+
add_custom_command(
47+
TARGET quasi_newton_example
48+
POST_BUILD
49+
COMMAND ${CMAKE_COMMAND} -E copy
50+
$<TARGET_RUNTIME_DLLS:quasi_newton_example>
51+
$<TARGET_FILE_DIR:quasi_newton_example>
52+
COMMAND_EXPAND_LISTS
53+
)
54+
endif()

fpm.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name = "nonlin"
2-
version = "2.0.0"
2+
version = "2.0.1"
33
license = "GPL-3.0"
44
author = "Jason Christopherson"
55
maintainer = "Jason Christopherson"

0 commit comments

Comments
 (0)