Skip to content

Commit b8ed3cf

Browse files
committed
further simplifications/improvements
* bump to CMake 3.10 * only support the CMake standard way to define variables via `-DFOO=On` and not via the environment * clean-up switches only used for unit tests * mingw's ID is "GNU", so we match on the full compiler name instead * use CMake variables instead of environment variables via `$ENV{<stuff>}` * unconditionally set {C,LD}FLAGS passed by user * clean-up duplicate CPack keys + add FreeBSD config * store pack files in distro-specific paths * use default names where possible * use `CMAKE_BUILD_TYPE`-style variables instead of our own flags * set default `CMAKE_BUILD_TYPE` to "Release" Signed-off-by: Steffen Jaeckel <[email protected]>
1 parent ba74457 commit b8ed3cf

File tree

1 file changed

+70
-68
lines changed

1 file changed

+70
-68
lines changed

CMakeLists.txt

Lines changed: 70 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,18 @@
44
# integer (MPI) library written entirely in C.
55
#
66

7-
cmake_minimum_required(VERSION 3.7)
8-
project(tommath VERSION 1.2.0)
7+
cmake_minimum_required(VERSION 3.10)
8+
9+
project(tommath
10+
VERSION 1.2.0
11+
DESCRIPTION "A free open source portable number theoretic multiple-precision integer (MPI) library written entirely in C."
12+
HOMEPAGE_URL "https://www.libtom.net/LibTomMath"
13+
LANGUAGES C)
14+
15+
# package release version
16+
# bump if re-releasing the same VERSION + patches
17+
# set to 1 if releasing a new VERSION
18+
set(PACKAGE_RELEASE_VERSION 1)
919

1020
#-----------------------------------------------------------------------------
1121
# Include cmake modules
@@ -26,74 +36,47 @@ option(BUILD_SHARED_LIBS "Build shared library and only the shared library if \"
2636
# Basic set
2737
set(LTM_C_FLAGS -Wall -Wsign-compare -Wextra -Wshadow)
2838
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align)
29-
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wstrict-prototypes -Wpointer-arith)
39+
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wstrict-prototypes -Wpointer-arith -Wsystem-headers)
3040

31-
# Do we run the sanitizer?
32-
if(DEFINED ENV{SANITIZER})
33-
set(LTM_C_FLAGS ${LTM_C_FLAGS} -fsanitize=undefined -fno-sanitize-recover=all -fno-sanitize=float-divide-by-zero)
41+
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
42+
message(STATUS "Setting build type to 'Release' as none was specified.")
43+
set(CMAKE_BUILD_TYPE "Release")
3444
endif()
3545

36-
if(DEFINED ENV{CONV_WARNINGS})
37-
set(LTM_C_FLAGS ${LTM_C_FLAGS} -std=c89 -Wconversion -Wsign-conversion)
38-
if($ENV{CONV_WARNINGS} EQUAL "strict")
39-
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wc++-compat)
40-
endif()
41-
else()
42-
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wsystem-headers)
43-
endif()
46+
set(CMAKE_C_FLAGS_DEBUG "-g3")
47+
set(CMAKE_C_FLAGS_RELEASE "-O3 -funroll-loops -fomit-frame-pointer")
48+
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-g3 -O2")
49+
set(CMAKE_C_FLAGS_MINSIZEREL "-Os")
4450

45-
if(DEFINED ENV{COMPILE_DEBUG})
46-
set(LTM_C_FLAGS ${LTM_C_FLAGS} -g3)
51+
if(COMPILE_LTO)
52+
set(LTM_C_FLAGS ${LTM_C_FLAGS} -flto)
53+
set(LTM_LD_FLAGS ${LTM_LD_FLAGS} -flto)
4754
endif()
4855

