libt2n-git Archives

Subject: C++ inter-process communication library branch, master, updated. v0.6-1-g9621eb2

From: libt2n-git@xxxxxxxxxxxxxxxxxxxxxxx
To: libt2n-git@xxxxxxxxxxxxxxxxxxxxxxx
Date: Thu, 7 Jul 2011 13:05:22 +0200 (CEST)
The branch, master has been updated
       via  9621eb22108a1ca45bfc9b7774b729a381b5566a (commit)
      from  85248d114dd51ade7a018249566ba1d9598ae4b2 (commit)


- Log -----------------------------------------------------------------
commit 9621eb22108a1ca45bfc9b7774b729a381b5566a
Author: Thomas Jarosch <thomas.jarosch@xxxxxxxxxxxxx>
Date:   Thu Jul 7 13:05:20 2011 +0200

    Add cmake code generator support to libt2n

-----------------------------------------------------------------------

Summary of changes:
 examples-codegen/Makefile.am          |    2 +-
 examples-codegen/cmake/CMakeLists.txt |   23 ++++++++
 examples-codegen/cmake/Libt2n.cmake   |   97 +++++++++++++++++++++++++++++++++
 3 files changed, 121 insertions(+), 1 deletions(-)
 create mode 100644 examples-codegen/cmake/CMakeLists.txt
 create mode 100644 examples-codegen/cmake/Libt2n.cmake

diff --git a/examples-codegen/Makefile.am b/examples-codegen/Makefile.am
index 207620e..ebf086c 100644
--- a/examples-codegen/Makefile.am
+++ b/examples-codegen/Makefile.am
@@ -1,2 +1,2 @@
 # automatically generated by ./test-build-install-use
-EXTRA_DIST = $(srcdir)/example1/* $(srcdir)/example1-client/* 
$(srcdir)/example1-client-wrapper/* $(srcdir)/example2/* 
$(srcdir)/example2-client/* $(srcdir)/README
+EXTRA_DIST = $(srcdir)/example1/* $(srcdir)/example1-client/* 
$(srcdir)/example1-client-wrapper/* $(srcdir)/example2/* 
$(srcdir)/example2-client/* $(srcdir)/cmake/* $(srcdir)/README
diff --git a/examples-codegen/cmake/CMakeLists.txt 
b/examples-codegen/cmake/CMakeLists.txt
new file mode 100644
index 0000000..deb1c63
--- /dev/null
+++ b/examples-codegen/cmake/CMakeLists.txt
@@ -0,0 +1,23 @@
+# Show basic usage of libt2n and cmake
+# Requires Libt2n.cmake
+
+# Setup libt2n
+set(t2n_mydaemon_GROUP
+    ${CMAKE_SOURCE_DIR}/src/t2n_mydaemon.cpp
+)
+include(Libt2n.cmake)
+
+# Call setup_libt2n with the CMDGROUP name
+setup_libt2n(t2n_mydaemon)
+
+# 
------------------------------------------------------------------------------------------------------
+
+set(keymaker_cpp_sources
+    something.cpp
+    ${t2n_mydaemon_GROUP}
+)
+
+add_executable(mydaemon main.cpp ${keymaker_cpp_sources} 
t2n_mydaemon_server.cpp)
+target_link_libraries(mydaemon ${LIBT2N_LIBRARIES})
+# Wait till generated code is available
+add_dependencies(mydaemon t2n_mydaemon_codegen_done)
diff --git a/examples-codegen/cmake/Libt2n.cmake 
b/examples-codegen/cmake/Libt2n.cmake
new file mode 100644
index 0000000..24f06bf
--- /dev/null
+++ b/examples-codegen/cmake/Libt2n.cmake
@@ -0,0 +1,97 @@
+# Detect libt2n. Version of this file: 1.0
+pkg_check_modules(LIBT2N REQUIRED libt2n)
+INCLUDE_DIRECTORIES(${LIBT2N_INCLUDE_DIRS})
+LINK_DIRECTORIES(${LIBT2N_LIBRARY_DIRS})
+
+# Get locations from pkgconfig
+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
+                                OUTPUT_VARIABLE LIBT2N_DATADIR
+                                OUTPUT_STRIP_TRAILING_WHITESPACE)
+set(LIBT2N_CLIENT_PCTEMPLATE ${LIBT2N_DATADIR}/clientlib.pc.in)
+set(LIBT2N_GCCXML /usr/bin/libt2n-gccxml.sh)
+
+# Basic pkgconfig settings needed for client.pc generation
+set(prefix      ${CMAKE_INSTALL_PREFIX})
+set(exec_prefix ${CMAKE_INSTALL_PREFIX}/bin)
+set(includedir  ${CMAKE_INSTALL_PREFIX}/include/${PROJECT_NAME})
+set(libdir      ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX})
+
+# Setup libt2n. Arguments are the CMDGROUP names
+function(setup_libt2n)
+    include_directories(${CMAKE_CURRENT_SOURCE_DIR} 
${CMAKE_CURRENT_BINARY_DIR})
+
+    string(LENGTH ${ARGV} CMDGROUP_LEN)
+    if (${CMDGROUP_LEN} EQUAL 0)
+        message(FATAL_ERROR "libt2n CMDGROUP is empty")
+    endif(${CMDGROUP_LEN} EQUAL 0)
+
+    foreach(CMDGROUP ${ARGV})
+        message("Processing libt2n command group ${CMDGROUP}")
+
+        # Run each .cpp file through gccxml
+        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}
+            )
+        endforeach(T2NFILE ${${CMDGROUP}_GROUP})
+
+        # Write out pkgconfig file
+        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 ${FILE_WE}_client.cpp 
${FILE_WE}_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)
+        set_target_properties(${CMDGROUP}-static PROPERTIES OUTPUT_NAME 
"${CMDGROUP}")
+        install(TARGETS ${CMDGROUP}-static ARCHIVE DESTINATION lib COMPONENT 
staticlibs)
+
+        # Prevent clobbering each other during the build
+        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
+                    DESTINATION include
+                    COMPONENT headers
+        )
+
+        # Wait till generated code is available
+        add_custom_target(${CMDGROUP}_codegen_done ALL DEPENDS 
${FILE_WE}_common.cpp)
+        add_dependencies(${CMDGROUP} ${CMDGROUP}_codegen_done)
+        add_dependencies(${CMDGROUP}-static ${CMDGROUP}_codegen_done)
+
+    endforeach(CMDGROUP ${ARGV})
+endfunction(setup_libt2n)


hooks/post-receive
-- 
C++ inter-process communication library

--
libt2n-git - see http://www.intra2net.com/en/developer/libt2n for details.
To unsubscribe send a mail to libt2n-git+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx   

Current Thread
  • C++ inter-process communication library branch, master, updated. v0.6-1-g9621eb2, libt2n-git <=