]> 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 7ce53ab494bff5898e11f3f616be40e05b464787..15951abeb2f058e9576c3a30269282884e54211d 100644 (file)
@@ -1,7 +1,8 @@
-# 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})
@@ -66,8 +71,16 @@ macro(add_target_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 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()