-# 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)
# 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@)
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)
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)