cc74cbfda7
All checks were successful
rpcrypto-build / build (Debug, hisiv510.toolchain.cmake) (push) Successful in 1m4s
rpcrypto-build / build (Debug, himix200.toolchain.cmake) (push) Successful in 1m17s
rpcrypto-build / build (Release, hisiv510.toolchain.cmake) (push) Successful in 1m17s
rpcrypto-build / build (Release, himix200.toolchain.cmake) (push) Successful in 1m24s
linux-hisiv500-gcc / linux-gcc-hisiv500 (push) Successful in 1m25s
linux-mips64-gcc / linux-gcc-mips64el (push) Successful in 1m34s
linux-x64-gcc / linux-gcc (push) Successful in 1m36s
171 lines
5.4 KiB
CMake
171 lines
5.4 KiB
CMake
cmake_minimum_required( VERSION 2.8 )
|
|
project( argagg CXX )
|
|
|
|
option(
|
|
ARGAGG_BUILD_EXAMPLES
|
|
"build examples"
|
|
ON
|
|
)
|
|
|
|
option(
|
|
ARGAGG_BUILD_TESTS
|
|
"build tests"
|
|
ON
|
|
)
|
|
|
|
option(
|
|
ARGAGG_BUILD_DOCS
|
|
"build docs"
|
|
ON
|
|
)
|
|
|
|
set(
|
|
ARGAGG_TEST_COMPILE_FLAGS
|
|
"-g -Wall -Wextra -Wpedantic -Werror -std=c++11"
|
|
CACHE STRING "Compiler flags for all project targets"
|
|
)
|
|
|
|
# When RPM packages are built CMake is invoked with a -DINCLUDE_INSTALL_DIR
|
|
# that we should respect. If it isn't present then we default it to "include".
|
|
set(
|
|
INCLUDE_INSTALL_DIR "include"
|
|
CACHE STRING "Include install folder name (default: include)"
|
|
)
|
|
|
|
# When RPM packages are built CMake is invoked with a -DLIB_INSTALL_DIR that we
|
|
# should respect. This is important because this is how the RPM build process
|
|
# specifies installation into "lib64" instead of "lib". If it isn't present
|
|
# then we default it to "lib".
|
|
set(
|
|
LIB_INSTALL_DIR "lib"
|
|
CACHE STRING "Library install folder name (default: lib)"
|
|
)
|
|
|
|
# When RPM packages are built CMake is invoked with a -DSHARE_INSTALL_PREFIX
|
|
# that we should respect. This is particularly important because this is how
|
|
# the RPM build process specifies installation of shared data files into
|
|
# "/usr/share". If it isn't present then we default it to "share" relative to
|
|
# the CMAKE_INSTALL_PREFIX which is incidentally the same path when the install
|
|
# prefix is "/usr".
|
|
set(
|
|
SHARE_INSTALL_PREFIX share
|
|
CACHE STRING "Shared data install folder name (default: share)"
|
|
)
|
|
|
|
|
|
# Set up a target to install the program which amounts to copying the single
|
|
# header file.
|
|
install(
|
|
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include"
|
|
DESTINATION "${INCLUDE_INSTALL_DIR}/.."
|
|
)
|
|
|
|
|
|
# Build examples if configured to.
|
|
if( ARGAGG_BUILD_EXAMPLES )
|
|
add_executable( joinargs "examples/joinargs.cpp" )
|
|
set_target_properties(
|
|
joinargs
|
|
PROPERTIES
|
|
COMPILE_FLAGS "${ARGAGG_TEST_COMPILE_FLAGS}"
|
|
INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include"
|
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
|
|
)
|
|
|
|
add_executable( gengetopt_main1 "examples/gengetopt_main1.cpp" )
|
|
set_target_properties(
|
|
gengetopt_main1
|
|
PROPERTIES
|
|
COMPILE_FLAGS "${ARGAGG_TEST_COMPILE_FLAGS}"
|
|
INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include"
|
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
|
|
OUTPUT_NAME sample1
|
|
)
|
|
endif()
|
|
|
|
|
|
# Build and register the unit tests if configured to.
|
|
if( ARGAGG_BUILD_TESTS )
|
|
enable_testing()
|
|
add_executable( argagg_test "test/test.cpp" )
|
|
set_target_properties(
|
|
argagg_test
|
|
PROPERTIES
|
|
COMPILE_FLAGS "${ARGAGG_TEST_COMPILE_FLAGS}"
|
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
|
|
)
|
|
add_test(
|
|
NAME argagg_test
|
|
COMMAND argagg_test
|
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
|
|
)
|
|
endif()
|
|
|
|
|
|
# Build Doxygen documentation if we can find Doxygen and we're configured to
|
|
# build documentation.
|
|
find_program( DOXYGEN doxygen )
|
|
if( ARGAGG_BUILD_DOCS AND DOXYGEN )
|
|
|
|
# Everyone loves documentation! Lets set up a target to generate documentation.
|
|
# First lets collect everything that we think can change the documentation.
|
|
# This basically means everything inside the "docs" folder along with every
|
|
# header and source file. If one of those changes then we want to mark the
|
|
# documentation for regeneration.
|
|
file(
|
|
GLOB_RECURSE DOC_INPUTS
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/doc/*"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/include/*"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/test/*"
|
|
)
|
|
|
|
# Like the version.hpp header file we're going to replace some CMake variables
|
|
# in the doxygen configuration with actual values.
|
|
configure_file(
|
|
${CMAKE_CURRENT_SOURCE_DIR}/doc/doxygen.cfg.in
|
|
${CMAKE_BINARY_DIR}/doxygen.cfg
|
|
@ONLY
|
|
)
|
|
|
|
# Now we add a command for CMake to run to generate documentation.
|
|
add_custom_command(
|
|
# We tell CMake that this command will generate the `html` and `xml`
|
|
# folders inside the project's documentation share folder inside the build
|
|
# folder. Specifying these outputs explicitly adds them to the "clean"
|
|
# target. Note that we put the documentation into the "share" folder in the
|
|
# build folder. This is to structure the build folder as a prefix.
|
|
OUTPUT
|
|
"${CMAKE_BINARY_DIR}/share/doc/${PROJECT_NAME}/html"
|
|
"${CMAKE_BINARY_DIR}/share/doc/${PROJECT_NAME}/xml"
|
|
# This command makes sure that the output folder exists first.
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/share/doc/${PROJECT_NAME}"
|
|
# This command performs the doxygen documentation generation.
|
|
COMMAND ${DOXYGEN} doxygen.cfg
|
|
# Run the above commands in the build folder.
|
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
|
# Tell CMake that if any of the documentation input files we collected change
|
|
# then this command needs to be re-run.
|
|
DEPENDS
|
|
${CMAKE_BINARY_DIR}/doxygen.cfg
|
|
${DOC_INPUTS}
|
|
)
|
|
|
|
# This creates an "empty target" named "docs" that doesn't produce output, but
|
|
# depends on the generated documentation. The result is we can run "make docs"
|
|
# and it behaves the way we expect. It also doesn't regenerate documentation if
|
|
# the outputs specified below are up-to-date.
|
|
add_custom_target(
|
|
docs ALL
|
|
DEPENDS
|
|
"${CMAKE_BINARY_DIR}/share/doc/${PROJECT_NAME}/html"
|
|
"${CMAKE_BINARY_DIR}/share/doc/${PROJECT_NAME}/xml"
|
|
)
|
|
|
|
# Finally set up an installation target for the documentation.
|
|
install(
|
|
DIRECTORY "${CMAKE_BINARY_DIR}/share/"
|
|
DESTINATION "${SHARE_INSTALL_PREFIX}"
|
|
)
|
|
|
|
endif()
|