Initial fix of Libt2n.cmake.
[libt2n] / examples-codegen / cmake / Libt2n.cmake
index dca8d17..ee0e9ef 100644 (file)
@@ -1,13 +1,13 @@
-# Detect libt2n. Version of this file: 1.0
+# Detect libt2n. Version of this file: 1.1
 pkg_check_modules(LIBT2N REQUIRED libt2n)
-INCLUDE_DIRECTORIES(${LIBT2N_INCLUDE_DIRS})
-LINK_DIRECTORIES(${LIBT2N_LIBRARY_DIRS})
+include_directories(${LIBT2N_INCLUDE_DIRS})
+link_directories(${LIBT2N_LIBRARY_DIRS})
 
 # Get locations from pkgconfig
-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} --variable libt2n_codegen libt2n
+execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable libt2n_codegen libt2n
                                 OUTPUT_VARIABLE LIBT2N_CODEGEN
                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
-execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} --variable libt2n_datadir libt2n
+execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable libt2n_datadir libt2n
                                 OUTPUT_VARIABLE LIBT2N_DATADIR
                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
 set(LIBT2N_CLIENT_PCTEMPLATE ${LIBT2N_DATADIR}/clientlib.pc.in)
@@ -21,48 +21,61 @@ set(libdir      ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX})
 
 # Setup libt2n. Arguments are the CMDGROUP names
 function(setup_libt2n)
-    include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
-
-    string(LENGTH ${ARGV} CMDGROUP_LEN)
+    string(LENGTH "${ARGV}" CMDGROUP_LEN)
     if (${CMDGROUP_LEN} EQUAL 0)
         message(FATAL_ERROR "libt2n CMDGROUP is empty")
     endif(${CMDGROUP_LEN} EQUAL 0)
 
+    include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
+
+    # Compute include directories
+    # TODO: http://www.cmake.org/Bug/view.php?id=11889 contains a better solution
+    get_property(gcc_include_dirs
+       DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+       PROPERTY INCLUDE_DIRECTORIES
+    )
+    set(gccxml_include_dirs "")
+    foreach(gcc_include_dir ${gcc_include_dirs})
+       set(gccxml_include_dirs "${gccxml_include_dirs} -I${gcc_include_dir}")
+    endforeach(gcc_include_dir ${gcc_include_dirs})
+
     foreach(CMDGROUP ${ARGV})
         message("Processing libt2n command group ${CMDGROUP}")
 
         # Run each .cpp file through gccxml
+       set(T2N_GCCXML_FILES "")
+       # string(REGEX REPLACE "\\.cpp$" ".xml" T2N_GCCXML_FILES "${${CMDGROUP}_GROUP}")
         foreach(T2NFILE ${${CMDGROUP}_GROUP})
             get_filename_component(FILE_WE ${T2NFILE} NAME_WE)
-            get_filename_component(NAME ${T2NFILE} NAME)
-            message("   Processing file ${NAME}")
-
-            # Compute include directories
-            # TODO: http://www.cmake.org/Bug/view.php?id=11889 contains a better solution
-            get_property(gcc_include_dirs
-                DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-                PROPERTY INCLUDE_DIRECTORIES
-            )
-            set(gccxml_include_dirs "")
-            foreach(gcc_include_dir ${gcc_include_dirs})
-                set(gccxml_include_dirs "${gccxml_include_dirs} -I${gcc_include_dir}")
-            endforeach(gcc_include_dir ${gcc_include_dirs})
-
-            add_custom_command(OUTPUT ${FILE_WE}_common.cpp ${FILE_WE}_common.hxx ${FILE_WE}_client.cpp ${FILE_WE}_client.hxx ${FILE_WE}_server.cpp  ${FILE_WE}_server.hxx
-                # Create dummy _common.hxx file
-                COMMAND echo "\\#include \\\"codegen-stubhead.hxx\\\"" >${FILE_WE}_common.hxx
-                COMMAND echo "\\#include \\\"${FILE_WE}.hxx\\\"" >>${FILE_WE}_common.hxx
-
-                # Invoke gccxml
-                COMMAND ${LIBT2N_GCCXML} ${gccxml_include_dirs} ${T2NFILE} -fxml=${FILE_WE}.xml || rm -f ${FILE_WE}_common.hxx
-
-                # Transform xml file to real code
-                COMMAND ${LIBT2N_CODEGEN} ${CMDGROUP} ${FILE_WE}.xml
-                COMMAND rm -f ${FILE_WE}.xml
-
-                DEPENDS ${T2NFILE}
-            )
+            get_filename_component(FILE_NAME ${T2NFILE} NAME)
+            message("   Processing file ${FILE_NAME}")
+           
+           add_custom_command(
+           OUTPUT ${FILE_WE}.xml
+           # Create dummy _common.hxx file
+           COMMAND echo "\\#include \\\"codegen-stubhead.hxx\\\"" >${CMDGROUP}_common.hxx
+           COMMAND echo "\\#include \\\"${CMDGROUP}.hxx\\\"" >>${CMDGROUP}_common.hxx
+
+           # Invoke gccxml
+           COMMAND ${LIBT2N_GCCXML} ${gccxml_include_dirs} ${T2NFILE} -fxml=${FILE_WE}.xml || rm -f ${CMDGROUP}_common.hxx
+
+           DEPENDS ${T2NFILE}
+           )
+
+           # Created intermediate gccxml filenames for current CMDGROUP
+           set(T2N_GCCXML_FILES ${T2N_GCCXML_FILES} ${FILE_WE}.xml)
         endforeach(T2NFILE ${${CMDGROUP}_GROUP})
