1 # This CMake function generates a target that, in turn, will generate a PARfile for the given
4 # Usage: in the CMakeLists.txt, for a given library, add the following:
5 # add_target_parfile(${MODULE} "${SRCS}" "${HDRS}" "${MODULE}LinkDef.h" "${LIBDEPS}" ["extrainclude1 extrainclude2..."])
7 # Arguments are, in order:
8 # - library's name: for libBLAHBLAH it will generate a target BLAHBLAH.par
9 # - source files: classes to include in the PARfile, they must be exactly the ones used to generate
12 # - the LinkDef used by ROOT
13 # - dependent libraries: used to generate the rootmap
14 # - extra include paths (optional): passed during compilation
16 # To generate a parfile, if enabled in its CMakeLists.txt, go to the build directory and run:
19 function(add_target_parfile PARMODULE PARSOURCES PARHEADERS PARLINKDEF PARLIBDEPS)
21 # Libraries: result is a space-separated string
22 foreach(_THISLIB ${PARLIBDEPS})
23 set(_PARLIBDEPS "${_PARLIBDEPS} lib${_THISLIB}")
25 string(STRIP "${_PARLIBDEPS}" PARLIBDEPS)
27 # Export variables: used in configure_file()
28 set(PARMODULE "${PARMODULE}")
29 string(REPLACE ";" " " PARSOURCES_FLAT "${PARSOURCES}")
30 string(REPLACE ";" " " PARHEADERS_FLAT "${PARHEADERS}")
32 #message(STATUS "[add_target_parfile] Library (space-separated): ${PARMODULE}")
33 #message(STATUS "[add_target_parfile] Sources (list): ${PARSOURCES}")
34 #message(STATUS "[add_target_parfile] Headers (list): ${PARHEADERS}")
35 #message(STATUS "[add_target_parfile] Dependencies (space-separated): ${PARLIBDEPS}")
37 if(NOT "${ARGV5}" STREQUAL "")
38 # Optional: extra includes, space-separated
39 set(PAREXTRAINCLUDES "${ARGV5}")
40 #message(STATUS "[add_target_parfile] Extra Includes (space-separated): ${PAREXTRAINCLUDES}")
43 # PARfile output directory (the one we will tar)
44 set(PARDIR ${CMAKE_CURRENT_BINARY_DIR}/PARfiles/${PARMODULE})
46 # Create base directory for this module's PARfile: this is the directory we will tar
47 # This works as "mkdir -p" (i.e. it's recursive and creates parents)
48 file(MAKE_DIRECTORY ${PARDIR}/PROOF-INF)
52 ${PROJECT_SOURCE_DIR}/cmake/PARfiles/Makefile.in
59 ${PROJECT_SOURCE_DIR}/cmake/PARfiles/BUILD.sh.in
60 ${PARDIR}/PROOF-INF/BUILD.sh
63 execute_process(COMMAND chmod a+x ${PARDIR}/PROOF-INF/BUILD.sh)
67 ${PROJECT_SOURCE_DIR}/cmake/PARfiles/SETUP.C.in
68 ${PARDIR}/PROOF-INF/SETUP.C
72 # Target for creating PARfile (would stop after the first failed COMMAND)
73 add_custom_target("${PARMODULE}.par"
74 COMMAND rsync --relative ${PARSOURCES} ${PARHEADERS} ${PARLINKDEF} ${PARDIR}/
75 COMMAND tar -C ${PARDIR}/.. -czf ${PARDIR}/../${PARMODULE}.par ${PARMODULE}/
76 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
80 install(FILES ${PARDIR}/../${PARMODULE}.par DESTINATION PARfiles OPTIONAL)
82 # Add this module to the list of generated PARfiles
83 list(APPEND ALIPARFILES ${PARMODULE})
84 set(ALIPARFILES ${ALIPARFILES} CACHE INTERNAL "ALIPARFILES")