# ------------------------------------------------------------------------- # $HeadURL$ # ------------------------------------------------------------------------- #! # ------------------------------------------------------------------------- # COPYRIGHT (C) 2008: RHEINMETALL DEFENCE ELECTRONICS GmbH, D-28305 BREMEN # ------------------------------------------------------------------------- # # HIER/ITEM : CSU: RP 5187 P 0211 SRC 14001 # BRIEF DESC: CMake-Findskript # AUTHOR : RDE / SGS # ORIGIN REF: BWB / Projekt GUEZ-HAS # # Revision INFO: # -------------- # $Revision$ # $Date$ # $Id$ # # LANGUAGE: - # # PURPOSE: # -------- # Suchen der Google Protobuf-Library und Setzen der folgenden CMake-Variablen: # XSD_INCLUDE_DIR - XSD headers location # XSD_COMPILE - XSD compile to generate cc/h from .proto # XSD_FOUND - TRUE wenn Library gefunden wurde # IF(XSD_INCLUDE_DIR AND XSD_COMPILER) SET(XSD_FOUND TRUE) ELSE(XSD_INCLUDE_DIR AND XSD_COMPILER) FIND_PROGRAM(XSD_COMPILER NAMES xsdcxx xsd) FIND_PATH(XSD_INCLUDE_DIR xsd/cxx/config.hxx) FIND_PACKAGE_HANDLE_STANDARD_ARGS(XSD DEFAULT_MSG XSD_COMPILER XSD_INCLUDE_DIR ) MARK_AS_ADVANCED(XSD_COMPILER XSD_INCLUDE_DIR) ENDIF(XSD_INCLUDE_DIR AND XSD_COMPILER) MACRO(XSD_GENERATE_TREE srcList infile) GET_FILENAME_COMPONENT(output ${infile} NAME) GET_FILENAME_COMPONENT(input ${infile} ABSOLUTE) GET_FILENAME_COMPONENT(dir ${infile} DIRECTORY) EXEC_PROGRAM(${XSD_COMPILER} ARGS version OUTPUT_VARIABLE _xsd_version_output) STRING(REGEX REPLACE ".* ([0-9]\\.[0-9]\\.[0-9]).*" "\\1" _xsd_version_output ${_xsd_version_output}) SET(_xsd_in ${input}) SET(_cpp_out ${dir}/${output}.cxx) SET(_hpp_out ${dir}/${output}.hxx) # NAME_WE funktioniert nicht wegen 1.0.0.xsd STRING(REPLACE ".xsd" "" _cpp_out "${_cpp_out}") STRING(REPLACE ".xsd" "" _hpp_out "${_hpp_out}") SET(additional_xsd_args "") IF(_xsd_version_output VERSION_GREATER 3.9.0) IF(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.7.0) SET(additional_xsd_args --std c++11) ELSE() IF(WIN32 OR NOT CMAKE_COMPILER_IS_GNUCC) SET(additional_xsd_args --std c++11) ENDIF(WIN32 OR NOT CMAKE_COMPILER_IS_GNUCC) ENDIF() ENDIF() ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${dir} COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/${dir} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) ADD_CUSTOM_COMMAND(OUTPUT ${_cpp_out} ${_hpp_out} COMMAND ${XSD_COMPILER} ARGS cxx-tree ${additional_xsd_args} --generate-serialization ${_xsd_in} DEPENDS ${_xsd_in} ${CMAKE_CURRENT_BINARY_DIR}/${dir} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${dir} ) LIST(APPEND ${srcList} ${_cpp_out} ${_hpp_out} ${infile}) ENDMACRO(XSD_GENERATE_TREE srcList infile)