diff --git a/.travis.yml b/.travis.yml index 3d2f4cd..4a1ed53 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,7 +45,7 @@ linux_gcc8: &linux_gcc8 apt: update: true sources: [ ubuntu-toolchain-r-test ] - packages: [ gcc-8 g++-8 ] + packages: [ gcc-8, g++-8, trang ] before_install: - eval "export CC=gcc-8" - eval "export CXX=g++-8" @@ -61,6 +61,7 @@ linux_clang: &linux_clang addons: apt: update: true + packages: [ trang ] before_install: - eval "export CC=clang" - eval "export CXX=clang++" @@ -74,7 +75,7 @@ osx_xcode: &osx_xcode compiler: clang addons: homebrew: - packages: [ python3 ] + packages: [ python3, trang ] before_install: - eval "export CC=clang" - eval "export CXX=clang++" @@ -88,7 +89,7 @@ osx_xcode9: &osx_xcode9 osx_image: xcode9 addons: homebrew: - packages: [ python3 ] + packages: [ python3, trang ] # Homebrew must be updated before packages can be installed on outdated # macOS images. The update process unfortunately takes a VERY long time # and can even cause Travis to terminate the build. Travis caching is @@ -195,6 +196,7 @@ script: - mkdir build - cd build - conan install -b missing -s arch=${ARCH} -s build_type=${BUILD_TYPE} .. + - which trang && BUILD_SCHEMA=1 || BUILD_SCHEMA=0 - cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${INSTALLPREFIX} -DUSE_SANITIZER=${ASAN} @@ -202,9 +204,11 @@ script: -DENABLE_LIFESPAN=${LIFESPAN} -DENABLE_DEADLINE_MISSED=${DEADLINE} -DBUILD_TESTING=on + -DBUILD_SCHEMA=${BUILD_SCHEMA} -DWERROR=on -G "${GENERATOR}" .. - - case "${GENERATOR}" in + - | + case "${GENERATOR}" in "Unix Makefiles") ${SCAN_BUILD} cmake --build . --config ${BUILD_TYPE} --target install -- -j 4 ;; @@ -216,14 +220,20 @@ script: ;; esac - CYCLONEDDS_URI='alltrueconfigstderr' ctest -j 4 --output-on-failure -T test -E '^CUnit_ddsrt_random_default_random$' -C ${BUILD_TYPE} - - if [ "${ASAN}" = "none" ]; then + - | + if [ "${ASAN}" = "none" ]; then ${SHELL} ../src/tools/ddsperf/sanity.bash; fi - - if [ "${ASAN}" != "none" ]; then + - | + if [ "${ASAN}" != "none" ]; then CMAKE_LINKER_FLAGS="-DCMAKE_LINKER_FLAGS=-fsanitize=${USE_SANITIZER}"; CMAKE_C_FLAGS="-DCMAKE_C_FLAGS=-fsanitize=${USE_SANITIZER}"; fi - cd .. + - | + if [ ${BUILD_SCHEMA} ]; then + git diff --exit-code; # check that no files (e.g. generated schemas) are changed + fi - mkdir helloworld_build - cd helloworld_build - cmake -DCMAKE_PREFIX_PATH=${INSTALLPREFIX} diff --git a/CMakeLists.txt b/CMakeLists.txt index fd7878f..1ef9330 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -205,6 +205,9 @@ set(MEMORYCHECK_COMMAND_OPTIONS "--track-origins=yes --leak-check=full --trace-c option(BUILD_TESTING "Build the testing tree." OFF) include(CTest) +option(BUILD_DOCS "Build documentation." OFF) +option(BUILD_SCHEMA "Build generated schema for configuration options." OFF) + # Build all executables and libraries into the top-level /bin and /lib folders. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") @@ -215,7 +218,7 @@ if(BUILD_IDLC) add_subdirectory(examples) endif() -option(BUILD_DOCS "Build documentation." OFF) + add_subdirectory(docs) # Pull-in CPack and support for generating Config.cmake and packages. diff --git a/cmake/Modules/FindTrang.cmake b/cmake/Modules/FindTrang.cmake new file mode 100644 index 0000000..c0096c8 --- /dev/null +++ b/cmake/Modules/FindTrang.cmake @@ -0,0 +1,53 @@ +# Copyright(c) 2020 ADLINK Technology Limited and others +# +# This program and the accompanying materials are made available under the +# terms of the Eclipse Public License v. 2.0 which is available at +# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License +# v. 1.0 which is available at +# http://www.eclipse.org/org/documents/edl-v10.php. +# +# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause +# + +#[=======================================================================[.rst: +FindTrang +--------- +Finds Trang, an xml schema transpiler + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables: + +``Trang_FOUND`` + True if the system has the Foo library. +``Trang_VERSION`` + The version of the Foo library which was found. +``Trang_TRANG_CMD`` + List of command line args to run Trang. +``Trang_TRANG_EXECUTABLE`` + Path to the Trang executable file + +#]=======================================================================] + +find_program(Trang_TRANG_EXECUTABLE trang) + +execute_process( + COMMAND "${Trang_TRANG_EXECUTABLE}" + ERROR_VARIABLE trang_output +) +if(trang_output MATCHES "Trang version ([0-9]+)") + set(TRANG_VERSION "${CMAKE_MATCH_1}") +else() + message(ERROR "Could not parse version from Trang output: '${trang_output}'") + set(TRANG_VERSION "0") +endif() + +set(Trang_TRANG_CMD "${Trang_TRANG_EXECUTABLE}") + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS( + Trang + REQUIRED_VARS Trang_TRANG_CMD + VERSION_VAR TRANG_VERSION +) diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt index 0cf8b26..82fe266 100644 --- a/docs/CMakeLists.txt +++ b/docs/CMakeLists.txt @@ -8,43 +8,49 @@ # http://www.eclipse.org/org/documents/edl-v10.php. # # SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause -include(FindPerl) -if(PERL_FOUND) + +# These are all various expressions of the configuration schema +get_filename_component(config_c_PATH "../src/core/ddsi/src/q_config.c" REALPATH BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") + +# although the following files are generated, we check them into source control for convenience +get_filename_component(config_rnc_PATH "../etc/cyclonedds.rnc" REALPATH BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") +get_filename_component(config_xsd_PATH "../etc/cyclonedds.xsd" REALPATH BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") +get_filename_component(config_md_PATH "./manual/options.md" REALPATH BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") + +if(BUILD_SCHEMA OR BUILD_DOCS) + find_package(Perl REQUIRED) add_custom_command( OUTPUT - options.md cyclonedds.rnc + "${config_md_PATH}" "${config_rnc_PATH}" COMMAND - ${PERL_EXECUTABLE} -w "${CMAKE_CURRENT_SOURCE_DIR}/makernc.pl" "${CMAKE_CURRENT_SOURCE_DIR}/../src/core/ddsi/src/q_config.c" options.md cyclonedds.rnc - COMMAND - ${PERL_EXECUTABLE} -w "${CMAKE_CURRENT_SOURCE_DIR}/compare.pl" options.md "${CMAKE_CURRENT_SOURCE_DIR}/manual/options.md" - COMMAND - ${PERL_EXECUTABLE} -w "${CMAKE_CURRENT_SOURCE_DIR}/compare.pl" cyclonedds.rnc "${CMAKE_CURRENT_SOURCE_DIR}/../etc/cyclonedds.rnc" + ${PERL_EXECUTABLE} -w "${CMAKE_CURRENT_SOURCE_DIR}/makernc.pl" "${config_c_PATH}" "${config_md_PATH}" "${config_rnc_PATH}" + COMMENT "Generating Relax NG schema and Markdown documentation for config options" DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/makernc.pl" - "${CMAKE_CURRENT_SOURCE_DIR}/../src/core/ddsi/src/q_config.c") - add_custom_target(options_doc ALL DEPENDS "options.md" "cyclonedds.rnc") + "${CMAKE_CURRENT_SOURCE_DIR}/makernc.pl" + "${config_c_PATH}") + add_custom_target(options_doc ALL DEPENDS "${config_md_PATH}" "${config_rnc_PATH}") - find_package(Java COMPONENTS Runtime) - if(JAVA_FOUND AND EXISTS "${TRANG_PATH}" OR EXISTS "$ENV{TRANG}") - if(NOT EXISTS "${TRANG_PATH}" AND EXISTS "$ENV{TRANG}") - message(STATUS "Setting TRANG_PATH to $ENV{TRANG}") - set(TRANG_PATH "$ENV{TRANG}" CACHE FILEPATH "Location of 'trang' for converting XML schemas" FORCE) - endif() - add_custom_command( - OUTPUT - cyclonedds.xsd - COMMAND - ${Java_JAVA_EXECUTABLE} -jar "${TRANG_PATH}" -I rnc -O xsd cyclonedds.rnc cyclonedds.xsd - COMMAND - ${PERL_EXECUTABLE} -w "${CMAKE_CURRENT_SOURCE_DIR}/compare.pl" cyclonedds.xsd "${CMAKE_CURRENT_SOURCE_DIR}/../etc/cyclonedds.xsd" - DEPENDS - "cyclonedds.rnc") - add_custom_target(options_xsd ALL DEPENDS "cyclonedds.xsd") - else() - message(STATUS "Java or not trang not found: not converting/checking RNC to XSD") - endif() -else() - message(STATUS "perl not found: not generating/checking options documentation and RNC") + find_package(Trang REQUIRED) + + add_custom_command( + OUTPUT "${config_xsd_PATH}" + COMMAND ${Trang_TRANG_CMD} -I rnc -O xsd "${config_rnc_PATH}" "${config_xsd_PATH}" + COMMENT "Translating schema into XSD" + DEPENDS "${config_rnc_PATH}") + add_custom_target(options_xsd ALL DEPENDS "${config_xsd_PATH}") endif() -add_subdirectory(manual) +if(BUILD_DOCS) + find_package(Sphinx REQUIRED breathe) + sphinx_add_docs( + docs + BREATHE_PROJECTS ddsc_api_docs + BUILDER html + SOURCE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") + add_dependencies(docs options_doc) + + install( + DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + DESTINATION "${CMAKE_INSTALL_DOCDIR}/manual" + COMPONENT dev) +endif() diff --git a/docs/compare.pl b/docs/compare.pl deleted file mode 100644 index a8451a1..0000000 --- a/docs/compare.pl +++ /dev/null @@ -1,8 +0,0 @@ -open A, "< $ARGV[0]" or die "can't open $ARGV[0]"; -open B, "< $ARGV[1]" or die "can't open $ARGV[1]"; -while (defined ($a = ) && defined ($b = )) { - $a =~ s/[\r\n]+$//s; - $b =~ s/[\r\n]+$//s; - exit 1 unless $a eq $b; -} -exit 0; diff --git a/docs/manual/CMakeLists.txt b/docs/manual/CMakeLists.txt deleted file mode 100644 index de5d686..0000000 --- a/docs/manual/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -# -# Copyright(c) 2006 to 2019 ADLINK Technology Limited and others -# -# This program and the accompanying materials are made available under the -# terms of the Eclipse Public License v. 2.0 which is available at -# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License -# v. 1.0 which is available at -# http://www.eclipse.org/org/documents/edl-v10.php. -# -# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause -if(BUILD_DOCS) - find_package(Sphinx REQUIRED breathe) - sphinx_add_docs( - docs - BREATHE_PROJECTS ddsc_api_docs - BUILDER html - SOURCE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") - install( - DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/docs/" - DESTINATION "${CMAKE_INSTALL_DOCDIR}/manual" - COMPONENT dev) -endif() - diff --git a/package.xml b/package.xml index efb8e8a..9f058fe 100644 --- a/package.xml +++ b/package.xml @@ -12,9 +12,15 @@ https://github.com/eclipse-cyclonedds/cyclonedds cmake + openssl libcunit-dev + + doxygen + perl + python3-breathe python3-sphinx + trang cmake