]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - cmake/GenParFile.cmake
ALIROOT-5836 AliESDpid not respecting the AliVTrack interface (patch from Mihaela)
[u/mrichter/AliRoot.git] / cmake / GenParFile.cmake
index 78d5784723af73c22fc8c90fe64f9c5870b322f2..15951abeb2f058e9576c3a30269282884e54211d 100644 (file)
@@ -1,23 +1,44 @@
-macro(add_parfile PARMODULE PARSOURCES PARHEADERS PARLINKDEF PARLIBDEPS)
+# 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}" ["extrainclude1 extrainclude2..."])
+#
+# Arguments are, in order:
+#  - library's name: for libBLAHBLAH it will generate a target BLAHBLAH.par
+#  - source files: classes to include in the PARfile, they must be exactly the ones used to generate
+#    the library
+#  - 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
 
-  message(STATUS "PARfile generation: ${PARMODULE}")
+function(add_target_parfile PARMODULE PARSOURCES PARHEADERS PARLINKDEF PARLIBDEPS)
 
-  # 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})
@@ -50,9 +71,16 @@ macro(add_parfile PARMODULE PARSOURCES PARHEADERS PARLINKDEF PARLIBDEPS)
 
   # 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 cmake -E copy ${ROOT_ETCDIR}/Makefile.arch ${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()