Commit | Line | Data |
---|---|---|
3721c85a | 1 | # Version of this file: 1.3.1 |
34721cc4 KK |
2 | |
3 | # Detect libt2n | |
9621eb22 | 4 | pkg_check_modules(LIBT2N REQUIRED libt2n) |
9fe43ede KK |
5 | include_directories(${LIBT2N_INCLUDE_DIRS}) |
6 | link_directories(${LIBT2N_LIBRARY_DIRS}) | |
9621eb22 | 7 | |
34721cc4 KK |
8 | # Detect the boost serialization library |
9 | find_package(Boost 1.34 COMPONENTS serialization REQUIRED) | |
10 | include_directories(${Boost_INCLUDE_DIRS}) | |
11 | ||
9621eb22 | 12 | # Get locations from pkgconfig |
9fe43ede | 13 | execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable libt2n_codegen libt2n |
9621eb22 TJ |
14 | OUTPUT_VARIABLE LIBT2N_CODEGEN |
15 | OUTPUT_STRIP_TRAILING_WHITESPACE) | |
9fe43ede | 16 | execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable libt2n_datadir libt2n |
9621eb22 TJ |
17 | OUTPUT_VARIABLE LIBT2N_DATADIR |
18 | OUTPUT_STRIP_TRAILING_WHITESPACE) | |
19 | set(LIBT2N_CLIENT_PCTEMPLATE ${LIBT2N_DATADIR}/clientlib.pc.in) | |
20 | set(LIBT2N_GCCXML /usr/bin/libt2n-gccxml.sh) | |
21 | ||
22 | # Basic pkgconfig settings needed for client.pc generation | |
23 | set(prefix ${CMAKE_INSTALL_PREFIX}) | |
24 | set(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin) | |
25 | set(includedir ${CMAKE_INSTALL_PREFIX}/include/${PROJECT_NAME}) | |
26 | set(libdir ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}) | |
27 | ||
28 | # Setup libt2n. Arguments are the CMDGROUP names | |
29 | function(setup_libt2n) | |
9fe43ede | 30 | string(LENGTH "${ARGV}" CMDGROUP_LEN) |
9621eb22 TJ |
31 | if (${CMDGROUP_LEN} EQUAL 0) |
32 | message(FATAL_ERROR "libt2n CMDGROUP is empty") | |
33 | endif(${CMDGROUP_LEN} EQUAL 0) | |
34 | ||
9fe43ede KK |
35 | include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) |
36 | ||
37 | # Compute include directories | |
38 | # TODO: http://www.cmake.org/Bug/view.php?id=11889 contains a better solution | |
39 | get_property(gcc_include_dirs | |
359ca085 KK |
40 | DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} |
41 | PROPERTY INCLUDE_DIRECTORIES | |
9fe43ede KK |
42 | ) |
43 | set(gccxml_include_dirs "") | |
44 | foreach(gcc_include_dir ${gcc_include_dirs}) | |
359ca085 | 45 | set(gccxml_include_dirs "${gccxml_include_dirs} -I${gcc_include_dir}") |
9fe43ede KK |
46 | endforeach(gcc_include_dir ${gcc_include_dirs}) |
47 | ||
9621eb22 | 48 | foreach(CMDGROUP ${ARGV}) |
813a4e4b | 49 | message(STATUS "Processing libt2n command group ${CMDGROUP}") |
9621eb22 | 50 | |
813a4e4b | 51 | # We are going to run each .cpp file through gccxml for the current CMDGROUP |
359ca085 KK |
52 | set(T2N_GCCXML_FILES "") |
53 | set(T2N_GCCXML_COMMANDS "") | |
9621eb22 | 54 | foreach(T2NFILE ${${CMDGROUP}_GROUP}) |
9fe43ede | 55 | get_filename_component(FILE_NAME ${T2NFILE} NAME) |
f113155a TJ |
56 | # get_filename_component(FILE_EXT ${T2NFILE} EXT) <-- Doesn't work for filenames with multiple dots |
57 | string(REGEX MATCH "(\\.[^\\.]*)$" FILE_EXT ${T2NFILE}) | |
359ca085 KK |
58 | if(NOT FILE_EXT STREQUAL ".cpp") |
59 | message(FATAL_ERROR " Error: ${FILE_NAME} is not a .cpp file based on its filename extension!") | |
60 | endif() | |
813a4e4b KK |
61 | message(STATUS " Processing file ${FILE_NAME}") |
62 | ||
359ca085 KK |
63 | # We build the commands in advance which execute gccxml on each file in the CMDGROUP |
64 | set(T2N_GCCXML_COMMANDS ${T2N_GCCXML_COMMANDS} | |
65 | COMMAND ${LIBT2N_GCCXML} ${gccxml_include_dirs} ${T2NFILE} -fxml=${T2NFILE}.xml | |
66 | ) | |
67 | # The filenames of the created intermediate gccxml files for the current CMDGROUP | |
68 | set(T2N_GCCXML_FILES ${T2N_GCCXML_FILES} ${T2NFILE}.xml) | |
813a4e4b KK |
69 | endforeach(T2NFILE ${${CMDGROUP}_GROUP}) |
70 | ||
359ca085 KK |
71 | add_custom_command( |
72 | OUTPUT ${CMDGROUP}_common.cpp ${CMDGROUP}_common.hxx ${CMDGROUP}_client.cpp ${CMDGROUP}_client.hxx ${CMDGROUP}_server.cpp ${CMDGROUP}_server.hxx | |
813a4e4b | 73 | |
359ca085 KK |
74 | # Create dummy _common.hxx file |
75 | COMMAND echo "\\#include \\\"codegen-stubhead.hxx\\\"" >${CMDGROUP}_common.hxx | |
76 | COMMAND echo "\\#include \\\"${CMDGROUP}.hxx\\\"" >>${CMDGROUP}_common.hxx | |
9fe43ede | 77 | |
359ca085 KK |
78 | # Invoke gccxml on each source file in the current CMDGROUP and delete the dummy file |
79 | ${T2N_GCCXML_COMMANDS} | |
80 | COMMAND rm -f ${CMDGROUP}_common.hxx | |
9fe43ede | 81 | |
359ca085 KK |
82 | # Run the code generator on all the generated gccxml files and remove those intermediate gccxml files |
83 | COMMAND ${LIBT2N_CODEGEN} ${CMDGROUP} ${T2N_GCCXML_FILES} | |
84 | COMMAND rm -f ${T2N_GCCXML_FILES} | |
9fe43ede | 85 | |
359ca085 KK |
86 | DEPENDS ${${CMDGROUP}_GROUP} |
87 | ) | |
9621eb22 TJ |
88 | |
89 | # Write out pkgconfig file | |
90 | configure_file(${LIBT2N_CLIENT_PCTEMPLATE} ${CMAKE_CURRENT_BINARY_DIR}/${CMDGROUP}.pc @ONLY@) | |
91 | install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMDGROUP}.pc | |
92 | DESTINATION lib/pkgconfig) | |
93 | ||
94 | # Create shared client library | |
9fe43ede | 95 | add_library(${CMDGROUP} SHARED ${CMDGROUP}_client.cpp ${CMDGROUP}_client.hxx) |
9621eb22 | 96 | set_target_properties(${CMDGROUP} PROPERTIES VERSION ${VERSION} SOVERSION 1) |
359ca085 | 97 | target_link_libraries(${CMDGROUP} ${Boost_SERIALIZATION_LIBRARIES}) |
9621eb22 TJ |
98 | install(TARGETS ${CMDGROUP} LIBRARY DESTINATION lib COMPONENT sharedlibs) |
99 | ||
100 | # Create static client library | |
9fe43ede | 101 | add_library(${CMDGROUP}-static STATIC ${CMDGROUP}_client.cpp ${CMDGROUP}_client.hxx) |
9621eb22 | 102 | set_target_properties(${CMDGROUP}-static PROPERTIES OUTPUT_NAME "${CMDGROUP}") |
359ca085 | 103 | target_link_libraries(${CMDGROUP}-static ${Boost_SERIALIZATION_LIBRARIES}) |
9621eb22 TJ |
104 | install(TARGETS ${CMDGROUP}-static ARCHIVE DESTINATION lib COMPONENT staticlibs) |
105 | ||
106 | # Prevent clobbering each other during the build | |
107 | set_target_properties(${CMDGROUP} PROPERTIES CLEAN_DIRECT_OUTPUT 1) | |
108 | set_target_properties(${CMDGROUP}-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) | |
109 | ||
9fe43ede | 110 | install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMDGROUP}_client.hxx ${CMDGROUP}.hxx |
3721c85a | 111 | DESTINATION include/${PROJECT_NAME} |
9621eb22 TJ |
112 | COMPONENT headers |
113 | ) | |
114 | ||
115 | # Wait till generated code is available | |
359ca085 | 116 | 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) |
9621eb22 TJ |
117 | add_dependencies(${CMDGROUP} ${CMDGROUP}_codegen_done) |
118 | add_dependencies(${CMDGROUP}-static ${CMDGROUP}_codegen_done) | |
119 | ||
120 | endforeach(CMDGROUP ${ARGV}) | |
121 | endfunction(setup_libt2n) |