-
Notifications
You must be signed in to change notification settings - Fork 3
/
CMakeLists.txt
150 lines (116 loc) · 5.96 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
##
## CMakeFile for libTheSky
## MvdS, 2013-06-27: initial version.
##
## Copyright (c) 2002-2023 Marc van der Sluys - marc.vandersluys.nl
##
## This file is part of the libTheSky package,
## see: https://libthesky.sf.net/
##
## This is free software: you can redistribute it and/or modify it under the terms of the
## European Union Public Licence 1.2 (EUPL 1.2).
##
## This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
## without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
## See the EU Public Licence for more details.
##
## You should have received a copy of the European Union Public Licence along with this code.
## If not, see <https://www.eupl.eu/1.2/en/>.
cmake_minimum_required( VERSION 2.8 FATAL_ERROR )
# Set build type. Do this *before* we set the project name:
if( NOT CMAKE_BUILD_TYPE )
set( CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
"Choose the type of build, options are: None Debug Release RelWithDebInfo Profile."
FORCE )
endif( NOT CMAKE_BUILD_TYPE )
set( CMAKE_CONFIGURATION_TYPES "${CMAKE_BUILD_TYPE}" CACHE INTERNAL "internal" )
# Project name and language:
project( libTheSky Fortran )
# Increase verbosity for debugging:
option( CMAKE_VERBOSE_MAKEFILE "Verbose makefile" on )
# Search in the CMake/ directory for CMake modules:
list( APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake )
# Various compile/optimisation options that we may want to enable:
include( SetCompileOptions )
# Place the products in their directories:
get_filename_component( Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME )
if( COMPILER_SPECIFIC_LIBS )
set( MODULE_DIRECTORY "${CMAKE_SOURCE_DIR}/usr/include/libTheSky/${Fortran_COMPILER_NAME}" )
else( COMPILER_SPECIFIC_LIBS )
set( MODULE_DIRECTORY "${CMAKE_SOURCE_DIR}/usr/include/libTheSky" )
endif( COMPILER_SPECIFIC_LIBS )
set( LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/usr/lib${LIB_SUFFIX}" )
# Find dependencies:
find_package( LibSUFR REQUIRED )
set( INCLUDE_FLAGS "-I${LibSUFR_INCLUDES}" ) # will be transferred to CompilerFlags
# Set source files:
include( FileList )
# Set FORTRAN compiler flags:
include( CompilerFlags_Fortran )
# Find the package version from the VERSION file and stick it into PKG_VERSION:
# The file VERSION is either in the root directory of the package, or in doc/:
set( VERSION_FILE ${CMAKE_SOURCE_DIR}/VERSION )
if( NOT EXISTS ${VERSION_FILE} )
set( VERSION_FILE ${CMAKE_SOURCE_DIR}/doc/VERSION )
endif( NOT EXISTS ${VERSION_FILE} )
set( PKG_VERSION "0.0.0" ) # Indicates that the version number was not found
file(STRINGS ${VERSION_FILE} Lines )
foreach( Line ${Lines} )
string(REGEX MATCH "Release version:.+" Line ${Line} ) # Returns the matching string
string(COMPARE NOTEQUAL "${Line}" "" Matches ) # If the string is not empty, we have a match
if( Matches )
string(REPLACE "Release version:" "" Line ${Line}) # Remove text
string(STRIP ${Line} Line) # Strip leading and trailing spaces
set( PKG_VERSION ${Line} )
endif( Matches )
endforeach()
message( STATUS "libTheSky version in the current package: ${PKG_VERSION}" )
message( STATUS "" )
# Create the file code_version.f90, which contains the code version number/hash and date:
if( NOT EXISTS ${CMAKE_SOURCE_DIR}/src/code_version.f90 OR CREATE_VERSION )
add_custom_command(
OUTPUT ${CMAKE_SOURCE_DIR}/src/code_version.f90
COMMAND cd $(CMAKE_SOURCE_DIR)
COMMAND . ${CMAKE_SOURCE_DIR}/code_version.sh ${CMAKE_SOURCE_DIR} src/code_version.f90 ${Fortran_COMPILER_NAME} ${OPT_FLAGS}
)
endif( NOT EXISTS ${CMAKE_SOURCE_DIR}/src/code_version.f90 OR CREATE_VERSION )
# Create libraries:
if( CREATE_SHAREDLIB )
add_library( "libTheSky_shared" SHARED ${SRC_FILES} )
if( COMPILER_SPECIFIC_LIBS )
set_target_properties( libTheSky_shared PROPERTIES OUTPUT_NAME "TheSky_${Fortran_COMPILER_NAME}" )
else( COMPILER_SPECIFIC_LIBS )
set_target_properties( libTheSky_shared PROPERTIES OUTPUT_NAME "TheSky" )
endif( COMPILER_SPECIFIC_LIBS )
set_target_properties( libTheSky_shared PROPERTIES Fortran_MODULE_DIRECTORY ${MODULE_DIRECTORY} )
endif( CREATE_SHAREDLIB )
# Use add_dependencies below in order to pretend the static lib depends on the shared. This
# seems to be necessary to ensure that it is built *after* shared. If this doesn't
# happen, multiple threads will be pouring data into the code_version file simultaneously.
if( CREATE_STATICLIB )
add_library( "libTheSky_static" STATIC ${SRC_FILES} )
if( COMPILER_SPECIFIC_LIBS )
set_target_properties( libTheSky_static PROPERTIES OUTPUT_NAME "TheSky_${Fortran_COMPILER_NAME}" )
else( COMPILER_SPECIFIC_LIBS )
set_target_properties( libTheSky_static PROPERTIES OUTPUT_NAME "TheSky" )
endif( COMPILER_SPECIFIC_LIBS )
set_target_properties( libTheSky_static PROPERTIES Fortran_MODULE_DIRECTORY ${MODULE_DIRECTORY} )
add_dependencies( libTheSky_static libTheSky_shared PKG_VERSION ) # Ensure it is built after the shared lib
endif( CREATE_STATICLIB )
add_custom_target( "libTheSky_data"
mkdir -p ${CMAKE_SOURCE_DIR}/usr/share/libTheSky/
COMMAND cp -vf ${CMAKE_SOURCE_DIR}/data/* ${CMAKE_SOURCE_DIR}/usr/share/libTheSky/ || echo "*** WARNING: No data files found - did you forget to download them? This will not affect the creation of the libraries ***"
COMMAND echo
COMMENT "Installing data files"
)
# Install to destination:
# use DIRECTORY rather than TARGETS to allow include/<fortrancompiler>/
install( DIRECTORY usr/ DESTINATION ${CMAKE_INSTALL_PREFIX} )
# Install man pages:
install( DIRECTORY man/ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man )
# Install documents:
if( NOT EXISTS VERSION )
install( FILES doc/CHANGELOG doc/LICENCE doc/README doc/VERSION DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/libthesky-${PKG_VERSION} )
else( NOT EXISTS VERSION )
install( FILES CHANGELOG LICENCE README VERSION DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/libthesky-${PKG_VERSION} )
endif( NOT EXISTS VERSION )