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+
89project (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
2733set (LTM_C_FLAGS -Wall -Wsign-compare -Wextra -Wshadow)
2834set (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)
4739endif ()
4840
49- if (DEFINED ENV{ COMPILE_SIZE} )
41+ if (COMPILE_SIZE)
5042 set (LTM_C_FLAGS ${LTM_C_FLAGS} -Os)
5143else ()
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 ()
6353endif ()
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)
7262endif ()
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)
7665endif ()
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)
8572endif ()
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
207190find_program (LSB_RELEASE lsb_release)
@@ -231,25 +214,37 @@ message(STATUS "CPack: packages will be generated under ${CPACK_PACKAGE_DIRECTOR
231214set (CPACK_PACKAGE_NAME "lib${PROJECT_NAME} " )
232215set (CPACK_PACKAGE_VERSION ${PROJECT_VERSION} )
233216set (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" )
235220set (CPACK_PACKAGE_CONTACT "libtom@googlegroups.com" )
236221set (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} )
238224set (CPACK_STRIP_FILES ON )
239225
240226# deb specific CPack config
241- set (CPACK_DEBIAN_PACKAGE_RELEASE ${PACKAGE_RELEASE_VERSION} )
242227set (CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
243228set (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" )
249239set (CPACK_RPM_PACKAGE_RELEASE ${PACKAGE_RELEASE_VERSION} )
250240set (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 "gahr@FreeBSD.org" )
247+ set (CPACK_FREEBSD_PACKAGE_ORIGIN "math/libtommath" )
248+ set (CPACK_FREEBSD_PACKAGE_CATEGORIES "math" )
254249
255250include (CPack)
0 commit comments