build: add manpages

Manual pages got removed from synergy in #7361. This commit brings them
back. They are rudimentary and autogenerated using `help2man`, with only
a message about finding the documentation at the wiki page added. Not
much, but a lot better than nothing.

Package names added to Continuous Integration are based on these web pages:

    https://archlinux.org/packages/extra/x86_64/help2man/
    https://packages.debian.org/help2man
    https://packages.fedoraproject.org/pkgs/help2man/help2man/
    https://software.opensuse.org/package/help2man
This commit is contained in:
cos 2025-04-03 17:34:11 +02:00 committed by Chris Rizzitello
parent c1f1734943
commit ebb63d8113
9 changed files with 67 additions and 4 deletions

View file

@ -39,25 +39,26 @@ runs:
xorg-dev libx11-dev libxtst-dev libssl-dev \ xorg-dev libx11-dev libxtst-dev libssl-dev \
libglib2.0-dev libxkbfile-dev qt6-base-dev qt6-tools-dev \ libglib2.0-dev libxkbfile-dev qt6-base-dev qt6-tools-dev \
libgtk-3-dev libgtest-dev libgmock-dev \ libgtk-3-dev libgtest-dev libgmock-dev \
libei-dev libportal-dev libtomlplusplus-dev libcli11-dev -y >/dev/null libei-dev libportal-dev libtomlplusplus-dev libcli11-dev \
help2man -y >/dev/null
elif [ ${{inputs.like}} == "fedora" ]; then elif [ ${{inputs.like}} == "fedora" ]; then
dnf install -y cmake make ninja-build gcc-c++ \ dnf install -y cmake make ninja-build gcc-c++ \
rpm-build openssl-devel glib2-devel \ rpm-build openssl-devel glib2-devel \
libXtst-devel libxkbfile-devel qt6-qtbase-devel qt6-qttools-devel \ libXtst-devel libxkbfile-devel qt6-qtbase-devel qt6-qttools-devel \
gtk3-devel gtest-devel gmock-devel \ gtk3-devel gtest-devel gmock-devel \
libei-devel libportal-devel tomlplusplus-devel \ libei-devel libportal-devel tomlplusplus-devel \
cli11-devel cli11-devel help2man
elif [ ${{inputs.like}} == "suse" ]; then elif [ ${{inputs.like}} == "suse" ]; then
zypper refresh zypper refresh
zypper install -y --force-resolution \ zypper install -y --force-resolution \
cmake make ninja gcc-c++ rpm-build libopenssl-devel \ cmake make ninja gcc-c++ rpm-build libopenssl-devel \
glib2-devel libXtst-devel libxkbfile-devel qt6-base-devel qt6-tools-devel gtk3-devel \ glib2-devel libXtst-devel libxkbfile-devel qt6-base-devel qt6-tools-devel gtk3-devel \
googletest-devel googlemock-devel libei-devel \ googletest-devel googlemock-devel libei-devel \
libportal-devel tomlplusplus-devel cli11-devel libportal-devel tomlplusplus-devel cli11-devel help2man
elif [ ${{ inputs.like }} == "arch" ]; then elif [ ${{ inputs.like }} == "arch" ]; then
pacman -Syu --noconfirm base-devel cmake ninja \ pacman -Syu --noconfirm base-devel cmake ninja \
gcc openssl glib2 libxtst libxkbfile gtest libei libportal \ gcc openssl glib2 libxtst libxkbfile gtest libei libportal \
qt6-base qt6-tools gtk3 tomlplusplus cli11 qt6-base qt6-tools gtk3 tomlplusplus cli11 help2man
else else
echo "Unknown like" echo "Unknown like"
fi fi

View file

@ -145,6 +145,12 @@ precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers" SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT" SPDX-License-Identifier = "MIT"
[[annotations]]
path = "src/apps/res/manpage.txt"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]] [[annotations]]
path = "src/apps/res/icons/deskflow-**/**/**/**.svg" path = "src/apps/res/icons/deskflow-**/**/**/**.svg"
precedence = "override" precedence = "override"

