help: send readers to the install targets, in the alert and the manual

The failure alert told people to run `cmake --install build --prefix ~/.local`;
that still works, but `cmake --build build --target install-help-user` is the
form that needs no prefix guessing and prints the path it wrote, so the alert
names it and stays its former length. The manual gains a short "Installing
this manual" section on the overview page naming both targets -- the no-root
user one and the prefix-driven one for a system-wide or packaged install,
which the caller wraps in sudo -- and README and the GTK invariants doc follow
the alert's new command.
This commit is contained in:
Martino Ferrari committed 2026-10-14 22:30:07 +02:00
1 parent 669db6df9a
commit 395c9caec3
4 files changed
+27 -9

No files matched your search

+5 -4
View File
@@ -2466,10 +2466,11 @@ alert says **which** thing is missing, because the two have different fixes: `he
looks for the document under `$XDG_DATA_HOME/help/<lang>/org.udpscope.app/` then looks for the document under `$XDG_DATA_HOME/help/<lang>/org.udpscope.app/` then
`$XDG_DATA_DIRS/help/<lang>/org.udpscope.app/`, so with the set installed the alert names the missing `$XDG_DATA_DIRS/help/<lang>/org.udpscope.app/`, so with the set installed the alert names the missing
*viewer* (`yelp`), and without it the alert names the identifier, the expected installed path and the *viewer* (`yelp`), and without it the alert names the identifier, the expected installed path and the
install command — `cmake --install build --prefix ~/.local`, which writes install command — `cmake --build build --target install-help-user`, the no-root form below, which
`~/.local/share/help/C/org.udpscope.app/`. Two opt-in targets install the manual *alone*, without a writes the set under `$XDG_DATA_HOME` (default `~/.local/share/help/C/org.udpscope.app/`) and prints
whole `cmake --install`: `cmake --build build --target install-help-user` writes the same the path it wrote. Two opt-in targets install the manual *alone*, without a
`$XDG_DATA_HOME` (default `~/.local/share`) copy the alert describes and needs no root, while whole `cmake --install`: `install-help-user` writes that `$XDG_DATA_HOME` (default `~/.local/share`)
copy and needs no root, while
`cmake --build build --target install-help` writes to the configured `CMAKE_INSTALL_PREFIX` for a `cmake --build build --target install-help` writes to the configured `CMAKE_INSTALL_PREFIX` for a
packager or a system-wide user to wrap in `sudo`; both print where they wrote. A build tree has packager or a system-wide user to wrap in `sudo`; both print where they wrote. A build tree has
neither the installed copy nor a neither the installed copy nor a
+2 -1
View File
@@ -159,7 +159,8 @@ Part of [CLAUDE.md](../../CLAUDE.md). These are rules that cost a defect to lear
`$XDG_DATA_HOME/help/<lang>/<id>/` then `$XDG_DATA_DIRS/help/<lang>/<id>/` for an `index.page` and `$XDG_DATA_HOME/help/<lang>/<id>/` then `$XDG_DATA_DIRS/help/<lang>/<id>/` for an `index.page` and
the dialog says which one it is: with the manual there, install a viewer (for example `yelp`); with the dialog says which one it is: with the manual there, install a viewer (for example `yelp`); with
it absent, the identifier, the expected installed path and the install command it absent, the identifier, the expected installed path and the install command
(`cmake --install build --prefix ~/.local`, which writes `~/.local/share/help/C/<id>/`) — and a (`cmake --build build --target install-help-user`, which installs it under the user data
directory; `install-help` is the prefix-wide form for a system or packaged install) — and a
viewer as well, the second possibility the error alone cannot rule out. Reporting a missing viewer as well, the second possibility the error alone cannot rule out. Reporting a missing
*document* as a missing *handler* is the defect that shape avoids. *document* as a missing *handler* is the defect that shape avoids.
+16
View File
@@ -167,4 +167,20 @@
</list> </list>
</section> </section>
<section id="installing">
<title>Installing this manual</title>
<p>The manual is a help set the desktop viewer reads off disk, so <key>F1</key> opens it only
once a copy sits where <cmd>help:</cmd> resolves. Either of two targets installs it on its own,
without building the application, and each prints where it wrote:</p>
<list>
<item><p>For your own account, needing no root:
<cmd>cmake --build build --target install-help-user</cmd> writes it under
<file>$XDG_DATA_HOME</file> (default <file>~/.local/share</file>).</p></item>
<item><p>For a system-wide or packaged install:
<cmd>cmake --build build --target install-help</cmd> writes it under the configured
<cmd>CMAKE_INSTALL_PREFIX</cmd>, so point that at <file>/usr</file> and wrap the target in
<cmd>sudo</cmd>.</p></item>
</list>
</section>
</page> </page>
+4 -4
View File
@@ -80,10 +80,10 @@ void on_help_launched(GObject* source, GAsyncResult* result, gpointer user) {
detail += "The manual does not look installed: nothing named \"help:" UDPSCOPE_HELP_NAME detail += "The manual does not look installed: nothing named \"help:" UDPSCOPE_HELP_NAME
"\" was found under $XDG_DATA_HOME/help/<lang>/" UDPSCOPE_HELP_NAME "/ or " "\" was found under $XDG_DATA_HOME/help/<lang>/" UDPSCOPE_HELP_NAME "/ or "
"$XDG_DATA_DIRS/help/<lang>/" UDPSCOPE_HELP_NAME "/. Install it with\n\n" "$XDG_DATA_DIRS/help/<lang>/" UDPSCOPE_HELP_NAME "/. Install it with\n\n"
" cmake --install build --prefix ~/.local\n\n" " cmake --build build --target install-help-user\n\n"
"which writes ~/.local/share/help/C/" UDPSCOPE_HELP_NAME "/ -- the directory " "which writes the manual where `help:" UDPSCOPE_HELP_NAME "` resolves it under "
"`help:" UDPSCOPE_HELP_NAME "` resolves to. If there is no `help:` viewer either, " "your data directory, and prints the path it wrote. If there is no `help:` viewer "
"install one as well (for example `yelp`)."; "either, install one as well (for example `yelp`).";
} }
gtk_alert_dialog_set_detail(alert, detail.c_str()); gtk_alert_dialog_set_detail(alert, detail.c_str());
gtk_alert_dialog_show(alert, launch->parent); gtk_alert_dialog_show(alert, launch->parent);