Files
qt5-legatus-legacy/cmake/FindXSD.cmake
2026-08-13 18:33:10 +02:00

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)