+        # Wait till generated gccxml files are available
+        # add_custom_target(${CMDGROUP}_gccxml_done ALL DEPENDS ???)
+message("--- ${T2N_GCCXML_FILES}  ---")
+       add_custom_command(OUTPUT ${CMDGROUP}_common.cpp ${CMDGROUP}_common.hxx ${CMDGROUP}_client.cpp ${CMDGROUP}_client.hxx ${CMDGROUP}_server.cpp  ${CMDGROUP}_server.hxx
+           # Transform xml files to real code
+           COMMAND ${LIBT2N_CODEGEN} ${CMDGROUP} ${T2N_GCCXML_FILES}
+           COMMAND rm -f ${T2N_GCCXML_FILES}
+
+           DEPENDS ${T2N_GCCXML_FILES}
+           # DEPENDS ${CMDGROUP}_gccxml_done
+       )
 
         # Write out pkgconfig file
         configure_file(${LIBT2N_CLIENT_PCTEMPLATE} ${CMAKE_CURRENT_BINARY_DIR}/${CMDGROUP}.pc @ONLY@)
@@ -70,12 +83,12 @@ function(setup_libt2n)
             DESTINATION lib/pkgconfig)
 
         # Create shared client library
-        add_library(${CMDGROUP} SHARED ${FILE_WE}_client.cpp ${FILE_WE}_client.hxx)
+        add_library(${CMDGROUP} SHARED ${CMDGROUP}_client.cpp ${CMDGROUP}_client.hxx)
         set_target_properties(${CMDGROUP} PROPERTIES VERSION ${VERSION} SOVERSION 1)
         install(TARGETS ${CMDGROUP} LIBRARY DESTINATION lib COMPONENT sharedlibs)
 
         # Create static client library
-        add_library(${CMDGROUP}-static STATIC ${FILE_WE}_client.cpp ${FILE_WE}_client.hxx)
+        add_library(${CMDGROUP}-static STATIC ${CMDGROUP}_client.cpp ${CMDGROUP}_client.hxx)
         set_target_properties(${CMDGROUP}-static PROPERTIES OUTPUT_NAME "${CMDGROUP}")
         install(TARGETS ${CMDGROUP}-static ARCHIVE DESTINATION lib COMPONENT staticlibs)
 
@@ -83,13 +96,14 @@ function(setup_libt2n)
         set_target_properties(${CMDGROUP} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
         set_target_properties(${CMDGROUP}-static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
 
-        install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${FILE_WE}_client.hxx ${FILE_WE}.hxx
+        install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMDGROUP}_client.hxx ${CMDGROUP}.hxx
                     DESTINATION include
                     COMPONENT headers
         )
 
         # Wait till generated code is available
-        add_custom_target(${CMDGROUP}_codegen_done ALL DEPENDS ${FILE_WE}_common.cpp)
+        # add_custom_target(${CMDGROUP}_codegen_done ALL DEPENDS ${CMDGROUP}_common.cpp)
+       add_custom_target(${CMDGROUP}_codegen_done ALL DEPENDS ${CMDGROUP}_common.cpp ${CMDGROUP}_common.hxx ${CMDGROUP}_client.cpp ${CMDGROUP}_client.hxx ${CMDGROUP}_server.cpp  ${CMDGROUP}_server.hxx)
         add_dependencies(${CMDGROUP} ${CMDGROUP}_codegen_done)
         add_dependencies(${CMDGROUP}-static ${CMDGROUP}_codegen_done)