-# This CMake macro generates a target that, in turn, will generate a PARfile for the given library.
+# This CMake function generates a target that, in turn, will generate a PARfile for the given
+# library.
#
# Usage: in the CMakeLists.txt, for a given library, add the following:
-# add_target_parfile(${MODULE} "${SRCS}" "${HDRS}" "${MODULE}LinkDef.h" "${LIBDEPS}")
+# add_target_parfile(${MODULE} "${SRCS}" "${HDRS}" "${MODULE}LinkDef.h" "${LIBDEPS}" ["extrainclude1 extrainclude2..."])
#
# Arguments are, in order:
# - library's name: for libBLAHBLAH it will generate a target BLAHBLAH.par
# - headers
# - the LinkDef used by ROOT
# - dependent libraries: used to generate the rootmap
+# - extra include paths (optional): passed during compilation
#
# To generate a parfile, if enabled in its CMakeLists.txt, go to the build directory and run:
# make BLAHBLAH.par
-macro(add_target_parfile PARMODULE PARSOURCES PARHEADERS PARLINKDEF PARLIBDEPS)
+function(add_target_parfile PARMODULE PARSOURCES PARHEADERS PARLINKDEF PARLIBDEPS)
- message(STATUS "PARfile generation: ${PARMODULE}")
-
- # Libraries
- foreach(THISLIB ${PARLIBDEPS})
- set(_PARLIBDEPS "${_PARLIBDEPS} lib${THISLIB}")
+ # Libraries: result is a space-separated string
+ foreach(_THISLIB ${PARLIBDEPS})
+ set(_PARLIBDEPS "${_PARLIBDEPS} lib${_THISLIB}")
endforeach()
string(STRIP "${_PARLIBDEPS}" PARLIBDEPS)
- # Export variable
+ # Export variables: used in configure_file()
set(PARMODULE "${PARMODULE}")
+ string(REPLACE ";" " " PARSOURCES_FLAT "${PARSOURCES}")
+ string(REPLACE ";" " " PARHEADERS_FLAT "${PARHEADERS}")
- message(STATUS "--> Module: ${PARMODULE}")
- message(STATUS "--> Sources: ${PARSOURCES}")
- message(STATUS "--> Deps: ${PARLIBDEPS}")
+ #message(STATUS "[add_target_parfile] Library (space-separated): ${PARMODULE}")
+ #message(STATUS "[add_target_parfile] Sources (list): ${PARSOURCES}")
+ #message(STATUS "[add_target_parfile] Headers (list): ${PARHEADERS}")
+ #message(STATUS "[add_target_parfile] Dependencies (space-separated): ${PARLIBDEPS}")
- foreach(LOOPVAR ${PARSOURCES})
- message(STATUS "----> ${LOOPVAR}")
- endforeach()
+ if(NOT "${ARGV5}" STREQUAL "")
+ # Optional: extra includes, space-separated
+ set(PAREXTRAINCLUDES "${ARGV5}")
+ #message(STATUS "[add_target_parfile] Extra Includes (space-separated): ${PAREXTRAINCLUDES}")
+ endif()
# PARfile output directory (the one we will tar)
set(PARDIR ${CMAKE_CURRENT_BINARY_DIR}/PARfiles/${PARMODULE})
# Target for creating PARfile (would stop after the first failed COMMAND)
add_custom_target("${PARMODULE}.par"
- COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && cp ${PARSOURCES} ${PARHEADERS} ${PARLINKDEF} ${PARDIR}/
+ COMMAND rsync --relative ${PARSOURCES} ${PARHEADERS} ${PARLINKDEF} ${PARDIR}/
COMMAND tar -C ${PARDIR}/.. -czf ${PARDIR}/../${PARMODULE}.par ${PARMODULE}/
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
-endmacro()
+ # Install target
+ install(FILES ${PARDIR}/../${PARMODULE}.par DESTINATION PARfiles OPTIONAL)
+
+ # Add this module to the list of generated PARfiles
+ list(APPEND ALIPARFILES ${PARMODULE})
+ set(ALIPARFILES ${ALIPARFILES} CACHE INTERNAL "ALIPARFILES")
+
+endfunction()