View file

@ -3,6 +3,30 @@
# SPDX-FileCopyrightText: 2009 - 2012 Nick Bolton # SPDX-FileCopyrightText: 2009 - 2012 Nick Bolton
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
if(UNIX AND NOT APPLE)
find_program(HELP2MAN help2man)
if(NOT HELP2MAN)
message(STATUS "Man page tool (help2man) not found, man pages will not be generated")
endif()
endif()
function(generate_app_man TARGET)
if(HELP2MAN)
add_custom_command(
TARGET ${target} POST_BUILD
COMMAND ${HELP2MAN}
--include ${CMAKE_SOURCE_DIR}/src/apps/res/manpage.txt
--no-info
$<TARGET_FILE:${target}>
-o $<TARGET_FILE_DIR:${target}>/${target}.1
)
install(
FILES $<TARGET_FILE_DIR:${target}>/${target}.1
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1
)
endif()
endfunction()
option(BUILD_UNIFIED "Build unified binary" OFF) option(BUILD_UNIFIED "Build unified binary" OFF)
if(BUILD_UNIFIED) if(BUILD_UNIFIED)
add_subdirectory(deskflow-core) add_subdirectory(deskflow-core)

View file

@ -45,6 +45,7 @@ if(APPLE)
) )
elseif(UNIX) elseif(UNIX)
install(TARGETS ${target} DESTINATION bin) install(TARGETS ${target} DESTINATION bin)
generate_app_man(${target})
elseif(WIN32) elseif(WIN32)
install( install(
TARGETS ${target} TARGETS ${target}

View file

@ -40,6 +40,7 @@ if(APPLE)
) )
elseif(UNIX) elseif(UNIX)
install(TARGETS ${target} DESTINATION bin) install(TARGETS ${target} DESTINATION bin)
generate_app_man(${target})
elseif(WIN32) elseif(WIN32)
install( install(
TARGETS ${target} TARGETS ${target}

View file

@ -84,4 +84,19 @@ elseif(APPLE)
install(TARGETS ${target} BUNDLE DESTINATION .) install(TARGETS ${target} BUNDLE DESTINATION .)
else() else()
install(TARGETS ${target} DESTINATION bin) install(TARGETS ${target} DESTINATION bin)
if(HELP2MAN)
configure_file(deskflow.man.template.in ${CMAKE_CURRENT_BINARY_DIR}/${target})
add_custom_command(
TARGET ${target} POST_BUILD
COMMAND ${HELP2MAN}
--version-string "${CMAKE_PROJECT_VERSION}"
--include ${CMAKE_SOURCE_DIR}/src/apps/res/manpage.txt
--no-info ${CMAKE_CURRENT_BINARY_DIR}/${target}
-o ${CMAKE_CURRENT_BINARY_DIR}/${target}.1
)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/${target}.1
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1
)
endif()
endif() endif()

View file

@ -0,0 +1,9 @@
# SPDX-FileCopyrightText: Deskflow Developers
# SPDX-License-Identifier: MIT
#!/bin/sh -eu
if [ "$1" = '--help' ]; then
cat << EOM
@CMAKE_PROJECT_DESCRIPTION@. This is the GUI. It takes no arguments or options.
EOM
fi

View file

@ -45,6 +45,7 @@ if(APPLE)
) )
elseif(UNIX) elseif(UNIX)
install(TARGETS ${target} DESTINATION bin) install(TARGETS ${target} DESTINATION bin)
generate_app_man(${target})
elseif(WIN32) elseif(WIN32)
install( install(
TARGETS ${target} TARGETS ${target}

5
src/apps/res/manpage.txt Normal file
View file

@ -0,0 +1,5 @@
[SEE ALSO]
deskflow(1), deskflow-client(1), deskflow-server(2)
All documentation is on the web, so please point your browser at
<https://github.com/deskflow/deskflow/wiki> and surf away.