123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- CMAKE_MINIMUM_REQUIRED( VERSION 3.8 )
- PROJECT( OpenDDL-Parser )
- # read version number from cpp file of the form: static const char *Version = "0.4.0";
- file ( READ code/OpenDDLParser.cpp _ver )
- string( REGEX MATCH "static const char [*]Version[ ]*=[ ]*\"[^\"]*\"" _ver_line "${_ver}" )
- string( REGEX MATCH "[0-9]+\.[0-9]+\.[0-9]+" openddlparser_VERSION "${_ver_line}" )
- SET ( PROJECT_VERSION "${openddlparser_VERSION}" )
- if ( "${PROJECT_VERSION}" STREQUAL "" )
- message( FATAL_ERROR "Cannot find 'static const char *Version' in 'code/OpenDDLParser.cpp'" )
- endif()
- message(STATUS "openddlparser_VERSION: ${openddlparser_VERSION}")
- option( DDL_DEBUG_OUTPUT "Set to ON to use output debug texts" OFF )
- option( DDL_STATIC_LIBRARY "Deprecated, use BUILD_SHARED_LIBS instead." ON )
- # for backwards compatibility use DDL_STATIC_LIBRARY as initial value for cmake variable BUILD_SHARED_LIBS
- # https://cmake.org/cmake/help/latest/variable/BUILD_SHARED_LIBS.html
- if ( DDL_STATIC_LIBRARY )
- message("Building shared lib.")
- set ( build_shared_libs_default OFF )
- else()
- message("Building static lib.")
- set ( build_shared_libs_default ON )
- endif()
- option( DDL_BUILD_SHARED_LIBS "Set to ON to build shared libary of OpenDDL Parser." ${build_shared_libs_default} )
- option( COVERALLS "Generate coveralls data" OFF )
- option( DDL_DOCUMENTATION "Set to ON to opt in generating API documentation with Doxygen" OFF )
- option( DDL_BUILD_TESTS "Set to OFF to not build tests by default" ON )
- option( DDL_BUILD_PARSER_DEMO "Set to OFF to opt out building parser demo" ON )
- if (MSVC)
- add_definitions(
- -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING
- -DGTEST_HAS_TR1_TUPLE=0
- -D_CRT_SECURE_NO_WARNINGS
- )
- endif()
- add_definitions( -D_VARIADIC_MAX=10 )
- add_definitions( -DGTEST_HAS_PTHREAD=0 )
- if ( DDL_DEBUG_OUTPUT )
- message("Enable debug output.")
- add_definitions( -DDDL_DEBUG_HEADER_NAME)
- endif()
- list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
- SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
- SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
- SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin )
- if (MSVC)
- set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc" ) # Force to always compile with W4
- if( CMAKE_CXX_FLAGS MATCHES "/W[0-4]" )
- string( REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" )
- else()
- set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4" )
- endif()
- elseif( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX )
- # Update if necessary
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic ${OPENDDL_CXXFLAGS}")
- elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic ${OPENDDL_CXXFLAGS} -Wwrite-strings")
- endif()
- if (COVERALLS)
- include(Coveralls)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage")
- message("Enable coveralls.")
- endif()
- # Include the doc component.
- if(DDL_DOCUMENTATION)
- message("Generate doxygen documentation.")
- find_package(Doxygen REQUIRED)
- CONFIGURE_FILE( doc/openddlparser_doc.in doc/doxygenfile @ONLY )
- add_custom_target(doc ALL
- ${DOXYGEN_EXECUTABLE} doc/doxygenfile
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
- COMMENT "Generating API documentation with Doxygen" VERBATIM )
- endif()
- SET ( openddlparser_headers
- include/openddlparser/OpenDDLCommon.h
- include/openddlparser/OpenDDLExport.h
- include/openddlparser/OpenDDLParser.h
- include/openddlparser/OpenDDLParserUtils.h
- include/openddlparser/OpenDDLStream.h
- include/openddlparser/DDLNode.h
- include/openddlparser/Value.h
- include/openddlparser/TPoolAllocator.h
- )
- SET ( openddlparser_src
- code/OpenDDLCommon.cpp
- code/OpenDDLExport.cpp
- code/OpenDDLParser.cpp
- code/OpenDDLStream.cpp
- code/DDLNode.cpp
- code/Value.cpp
- )
- SOURCE_GROUP( code FILES ${openddlparser_src} )
- ADD_LIBRARY( openddlparser ${openddlparser_src})
- target_include_directories(openddlparser PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>)
- target_compile_features(openddlparser PUBLIC cxx_std_11)
- if(DDL_BUILD_SHARED_LIBS)
- set_target_properties(openddlparser PROPERTIES
- CXX_VISIBILITY_PRESET hidden
- VISIBILITY_INLINES_HIDDEN TRUE
- )
- else()
- target_compile_definitions(openddlparser PUBLIC OPENDDL_STATIC_LIBARY)
- endif()
- set_target_properties( openddlparser PROPERTIES PUBLIC_HEADER "${openddlparser_headers}")
- if (DDL_BUILD_TESTS)
- find_package(Threads REQUIRED)
- SET ( GTEST_PATH contrib/gtest-1.7.0 )
- SET ( gtest_src
- ${GTEST_PATH}/src/gtest-death-test.cc
- ${GTEST_PATH}/src/gtest-filepath.cc
- ${GTEST_PATH}/src/gtest-port.cc
- ${GTEST_PATH}/src/gtest-printers.cc
- ${GTEST_PATH}/src/gtest-test-part.cc
- ${GTEST_PATH}/src/gtest-typed-test.cc
- ${GTEST_PATH}/src/gtest.cc
- )
- SET( openddlparser_unittest_src
- test/DDLNodeTest.cpp
- test/OpenDDLCommonTest.cpp
- test/OpenDDLExportTest.cpp
- test/OpenDDLParserTest.cpp
- test/OpenDDLParserUtilsTest.cpp
- test/OpenDDLStreamTest.cpp
- test/OpenDDLIntegrationTest.cpp
- test/ValueTest.cpp
- test/OpenDDLDefectsTest.cpp
- test/OssFuzzTest.cpp
- test/main.cpp
- )
- SOURCE_GROUP( code FILES ${openddlparser_unittest_src} )
- SOURCE_GROUP( gtest FILES ${gtest_src} )
- ADD_EXECUTABLE( openddlparser_unittest
- ${gtest_src}
- ${openddlparser_unittest_src}
- )
- target_include_directories(openddlparser_unittest
- PRIVATE
- ${GTEST_PATH}
- ${GTEST_PATH}/include
- )
- target_link_libraries(openddlparser_unittest openddlparser Threads::Threads)
- target_compile_features(openddlparser_unittest PRIVATE cxx_std_11)
- target_compile_definitions(openddlparser_unittest PRIVATE OPENDDL_TEST_DATA="${PROJECT_SOURCE_DIR}/test/TestData")
- endif ()
- if (DDL_BUILD_PARSER_DEMO)
- SET( openddlparser_demo_src
- demo/main.cpp
- )
- if (COVERALLS)
- set(COVERAGE_SRCS ${gtest_src} ${openddlparser_unittest_src} )
- # Create the coveralls target.
- coveralls_setup(
- "${COVERAGE_SRCS}" # The source files.
- ON # If we should upload.
- "${PROJECT_SOURCE_DIR}/cmake/") # (Optional) Alternate project cmake module path.
- endif()
- ADD_EXECUTABLE( openddlparser_demo
- ${openddlparser_demo_src}
- )
- target_link_libraries( openddlparser_demo openddlparser )
- target_compile_features(openddlparser_demo PRIVATE cxx_std_11)
- endif ()
- include(GNUInstallDirs)
- include(CMakePackageConfigHelpers)
- install(TARGETS openddlparser
- EXPORT openddlparser-targets
- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
- LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
- ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
- INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
- PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/openddlparser")
- export(EXPORT openddlparser-targets
- FILE openddlparser-config.cmake
- NAMESPACE openddlparser::)
- install(EXPORT openddlparser-targets
- FILE openddlparser-config.cmake
- NAMESPACE openddlparser::
- DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/openddlparser")
- write_basic_package_version_file(
- "${CMAKE_BINARY_DIR}/openddlparser-config-version.cmake"
- COMPATIBILITY SameMajorVersion)
- install(
- FILES "${CMAKE_BINARY_DIR}/openddlparser-config-version.cmake"
- DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/openddlparser")
|