X-Git-Url: http://developer.intra2net.com/git/?p=libt2n;a=blobdiff_plain;f=codegen%2FLibt2n.cmake;h=4df59328a4a0752a362c89bad41707165d74e450;hp=a31edee77aa1ba0f860ac99e449a6f0cbbceff5b;hb=c209619c4d44a3e9c5b0f537f53ec65564899efb;hpb=b24bd083fe58d644ba3b4e8db76636dddd842b9d diff --git a/codegen/Libt2n.cmake b/codegen/Libt2n.cmake index a31edee..4df5932 100644 --- a/codegen/Libt2n.cmake +++ b/codegen/Libt2n.cmake @@ -1,8 +1,14 @@ -# Detect libt2n. Version of this file: 1.2 +# Version of this file: 1.3.1 + +# Detect libt2n pkg_check_modules(LIBT2N REQUIRED libt2n) include_directories(${LIBT2N_INCLUDE_DIRS}) link_directories(${LIBT2N_LIBRARY_DIRS}) +# Detect the boost serialization library +find_package(Boost 1.34 COMPONENTS serialization REQUIRED) +include_directories(${Boost_INCLUDE_DIRS}) + # Get locations from pkgconfig execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable libt2n_codegen libt2n OUTPUT_VARIABLE LIBT2N_CODEGEN @@ -31,67 +37,70 @@ function(setup_libt2n) # 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 + 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}") + set(gccxml_include_dirs "${gccxml_include_dirs} -I${gcc_include_dir}") endforeach(gcc_include_dir ${gcc_include_dirs}) foreach(CMDGROUP ${ARGV}) message(STATUS "Processing libt2n command group ${CMDGROUP}") # We are going to run each .cpp file through gccxml for the current CMDGROUP - set(T2N_GCCXML_FILES "") - set(T2N_GCCXML_COMMANDS "") + set(T2N_GCCXML_FILES "") + set(T2N_GCCXML_COMMANDS "") foreach(T2NFILE ${${CMDGROUP}_GROUP}) get_filename_component(FILE_NAME ${T2NFILE} NAME) - get_filename_component(FILE_EXT ${T2NFILE} EXT) - if(NOT FILE_EXT STREQUAL ".cpp") - message(FATAL_ERROR " Error: ${FILE_NAME} is not a .cpp file based on its filename extension!") - endif() + # get_filename_component(FILE_EXT ${T2NFILE} EXT) <-- Doesn't work for filenames with multiple dots + string(REGEX MATCH "(\\.[^\\.]*)$" FILE_EXT ${T2NFILE}) + if(NOT FILE_EXT STREQUAL ".cpp") + message(FATAL_ERROR " Error: ${FILE_NAME} is not a .cpp file based on its filename extension!") + endif() message(STATUS " Processing file ${FILE_NAME}") - # We build the commands in advance which execute gccxml on each file in the CMDGROUP - set(T2N_GCCXML_COMMANDS ${T2N_GCCXML_COMMANDS} - COMMAND ${LIBT2N_GCCXML} ${gccxml_include_dirs} ${T2NFILE} -fxml=${T2NFILE}.xml - ) - # The filenames of the created intermediate gccxml files for the current CMDGROUP - set(T2N_GCCXML_FILES ${T2N_GCCXML_FILES} ${T2NFILE}.xml) + # We build the commands in advance which execute gccxml on each file in the CMDGROUP + set(T2N_GCCXML_COMMANDS ${T2N_GCCXML_COMMANDS} + COMMAND ${LIBT2N_GCCXML} ${gccxml_include_dirs} ${T2NFILE} -fxml=${T2NFILE}.xml + ) + # The filenames of the created intermediate gccxml files for the current CMDGROUP + set(T2N_GCCXML_FILES ${T2N_GCCXML_FILES} ${T2NFILE}.xml) endforeach(T2NFILE ${${CMDGROUP}_GROUP}) - add_custom_command( - OUTPUT ${CMDGROUP}_common.cpp ${CMDGROUP}_common.hxx ${CMDGROUP}_client.cpp ${CMDGROUP}_client.hxx ${CMDGROUP}_server.cpp ${CMDGROUP}_server.hxx + add_custom_command( + OUTPUT ${CMDGROUP}_common.cpp ${CMDGROUP}_common.hxx ${CMDGROUP}_client.cpp ${CMDGROUP}_client.hxx ${CMDGROUP}_server.cpp ${CMDGROUP}_server.hxx - # Create dummy _common.hxx file - COMMAND echo "\\#include \\\"codegen-stubhead.hxx\\\"" >${CMDGROUP}_common.hxx - COMMAND echo "\\#include \\\"${CMDGROUP}.hxx\\\"" >>${CMDGROUP}_common.hxx + # Create dummy _common.hxx file + COMMAND echo "\\#include \\\"codegen-stubhead.hxx\\\"" >${CMDGROUP}_common.hxx + COMMAND echo "\\#include \\\"${CMDGROUP}.hxx\\\"" >>${CMDGROUP}_common.hxx - # Invoke gccxml on each source file in the current CMDGROUP and delete the dummy file - ${T2N_GCCXML_COMMANDS} - COMMAND rm -f ${CMDGROUP}_common.hxx + # Invoke gccxml on each source file in the current CMDGROUP and delete the dummy file + ${T2N_GCCXML_COMMANDS} + COMMAND rm -f ${CMDGROUP}_common.hxx - # Run the code generator on all the generated gccxml files and remove those intermediate gccxml files - COMMAND ${LIBT2N_CODEGEN} ${CMDGROUP} ${T2N_GCCXML_FILES} - COMMAND rm -f ${T2N_GCCXML_FILES} + # Run the code generator on all the generated gccxml files and remove those intermediate gccxml files + COMMAND ${LIBT2N_CODEGEN} ${CMDGROUP} ${T2N_GCCXML_FILES} + COMMAND rm -f ${T2N_GCCXML_FILES} - DEPENDS ${${CMDGROUP}_GROUP} - ) + DEPENDS ${${CMDGROUP}_GROUP} + ) # Write out pkgconfig file - configure_file(${LIBT2N_CLIENT_PCTEMPLATE} ${CMAKE_CURRENT_BINARY_DIR}/${CMDGROUP}.pc @ONLY@) + configure_file(${LIBT2N_CLIENT_PCTEMPLATE} ${CMAKE_CURRENT_BINARY_DIR}/${CMDGROUP}.pc @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMDGROUP}.pc DESTINATION lib/pkgconfig) # Create shared client library add_library(${CMDGROUP} SHARED ${CMDGROUP}_client.cpp ${CMDGROUP}_client.hxx) set_target_properties(${CMDGROUP} PROPERTIES VERSION ${VERSION} SOVERSION 1) + target_link_libraries(${CMDGROUP} ${Boost_SERIALIZATION_LIBRARIES}) install(TARGETS ${CMDGROUP} LIBRARY DESTINATION lib COMPONENT sharedlibs) # Create static client library add_library(${CMDGROUP}-static STATIC ${CMDGROUP}_client.cpp ${CMDGROUP}_client.hxx) set_target_properties(${CMDGROUP}-static PROPERTIES OUTPUT_NAME "${CMDGROUP}") + target_link_libraries(${CMDGROUP}-static ${Boost_SERIALIZATION_LIBRARIES}) install(TARGETS ${CMDGROUP}-static ARCHIVE DESTINATION lib COMPONENT staticlibs) # Prevent clobbering each other during the build @@ -99,12 +108,12 @@ function(setup_libt2n) set_target_properties(${CMDGROUP}-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMDGROUP}_client.hxx ${CMDGROUP}.hxx - DESTINATION include + DESTINATION include/${PROJECT_NAME} COMPONENT headers ) # Wait till generated code is available - 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_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)