From bd8b054ff5009f36450dc65896f09edaa8949454 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Sat, 17 Jan 2026 17:30:50 +0100 Subject: [PATCH 1/9] Use PANDOC_EXECUTABLE variable set by find_program --- CMakeLists.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 98213013..b33bea1a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -655,7 +655,7 @@ set(PANDOC_OPTS --toc --toc-depth=2 add_custom_command( OUTPUT ${OUTPUT_HTML_DE} - COMMAND pandoc ${PANDOC_OPTS} + COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_OPTS} --metadata-file=Documentation/de/metadata.yaml --output=${OUTPUT_HTML_DE} ${DOC_DE} DEPENDS ${DOC_DE} @@ -666,7 +666,7 @@ add_custom_command( add_custom_command( OUTPUT ${OUTPUT_HTML_EN} - COMMAND pandoc ${PANDOC_OPTS} + COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_OPTS} --metadata-file=Documentation/en/metadata.yaml --output=${OUTPUT_HTML_EN} ${DOC_EN} DEPENDS ${DOC_EN} @@ -677,7 +677,7 @@ add_custom_command( add_custom_command( OUTPUT ${OUTPUT_HTML_ES} - COMMAND pandoc ${PANDOC_OPTS} + COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_OPTS} --metadata-file=Documentation/es/metadata.yaml --output=${OUTPUT_HTML_ES} ${DOC_ES} DEPENDS ${DOC_ES} @@ -753,7 +753,7 @@ set(PANDOC_CHUNKEDOPTS --toc --toc-depth=2 --split-level=1) add_custom_command( OUTPUT ${OUTPUT_CHUNKEDHTML_DE}/index.html - COMMAND pandoc ${PANDOC_CHUNKEDOPTS} + COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_CHUNKEDOPTS} --resource-path=".:Documentation:Documentation/de:doc:doc/de" --metadata-file=Documentation/de/metadata.yaml --output=${OUTPUT_CHUNKEDHTML_DE} ${DOC_DE} @@ -765,7 +765,7 @@ add_custom_command( add_custom_command( OUTPUT ${OUTPUT_CHUNKEDHTML_EN}/index.html - COMMAND pandoc ${PANDOC_CHUNKEDOPTS} + COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_CHUNKEDOPTS} --resource-path=".:Documentation:Documentation/en:doc:doc/en" --metadata-file=Documentation/en/metadata.yaml --output=${OUTPUT_CHUNKEDHTML_EN} ${DOC_EN} @@ -777,7 +777,7 @@ add_custom_command( add_custom_command( OUTPUT ${OUTPUT_CHUNKEDHTML_ES}/index.html - COMMAND pandoc ${PANDOC_CHUNKEDOPTS} + COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_CHUNKEDOPTS} --resource-path="doc/en:Documentation/en:.:Documentation:Documentation/es:doc:doc/es" --metadata-file=Documentation/es/metadata.yaml --output=${OUTPUT_CHUNKEDHTML_ES} ${DOC_ES} From 9380bc39d64528935e987d59e9298882ed1a42ed Mon Sep 17 00:00:00 2001 From: Bruno Kleinert Date: Mon, 16 Feb 2026 07:40:08 +0100 Subject: [PATCH 2/9] Add variables for monolithic documentation file locations This makes it clearer how items are related. This is an edit of Edwoud's work, but leaves the "chunked HTML" as is. pandoc is not that straight-forward to handle when it works in 'chunked HTML mode'. --- CMakeLists.txt | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b33bea1a..78b046ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -435,6 +435,7 @@ set(DOC_DE Documentation/de/config-counter.md Documentation/de/automatic.md ) + set(DOCDATA_DE ${PROJECT_SOURCE_DIR}/Documentation/de/config_layers_de.png ${PROJECT_SOURCE_DIR}/Documentation/de/control_list_de.png @@ -640,13 +641,17 @@ set(DOCDATA ${PROJECT_SOURCE_DIR}/Documentation/style.css ) -set(OUTPUT_HTML_DE ${CMAKE_BINARY_DIR}/doc/de/index.html) -set(OUTPUT_HTML_EN ${CMAKE_BINARY_DIR}/doc/en/index.html) -set(OUTPUT_HTML_ES ${CMAKE_BINARY_DIR}/doc/es/index.html) +set(OUTPUT_HTML ${CMAKE_BINARY_DIR}/doc) +set(OUTPUT_HTML_DE ${OUTPUT_HTML}/de) +set(OUTPUT_HTML_DE_INDEX ${OUTPUT_HTML_DE}/index.html) +set(OUTPUT_HTML_EN ${OUTPUT_HTML}/en) +set(OUTPUT_HTML_EN_INDEX ${OUTPUT_HTML_EN}/index.html) +set(OUTPUT_HTML_ES ${OUTPUT_HTML}/es) +set(OUTPUT_HTML_ES_INDEX ${OUTPUT_HTML_ES}/index.html) -file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/doc/de) -file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/doc/en) -file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/doc/es) +file(MAKE_DIRECTORY ${OUTPUT_HTML_DE}) +file(MAKE_DIRECTORY ${OUTPUT_HTML_EN}) +file(MAKE_DIRECTORY ${OUTPUT_HTML_ES}) set(PANDOC_OPTS --toc --toc-depth=2 --standalone @@ -654,47 +659,47 @@ set(PANDOC_OPTS --toc --toc-depth=2 --template=Documentation/template.html) add_custom_command( - OUTPUT ${OUTPUT_HTML_DE} + OUTPUT ${OUTPUT_HTML_DE_INDEX} COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_OPTS} --metadata-file=Documentation/de/metadata.yaml - --output=${OUTPUT_HTML_DE} ${DOC_DE} - DEPENDS ${DOC_DE} + --output=${OUTPUT_HTML_DE_INDEX} ${DOC_DE} + DEPENDS ${DOC_DE} ${OUTPUT_HTML_DE} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMENT "Generating German HTML documentation" VERBATIM ) add_custom_command( - OUTPUT ${OUTPUT_HTML_EN} + OUTPUT ${OUTPUT_HTML_EN_INDEX} COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_OPTS} --metadata-file=Documentation/en/metadata.yaml - --output=${OUTPUT_HTML_EN} ${DOC_EN} - DEPENDS ${DOC_EN} + --output=${OUTPUT_HTML_EN_INDEX} ${DOC_EN} + DEPENDS ${DOC_EN} ${OUTPUT_HTML_EN} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMENT "Generating English HTML documentation" VERBATIM ) add_custom_command( - OUTPUT ${OUTPUT_HTML_ES} + OUTPUT ${OUTPUT_HTML_ES_INDEX} COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_OPTS} --metadata-file=Documentation/es/metadata.yaml - --output=${OUTPUT_HTML_ES} ${DOC_ES} - DEPENDS ${DOC_ES} + --output=${OUTPUT_HTML_ES_INDEX} ${DOC_ES} + DEPENDS ${DOC_ES} ${OUTPUT_HTML_ES} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMENT "Generating Spanish HTML documentation" VERBATIM ) add_custom_target(doc - DEPENDS ${OUTPUT_HTML_DE} ${OUTPUT_HTML_EN} ${OUTPUT_HTML_ES} + DEPENDS ${OUTPUT_HTML_DE_INDEX} ${OUTPUT_HTML_EN_INDEX} ${OUTPUT_HTML_ES_INDEX} ) foreach(DOCDATA ${DOCDATA}) add_custom_command(TARGET doc POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${DOCDATA} - ${PROJECT_BINARY_DIR}/doc + ${OUTPUT_HTML} ) endforeach() @@ -702,7 +707,7 @@ foreach(DOCDATA_DE ${DOCDATA_DE}) add_custom_command(TARGET doc POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${DOCDATA_DE} - ${PROJECT_BINARY_DIR}/doc/de + ${OUTPUT_HTML_DE} ) endforeach() @@ -710,7 +715,7 @@ foreach(DOCDATA_EN ${DOCDATA_EN}) add_custom_command(TARGET doc POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${DOCDATA_EN} - ${PROJECT_BINARY_DIR}/doc/en + ${OUTPUT_HTML_EN} ) endforeach() @@ -718,7 +723,7 @@ foreach(DOCDATA_ES ${DOCDATA_ES}) add_custom_command(TARGET doc POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${DOCDATA_ES} - ${PROJECT_BINARY_DIR}/doc/es + ${OUTPUT_HTML_ES} ) endforeach() From fb77f8bed6b6445475d3c1190e90f9c0db219dd7 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Fri, 6 Feb 2026 17:59:43 +0100 Subject: [PATCH 3/9] Install doc files using file() Instead of using a custom command, this uses the built in functionality. --- CMakeLists.txt | 35 ++++------------------------------- 1 file changed, 4 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 78b046ad..a6fa2338 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -695,37 +695,10 @@ add_custom_target(doc DEPENDS ${OUTPUT_HTML_DE_INDEX} ${OUTPUT_HTML_EN_INDEX} ${OUTPUT_HTML_ES_INDEX} ) -foreach(DOCDATA ${DOCDATA}) - add_custom_command(TARGET doc POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${DOCDATA} - ${OUTPUT_HTML} - ) -endforeach() - -foreach(DOCDATA_DE ${DOCDATA_DE}) - add_custom_command(TARGET doc POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${DOCDATA_DE} - ${OUTPUT_HTML_DE} - ) -endforeach() - -foreach(DOCDATA_EN ${DOCDATA_EN}) - add_custom_command(TARGET doc POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${DOCDATA_EN} - ${OUTPUT_HTML_EN} - ) -endforeach() - -foreach(DOCDATA_ES ${DOCDATA_ES}) - add_custom_command(TARGET doc POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${DOCDATA_ES} - ${OUTPUT_HTML_ES} - ) -endforeach() +file(COPY ${DOCDATA} DESTINATION ${OUTPUT_HTML}) +file(COPY ${DOCDATA_DE} DESTINATION ${OUTPUT_HTML_DE}) +file(COPY ${DOCDATA_EN} DESTINATION ${OUTPUT_HTML_EN}) +file(COPY ${DOCDATA_ES} DESTINATION ${OUTPUT_HTML_ES}) add_custom_target(doc-for-web DEPENDS doc From d75eb2bd760090fbe991dff0f28a951fc1b973ce Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Fri, 6 Feb 2026 18:32:32 +0100 Subject: [PATCH 4/9] Build documentation if pandoc is found --- CMakeLists.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a6fa2338..d979eebc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -691,9 +691,11 @@ add_custom_command( VERBATIM ) -add_custom_target(doc - DEPENDS ${OUTPUT_HTML_DE_INDEX} ${OUTPUT_HTML_EN_INDEX} ${OUTPUT_HTML_ES_INDEX} -) +if(PANDOC_EXECUTABLE) + add_custom_target(doc ALL + DEPENDS ${OUTPUT_HTML_DE_INDEX} ${OUTPUT_HTML_EN_INDEX} ${OUTPUT_HTML_ES_INDEX} + ) +endif() file(COPY ${DOCDATA} DESTINATION ${OUTPUT_HTML}) file(COPY ${DOCDATA_DE} DESTINATION ${OUTPUT_HTML_DE}) From 0ad07c331029cefb50a0497026f3ab32a94a732b Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Fri, 6 Feb 2026 18:32:50 +0100 Subject: [PATCH 5/9] Install documentation to destination dir --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index d979eebc..4b4fde0e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -389,6 +389,7 @@ target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}) configure_file(Version.cpp.in Version.cpp @ONLY) set(CMAKE_INSTALL_BINDIR ".") +set(CMAKE_INSTALL_DOCDIR "doc") set(DATADIR ".") install(TARGETS ${PROJECT_NAME}) @@ -692,6 +693,7 @@ add_custom_command( ) if(PANDOC_EXECUTABLE) + install(DIRECTORY ${OUTPUT_HTML}/ DESTINATION ${CMAKE_INSTALL_DOCDIR}) add_custom_target(doc ALL DEPENDS ${OUTPUT_HTML_DE_INDEX} ${OUTPUT_HTML_EN_INDEX} ${OUTPUT_HTML_ES_INDEX} ) From d86c52e5ba93b5ef2f7bb215b0fa1cedcbf50e31 Mon Sep 17 00:00:00 2001 From: Bruno Kleinert Date: Mon, 16 Feb 2026 08:25:12 +0100 Subject: [PATCH 6/9] Delete chunked HTML directories in clean target --- CMakeLists.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b4fde0e..b364938d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -773,6 +773,20 @@ add_custom_target(chunked-doc DEPENDS ${OUTPUT_CHUNKEDHTML_DE}/index.html ${OUTPUT_CHUNKEDHTML_EN}/index.html ${OUTPUT_CHUNKEDHTML_ES}/index.html ) +# Required for pandoc --write=chunkedhtml +# +# In that mode, pandoc is not idempotent and the target directories we want it +# to write to, need to be gone before it is called one more time. +# I.e., if you're working on the chunked HTML output, ideally call +# cmake [...] --clean-first --target chunked-doc +set_property( + TARGET chunked-doc + APPEND + PROPERTY ADDITIONAL_CLEAN_FILES + ${CMAKE_BINARY_DIR}/chunkedhtml/de + ${CMAKE_BINARY_DIR}/chunkedhtml/en + ${CMAKE_BINARY_DIR}/chunkedhtml/es) + foreach(DOCDATA ${DOCDATA}) add_custom_command(TARGET chunked-doc POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy From 3d64ad810568873b4d0b6ec115e58bc134dd8495 Mon Sep 17 00:00:00 2001 From: Bruno Kleinert Date: Mon, 16 Feb 2026 09:20:32 +0100 Subject: [PATCH 7/9] Consistent tab indention Replaces white space indention by tabs. --- CMakeLists.txt | 427 +++++++++++++++++++++++++------------------------ 1 file changed, 216 insertions(+), 211 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b364938d..d884a011 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -438,43 +438,43 @@ set(DOC_DE ) set(DOCDATA_DE - ${PROJECT_SOURCE_DIR}/Documentation/de/config_layers_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/control_list_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/counter_basics_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/counter_position_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/cs2_config_can_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/cs2_config_ip_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/cs2_tcp_config_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/cs2_udp_config_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/feedback_basics_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/feedback_position_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/groups_basics_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/groups_tracks_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/locomotives_automode_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/locomotives_basics_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/locomotives_functions_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/multipleunits_automode_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/multipleunits_basics_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/multipleunits_functions_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/multipleunits_multipleunits_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/routes_atlock_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/routes_atunlock_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/routes_automode_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/routes_basics_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/routes_position_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/settings_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/signals_addresses_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/signals_basics_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/signals_position_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/switches_basics_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/switches_position_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/texts_basics_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/texts_position_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/tracks_automode_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/tracks_basics_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/tracks_feedbacks_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/track_signals_de.png - ${PROJECT_SOURCE_DIR}/Documentation/de/tracks_position_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/config_layers_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/control_list_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/counter_basics_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/counter_position_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/cs2_config_can_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/cs2_config_ip_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/cs2_tcp_config_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/cs2_udp_config_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/feedback_basics_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/feedback_position_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/groups_basics_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/groups_tracks_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/locomotives_automode_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/locomotives_basics_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/locomotives_functions_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/multipleunits_automode_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/multipleunits_basics_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/multipleunits_functions_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/multipleunits_multipleunits_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/routes_atlock_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/routes_atunlock_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/routes_automode_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/routes_basics_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/routes_position_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/settings_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/signals_addresses_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/signals_basics_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/signals_position_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/switches_basics_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/switches_position_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/texts_basics_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/texts_position_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/tracks_automode_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/tracks_basics_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/tracks_feedbacks_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/track_signals_de.png + ${PROJECT_SOURCE_DIR}/Documentation/de/tracks_position_de.png ) set(DOC_EN @@ -510,41 +510,41 @@ set(DOC_EN Documentation/en/automatic.md ) set(DOCDATA_EN - ${PROJECT_SOURCE_DIR}/Documentation/en/config_layers_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/control_list_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/counter_basics_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/counter_position_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/cs2_tcp_config_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/cs2_udp_config_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/feedback_basics_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/feedback_position_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/groups_basics_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/groups_tracks_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/locomotives_automode_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/locomotives_basics_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/locomotives_functions_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/multipleunits_automode_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/multipleunits_basics_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/multipleunits_functions_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/multipleunits_multipleunits_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/routes_atlock_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/routes_atunlock_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/routes_automode_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/routes_basics_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/routes_position_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/settings_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/signals_addresses_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/signals_basics_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/signals_position_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/switches_basics_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/switches_position_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/texts_basics_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/texts_position_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/tracks_automode_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/tracks_basics_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/tracks_feedbacks_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/track_signals_en.png - ${PROJECT_SOURCE_DIR}/Documentation/en/tracks_position_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/config_layers_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/control_list_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/counter_basics_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/counter_position_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/cs2_tcp_config_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/cs2_udp_config_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/feedback_basics_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/feedback_position_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/groups_basics_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/groups_tracks_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/locomotives_automode_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/locomotives_basics_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/locomotives_functions_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/multipleunits_automode_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/multipleunits_basics_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/multipleunits_functions_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/multipleunits_multipleunits_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/routes_atlock_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/routes_atunlock_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/routes_automode_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/routes_basics_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/routes_position_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/settings_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/signals_addresses_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/signals_basics_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/signals_position_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/switches_basics_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/switches_position_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/texts_basics_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/texts_position_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/tracks_automode_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/tracks_basics_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/tracks_feedbacks_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/track_signals_en.png + ${PROJECT_SOURCE_DIR}/Documentation/en/tracks_position_en.png ) set(DOC_ES @@ -580,66 +580,66 @@ set(DOC_ES Documentation/es/automatic.md ) set(DOCDATA_ES - ${PROJECT_SOURCE_DIR}/Documentation/es/config_layers_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/control_list_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/cs2_tcp_config_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/cs2_udp_config_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/feedback_basics_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/feedback_position_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/groups_basics_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/groups_tracks_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/locomotives_automode_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/locomotives_basics_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/locomotives_functions_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/multipleunits_automode_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/multipleunits_basics_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/multipleunits_functions_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/multipleunits_multipleunits_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/routes_atlock_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/routes_atunlock_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/routes_automode_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/routes_basics_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/routes_position_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/settings_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/signals_addresses_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/signals_basics_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/signals_position_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/switches_basics_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/switches_position_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/texts_basics_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/texts_position_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/tracks_automode_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/tracks_basics_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/tracks_feedbacks_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/track_signals_es.png - ${PROJECT_SOURCE_DIR}/Documentation/es/tracks_position_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/config_layers_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/control_list_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/cs2_tcp_config_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/cs2_udp_config_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/feedback_basics_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/feedback_position_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/groups_basics_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/groups_tracks_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/locomotives_automode_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/locomotives_basics_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/locomotives_functions_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/multipleunits_automode_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/multipleunits_basics_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/multipleunits_functions_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/multipleunits_multipleunits_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/routes_atlock_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/routes_atunlock_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/routes_automode_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/routes_basics_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/routes_position_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/settings_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/signals_addresses_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/signals_basics_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/signals_position_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/switches_basics_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/switches_position_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/texts_basics_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/texts_position_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/tracks_automode_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/tracks_basics_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/tracks_feedbacks_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/track_signals_es.png + ${PROJECT_SOURCE_DIR}/Documentation/es/tracks_position_es.png ) set(DOCDATA - ${PROJECT_SOURCE_DIR}/Documentation/menu_accessory.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_booster.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_control.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_counter.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_feedback.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_fullscreen.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_group.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_layer.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_loco.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_menu.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_multipleunit.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_program.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_quit.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_route.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_settings.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_signalgreen.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_signal.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_signalred.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_stop.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_street.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_switch.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_text.png - ${PROJECT_SOURCE_DIR}/Documentation/menu_track.png - ${PROJECT_SOURCE_DIR}/Documentation/style.css + ${PROJECT_SOURCE_DIR}/Documentation/menu_accessory.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_booster.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_control.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_counter.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_feedback.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_fullscreen.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_group.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_layer.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_loco.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_menu.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_multipleunit.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_program.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_quit.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_route.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_settings.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_signalgreen.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_signal.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_signalred.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_stop.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_street.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_switch.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_text.png + ${PROJECT_SOURCE_DIR}/Documentation/menu_track.png + ${PROJECT_SOURCE_DIR}/Documentation/style.css ) set(OUTPUT_HTML ${CMAKE_BINARY_DIR}/doc) @@ -655,41 +655,41 @@ file(MAKE_DIRECTORY ${OUTPUT_HTML_EN}) file(MAKE_DIRECTORY ${OUTPUT_HTML_ES}) set(PANDOC_OPTS --toc --toc-depth=2 - --standalone - --css=../style.css - --template=Documentation/template.html) + --standalone + --css=../style.css + --template=Documentation/template.html) add_custom_command( - OUTPUT ${OUTPUT_HTML_DE_INDEX} - COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_OPTS} - --metadata-file=Documentation/de/metadata.yaml - --output=${OUTPUT_HTML_DE_INDEX} ${DOC_DE} - DEPENDS ${DOC_DE} ${OUTPUT_HTML_DE} - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - COMMENT "Generating German HTML documentation" - VERBATIM + OUTPUT ${OUTPUT_HTML_DE_INDEX} + COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_OPTS} + --metadata-file=Documentation/de/metadata.yaml + --output=${OUTPUT_HTML_DE_INDEX} ${DOC_DE} + DEPENDS ${DOC_DE} ${OUTPUT_HTML_DE} + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Generating German HTML documentation" + VERBATIM ) add_custom_command( - OUTPUT ${OUTPUT_HTML_EN_INDEX} - COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_OPTS} - --metadata-file=Documentation/en/metadata.yaml - --output=${OUTPUT_HTML_EN_INDEX} ${DOC_EN} - DEPENDS ${DOC_EN} ${OUTPUT_HTML_EN} - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - COMMENT "Generating English HTML documentation" - VERBATIM + OUTPUT ${OUTPUT_HTML_EN_INDEX} + COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_OPTS} + --metadata-file=Documentation/en/metadata.yaml + --output=${OUTPUT_HTML_EN_INDEX} ${DOC_EN} + DEPENDS ${DOC_EN} ${OUTPUT_HTML_EN} + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Generating English HTML documentation" + VERBATIM ) add_custom_command( - OUTPUT ${OUTPUT_HTML_ES_INDEX} - COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_OPTS} - --metadata-file=Documentation/es/metadata.yaml - --output=${OUTPUT_HTML_ES_INDEX} ${DOC_ES} - DEPENDS ${DOC_ES} ${OUTPUT_HTML_ES} - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - COMMENT "Generating Spanish HTML documentation" - VERBATIM + OUTPUT ${OUTPUT_HTML_ES_INDEX} + COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_OPTS} + --metadata-file=Documentation/es/metadata.yaml + --output=${OUTPUT_HTML_ES_INDEX} ${DOC_ES} + DEPENDS ${DOC_ES} ${OUTPUT_HTML_ES} + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Generating Spanish HTML documentation" + VERBATIM ) if(PANDOC_EXECUTABLE) @@ -705,19 +705,19 @@ file(COPY ${DOCDATA_EN} DESTINATION ${OUTPUT_HTML_EN}) file(COPY ${DOCDATA_ES} DESTINATION ${OUTPUT_HTML_ES}) add_custom_target(doc-for-web - DEPENDS doc + DEPENDS doc ) add_custom_command(TARGET doc-for-web POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory - ${PROJECT_SOURCE_DIR}/Documentation/de/documentation-de - ${PROJECT_BINARY_DIR}/doc/de/documentation-de - COMMAND ${CMAKE_COMMAND} -E copy_directory - ${PROJECT_SOURCE_DIR}/Documentation/en/documentation-en - ${PROJECT_BINARY_DIR}/doc/en/documentation-en - COMMAND ${CMAKE_COMMAND} -E copy_directory - ${PROJECT_SOURCE_DIR}/Documentation/es/documentation-es - ${PROJECT_BINARY_DIR}/doc/es/documentation-es + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${PROJECT_SOURCE_DIR}/Documentation/de/documentation-de + ${PROJECT_BINARY_DIR}/doc/de/documentation-de + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${PROJECT_SOURCE_DIR}/Documentation/en/documentation-en + ${PROJECT_BINARY_DIR}/doc/en/documentation-en + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${PROJECT_SOURCE_DIR}/Documentation/es/documentation-es + ${PROJECT_BINARY_DIR}/doc/es/documentation-es ) # Build documentation as small HTML files ("chunked html") @@ -727,50 +727,54 @@ set(OUTPUT_CHUNKEDHTML_ES ${CMAKE_BINARY_DIR}/chunkedhtml/es) file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/chunkedhtml) set(PANDOC_CHUNKEDOPTS --toc --toc-depth=2 - --standalone - --css=../style.css - --template=Documentation/template.html - --write=chunkedhtml - --embed-resources - --split-level=1) + --standalone + --css=../style.css + --template=Documentation/template.html + --write=chunkedhtml + --embed-resources + --split-level=1 +) + add_custom_command( - OUTPUT ${OUTPUT_CHUNKEDHTML_DE}/index.html - COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_CHUNKEDOPTS} - --resource-path=".:Documentation:Documentation/de:doc:doc/de" - --metadata-file=Documentation/de/metadata.yaml - --output=${OUTPUT_CHUNKEDHTML_DE} ${DOC_DE} - DEPENDS ${DOC_DE} - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - COMMENT "Generating German Chunked HTML documentation" - VERBATIM + OUTPUT ${OUTPUT_CHUNKEDHTML_DE}/index.html + COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_CHUNKEDOPTS} + --resource-path=".:Documentation:Documentation/de:doc:doc/de" + --metadata-file=Documentation/de/metadata.yaml + --output=${OUTPUT_CHUNKEDHTML_DE} ${DOC_DE} + DEPENDS ${DOC_DE} + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Generating German Chunked HTML documentation" + VERBATIM ) add_custom_command( - OUTPUT ${OUTPUT_CHUNKEDHTML_EN}/index.html - COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_CHUNKEDOPTS} - --resource-path=".:Documentation:Documentation/en:doc:doc/en" - --metadata-file=Documentation/en/metadata.yaml - --output=${OUTPUT_CHUNKEDHTML_EN} ${DOC_EN} - DEPENDS ${DOC_EN} - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - COMMENT "Generating English Chunked HTML documentation" - VERBATIM + OUTPUT ${OUTPUT_CHUNKEDHTML_EN}/index.html + COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_CHUNKEDOPTS} + --resource-path=".:Documentation:Documentation/en:doc:doc/en" + --metadata-file=Documentation/en/metadata.yaml + --output=${OUTPUT_CHUNKEDHTML_EN} ${DOC_EN} + DEPENDS ${DOC_EN} + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Generating English Chunked HTML documentation" + VERBATIM ) add_custom_command( - OUTPUT ${OUTPUT_CHUNKEDHTML_ES}/index.html - COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_CHUNKEDOPTS} - --resource-path="doc/en:Documentation/en:.:Documentation:Documentation/es:doc:doc/es" - --metadata-file=Documentation/es/metadata.yaml - --output=${OUTPUT_CHUNKEDHTML_ES} ${DOC_ES} - DEPENDS ${DOC_ES} - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - COMMENT "Generating Spanish Chunked HTML documentation" - VERBATIM + OUTPUT ${OUTPUT_CHUNKEDHTML_ES}/index.html + COMMAND ${PANDOC_EXECUTABLE} ${PANDOC_CHUNKEDOPTS} + --resource-path="doc/en:Documentation/en:.:Documentation:Documentation/es:doc:doc/es" + --metadata-file=Documentation/es/metadata.yaml + --output=${OUTPUT_CHUNKEDHTML_ES} ${DOC_ES} + DEPENDS ${DOC_ES} + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Generating Spanish Chunked HTML documentation" + VERBATIM ) add_custom_target(chunked-doc - DEPENDS ${OUTPUT_CHUNKEDHTML_DE}/index.html ${OUTPUT_CHUNKEDHTML_EN}/index.html ${OUTPUT_CHUNKEDHTML_ES}/index.html + DEPENDS ${OUTPUT_CHUNKEDHTML_DE}/index.html + ${OUTPUT_CHUNKEDHTML_EN}/index.html + ${OUTPUT_CHUNKEDHTML_ES}/index.html ) # Required for pandoc --write=chunkedhtml @@ -780,19 +784,20 @@ add_custom_target(chunked-doc # I.e., if you're working on the chunked HTML output, ideally call # cmake [...] --clean-first --target chunked-doc set_property( - TARGET chunked-doc - APPEND - PROPERTY ADDITIONAL_CLEAN_FILES - ${CMAKE_BINARY_DIR}/chunkedhtml/de - ${CMAKE_BINARY_DIR}/chunkedhtml/en - ${CMAKE_BINARY_DIR}/chunkedhtml/es) + TARGET chunked-doc + APPEND + PROPERTY ADDITIONAL_CLEAN_FILES + ${CMAKE_BINARY_DIR}/chunkedhtml/de + ${CMAKE_BINARY_DIR}/chunkedhtml/en + ${CMAKE_BINARY_DIR}/chunkedhtml/es +) foreach(DOCDATA ${DOCDATA}) - add_custom_command(TARGET chunked-doc POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${DOCDATA} - ${PROJECT_BINARY_DIR}/chunkedhtml - ) + add_custom_command(TARGET chunked-doc POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${DOCDATA} + ${PROJECT_BINARY_DIR}/chunkedhtml + ) endforeach() include(CTest) From 14cf2b0f09ae0e207ebd305f6ea6be9ace25eb9f Mon Sep 17 00:00:00 2001 From: Bruno Kleinert Date: Wed, 18 Feb 2026 16:07:19 +0100 Subject: [PATCH 8/9] Enable system installation into PREFIX Install according to paths defined in cmake's GNUInstallDir module. Add option INSTALL_IN_PLACE=1 for cmake builds that makes cmake --install install right into the source tree. Off by default. To make that work, make the server read its HTML files from a compile-time defined directory. In cmake builds, that is adjusted automatically for system-wide and source tree installations. Hard-wire it unconditionally to ./html because there is no support for system wide installation, anyway. --- CMakeLists.txt | 28 ++++++++++++++++++++++------ Makefile | 2 +- Server/Web/WebClient.cpp | 2 +- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d884a011..21da6dbc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,6 +46,7 @@ endif() string(REGEX REPLACE "^v" "" RAILCONTROL_VERSION "${RAILCONTROL_VERSION}") project(railcontrol VERSION ${RAILCONTROL_VERSION}) +include(GNUInstallDirs) STRING(TIMESTAMP COMPILE_TIMESTAMP "%s" UTC) @@ -388,13 +389,28 @@ target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}) configure_file(Version.cpp.in Version.cpp @ONLY) -set(CMAKE_INSTALL_BINDIR ".") -set(CMAKE_INSTALL_DOCDIR "doc") -set(DATADIR ".") +# Option to install right into the source tree for development purposes +# Usage: +# $ cmake -B -DINSTALL_IN_PLACE=1 +# $ cmake --build ... +# $ cmake --install +# +# Default: Install to directories as defined by the GNUInstallDir module +option(INSTALL_IN_PLACE "Install into the source tree (For testing and development)" OFF) + +if(INSTALL_IN_PLACE) + set(CMAKE_INSTALL_PREFIX .) + set(CMAKE_INSTALL_BINDIR .) + set(CMAKE_INSTALL_SYSCONFDIR .) + set(CMAKE_INSTALL_DOCDIR doc) + target_compile_definitions(railcontrol PRIVATE HTML_DATA_PATH=\"./html\") +else() + target_compile_definitions(railcontrol PRIVATE HTML_DATA_PATH=\"${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/railcontrol/html\") + install(DIRECTORY html DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/railcontrol) +endif() -install(TARGETS ${PROJECT_NAME}) -install(FILES railcontrol.conf.dist DESTINATION ${DATADIR}) -install(DIRECTORY html DESTINATION ${DATADIR}) +install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) +install(FILES railcontrol.conf.dist TYPE SYSCONF RENAME railcontrol.conf) include(CPack) diff --git a/Makefile b/Makefile index f4a8164d..3f0a0ffb 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ endif CFLAGSSQLITE=-g -O2 -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_RTREE -DHAVE_USLEEP CFLAGSZLIB=-g -O2 -Wno-implicit-function-declaration -CXXFLAGS=-I. -g -O2 -Wall -Wextra -pedantic -Werror -Wno-missing-braces -std=c++11 -D_GNU_SOURCE +CXXFLAGS=-I. -g -O2 -Wall -Wextra -pedantic -Werror -Wno-missing-braces -std=c++11 -D_GNU_SOURCE -DHTML_DATA_PATH=\"./html\" CXXFLAGSAMALGAMATION=-I. -g -O2 -Wall -Wextra -pedantic -Werror -Wno-missing-braces -std=c++11 LDFLAGS=-g LIBS=-lpthread -ldl diff --git a/Server/Web/WebClient.cpp b/Server/Web/WebClient.cpp index 46262728..198c41d8 100644 --- a/Server/Web/WebClient.cpp +++ b/Server/Web/WebClient.cpp @@ -784,7 +784,7 @@ namespace Server { namespace Web char workingDir[128]; if (getcwd(workingDir, sizeof(workingDir))) { - ss << workingDir << "/html" << virtualFile; + ss << HTML_DATA_PATH << virtualFile; } string sFile = ss.str(); const char* realFile = sFile.c_str(); From d156daf1a261d0a576b5915be997aafc36c1d66a Mon Sep 17 00:00:00 2001 From: Bruno Kleinert Date: Sat, 28 Mar 2026 08:14:49 +0100 Subject: [PATCH 9/9] Document building with cmake Extended English and German translations. Mention optional installation into the working copy, as a "developer mode". TODO: Spanish translation --- COMPILING-de.md | 33 +++++++++++++++++++++++++++++++++ COMPILING-en.md | 34 ++++++++++++++++++++++++++++++++++ COMPILING-es.md | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+) diff --git a/COMPILING-de.md b/COMPILING-de.md index b9962cd5..c1735f9d 100644 --- a/COMPILING-de.md +++ b/COMPILING-de.md @@ -93,6 +93,39 @@ Ein Update kann folgendermassen durchgeführt werden: git pull make ``` +## Kompilieren mit cmake + +cmake Unterstützung befindet sich noch in Entwicklung. Falls das Bauen mit cmake +nicht klappt, benutze GNU Make. + +Konfiguriere das Bauen außerhalb der Quelltextverzeichnisse + +``` +cmake -B build +``` + +Kompilieren RailControl mittels + +``` +cmake --build build +``` + +Installiere RailControl (als root) mittels + +``` +cmake --install build +``` + +### cmake Entwickler-Modus + +Um RailControl zu entwickeln, "installiere" RailControl in die Git Arbeitskopie. +Das Ergebnis ist ähnlich zum Bauen mit GNU Make. + +``` +cmake -B build -DINSTALL_IN_PLACE=1 +cmake --build build +cmake --install build +``` # Kompilieren unter Mac OS X diff --git a/COMPILING-en.md b/COMPILING-en.md index 256827b5..14b42005 100644 --- a/COMPILING-en.md +++ b/COMPILING-en.md @@ -98,6 +98,40 @@ git pull make ``` +## Compile with cmake + +cmake support is work in progress. In case the cmake build fails on your system, +please build with GNU Make. + +Configure the out-of-tree build directory + +``` +cmake -B build +``` + +Compile RailControl with + +``` +cmake --build build +``` + +Install RailControl (as root) with + +``` +cmake --install build +``` + +### cmake develper mode + +To develop RailControl, "install" RailControl in the checked out working copy. +This is similar to building RailControl with GNU Make. + +``` +cmake -B build -DINSTALL_IN_PLACE=1 +cmake --build build +cmake --install build +``` + # Compile under Mac OS X The required developer tools can be installed in a terminal with: diff --git a/COMPILING-es.md b/COMPILING-es.md index e0adaa12..a3439361 100644 --- a/COMPILING-es.md +++ b/COMPILING-es.md @@ -94,6 +94,40 @@ git pull make ``` +## TODO TRANSLATE Compile with cmake + +cmake support is work in progress. In case the cmake build fails on your system, +please build with GNU Make. + +Configure the out-of-tree build directory + +``` +cmake -B build +``` + +Compile RailControl with + +``` +cmake --build build +``` + +Install RailControl (as root) with + +``` +cmake --install build +``` + +### cmake develper mode + +To develop RailControl, "install" RailControl in the checked out working copy. +This is similar to building RailControl with GNU Make. + +``` +cmake -B build -DINSTALL_IN_PLACE=1 +cmake --build build +cmake --install build +``` + # Compilar sobre Mac OS X Se puede instalar las heremientas requerido con: