diff options
author | Ted Gould <ted@gould.cx> | 2013-06-27 10:43:13 -0500 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2013-06-27 10:43:13 -0500 |
commit | 9daa9b7b0849a121309b5522ef7eb6d34c6712b2 (patch) | |
tree | bfbda0045e277cef9420d2b4fb6b2d04986ca541 /cmake/UseGlibGeneration.cmake | |
parent | 14b46999b69f8dac446e204604adf0981395449c (diff) | |
download | ayatana-greeter-session-broadcast-9daa9b7b0849a121309b5522ef7eb6d34c6712b2.tar.gz ayatana-greeter-session-broadcast-9daa9b7b0849a121309b5522ef7eb6d34c6712b2.tar.bz2 ayatana-greeter-session-broadcast-9daa9b7b0849a121309b5522ef7eb6d34c6712b2.zip |
Adding in a build system
Diffstat (limited to 'cmake/UseGlibGeneration.cmake')
-rw-r--r-- | cmake/UseGlibGeneration.cmake | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/cmake/UseGlibGeneration.cmake b/cmake/UseGlibGeneration.cmake new file mode 100644 index 0000000..67e34b9 --- /dev/null +++ b/cmake/UseGlibGeneration.cmake @@ -0,0 +1,71 @@ +cmake_minimum_required(VERSION 2.6) +if(POLICY CMP0011) + cmake_policy(SET CMP0011 NEW) +endif(POLICY CMP0011) + +find_program(GLIB_MKENUMS glib-mkenums) +find_program(GLIB_GENMARSHAL glib-genmarshal) + +macro(add_glib_marshal outfiles name prefix otherinclude) + add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${name}.h" + COMMAND ${GLIB_GENMARSHAL} --header "--prefix=${prefix}" + "${CMAKE_CURRENT_SOURCE_DIR}/${name}.list" + > "${CMAKE_CURRENT_BINARY_DIR}/${name}.h" + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${name}.list" + ) + add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${name}.c" + COMMAND echo "\\#include \\\"${otherinclude}\\\"" > "${CMAKE_CURRENT_BINARY_DIR}/${name}.c" + COMMAND echo "\\#include \\\"glib-object.h\\\"" >> "${CMAKE_CURRENT_BINARY_DIR}/${name}.c" + COMMAND echo "\\#include \\\"${name}.h\\\"" >> "${CMAKE_CURRENT_BINARY_DIR}/${name}.c" + COMMAND ${GLIB_GENMARSHAL} --body "--prefix=${prefix}" + "${CMAKE_CURRENT_SOURCE_DIR}/${name}.list" + >> "${CMAKE_CURRENT_BINARY_DIR}/${name}.c" + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${name}.list" + "${CMAKE_CURRENT_BINARY_DIR}/${name}.h" + ) + list(APPEND ${outfiles} "${CMAKE_CURRENT_BINARY_DIR}/${name}.c") +endmacro(add_glib_marshal) + +macro(add_glib_enumtypes_t outfiles name htemplate ctemplate) + add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${name}.h" + COMMAND ${GLIB_MKENUMS} + --template "${htemplate}" + ${ARGN} > "${CMAKE_CURRENT_BINARY_DIR}/${name}.h" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${ARGN} "${htemplate}" + ) + add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${name}.c" + COMMAND ${GLIB_MKENUMS} + --template "${ctemplate}" + ${ARGN} > "${CMAKE_CURRENT_BINARY_DIR}/${name}.c" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${ARGN} ${ctemplate} + "${CMAKE_CURRENT_BINARY_DIR}/${name}.h" + ) + list(APPEND ${outfiles} "${CMAKE_CURRENT_BINARY_DIR}/${name}.c") +endmacro(add_glib_enumtypes_t) + +macro(add_glib_enumtypes outfiles name namespace includeguard) + set(htemplate "${CMAKE_CURRENT_BINARY_DIR}/${name}.h.template") + set(ctemplate "${CMAKE_CURRENT_BINARY_DIR}/${name}.c.template") + + # Write the .h template + add_custom_command( + OUTPUT ${htemplate} ${ctemplate} + COMMAND ${CMAKE_COMMAND} + "-Dctemplate=${ctemplate}" + "-Dhtemplate=${htemplate}" + "-Dname=${name}" + "-Dnamespace=${namespace}" + "-Dincludeguard=${includeguard}" + "\"-Dheaders=${ARGN}\"" + -P "${CMAKE_SOURCE_DIR}/cmake/GlibGenerationTemplates.cmake" + DEPENDS "${CMAKE_SOURCE_DIR}/cmake/GlibGenerationTemplates.cmake" ${headers} + ) + + add_glib_enumtypes_t(${outfiles} ${name} ${htemplate} ${ctemplate} ${ARGN}) +endmacro(add_glib_enumtypes) |