Skip to content

Commit 302d541

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 Signed-off-by: Steffen Jaeckel <[email protected]>
1 parent bafc708 commit 302d541

File tree

1 file changed

+47
-52
lines changed

1 file changed

+47
-52
lines changed

CMakeLists.txt

Lines changed: 47 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,15 @@
44
# integer (MPI) library written entirely in C.
55
#
66

7-
cmake_minimum_required(VERSION 3.7)
7+
cmake_minimum_required(VERSION 3.10)
8+
89
project(tommath VERSION 1.2.0)
910

11+
# package release version
12+
# bump if re-releasing the same VERSION + patches
13+
# set to 1 if releasing a new version
14+
set(PACKAGE_RELEASE_VERSION 1)
15+
1016
#-----------------------------------------------------------------------------
1117
# Include cmake modules
1218
#-----------------------------------------------------------------------------
@@ -26,74 +32,53 @@ option(BUILD_SHARED_LIBS "Build shared library and only the shared library if \"
2632
# Basic set
2733
set(LTM_C_FLAGS -Wall -Wsign-compare -Wextra -Wshadow)
2834
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)
30-
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)
34-
endif()
35+
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wstrict-prototypes -Wpointer-arith -Wsystem-headers)
3536

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()
44-
45-
if(DEFINED ENV{COMPILE_DEBUG})
37+
if(COMPILE_DEBUG)
4638
set(LTM_C_FLAGS ${LTM_C_FLAGS} -g3)
4739
endif()
4840

49-
if(DEFINED ENV{COMPILE_SIZE})
41+
if(COMPILE_SIZE)
5042
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Os)
5143
else()
52-
if(NOT DEFINED ENV{IGNORE_SPEED})
44+
if(NOT IGNORE_SPEED)
5345
set(LTM_C_FLAGS ${LTM_C_FLAGS} -O3 -funroll-loops)
5446
#x86 optimizations [should be valid for any GCC install though]
5547
set(LTM_C_FLAGS ${LTM_C_FLAGS} -fomit-frame-pointer)
5648
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()
49+
if(COMPILE_LTO)
50+
set(LTM_C_FLAGS ${LTM_C_FLAGS} -flto)
51+
set(LTM_LD_FLAGS ${LTM_LD_FLAGS} -flto)
52+
endif()
6353
endif()
6454

6555
# TODO
6656
# Are the coming three checks really the best way?
6757

6858
# What compiler do we have and what are their...uhm... peculiarities
6959
# 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"))
60+
if(CMAKE_C_COMPILER_ID MATCHES "(C|c?)lang")
7161
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wno-typedef-redefinition -Wno-tautological-compare -Wno-builtin-requires-header)
7262
endif()
73-
74-
if( (CMAKE_C_COMPILER_ID MATCHES "mingw") OR (CMAKE_CXX_COMPILER_ID MATCHES "mingw"))
63+
if(CMAKE_C_COMPILER MATCHES "mingw")
7564
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wno-shadow)
7665
endif()
7766

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()
67+
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
68+
set(LTM_C_FLAGS ${LTM_C_FLAGS} -Wno-nullability-completeness)
69+
endif()
70+
if(CMAKE_SYSTEM_NAME MATCHES "CYGWIN")
71+
set(LTM_C_FLAGS ${LTM_C_FLAGS} -no-undefined)
8572
endif()
8673

8774
# TODO: coverage (lgcov)
8875

8976
# If the user set the environment variables at generate-time, append them
9077
# 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()
78+
# ${LTM_CFLAGS} means the user passed it via sth like:
79+
# $ cmake -DLTM_CFLAGS="foo"
80+
set(LTM_C_FLAGS ${LTM_C_FLAGS} ${LTM_CFLAGS})
81+
set(LTM_LD_FLAGS ${LTM_LD_FLAGS} ${LTM_LDFLAGS})
9782

9883
#-----------------------------------------------------------------------------
9984
# library target
@@ -200,8 +185,6 @@ export(PACKAGE ${PROJECT_NAME})
200185
#---------------------------------------------------------------------------------------
201186
# Create release packages
202187
#---------------------------------------------------------------------------------------
203-
# package release version
204-
set(PACKAGE_RELEASE_VERSION 1)
205188

