Install documentation (HTML manuals) to DOCDIR

Install documentation to DOCDIR instead of DATADIR.
The code must be fixed to open the Help URLs from
this new path.

This only affects Unix-like FHS platforms. Windows
installation does its own thing.

Needs testing with macOS packaging.
This commit is contained in:
João Valverde 2023-01-18 14:12:14 +00:00
parent 9c9c5343d8
commit 06519be205
10 changed files with 138 additions and 33 deletions

View File

@ -1935,12 +1935,14 @@ set(INSTALL_FILES
resources/share/wireshark/colorfilters
resources/share/wireshark/dfilter_macros
resources/share/wireshark/dfilters
resources/share/wireshark/ipmap.html
resources/share/wireshark/pdml2html.xsl
resources/share/wireshark/smi_modules
services
wka
)
set(DOC_FILES
resources/share/doc/wireshark/ipmap.html
)
if (BUILD_logray)
set(LOG_INSTALL_FILES
@ -1953,6 +1955,8 @@ endif()
if (ASCIIDOCTOR_FOUND)
list(APPEND INSTALL_FILES
${CMAKE_BINARY_DIR}/doc/AUTHORS-SHORT
)
list(APPEND DOC_FILES
${CMAKE_BINARY_DIR}/doc/androiddump.html
${CMAKE_BINARY_DIR}/doc/udpdump.html
${CMAKE_BINARY_DIR}/doc/capinfos.html
@ -1975,20 +1979,20 @@ if (ASCIIDOCTOR_FOUND)
${CMAKE_BINARY_DIR}/doc/wireshark-filter.html
)
if(MAXMINDDB_FOUND)
list(APPEND INSTALL_FILES ${CMAKE_BINARY_DIR}/doc/mmdbresolve.html)
list(APPEND DOC_FILES ${CMAKE_BINARY_DIR}/doc/mmdbresolve.html)
endif()
if (BUILD_corbaidl2wrs)
list(APPEND INSTALL_FILES ${CMAKE_BINARY_DIR}/doc/idl2wrs.html)
list(APPEND DOC_FILES ${CMAKE_BINARY_DIR}/doc/idl2wrs.html)
endif()
if (BUILD_xxx2deb)
list(APPEND INSTALL_FILES
list(APPEND DOC_FILES
${CMAKE_BINARY_DIR}/doc/asn2deb.html
${CMAKE_BINARY_DIR}/doc/idl2deb.html
)
endif()
if (BUILD_logray)
list(APPEND LOG_INSTALL_FILES
list(APPEND DOC_FILES
${CMAKE_BINARY_DIR}/doc/falcodump.html
)
endif()
@ -1996,7 +2000,7 @@ endif()
if(NOT WIN32)
# We do this for Windows further down in the copy_data_files target.
list(APPEND INSTALL_FILES COPYING)
list(APPEND DOC_FILES COPYING)
endif()
if(USE_REPOSITORY)
@ -2228,7 +2232,7 @@ if(WIN32 AND NOT USE_MSYSTEM)
endforeach()
endif()
foreach(_install_file ${INSTALL_FILES})
foreach(_install_file ${INSTALL_FILES} ${DOC_FILES})
get_filename_component(_install_file_src "${_install_file}" ABSOLUTE)
get_filename_component(_install_basename "${_install_file}" NAME)
set(_output_file "${DATAFILE_DIR}/${_install_basename}")

View File

@ -133,10 +133,16 @@ if(ASCIIDOCTOR_FOUND)
)
endif()
#
# Installation of HTML manuals is done
# elsewhere to CMAKE_INSTALL_DATADIR.
#
list(APPEND HTML_INSTALL_FILES
${CMAKE_SOURCE_DIR}/resources/share/doc/wireshark/ipmap.html
)
install(
FILES
${HTML_INSTALL_FILES}
DESTINATION
${CMAKE_INSTALL_DOCDIR}
)
#
# Editor modelines - https://www.wireshark.org/tools/modelines.html

View File

@ -1,3 +1,4 @@
usr/share/wireshark/*
usr/share/doc/wireshark/*
etc/wireshark/init.lua
packaging/debian/maxmind_db_paths /usr/share/wireshark

View File

@ -472,14 +472,11 @@ update-mime-database %{_datadir}/mime &> /dev/null || :
%defattr(-,root,root)
%doc AUTHORS COPYING NEWS README.md
%doc %{_datadir}/doc/wireshark/*.html
# Include the User Guide:
%if %{with guides}
%docdir %{_datadir}/doc/wireshark/
# HTML manuals are installed to %%{_datadir}/wireshark because that is
# where Wireshark's Help menu expects to launch them from.
%exclude %{_datadir}/doc/wireshark/*.html
%{_datadir}/doc/wireshark/
%endif
# Don't pick up any of the wireshark (GUI) binaries here

View File

@ -122,8 +122,6 @@ if(MSVC)
)
endif()
add_definitions(-DDOC_DIR="${CMAKE_INSTALL_FULL_DOCDIR}")
CHECKAPI(
NAME
ui-base

View File

@ -43,12 +43,15 @@ user_guide_url(const gchar *page) {
g_string_printf(url, "file:///%s/%s", ug_dir->str, page);
}
g_string_free(ug_dir, TRUE);
#elif defined(DOC_DIR)
if (g_file_test(DOC_DIR "/guides/wsug_html_chunked", G_FILE_TEST_IS_DIR)) {
/* try to open the HTML page from wireshark.org instead */
g_string_printf(url, "file://" DOC_DIR "/guides/wsug_html_chunked/%s", page);
#else
char *path = g_build_filename(get_doc_dir(), "wsug_html_chunked", page, NULL);
if (g_file_test(path, G_FILE_TEST_IS_REGULAR)) {
/* try to open the HTML page from the filesystem */
g_string_printf(url, "file://%s", path);
}
#endif /* _WIN32 / DOC_DIR */
g_free(path);
path = NULL;
#endif /* _WIN32 */
/* Fall back to wireshark.org. */
@ -107,34 +110,34 @@ topic_action_url(topic_action_e action)
/* local manual pages */
case(LOCALPAGE_MAN_WIRESHARK):
url = data_file_url("wireshark.html");
url = doc_file_url("wireshark.html");
break;
case(LOCALPAGE_MAN_WIRESHARK_FILTER):
url = data_file_url("wireshark-filter.html");
url = doc_file_url("wireshark-filter.html");
break;
case(LOCALPAGE_MAN_CAPINFOS):
url = data_file_url("capinfos.html");
url = doc_file_url("capinfos.html");
break;
case(LOCALPAGE_MAN_DUMPCAP):
url = data_file_url("dumpcap.html");
url = doc_file_url("dumpcap.html");
break;
case(LOCALPAGE_MAN_EDITCAP):
url = data_file_url("editcap.html");
url = doc_file_url("editcap.html");
break;
case(LOCALPAGE_MAN_MERGECAP):
url = data_file_url("mergecap.html");
url = doc_file_url("mergecap.html");
break;
case(LOCALPAGE_MAN_RAWSHARK):
url = data_file_url("rawshark.html");
url = doc_file_url("rawshark.html");
break;
case(LOCALPAGE_MAN_REORDERCAP):
url = data_file_url("reordercap.html");
url = doc_file_url("reordercap.html");
break;
case(LOCALPAGE_MAN_TEXT2PCAP):
url = data_file_url("text2pcap.html");
url = doc_file_url("text2pcap.html");
break;
case(LOCALPAGE_MAN_TSHARK):
url = data_file_url("tshark.html");
url = doc_file_url("tshark.html");
break;
/* local help pages (User's Guide) */
@ -202,7 +205,7 @@ topic_action_url(topic_action_e action)
url = user_guide_url("ChAdvExpert.html");
break;
case(HELP_EXTCAP_OPTIONS_DIALOG):
url = data_file_url("extcap.html");
url = doc_file_url("extcap.html");
break;
case(HELP_STATS_SUMMARY_DIALOG):
url = user_guide_url("ChStatSummary.html");

View File

@ -16,14 +16,18 @@ if(UNIX OR USE_MSYSTEM)
string(REPLACE "\\" "\\\\" _extcap_dir "${_dir}")
file(TO_NATIVE_PATH "${CMAKE_INSTALL_DATADIR}" _dir)
string(REPLACE "\\" "\\\\" _data_dir "${_dir}")
file(TO_NATIVE_PATH "${CMAKE_INSTALL_DOCDIR}" _dir)
string(REPLACE "\\" "\\\\" _doc_dir "${_dir}")
elseif(UNIX)
set(_plugin_dir "${PLUGIN_INSTALL_FULL_LIBDIR}")
set(_extcap_dir "${EXTCAP_INSTALL_FULL_LIBDIR}")
set(_data_dir "${CMAKE_INSTALL_FULL_DATADIR}")
set(_doc_dir "${CMAKE_INSTALL_FULL_DOCDIR}")
endif()
add_definitions(-DPLUGIN_DIR=\"${_plugin_dir}\")
add_definitions(-DEXTCAP_DIR=\"${_extcap_dir}\")
add_definitions(-DDATA_DIR=\"${_data_dir}\")
add_definitions(-DDOC_DIR=\"${_doc_dir}\")
endif()
add_subdirectory(wmem)

View File

@ -74,6 +74,7 @@ char *persconffile_dir = NULL;
char *datafile_dir = NULL;
char *persdatafile_dir = NULL;
char *persconfprofile = NULL;
char *doc_dir = NULL;
/* Directory from which the executable came. */
static char *progfile_dir = NULL;
@ -1044,6 +1045,59 @@ get_datafile_dir(void)
return datafile_dir;
}
const char *
get_doc_dir(void)
{
if (doc_dir != NULL)
return doc_dir;
#if defined(__MINGW64__)
if (running_in_build_directory_flag) {
doc_dir = g_strdup(install_prefix);
} else {
doc_dir = g_build_filename(install_prefix, DOC_DIR, (gchar *)NULL);
}
#elif defined(_WIN32)
if (progfile_dir != NULL) {
doc_dir = g_strdup(progfile_dir);
} else {
/* Fall back on the default installation directory. */
doc_dir = g_strdup("C:\\Program Files\\Wireshark\\");
}
#else
/* No environment variable for this. */
if (false) {
;
}
#ifdef __APPLE__
/*
* If we're running from an app bundle and weren't started
* with special privileges, use the Contents/Resources/share/wireshark
* subdirectory of the app bundle.
*
* (appbundle_dir is not set to a non-null value if we're
* started with special privileges, so we need only check
* it; we don't need to call started_with_special_privs().)
*/
else if (appbundle_dir != NULL) {
doc_dir = ws_strdup_printf("%s/Contents/Resources/%s",
appbundle_dir, DOC_DIR);
}
#endif
else if (running_in_build_directory_flag && progfile_dir != NULL) {
/*
* We're (probably) being run from the build directory and
* weren't started with special privileges.
*/
doc_dir = g_strdup(progfile_dir);
} else {
doc_dir = g_strdup(DOC_DIR);
}
#endif
return doc_dir;
}
/*
* Find the directory where the plugins are stored.
*
@ -2530,6 +2584,27 @@ data_file_url(const gchar *filename)
return uri;
}
gchar *
doc_file_url(const gchar *filename)
{
gchar *file_path;
gchar *uri;
/* Absolute path? */
if(g_path_is_absolute(filename)) {
file_path = g_strdup(filename);
} else {
file_path = ws_strdup_printf("%s/%s", get_doc_dir(), filename);
}
/* XXX - check, if the file is really existing, otherwise display a simple_dialog about the problem */
/* convert filename to uri */
uri = g_filename_to_uri(file_path, NULL, NULL);
g_free(file_path);
return uri;
}
void
free_progdirs(void)
{
@ -2543,6 +2618,8 @@ free_progdirs(void)
persconfprofile = NULL;
g_free(progfile_dir);
progfile_dir = NULL;
g_free(doc_dir);
doc_dir = NULL;
#ifdef __MINGW64__
g_free(install_prefix);
install_prefix = NULL;

View File

@ -123,6 +123,21 @@ WS_DLL_PUBLIC const char *get_datafile_dir(void);
*/
WS_DLL_PUBLIC char *get_datafile_path(const char *filename);
/*
* Get the directory in which global documentation files are
* stored.
*/
WS_DLL_PUBLIC const char *get_doc_dir(void);
/*
* Construct the path name of a global documentation file, given the
* file name.
*
* The returned file name was g_malloc()'d so it must be g_free()d when the
* caller is done with it.
*/
WS_DLL_PUBLIC char *doc_file_url(const char *filename);
/*
* Get the directory in which files that, at least on UNIX, are
* system files (such as "/etc/ethers") are stored; on Windows,