UseGlibMarshal.cmake revision f5c7ca101be6b6abe17c6c28e971c86617f6c782
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick# - This is a module to Generate files using Glib-Marshal
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick# Both the header and source files (.h and .cpp)
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick# Copyright 2008 - Joshua L. Blocher
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick#
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick# And it defines the following variables:
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick# GLIB_MARSHAL_PREFIX - The name of the files
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick# GLIB_MARSHAL_FILE - File to Generate from (.list) and to generate to (.h and .cpp)
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick# GLIB_MARSHAL_OUTPUT_HEADER - Result of Generation
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick# GLIB_MARSHAL_OUTPUT_CPP - Result of Generation
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick# GLIB_MARSHAL_OUTPUT_LOCATION - Where we are putting the Output
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nickfind_program(GLIB_MARSHAL_EXECUTABLE NAMES glib-genmarshal PATHS /usr/local/bin )
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nickmacro(GLIB_MARSHAL GLIB_MARSHAL_PREFIX GLIB_MARSHAL_FILE GLIB_MARSHAL_OUTPUT_LOCATION)
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick if(GLIB_MARSHAL_EXECUTABLE)
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick set(GLIB_MARSHAL_OUTPUT_EXTRA_LINE "#include \"${GLIB_MARSHAL_FILE}.h\" \n" )
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick message(STATUS "Generating header and sourcefiles from ${GLIB_MARSHAL_FILE}.list (Glib-Marshal)")
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick execute_process(COMMAND ${GLIB_MARSHAL_EXECUTABLE} --prefix=${GLIB_MARSHAL_PREFIX} --header ${CMAKE_CURRENT_SOURCE_DIR}/${GLIB_MARSHAL_FILE}.list
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick OUTPUT_VARIABLE GLIB_MARSHAL_OUTPUT_HEADER )
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick execute_process(COMMAND ${GLIB_MARSHAL_EXECUTABLE} --prefix=${GLIB_MARSHAL_PREFIX} --body ${CMAKE_CURRENT_SOURCE_DIR}/${GLIB_MARSHAL_FILE}.list
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick OUTPUT_VARIABLE GLIB_MARSHAL_OUTPUT_CPP )
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick # check whether the generated file is the same as the existing one
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/${GLIB_MARSHAL_FILE}.h)
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick file(READ ${CMAKE_CURRENT_BINARY_DIR}/${GLIB_MARSHAL_FILE}.h GLIB_MARSHAL_HEADER_OLD)
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick else()
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick set(GLIB_MARSHAL_HEADER_OLD "")
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick endif()
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick if(NOT GLIB_MARSHAL_HEADER_OLD STREQUAL GLIB_MARSHAL_OUTPUT_HEADER)
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick message(STATUS "${GLIB_MARSHAL_FILE}.h changed; overwriting")
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${GLIB_MARSHAL_FILE}.h "${GLIB_MARSHAL_OUTPUT_HEADER}")
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${GLIB_MARSHAL_FILE}.cpp "${GLIB_MARSHAL_OUTPUT_EXTRA_LINE}")
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/${GLIB_MARSHAL_FILE}.cpp "${GLIB_MARSHAL_OUTPUT_CPP}")
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick else()
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick message(STATUS "${GLIB_MARSHAL_FILE}.h unchanged")
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick endif()
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick endif()
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nickendmacro()
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick
7765ee8964c8ffd7faee9baa0412abeb1ef5b0a4Nick