From 9daa9b7b0849a121309b5522ef7eb6d34c6712b2 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 27 Jun 2013 10:43:13 -0500 Subject: Adding in a build system --- cmake/UseGlibGeneration.cmake | 71 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 cmake/UseGlibGeneration.cmake (limited to 'cmake/UseGlibGeneration.cmake') 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) -- cgit v1.2.3