206189
# determine distribution and architecture
207190
find_program(LSB_RELEASE lsb_release)
@@ -231,25 +214,37 @@ message(STATUS "CPack: packages will be generated under ${CPACK_PACKAGE_DIRECTOR
231214
set(CPACK_PACKAGE_NAME "lib${PROJECT_NAME}")
232215
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
233216
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "LibTomMath")
234-
set(CPACK_PACKAGE_VENDOR "LibTomMath")
217+
set(CPACK_PACKAGE_DESCRIPTION "A free open source portable number theoretic multiple-precision integer (MPI) library written entirely in C.")
218+
set(CPACK_PACKAGE_VENDOR "libtom projects")
219+
set(CPACK_PACKAGE_HOMEPAGE_URL "https://www.libtom.net/LibTomMath")
235220
set(CPACK_PACKAGE_CONTACT "[email protected]")
236221
set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
237-
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${PACKAGE_RELEASE_VERSION}_${LINUX_DISTRO}-${LINUX_DISTRO_VERSION}_${MACHINE_ARCH})
222+
set(PACKAGE_NAME_TRAILER ${CPACK_PACKAGE_VERSION}-${PACKAGE_RELEASE_VERSION}_${LINUX_DISTRO}-${LINUX_DISTRO_VERSION}_${MACHINE_ARCH})
223+
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${PACKAGE_NAME_TRAILER})
238224
set(CPACK_STRIP_FILES ON)
239225

240226
# deb specific CPack config
241-
set(CPACK_DEBIAN_PACKAGE_RELEASE ${PACKAGE_RELEASE_VERSION})
242227
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
243228
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
244-
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://www.libtom.net/LibTomMath")
245-
set(CPACK_DEBIAN_PACKAGE_SECTION "devel")
229+
if(BUILD_SHARED_LIBS)
230+
set(CPACK_DEBIAN_PACKAGE_NAME "${CPACK_PACKAGE_NAME}1")
231+
set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
232+
else()
233+
set(CPACK_DEBIAN_PACKAGE_NAME "${CPACK_PACKAGE_NAME}-dev")
234+
set(CPACK_DEBIAN_PACKAGE_SECTION "devel")
235+
endif()
236+
set(CPACK_DEBIAN_FILE_NAME "${CPACK_DEBIAN_PACKAGE_NAME}-${PACKAGE_NAME_TRAILER}.deb")
246237

247238
# rpm specific CPack config
248-
set(CPACK_RPM_PACKAGE_URL "https://www.libtom.net/LibTomMath")
249239
set(CPACK_RPM_PACKAGE_RELEASE ${PACKAGE_RELEASE_VERSION})
250240
set(CPACK_RPM_PACKAGE_ARCHITECTURE ${MACHINE_ARCH})
251-
set(CPACK_RPM_PACKAGE_NAME "lib${PROJECT_NAME}-${PROJECT_VERSION}")
252-
set(CPACK_RPM_FILE_NAME "lib${PROJECT_NAME}_${PROJECT_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}_${LINUX_DISTRO}-${LINUX_DISTRO_VERSION}_${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm")
253-
set(CPACK_RPM_PACKAGE_LICENSE "WTFPL")
241+
set(CPACK_RPM_PACKAGE_NAME "${CPACK_PACKAGE_NAME}-${PROJECT_VERSION}")
242+
set(CPACK_RPM_FILE_NAME "${CPACK_PACKAGE_NAME}_${PACKAGE_NAME_TRAILER}.rpm")
243+
set(CPACK_RPM_PACKAGE_LICENSE "The Unlicense")
244+
245+
# FreeBSD specific CPack config
246+
set(CPACK_FREEBSD_PACKAGE_MAINTAINER "[email protected]")
247+
set(CPACK_FREEBSD_PACKAGE_ORIGIN "math/libtommath")
248+
set(CPACK_FREEBSD_PACKAGE_CATEGORIES "math")
254249

255250
include(CPack)

0 commit comments

Comments
 (0)