From fd5cd809356dc73d2ede5bb2f0db25098771cb8e Mon Sep 17 00:00:00 2001 From: Albrecht Schlosser Date: Wed, 7 Feb 2024 18:30:11 +0100 Subject: Introduce "Modern CMake" in FLTK This is a big commit and there are too many changes to list them all. The main changes are: - rename all CMake build options to 'FLTK_*' - export library targets with namespace (prefix) 'fltk::' - standardize shared library target names with suffix '-shared' - set public build properties on libraries for consumers - document library names and aliases in README.CMake.txt - document changes in "Migrating Code from FLTK 1.3 to 1.4" - partial backwards compatibility for old user projects Included but not directly related changes: - fix Windows (Visual Studio) DLL build - add CMake function fl_debug_target() to show target properties - don't build test programs if FLTK is a subproject - internal: reformat CMake code: remove space before '(' Thanks to Matthias and Manolo for their help, testing, and feeback. --- documentation/CMakeLists.txt | 141 ++++++++++++++++++++++--------------------- 1 file changed, 71 insertions(+), 70 deletions(-) (limited to 'documentation/CMakeLists.txt') diff --git a/documentation/CMakeLists.txt b/documentation/CMakeLists.txt index 5cfcb0de6..23a6f65bf 100644 --- a/documentation/CMakeLists.txt +++ b/documentation/CMakeLists.txt @@ -14,37 +14,37 @@ # https://www.fltk.org/bugs.php # -set (DOCS) -set (GENERATE_DOCS FALSE) -set (GIT_REVISION "") -set (YEAR "") -set (CURRENT_DATE "") - -if (OPTION_BUILD_HTML_DOCUMENTATION OR OPTION_BUILD_PDF_DOCUMENTATION) - set (GENERATE_DOCS TRUE) -endif () - -if (OPTION_INCLUDE_DRIVER_DOCUMENTATION) - set (DRIVER_DOCS "DriverDev") -else () - set (DRIVER_DOCS "") -endif () +set(DOCS) +set(GENERATE_DOCS FALSE) +set(GIT_REVISION "") +set(YEAR "") +set(CURRENT_DATE "") + +if(FLTK_BUILD_HTML_DOCS OR FLTK_BUILD_PDF_DOCS) + set(GENERATE_DOCS TRUE) +endif() + +if(FLTK_INCLUDE_DRIVER_DOCS) + set(DRIVER_DOCS "DriverDev") +else() + set(DRIVER_DOCS "") +endif() #------------------------------------------------ # generate files used for both HTML and PDF docs #------------------------------------------------ -if (GENERATE_DOCS) +if(GENERATE_DOCS) # create required variables - execute_process (COMMAND date "+%Y" + execute_process(COMMAND date "+%Y" OUTPUT_VARIABLE YEAR OUTPUT_STRIP_TRAILING_WHITESPACE ) # note: current locale is used for abbreviated month - execute_process (COMMAND date "+%b %d, %Y" + execute_process(COMMAND date "+%b %d, %Y" OUTPUT_VARIABLE CURRENT_DATE OUTPUT_STRIP_TRAILING_WHITESPACE ) @@ -56,16 +56,17 @@ if (GENERATE_DOCS) # In the future tarball/zip generation should create a file # that contains the git revision. - execute_process (COMMAND - git --git-dir=${FLTK_SOURCE_DIR}/.git rev-parse --short=10 HEAD + execute_process(COMMAND + git rev-parse --short=10 HEAD OUTPUT_VARIABLE GIT_REVISION OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${FLTK_SOURCE_DIR} ERROR_QUIET ) # set to "'unkown'" if git is not available - if (GIT_REVISION STREQUAL "") - set (GIT_REVISION "'unkown'") + if(GIT_REVISION STREQUAL "") + set(GIT_REVISION "'unkown'") endif() # Find "short" doxygen version if it was built from Git @@ -75,56 +76,56 @@ if (GENERATE_DOCS) # code once we require this as our minimal version and replace the # variable DOXYGEN_VERSION_SHORT with DOXYGEN_VERSION below. - if (DOXYGEN_FOUND) + if(DOXYGEN_FOUND) # strip trailing git revision if doxygen was built from source - string (REGEX REPLACE " .*$" "" DOXYGEN_VERSION_SHORT ${DOXYGEN_VERSION}) - endif (DOXYGEN_FOUND) + string(REGEX REPLACE " .*$" "" DOXYGEN_VERSION_SHORT ${DOXYGEN_VERSION}) + endif(DOXYGEN_FOUND) # configure copyright.dox (includes current year) - configure_file ( + configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/copyright.dox.in ${CMAKE_CURRENT_BINARY_DIR}/copyright.dox @ONLY ) # configure generated.dox (includes date and versions) - configure_file ( + configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/generated.dox.in ${CMAKE_CURRENT_BINARY_DIR}/generated.dox @ONLY ) - if (0) # debug - fl_debug_var (YEAR) - fl_debug_var (CURRENT_DATE) - fl_debug_var (GIT_REVISION) - fl_debug_var (DOXYGEN_FOUND) - fl_debug_var (DOXYGEN_EXECUTABLE) - fl_debug_var (DOXYGEN_VERSION) - fl_debug_var (DOXYGEN_VERSION_SHORT) - endif () + if(0) # debug + fl_debug_var(YEAR) + fl_debug_var(CURRENT_DATE) + fl_debug_var(GIT_REVISION) + fl_debug_var(DOXYGEN_FOUND) + fl_debug_var(DOXYGEN_EXECUTABLE) + fl_debug_var(DOXYGEN_VERSION) + fl_debug_var(DOXYGEN_VERSION_SHORT) + endif() -endif (GENERATE_DOCS) +endif(GENERATE_DOCS) #-------------------------- # build html documentation #-------------------------- -if (OPTION_BUILD_HTML_DOCUMENTATION) +if(FLTK_BUILD_HTML_DOCS) - list (APPEND DOCS html) + list(APPEND DOCS html) # generate Doxygen file "Doxyfile" - set (GENERATE_HTML YES) - set (GENERATE_LATEX NO) - set (LATEX_HEADER "") - set (DOXYFILE "Doxyfile") - set (LOGFILE "${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE}_error.log") + set(GENERATE_HTML YES) + set(GENERATE_LATEX NO) + set(LATEX_HEADER "") + set(DOXYFILE "Doxyfile") + set(LOGFILE "${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE}_error.log") # configure Doxygen input file for HTML docs (Doxyfile.in) - configure_file ( + configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE}.in @ONLY @@ -132,7 +133,7 @@ if (OPTION_BUILD_HTML_DOCUMENTATION) # convert Doxyfile to used doxygen version - add_custom_command ( + add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/convert_doxyfile @@ -146,34 +147,34 @@ if (OPTION_BUILD_HTML_DOCUMENTATION) # generate HTML documentation - add_custom_target (html + add_custom_target(html COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating HTML documentation" VERBATIM ) -endif (OPTION_BUILD_HTML_DOCUMENTATION) +endif(FLTK_BUILD_HTML_DOCS) #-------------------------- # build pdf documentation #-------------------------- -if (OPTION_BUILD_PDF_DOCUMENTATION) +if(FLTK_BUILD_PDF_DOCS) - list (APPEND DOCS pdf) + list(APPEND DOCS pdf) # generate Doxygen input file "Doxybook" - set (GENERATE_HTML NO) - set (GENERATE_LATEX YES) - set (LATEX_HEADER "${CMAKE_CURRENT_BINARY_DIR}/fltk-book.tex") - set (DOXYFILE "Doxybook") - set (LOGFILE "${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE}_error.log") + set(GENERATE_HTML NO) + set(GENERATE_LATEX YES) + set(LATEX_HEADER "${CMAKE_CURRENT_BINARY_DIR}/fltk-book.tex") + set(DOXYFILE "Doxybook") + set(LOGFILE "${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE}_error.log") # configure Doxygen input file for PDF docs (Doxybook.in) - configure_file ( + configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE}.in @ONLY @@ -181,7 +182,7 @@ if (OPTION_BUILD_PDF_DOCUMENTATION) # convert Doxybook to current doxygen version - add_custom_command ( + add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${DOXYFILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/convert_doxyfile @@ -195,7 +196,7 @@ if (OPTION_BUILD_PDF_DOCUMENTATION) # generate LaTeX title fltk-title.tex - configure_file ( + configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/src/fltk-title.tex.in ${CMAKE_CURRENT_BINARY_DIR}/fltk-title.tex @ONLY @@ -203,7 +204,7 @@ if (OPTION_BUILD_PDF_DOCUMENTATION) # generate fltk.pdf - add_custom_command ( + add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/fltk.pdf COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/make_header ${DOXYGEN_EXECUTABLE} @@ -220,40 +221,40 @@ if (OPTION_BUILD_PDF_DOCUMENTATION) # add target 'pdf' - add_custom_target (pdf + add_custom_target(pdf DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/fltk.pdf ) -endif (OPTION_BUILD_PDF_DOCUMENTATION) +endif(FLTK_BUILD_PDF_DOCS) #---------------------------------- # add target 'docs' for all docs #---------------------------------- -if (DOCS) +if(DOCS) - add_custom_target (docs + add_custom_target(docs DEPENDS ${DOCS} ) -endif (DOCS) +endif(DOCS) #---------------------------------- # install html + pdf documentation #---------------------------------- -if (OPTION_INSTALL_HTML_DOCUMENTATION AND OPTION_BUILD_HTML_DOCUMENTATION) +if(FLTK_INSTALL_HTML_DOCS AND FLTK_BUILD_HTML_DOCS) - install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html + install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION ${FLTK_DATADIR}/doc/fltk ) -endif (OPTION_INSTALL_HTML_DOCUMENTATION AND OPTION_BUILD_HTML_DOCUMENTATION) +endif(FLTK_INSTALL_HTML_DOCS AND FLTK_BUILD_HTML_DOCS) -if (OPTION_INSTALL_PDF_DOCUMENTATION AND OPTION_BUILD_PDF_DOCUMENTATION) +if(FLTK_INSTALL_PDF_DOCS AND FLTK_BUILD_PDF_DOCS) - install (FILES ${CMAKE_CURRENT_BINARY_DIR}/fltk.pdf + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/fltk.pdf DESTINATION ${FLTK_DATADIR}/doc/fltk/ ) -endif (OPTION_INSTALL_PDF_DOCUMENTATION AND OPTION_BUILD_PDF_DOCUMENTATION) +endif(FLTK_INSTALL_PDF_DOCS AND FLTK_BUILD_PDF_DOCS) -- cgit v1.2.3