From 9fe43ede225bae3072564605f9fd74e663ed19aa Mon Sep 17 00:00:00 2001 From: =?utf8?q?Krist=C3=B3f=20Katus?= Date: Wed, 24 Aug 2011 17:24:28 +0200 Subject: [PATCH] Initial fix of Libt2n.cmake. --- examples-codegen/cmake/Libt2n.cmake | 94 ++++++++++++++++++++--------------- 1 files changed, 54 insertions(+), 40 deletions(-) diff --git a/examples-codegen/cmake/Libt2n.cmake b/examples-codegen/cmake/Libt2n.cmake index dca8d17..ee0e9ef 100644 --- a/examples-codegen/cmake/Libt2n.cmake +++ b/examples-codegen/cmake/Libt2n.cmake @@ -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) -- 1.7.1