49-
if(DEFINED ENV{COMPILE_SIZE})
50-
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Os)
51-
else()
52-
if(NOT DEFINED ENV{IGNORE_SPEED})
53-
set(LTM_C_FLAGS ${LTM_C_FLAGS} -O3 -funroll-loops)
54-
#x86 optimizations [should be valid for any GCC install though]
55-
set(LTM_C_FLAGS ${LTM_C_FLAGS} -fomit-frame-pointer)
56-
endif()
57-
# TODO:
58-
# if(DEFINED ENV{COMPILE_LTO})
59-
# set(LTM_C_FLAGS "${LTM_C_FLAGS} -flto")
60-
# set(LTM_LD_FLAGS "${LTM_LD_FLAGS} -flto")
61-
# #AR = $(subst clang,llvm-ar,$(subst gcc,gcc-ar,$(CC)))
62-
# endif()
63-
endif()
64-
65-
# TODO
66-
# Are the coming three checks really the best way?
67-
6856
# What compiler do we have and what are their...uhm... peculiarities
69-
# TODO: is the check for a C++ compiler necessary?
70-
if( (CMAKE_C_COMPILER_ID MATCHES "(C|c?)lang") OR (CMAKE_CXX_COMPILER_ID MATCHES "(C|c?)lang"))
57+
if(CMAKE_C_COMPILER_ID MATCHES "(C|c?)lang")
7158
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wno-typedef-redefinition -Wno-tautological-compare -Wno-builtin-requires-header)
59+
# Clang requires at least '-O1' for dead code eliminiation
60+
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O1")
7261
endif()
73-
74-
if( (CMAKE_C_COMPILER_ID MATCHES "mingw") OR (CMAKE_CXX_COMPILER_ID MATCHES "mingw"))
62+
if(CMAKE_C_COMPILER MATCHES "mingw")
7563
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wno-shadow)
7664
endif()
77-
78-
if(DEFINED ENV{PLATFORM})
79-
if($ENV{PLATFORM} MATCHES "Darwin")
80-
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wno-nullability-completeness)
81-
endif()
82-
if($ENV{PLATFORM} MATCHES "CYGWIN")
83-
set(LTM_C_FLAGS ${LTM_C_FLAGS} -no-undefined)
84-
endif()
65+
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
66+
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wno-nullability-completeness)
67+
endif()
68+
if(CMAKE_SYSTEM_NAME MATCHES "CYGWIN")
69+
set(LTM_C_FLAGS ${LTM_C_FLAGS} -no-undefined)
8570
endif()
8671

8772
# TODO: coverage (lgcov)
8873

8974
# If the user set the environment variables at generate-time, append them
9075
# in order to allow overriding our defaults.
91-
if(DEFINED ENV{LTM_CFLAGS})
92-
set(LTM_C_FLAGS ${LTM_C_FLAGS} $ENV{LTM_CFLAGS})
93-
endif()
94-
if(DEFINED ENV{LTM_LDFLAGS})
95-
set(LTM_LD_FLAGS ${LTM_LD_FLAGS} $ENV{LTM_LDFLAGS})
96-
endif()
76+
# ${LTM_CFLAGS} means the user passed it via sth like:
77+
# $ cmake -DLTM_CFLAGS="foo"
78+
set(LTM_C_FLAGS ${LTM_C_FLAGS} ${LTM_CFLAGS})
79+
set(LTM_LD_FLAGS ${LTM_LD_FLAGS} ${LTM_LDFLAGS})
9780

9881
#-----------------------------------------------------------------------------
9982
# library target
@@ -114,8 +97,10 @@ target_link_options(${PROJECT_NAME} BEFORE PRIVATE
11497
${LTM_LD_FLAGS}
11598
)
11699

117-
set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION})
118-
set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR})
100+
set_target_properties(${PROJECT_NAME} PROPERTIES
101+
VERSION ${PROJECT_VERSION}
102+
SOVERSION ${PROJECT_VERSION_MAJOR}
103+
)
119104

120105
#-----------------------------------------------------------------------------
121106
# demo target
@@ -213,19 +198,25 @@ export(PACKAGE ${PROJECT_NAME})
213198
#---------------------------------------------------------------------------------------
214199
# Create release packages
215200
#---------------------------------------------------------------------------------------
216-
# package release version
217-
set(PACKAGE_RELEASE_VERSION 1)
218201

219202
# determine distribution and architecture
220203
find_program(LSB_RELEASE lsb_release)
221204

