@@ -8,7 +8,7 @@ SET(QT5_INSTALL_ROOT "" CACHE PATH
88
99list (APPEND CMAKE_PREFIX_PATH "${QT5_INSTALL_ROOT} " )
1010
11- find_package (Qt5 COMPONENTS Widgets OpenGL REQUIRED )
11+ find_package (Qt5 COMPONENTS Widgets OpenGL Help REQUIRED )
1212
1313include (source_groups.cmake )
1414
@@ -56,7 +56,7 @@ set(CMAKE_MAP_IMPORTED_CONFIG_FASTDEBUG Release Debug)
5656target_link_libraries (qtfred
5757 PUBLIC
5858 code
59- Qt5::Widgets Qt5::OpenGL )
59+ Qt5::Widgets Qt5::OpenGL Qt5::Help )
6060
6161include (CreateLaunchers )
6262create_target_launcher (qtfred
@@ -72,6 +72,66 @@ INSTALL(
7272)
7373COPY_FILES_TO_TARGET (qtfred )
7474
75+ # --- QtFRED built-in help ---
76+ get_target_property (_QTFRED_QMAKE Qt5::qmake IMPORTED_LOCATION )
77+ execute_process (
78+ COMMAND "${_QTFRED_QMAKE} " -query QT_INSTALL_BINS
79+ OUTPUT_VARIABLE _QTFRED_QT_BINS
80+ OUTPUT_STRIP_TRAILING_WHITESPACE )
81+ execute_process (
82+ COMMAND "${_QTFRED_QMAKE} " -query QT_INSTALL_LIBS
83+ OUTPUT_VARIABLE _QTFRED_QT_LIBS
84+ OUTPUT_STRIP_TRAILING_WHITESPACE )
85+ find_program (QHELPGENERATOR_EXECUTABLE
86+ NAMES qhelpgenerator
87+ HINTS "${_QTFRED_QT_BINS} "
88+ REQUIRED )
89+
90+ set (QTFRED_HELP_QHP "${CMAKE_CURRENT_SOURCE_DIR } /help-src/doc/qtfred.qhp" )
91+ set (QTFRED_HELP_QCH "${CMAKE_CURRENT_BINARY_DIR } /qtfred_help.qch" )
92+
93+ file (GLOB_RECURSE QTFRED_HELP_SOURCES
94+ "${CMAKE_CURRENT_SOURCE_DIR } /help-src/doc/*.html"
95+ "${CMAKE_CURRENT_SOURCE_DIR } /help-src/doc/*.css"
96+ "${CMAKE_CURRENT_SOURCE_DIR } /help-src/doc/*.qhp" )
97+
98+ # qhelpgenerator is a Qt application and needs a platform plugin at build time.
99+ # On headless Linux CI the Qt platform plugins fail to dlopen because the Qt
100+ # shared libs are not in LD_LIBRARY_PATH for dlopen-loaded plugins (DT_RUNPATH
101+ # in the main binary does not propagate to dlopen). Pass the Qt lib dir and
102+ # force the offscreen (no-display) platform explicitly.
103+ add_custom_command (
104+ OUTPUT "${QTFRED_HELP_QCH} "
105+ COMMAND ${CMAKE_COMMAND } -E env
106+ "QT_QPA_PLATFORM=offscreen"
107+ "LD_LIBRARY_PATH=${_QTFRED_QT_LIBS} "
108+ "${QHELPGENERATOR_EXECUTABLE} " "${QTFRED_HELP_QHP} " -o "${QTFRED_HELP_QCH} "
109+ DEPENDS ${QTFRED_HELP_SOURCES}
110+ COMMENT "Compiling QtFRED help (qtfred_help.qch)"
111+ VERBATIM )
112+
113+ add_custom_target (qtfred_help
114+ DEPENDS "${QTFRED_HELP_QCH} "
115+ SOURCES ${QTFRED_HELP_SOURCES} )
116+
117+ add_dependencies (qtfred qtfred_help )
118+
119+ source_group (TREE "${CMAKE_CURRENT_SOURCE_DIR } /help-src"
120+ PREFIX "help-src"
121+ FILES ${QTFRED_HELP_SOURCES} )
122+
123+ add_custom_command (TARGET qtfred_help POST_BUILD
124+ COMMAND ${CMAKE_COMMAND } -E make_directory "$<TARGET_FILE_DIR :qtfred >/help"
125+ COMMAND ${CMAKE_COMMAND } -E copy_if_different
126+ "${QTFRED_HELP_QCH} "
127+ "$<TARGET_FILE_DIR :qtfred >/help/qtfred_help.qch"
128+ VERBATIM )
129+
130+ install (FILES "${QTFRED_HELP_QCH} "
131+ DESTINATION ${BINARY_DESTINATION} /help
132+ COMPONENT "qtFRED" )
133+ # --- end QtFRED built-in help ---
134+
75135enable_clang_tidy (qtfred )
76136
77137if (WIN32 )
@@ -120,6 +180,19 @@ if (WIN32)
120180 DESTINATION ${BINARY_DESTINATION} /platforms
121181 COMPONENT "qtFRED"
122182 )
183+
184+ # Qt Help requires the SQLite SQL driver
185+ set (qsqlite_path "${QT_INSTALL_PLUGINS} /sqldrivers/qsqlite$<$<CONFIG :Debug >:d >.dll" )
186+
187+ add_custom_command (TARGET qtfred
188+ POST_BUILD
189+ COMMAND ${CMAKE_COMMAND } -E copy_if_different "${qsqlite_path} " "$<TARGET_FILE_DIR :qtfred >/sqldrivers/qsqlite$<$<CONFIG :Debug >:d >.dll"
190+ VERBATIM )
191+
192+ install (FILES ${qsqlite_path}
193+ DESTINATION ${BINARY_DESTINATION} /sqldrivers
194+ COMPONENT "qtFRED"
195+ )
123196elseif (FSO_BUILD_APPIMAGE)
124197 configure_file ("${CMAKE_CURRENT_SOURCE_DIR } /cmake/AppRun.in" "${CMAKE_CURRENT_BINARY_DIR } /AppRun.gen" @ONLY )
125198 file (GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR } /AppRun-$<CONFIG >"
0 commit comments