82 lines
3.0 KiB
CMake
Executable File
82 lines
3.0 KiB
CMake
Executable File
# -------------------------------------------------------------------------
|
|
# $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)
|