222205
execute_process(COMMAND uname -m OUTPUT_VARIABLE MACHINE_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
223206

224207
if(LSB_RELEASE)
225-
execute_process(COMMAND lsb_release -sr OUTPUT_VARIABLE LINUX_DISTRO_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
226208
execute_process(COMMAND lsb_release -si OUTPUT_VARIABLE LINUX_DISTRO OUTPUT_STRIP_TRAILING_WHITESPACE)
209+
execute_process(COMMAND lsb_release -sc OUTPUT_VARIABLE LINUX_DISTRO_CODENAME OUTPUT_STRIP_TRAILING_WHITESPACE)
210+
execute_process(COMMAND lsb_release -sr OUTPUT_VARIABLE LINUX_DISTRO_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
227211

228212
string(TOLOWER ${LINUX_DISTRO} LINUX_DISTRO)
213+
if(LINUX_DISTRO_CODENAME STREQUAL "n/a")
214+
set(DISTRO_PACK_PATH ${LINUX_DISTRO}/${LINUX_DISTRO_VERSION}/)
215+
else()
216+
set(DISTRO_PACK_PATH ${LINUX_DISTRO}/${LINUX_DISTRO_CODENAME}/)
217+
endif()
218+
else()
219+
set(DISTRO_PACK_PATH )
229220
endif()
230221

231222
# default CPack generators
@@ -236,33 +227,44 @@ if(LINUX_DISTRO STREQUAL "debian" OR LINUX_DISTRO STREQUAL "ubuntu" OR LINUX_DIS
236227
list(APPEND CPACK_GENERATOR DEB)
237228
elseif(LINUX_DISTRO STREQUAL "fedora" OR LINUX_DISTRO STREQUAL "opensuse" OR LINUX_DISTRO STREQUAL "centos")
238229
list(APPEND CPACK_GENERATOR RPM)
230+
elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
231+
list(APPEND CPACK_GENERATOR FREEBSD)
239232
endif()
240233

241234
# general CPack config
242-
set(CPACK_PACKAGE_DIRECTORY ${CMAKE_BINARY_DIR}/packages)
235+
set(CPACK_PACKAGE_DIRECTORY ${CMAKE_BINARY_DIR}/packages/${DISTRO_PACK_PATH})
243236
message(STATUS "CPack: packages will be generated under ${CPACK_PACKAGE_DIRECTORY}")
244237
set(CPACK_PACKAGE_NAME "lib${PROJECT_NAME}")
245238
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
246239
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "LibTomMath")
247-
set(CPACK_PACKAGE_VENDOR "LibTomMath")
240+
set(CPACK_PACKAGE_VENDOR "libtom projects")
248241
set(CPACK_PACKAGE_CONTACT "[email protected]")
249242
set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
250-
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${PACKAGE_RELEASE_VERSION}_${LINUX_DISTRO}-${LINUX_DISTRO_VERSION}_${MACHINE_ARCH})
243+
set(PACKAGE_NAME_TRAILER ${CPACK_PACKAGE_VERSION}-${PACKAGE_RELEASE_VERSION}_${MACHINE_ARCH})
244+
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${PACKAGE_NAME_TRAILER})
251245
set(CPACK_STRIP_FILES ON)
252246

253247
# deb specific CPack config
254-
set(CPACK_DEBIAN_PACKAGE_RELEASE ${PACKAGE_RELEASE_VERSION})
255248
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
256249
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
257-
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://www.libtom.net/LibTomMath")
258-
set(CPACK_DEBIAN_PACKAGE_SECTION "devel")
250+
set(CPACK_DEBIAN_PACKAGE_RELEASE ${PACKAGE_RELEASE_VERSION})
251+
if(BUILD_SHARED_LIBS)
252+
set(CPACK_DEBIAN_PACKAGE_NAME "${CPACK_PACKAGE_NAME}1")
253+
set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
254+
else()
255+
set(CPACK_DEBIAN_PACKAGE_NAME "${CPACK_PACKAGE_NAME}-dev")
256+
set(CPACK_DEBIAN_PACKAGE_SECTION "devel")
257+
endif()
259258

260259
# rpm specific CPack config
261-
set(CPACK_RPM_PACKAGE_URL "https://www.libtom.net/LibTomMath")
262260
set(CPACK_RPM_PACKAGE_RELEASE ${PACKAGE_RELEASE_VERSION})
263261
set(CPACK_RPM_PACKAGE_ARCHITECTURE ${MACHINE_ARCH})
264-
set(CPACK_RPM_PACKAGE_NAME "lib${PROJECT_NAME}-${PROJECT_VERSION}")
265-
set(CPACK_RPM_FILE_NAME "lib${PROJECT_NAME}_${PROJECT_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}_${LINUX_DISTRO}-${LINUX_DISTRO_VERSION}_${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm")
266-
set(CPACK_RPM_PACKAGE_LICENSE "WTFPL")
262+
set(CPACK_RPM_PACKAGE_NAME "${CPACK_PACKAGE_NAME}-${PROJECT_VERSION}")
263+
set(CPACK_RPM_PACKAGE_LICENSE "The Unlicense")
264+
265+
# FreeBSD specific CPack config
266+
set(CPACK_FREEBSD_PACKAGE_MAINTAINER "[email protected]")
267+
set(CPACK_FREEBSD_PACKAGE_ORIGIN "math/libtommath")
268+
set(CPACK_FREEBSD_PACKAGE_CATEGORIES "math")
267269

268270
include(CPack)

0 commit comments

Comments
 (0)