1 # - This is a module to Generate files using Glib-Marshal
2 # Both the header and source files (.h and .cpp)
3 # Copyright 2008 - Joshua L. Blocher
4 #
5 # And it defines the following variables:
6 # GLIB_MARSHAL_PREFIX - The name of the files
7 # GLIB_MARSHAL_FILE - File to Generate from (.list) and to generate to (.h and .cpp)
8 # GLIB_MARSHAL_OUTPUT_HEADER - Result of Generation
9 # GLIB_MARSHAL_OUTPUT_CPP - Result of Generation
10 # GLIB_MARSHAL_OUTPUT_LOCATION - Where we are putting the Output
12 FIND_PROGRAM(GLIB_MARSHAL_EXECUTABLE NAMES glib-genmarshal PATHS /usr/local/bin )
14 MACRO(GLIB_MARSHAL GLIB_MARSHAL_PREFIX GLIB_MARSHAL_FILE GLIB_MARSHAL_OUTPUT_LOCATION)
15 IF(GLIB_MARSHAL_EXECUTABLE)
16 SET(GLIB_MARSHAL_OUTPUT_EXTRA_LINE "#include \"${GLIB_MARSHAL_FILE}.h\" \n" )
18 MESSAGE(STATUS "Generating header and sourcefiles from ${GLIB_MARSHAL_FILE}.list (Glib-Marshal)")
19 EXECUTE_PROCESS(COMMAND ${GLIB_MARSHAL_EXECUTABLE} --prefix=${GLIB_MARSHAL_PREFIX} --header ${CMAKE_CURRENT_SOURCE_DIR}/${GLIB_MARSHAL_FILE}.list
20 OUTPUT_VARIABLE GLIB_MARSHAL_OUTPUT_HEADER )
21 EXECUTE_PROCESS(COMMAND ${GLIB_MARSHAL_EXECUTABLE} --prefix=${GLIB_MARSHAL_PREFIX} --body ${CMAKE_CURRENT_SOURCE_DIR}/${GLIB_MARSHAL_FILE}.list
22 OUTPUT_VARIABLE GLIB_MARSHAL_OUTPUT_CPP )
24 # check whether the generated file is the same as the existing one
25 FILE(READ ${CMAKE_CURRENT_BINARY_DIR}/${GLIB_MARSHAL_FILE}.h GLIB_MARSHAL_HEADER_OLD)
26 IF(NOT GLIB_MARSHAL_HEADER_OLD STREQUAL GLIB_MARSHAL_OUTPUT_HEADER)
27 MESSAGE(STATUS "${GLIB_MARSHAL_FILE}.h changed; overwriting")
28 FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${GLIB_MARSHAL_FILE}.h "${GLIB_MARSHAL_OUTPUT_HEADER}")
29 FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${GLIB_MARSHAL_FILE}.cpp "${GLIB_MARSHAL_OUTPUT_EXTRA_LINE}")
30 FILE(APPEND ${CMAKE_CURRENT_BINARY_DIR}/${GLIB_MARSHAL_FILE}.cpp "${GLIB_MARSHAL_OUTPUT_CPP}")
31 ELSE()
32 MESSAGE(STATUS "${GLIB_MARSHAL_FILE}.h unchanged")
33 ENDIF()
34 ENDIF()
35 ENDMACRO()