source: trunk/Mars/CMakeLists.txt

Last change on this file was 19854, checked in by tbretz, 11 days ago
It seems there was a DEFINED missing.
File size: 20.3 KB
Line 
1# *********************************
2# ************ cmake **************
3# *********************************
4CMAKE_MINIMUM_REQUIRED(VERSION 3.1 FATAL_ERROR)
5CMAKE_POLICY(SET CMP0043 NEW)
6CMAKE_POLICY(SET CMP0048 NEW)
7
8# TARGET_SOURCES requires v3.1
9
10# Enable debug symbols by default
11# must be done before project() statement
12SET(CMAKE_BUILD_TYPE_INIT Release)
13# (you can also set it on the command line: -D CMAKE_BUILD_TYPE=Release)
14
15# Enable CLANG as default compilers, to change this use
16# cmake -DCMAKE_C_COMPILER=cc -DCMAKE_CXX_COMPILER=c++
17# Note that if compilers are switched on the fly,
18# the cache is deleted
19IF(NOT DEFINED CMAKE_C_COMPILER)
20        FIND_PROGRAM(CMAKE_C_COMPILER   NAMES $ENV{CC}  clang   gcc cc  PATHS ENV PATH NO_DEFAULT_PATH DOC "C Compiler")
21ENDIF()
22IF(NOT DEFINED CMAKE_CXX_COMPILER)
23        FIND_PROGRAM(CMAKE_CXX_COMPILER NAMES $ENV{CXX} clang++ g++ c++ PATHS ENV PATH NO_DEFAULT_PATH DOC "C++ Compiler")
24ENDIF()
25
26#SET(CMAKE_VERBOSE_MAKEFILE ON)
27
28# To check for an include file you do this:
29#CHECK_INCLUDE_FILE("stdint.h"        HAVE_STDINT_H)
30# To check the size of a primitive type:
31#CHECK_TYPE_SIZE("int"   SIZEOF_INT)
32
33# *********************************
34# ************ Project ************
35# *********************************
36
37STRING(TIMESTAMP VERSION %y.%U.%w.%H UTC)
38
39MESSAGE(STATUS "Cmake V${CMAKE_VERSION}")
40MESSAGE(STATUS "Mars V${VERSION}")
41
42PROJECT(mars VERSION ${VERSION})
43
44INCLUDE(GNUInstallDirs)
45
46IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
47    SET(GCC_MIN 4.4.7)
48    IF (CMAKE_C_COMPILER_VERSION VERSION_LESS GCC_MIN OR
49        CMAKE_CXX_COMPILER_VERSION VERSION_LESS GCC_MIN)
50        MESSAGE(FATAL_ERROR "\n  gcc/g++ ${GCC_MIN} or higher is required.\n  You are running version ${CMAKE_C_COMPILER_VERSION}/${CMAKE_CXX_COMPILER_VERSION}.")
51    ENDIF()
52ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
53    SET(CLANG_MIN 3.5)
54    IF (CMAKE_C_COMPILER_VERSION VERSION_LESS CLANG_MIN OR
55        CMAKE_CXX_COMPILER_VERSION VERSION_LESS CLANG_MIN)
56        MESSAGE(FATAL_ERROR "\n  clang/clang++ ${CLANG_MIN} or higher is required.\n  You are running version ${CMAKE_C_COMPILER_VERSION}/${CMAKE_CXX_COMPILER_VERSION}.")
57    ENDIF()
58ELSE()
59    MESSAGE(WARNING "You are using an unsupported compiler! Compilation has only been tested only with clang/clang++ and gcc/g++.")
60ENDIF()
61
62# ======== For config.h.in =========
63SET(PACKAGE_MAINTAINER "Thomas Bretz")
64SET(PACKAGE_BUGREPORT  "tbretz@physik.rwth-aachen.de")
65SET(PACKAGE_URL        "https://www.fact-project.org")
66
67FIND_PROGRAM(LSB_RELEASE_EXE NAMES lsb_release)
68IF (DEFINED LSB_RELEASE_EXE)
69   EXECUTE_PROCESS(COMMAND ${LSB_RELEASE_EXE} -d OUTPUT_VARIABLE LSB_RELEASE OUTPUT_STRIP_TRAILING_WHITESPACE)
70   MESSAGE(STATUS ${LSB_RELEASE})
71ENDIF()
72
73# *********************************
74# ********* Requirements **********
75# *********************************
76
77# Inlclude the main source AND build dir itself
78#SET(CMAKE_INCLUDE_CURRENT_DIR ON)
79SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
80
81# =========== help2man ============
82FIND_PROGRAM(HELP2MAN_EXECUTABLE help2man)
83
84# =========== pkg-config ============
85FIND_PACKAGE(PkgConfig)
86FIND_PACKAGE(PackageHandleStandardArgs)
87
88
89# ============= libnova ==============
90
91PKG_CHECK_MODULES(Nova QUIET Nova)
92
93# Try to locate the package in the default path
94# and in the path provided by pkg-config
95FIND_PATH(NOVA_INCLUDE_DIR NAMES libnova/libnova.h PATHS ${NOVA_INCLUDE_DIRS})
96FIND_LIBRARY(NOVA_LIBRARY NAMES nova PATHS ${NOVA_LIBRARY_DIRS})
97
98# Check if NOVA_LIBARARY and NOVA_INCLUDE_DIR is set
99# Print a message otherwise
100FIND_PACKAGE_HANDLE_STANDARD_ARGS(Nova DEFAULT_MSG NOVA_LIBRARY NOVA_INCLUDE_DIR)
101
102# Mark those variables to be displayed as 'advanced' in the GUI
103MARK_AS_ADVANCED(NOVA_LIBRARY NOVA_INCLUDE_DIR)
104
105# handle success
106FIND_PACKAGE_MESSAGE(NovaInc "Found Nova headers in ${NOVA_INCLUDE_DIR}" "[${NOVA_LIBRARY}][${NOVA_INCLUDE_DIR}]")
107
108
109# ============== libz ================
110
111FIND_PACKAGE(ZLIB REQUIRED)
112
113# *********************************
114# **********   HEAL Pix  **********
115# *********************************
116
117SET(HEALPIX_PREFIX "${CMAKE_SOURCE_DIR}/RootHealPix" CACHE FILEPATH "Base path to the RootHealPix code.")
118
119IF(EXISTS ${HEALPIX_PREFIX})
120   FIND_PACKAGE_MESSAGE(HealPixPrefix "RootHealPix prefix: ${HEALPIX_PREFIX}" "[${HEALPIX_PREFIX}]")
121   SET(FOUND_HEALPIX ON)
122ENDIF()
123
124# ============== ROOT ================
125
126FIND_PROGRAM(ROOTCONFIG_EXECUTABLE NAMES root-config)
127FIND_PACKAGE_HANDLE_STANDARD_ARGS(root-config DEFAULT_MSG ROOTCONFIG_EXECUTABLE)
128IF(NOT ROOTCONFIG_EXECUTABLE)
129   MESSAGE(FATAL_ERROR "Please make sure `root-config` is accessible in your path. In case of an installation from source, you might need to source\n . [path-to-root]/bin/thisroot.sh")
130ENDIF()
131
132# You need to tell CMake where to find the ROOT installation. This can be done in a number of ways:
133#   - ROOT built with classic configure/make use the provided $ROOTSYS/etc/cmake/FindROOT.cmake
134#   - ROOT built with CMake. Add in CMAKE_PREFIX_PATH the installation prefix for ROOT
135IF(EXISTS $ENV{ROOTSYS}/ROOTConfig.cmake)
136   IF(NOT DEFINED ENV{CMAKE_PREFIX_PATH})
137      LIST(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS})
138   ENDIF()
139ENDIF()
140SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "$ENV{ROOTSYS}/etc/cmake")
141
142SET(ROOT_PACKAGES Gui Minuit ASImage HistPainter)
143IF(FOUND_HEALPIX)
144   SET(ROOT_PACKAGES ${ROOT_PACKAGES} FITSIO)
145ENDIF()
146
147#---Locate the ROOT package and defines a number of variables (e.g. ROOT_INCLUDE_DIRS)
148#SET(ROOT_CONFIG_DEBUG 1)
149FIND_PACKAGE(ROOT REQUIRED COMPONENTS ${ROOT_PACKAGES})
150
151IF(NOT DEFINED ROOT_CONFIG_EXECUTABLE)
152   FIND_PACKAGE_MESSAGE(RootFound "Found ROOT: ${ROOT_INCLUDE_DIRS}" "[${ROOT_INCLUDE_DIRS}][${ROOT_LIBRARY_DIR}][${ROOT_VERSION}]")
153ENDIF()
154
155#---Define useful ROOT functions and macros (e.g. ROOT_GENERATE_DICTIONARY)
156FIND_PACKAGE_MESSAGE(RootInclude "Setup ROOT: [${ROOT_VERSION}] ${ROOT_USE_FILE}" "[${ROOT_VERSION}][${ROOT_USE_FILE}]")
157IF(DEFINED ROOT_USE_FILE)
158   INCLUDE(${ROOT_USE_FILE})
159ELSE()
160   # From RootUseFile.cmake (root 6)
161   INCLUDE_DIRECTORIES(${ROOT_INCLUDE_DIRS})
162   LINK_DIRECTORIES(${ROOT_LIBRARY_DIR})
163   ADD_DEFINITIONS(${ROOT_DEFINITIONS})
164   SET(CMAKE_CXX_FLAGS     "${CMAKE_CXX_FLAGS} ${ROOT_CXX_FLAGS}")
165   SET(CMAKE_C_FLAGS       "${CMAKE_C_FLAGS} ${ROOT_C_FLAGS}")
166   SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${ROOT_fortran_FLAGS}")
167ENDIF()
168
169# Replace separators to make the version consistent
170# (older version might use the '/')
171STRING(REPLACE "/" "." ROOT_VERSION ${ROOT_VERSION})
172
173# This happens when root is used from its build directory
174# Create the version components manually
175IF(ROOT_VERSION AND NOT ROOT_VERSION_MAJOR)
176   # Create a list of components
177   STRING(REPLACE "." ";" ROOT_VERSION_LIST ${ROOT_VERSION})
178   # Split version string
179   LIST(GET ROOT_VERSION_LIST 0 ROOT_VERSION_MAJOR)
180   LIST(GET ROOT_VERSION_LIST 1 ROOT_VERSION_MINOR)
181   LIST(GET ROOT_VERSION_LIST 2 ROOT_VERSION_PATCH)
182   # Remove trailing 0's
183   STRING(REGEX REPLACE "0+([0-9]+)" "\\1" ROOT_VERSION_MINOR ${ROOT_VERSION_MINOR})
184   STRING(REGEX REPLACE "0+([0-9]+)" "\\1" ROOT_VERSION_PATCH ${ROOT_VERSION_PATCH})
185ENDIF()
186
187# Is this is a local or a global installation?
188IF(DEFINED ENV{ROOTSYS})
189   IF(ROOTSYS AND NOT ROOTSYS STREQUAL "$ENV{ROOTSYS}")
190      MESSAGE(WARNING
191         " \n"
192         " ROOT Location changed!\n"
193         " Present  ROOTSYS: $ENV{ROOTSYS}\n"
194         " Previous ROOTSYS: ${ROOTSYS}")
195      FILE(REMOVE thisroot.sh)
196   ENDIF()
197
198   SET(ROOTSYS $ENV{ROOTSYS} CACHE INTERNAL "Internal variable to check for consistency in ROOTSYS")
199
200   # For convenience and easy tracking
201   ADD_CUSTOM_COMMAND(OUTPUT thisroot.sh COMMAND ln -sf ${ROOTSYS}/bin/thisroot.sh VERBATIM)
202   ADD_CUSTOM_TARGET(thisroot ALL DEPENDS thisroot.sh)
203ENDIF()
204
205IF(ROOTVER AND NOT ROOTVER VERSION_EQUAL ROOT_VERSION)
206   MESSAGE(WARNING
207      " \n"
208      " ROOT Version changed!\n"
209      " Present:  ${ROOT_VERSION}\n"
210      " Previous: ${ROOTVER}")
211ENDIF()
212
213SET(ROOTVER ${ROOT_VERSION} CACHE INTERNAL "Internal variable to check for consistency of root version")
214
215# -lGui -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree
216# -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread
217# -lASImage -lMinuit -lHistPainter -lThread
218
219#MESSAGE("INCL_DIRS: ${ROOT_INCLUDE_DIRS}")
220#MESSAGE("LIBS:      ${ROOT_LIBRARIES}")
221#MESSAGE("DEFS:      ${ROOT_DEFINITIONS}")
222#MESSAGE("CXXFLAGS:  ${ROOT_CXX_FLAGS}")
223#MESSAGE("CXFLAGS:   ${ROOT_CC_FLAGS}")
224#MESSAGE("FOUND:     ${ROOT_FOUND}")
225#MESSAGE("FILE:      ${ROOT_USE_FILE}")
226#MESSAGE("DIR:       ${CMAKE_CURRENT_SOURCE_DIR}")
227#ROOT_<library>_LIBRARY PATH    Full path for each of the ROOT libraries listed in COMPONENTS
228#ROOT_<command>_CMD     PATH    Full path for each ROOT executable (rootcling, root, hadd, etc.)
229#ROOT_<option>_FOUND    BOOL    True for each enabled build option (e.g. cocoa, python, xrootd, etc.)
230
231# function ROOT_GENERATE_DICTIONARY( dictionary
232#                                    header1 header2 ...
233#                                    LINKDEF linkdef1 ...
234#                                    OPTIONS opt1...)
235
236# *********************************
237# ********** Observatory **********
238# *********************************
239
240SET(OBSERVATORY "ORM" CACHE STRING "Select the observatory location (ORM, HAWC, SPM, RWTH: see nova.h)")
241
242IF(NOT OBSERVATORY STREQUAL "ORM"  AND
243   NOT OBSERVATORY STREQUAL "HAWC" AND
244   NOT OBSERVATORY STREQUAL "SPM"  AND
245   NOT OBSERVATORY STREQUAL "RWTH")
246   MESSAGE(FATAL_ERROR "OBSERVATORY=${OBSERVATORY} invalid. Only ORM, HAWC, SPM and RWTH allowd!")
247ENDIF()
248
249FIND_PACKAGE_MESSAGE(PresetObservatory "Preset Observatory: ${OBSERVATORY}" "[${OBSERVATORY}]")
250
251
252# *********************************
253# *********** Compiler ************
254# *********************************
255
256SET(CMAKE_CXX_STANDARD 11)
257SET(CMAKE_CXX_FLAGS
258        "${CMAKE_CXX_FLAGS} -Wall -Winit-self -Wpointer-arith \
259         -Wcast-align -Wformat -Woverloaded-virtual \
260         -Wnon-virtual-dtor -Wshadow -fPIC") # -Wextra
261
262# /opt/root-6.18.04-bin/include/Bytes.h:72:6: warning: cast from 'char *' to 'UShort_t *'
263#       (aka 'unsigned short *') increases required alignment from 1 to 2 [-Wcast-align]
264#    *((UShort_t *)buf) = Rbswap_16(x);
265#      ^~~~~~~~~~~~~~~
266
267IF(NOT ROOT_VERSION VERSION_LESS 6.18 AND ROOT_VERSION VERSION_LESS 6.19)
268   SET(CMAKE_CXX_FLAGS
269       "${CMAKE_CXX_FLAGS} -Wno-cast-align")
270ENDIF()
271
272SET(CMAKE_CXX_FLAGS
273        "${CMAKE_CXX_FLAGS} \
274         -DMARSVER=\\\"1.0\\\" -D_REENTRANT -D__MARS__ -D__LINUX__ \
275         -DPACKAGE_VERSION=\\\"1.0\\\" -DREVISION=\\\"1.0\\\" \
276         -DPACKAGE_NAME=\\\"MARS\\\" -DHAVE_ZLIB")
277
278CONFIGURE_FILE("${PROJECT_SOURCE_DIR}/cmake/root.rc.in"     "${PROJECT_BINARY_DIR}/.rootrc")
279CONFIGURE_FILE("${PROJECT_SOURCE_DIR}/cmake/rootlogon.C.in" "${PROJECT_BINARY_DIR}/rootlogon.C")
280CONFIGURE_FILE("${PROJECT_SOURCE_DIR}/cmake/dohtml.C.in"    "${PROJECT_BINARY_DIR}/dohtml.C")
281
282# -------------------------------------------------------
283
284FILE(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/dictionary)
285
286MACRO(SRCFILES subdir)
287
288        MESSAGE(STATUS "Reading source list from ${DIR}/Makefile")
289
290        EXECUTE_PROCESS(COMMAND
291                ${PROJECT_SOURCE_DIR}/Makefile.extract.sh ${subdir}
292                WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/${subdir}
293                OUTPUT_VARIABLE _HEADERS)
294
295        SEPARATE_ARGUMENTS(_HEADERS)
296
297        LIST(GET       _HEADERS 0 _CINT)
298        LIST(REMOVE_AT _HEADERS 0)
299
300        SET(_SRCLIST ${_HEADERS})
301
302        STRING(REPLACE "${subdir}/" " "    _HEADERS ${_HEADERS}) # Remove directory
303        STRING(REPLACE ".cc"        ".h"   _HEADERS ${_HEADERS}) # change extension
304        STRING(REPLACE ".cxx"       ".hxx" _HEADERS ${_HEADERS}) # special for files in mmc
305
306        SEPARATE_ARGUMENTS(_HEADERS)
307
308        # - This adds the rule how the dictionary is created
309        ROOT_GENERATE_DICTIONARY(dictionary/${_CINT} ${_HEADERS} ${_CINT}Incl.h LINKDEF ${subdir}/${_CINT}LinkDef.h OPTIONS -p  -D__MARS__ -DHAVE_ZLIB)
310        # - This makes sure that it is compiled
311        TARGET_SOURCES(mars PRIVATE dictionary/${_CINT}.cxx ${_SRCLIST})
312        SET_SOURCE_FILES_PROPERTIES(dictionary/${_CINT}.cxx PROPERTIES COMPILE_FLAGS "-Wno-deprecated-register")
313
314        INSTALL(DIRECTORY ${subdir}/ DESTINATION "include" FILES_MATCHING PATTERN "*.h")
315
316        # This is a hack if somebody tries to run root from
317        # the compile directory rather than from a package
318        # install directory. In this case, the pcm files
319        # are not where the library is where they should be
320        IF(TARGET ${_CINT})
321            ADD_CUSTOM_COMMAND(TARGET ${_CINT} POST_BUILD
322                COMMAND test -f ../dictionary/${CINT}_rdict.pcm && ln -s ../dictionary/${_CINT}_rdict.pcm ${_CINT}_rdict.pcm || true
323                WORKING_DIRECTORY lib
324                VERBATIM)
325        ENDIF()
326
327ENDMACRO()
328
329# -------------------------------------------------------
330
331#SET(DIRECTORIES mmc)
332
333SET(DIRECTORIES
334        manalysis
335        mastro
336        mbadpixels
337        mbase
338        mcalib
339        mcamera
340        mcorsika
341        mdata
342        mdrs
343        melectronics
344        mextralgo
345        mfbase
346        mfileio
347        mfilter
348        mgeom
349        mgui
350        mhbase
351        mhcalib
352        mhflux
353        mhft
354        mhist
355        mhvstime
356        mimage
357        mjobs
358        mjoptim
359        mjtrain
360        mmain
361        mmc
362        mmovie
363        mmuon
364        mpedestal
365        mpointing
366        mranforest
367        mraw
368        mreport
369        msignal
370        msim
371        msimcamera
372        msimreflector
373        msql
374        mtools
375        mtrigger
376)
377
378INCLUDE_DIRECTORIES(${DIRECTORIES} mcore .)
379
380ROOT_GENERATE_DICTIONARY(dictionary/Core
381           mcore/factofits.h
382           mcore/factfits.h
383           mcore/DrsCalib.h
384           mcore/PixelMap.h
385           mcore/Interpolator2D.h
386           mcore/nova.h
387           mcore/Prediction.h
388           MIncl.h
389        LINKDEF MLinkDef.h
390        OPTIONS -p -D__MARS__ -DHAVE_ZLIB)
391
392ADD_LIBRARY(mars SHARED dictionary/Core.cxx) # CMAKE_POSITION_INDEPENDENT_CODE
393SET_SOURCE_FILES_PROPERTIES(dictionary/Core.cxx PROPERTIES COMPILE_FLAGS "-Wno-deprecated-register")
394
395# This is a hack if somebody tries to run root from
396# the compile directory rather than from a package
397# install directory. In this case, the pcm files
398# are not where the library is where they should be
399IF(TARGET Core)
400    ADD_CUSTOM_COMMAND(TARGET Core POST_BUILD
401        COMMAND test -f ../dictionary/Core_rdict.pcm && ln -s ../dictionary/Core_rdict.pcm Core_rdict.pcm || true
402        WORKING_DIRECTORY lib
403        VERBATIM)
404ENDIF()
405
406
407TARGET_LINK_LIBRARIES(mars
408        ZLIB::ZLIB
409        ${NOVA_LIBRARY}
410        ${ROOT_LIBRARIES})
411
412ADD_EXECUTABLE(showplot showplot.cc)
413ADD_EXECUTABLE(showlog  showplot.cc)
414ADD_EXECUTABLE(ceres    ceres.cc)
415TARGET_LINK_LIBRARIES(showplot mars ${ROOT_LIBRARIES})
416TARGET_LINK_LIBRARIES(showlog  mars ${ROOT_LIBRARIES})
417TARGET_LINK_LIBRARIES(ceres    mars ${ROOT_LIBRARIES})
418
419
420FOREACH(DIR ${DIRECTORIES})
421        SRCFILES(${DIR})
422ENDFOREACH()
423
424# -------------------------------------------------------
425
426IF(FOUND_HEALPIX)
427   # https://github.com/akira-okumura/RootHealPix.git
428   # THealPixD de("name", "", 2); for (int i=0; i<100; i++) de.Fill(gRandom->Uniform()*90, gRandom->Uniform()*180); de.Draw("COLZ");
429
430   #   INCLUDE_DIRECTORIES(${HEALPIX_PREFIX}/include)
431   # - The first one is required to make ROOT_GENERATE_DICTIONARY
432   #   find absolute paths. The second one is required for
433   #   compilation. Note that any later ROOT_GENERALE_DICTIONARY
434   #   might find the LinkDef.h in RootHealPix/include
435   INCLUDE_DIRECTORIES(/ ${HEALPIX_PREFIX}/include)
436
437   ROOT_GENERATE_DICTIONARY(dictionary/HealPix
438        ${HEALPIX_PREFIX}/include/Healoption.h
439        ${HEALPIX_PREFIX}/include/THealAlm.h
440        ${HEALPIX_PREFIX}/include/THealFFT.h
441        ${HEALPIX_PREFIX}/include/THealPainter.h
442        ${HEALPIX_PREFIX}/include/THealPaletteAxis.h
443        ${HEALPIX_PREFIX}/include/THealPixCube.h
444        ${HEALPIX_PREFIX}/include/THealPix.h
445        ${HEALPIX_PREFIX}/include/THealUtil.h
446        ${HEALPIX_PREFIX}/include/TVirtualHealPainter.h
447        LINKDEF ${HEALPIX_PREFIX}/include/LinkDef.h OPTIONS -p)
448
449   # - Define the source files of the library
450   ADD_LIBRARY(RootHealPix SHARED dictionary/HealPix.cxx
451        ${HEALPIX_PREFIX}/src/THealAlm.cxx
452        ${HEALPIX_PREFIX}/src/THealFFT.cxx
453        ${HEALPIX_PREFIX}/src/THealPainter.cxx
454        ${HEALPIX_PREFIX}/src/THealPaletteAxis.cxx
455        ${HEALPIX_PREFIX}/src/THealPixCube.cxx
456        ${HEALPIX_PREFIX}/src/THealPix.cxx
457        ${HEALPIX_PREFIX}/src/THealUtil.cxx
458        ${HEALPIX_PREFIX}/src/TVirtualHealPainter.cxx)
459
460   # - Tweak some warnings
461   SET_TARGET_PROPERTIES(RootHealPix PROPERTIES COMPILE_FLAGS
462        "-Wno-unused-variable -Wno-unused-function -Wno-unneeded-internal-declaration -Wno-shadow")
463
464   # - Link with the root libraries for auto-loading
465   TARGET_LINK_LIBRARIES(mars RootHealPix)
466
467   # - Install the corresponding header files
468   INSTALL(DIRECTORY ${HEALPIX_PREFIX}/include/ DESTINATION "include" FILES_MATCHING PATTERN "*.h")
469
470   # - Install the library
471   INSTALL(TARGETS RootHealPix DESTINATION ".")
472ENDIF()
473
474
475# rootlogon.C finds the shared object only if the libmars.so is in the same directory than the dictionary files
476# there is a way to create a map file with rootcling - but I haven#t yet fugured out how. Note that a link is not enough
477#ADD_CUSTOM_COMMAND(TARGET mars POST_BUILD
478#       COMMAND cp -f ${PROJECT_BINARY_DIR}/libmars.so ${PROJECT_BINARY_DIR}/dictionary/libmars.so
479#       COMMENT "Copying libmars.so to ${PROJECT_BINARY_DIR}/dictionary")
480
481#---Create a shared library with geneated dictionary
482#ADD_LIBRARY(Event SHARED Event.cxx G__Event.cxx)
483#TARGET_LINK_LIBRARIES(Event ${ROOT_LIBRARIES})
484
485#---Create  a main program using the library
486#ADD_EXECUTABLE(Main MainEvent.cxx)
487#TARGET_LINK_LIBRARIES(Main Event)
488
489
490# *********************************
491# ************ Packaging **********
492# *********************************
493
494#SET(PKG_SHARE    "${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}")
495#SET(PKG_APPS     "${CMAKE_INSTALL_DATAROOTDIR}/applications")
496#SET(PKG_PIXMAPS  "${CMAKE_INSTALL_DATAROOTDIR}/pixmaps")
497
498# ====== Installation targets =====
499
500#INSTALL(TARGETS  mars           DESTINATION "${CMAKE_INSTALL_BINDIR}")
501INSTALL(TARGETS   mars         DESTINATION ".")
502INSTALL(TARGETS   showplot     DESTINATION ".")
503INSTALL(TARGETS   showlog      DESTINATION ".")
504INSTALL(TARGETS   ceres        DESTINATION ".")
505INSTALL(FILES     .rootrc      DESTINATION ".")
506INSTALL(DIRECTORY lib          DESTINATION ".")
507INSTALL(DIRECTORY macros       DESTINATION "." FILES_MATCHING PATTERN "*.C")
508INSTALL(DIRECTORY fact         DESTINATION "." FILES_MATCHING PATTERN "*.C")
509INSTALL(DIRECTORY datacenter   DESTINATION ".")
510INSTALL(DIRECTORY scripts      DESTINATION ".")
511INSTALL(DIRECTORY resources    DESTINATION "." FILES_MATCHING PATTERN "*.rc" PATTERN "*.txt")
512INSTALL(DIRECTORY resmc        DESTINATION "." FILES_MATCHING PATTERN "*" )
513INSTALL(DIRECTORY mcore/       DESTINATION "include" FILES_MATCHING PATTERN "*.h")
514
515
516# ======== General packaging ======
517# https://cmake.org/cmake/help/latest/module/CPack.html
518
519INCLUDE(InstallRequiredSystemLibraries)
520
521# SET(CPACK_STRIP_FILES ON) # Strip debug sysmbold from files
522
523SET(CPACK_PACKAGE_VERSION       "${mars_VERSION}")
524SET(CPACK_PACKAGE_CONTACT       "${PACKAGE_BUGREPORT}")
525SET(CPACK_PACKAGE_MAINTAINER    "${PACKAGE_MAINTAINER}")
526#SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING")
527#SET(CPACK_PACKAGE_VENDOR "Me, myself, and I")
528
529
530SET(CPACK_SOURCE_IGNORE_FILES "/old/;/build/;/[.].*/;/autom4te[.]cache/;.*~;.log$")
531
532# Maybe the text displayed in synaptic?
533#SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README")
534SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MARS - Environment")
535#CPACK_RESOURCE_FILE_README     ReadMe file to be embedded in the installer.
536
537SET(CPACK_GENERATOR        TBZ2) # TGZ DEB
538#SET(CPACK_SOURCE_GENERATOR TBZ2) # TGZ
539#SET(CPACK_PROJECT_CONFIG_FILE ${CMAKE_SOURCE_DIR}/cmake/Package.txt)
540#SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/Copyright.txt")
541
542
543# ======== Debian packaging =======
544# https://cmake.org/cmake/help/latest/module/CPackDeb.html
545# https://www.debian.org/doc/debian-policy
546
547#SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libao4 (>=1.0), libsfm-system2.3v5 (>=2.3), libsfml-graphicsv2.3v5 (>=2.3), libsfml-audio2.3v5 (>=2.3), libsfm-window2.3v5 (>2.3)")
548SET(CPACK_DEBIAN_PACKAGE_SHLIBDEPS 1) # generate better (atomatic?) dependecies
549SET(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY ">=")
550SET(CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION TRUE)
551SET(CPACK_DEBIAN_PACKAGE_SECTION utils)
552SET(CPACK_DEBIAN_PACKAGE_HOMEPAGE "${PACKAGE_URL}")
553SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION
554"${CPACK_PACKAGE_DESCRIPTION_SUMMARY}
555 This package contains the MARS Analysis Environment.")
556#indent the long description with spaces
557
558#CPACK_INSTALL_CMAKE_PROJECTS
559#List of four values that specify what project to install. Build directory, Project Name, Project Component, Directory.
560
561INCLUDE(CPack)
Note: See TracBrowser for help on using the repository browser.