diff --git a/client/SDL/CMakeLists.txt b/client/SDL/CMakeLists.txt
index 0cf889b22..32d8bfab7 100644
--- a/client/SDL/CMakeLists.txt
+++ b/client/SDL/CMakeLists.txt
@@ -17,7 +17,7 @@
cmake_minimum_required(VERSION 3.13)
-project(sdl-client CXX)
+project(sdl-freerdp CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -104,10 +104,8 @@ add_executable(${PROJECT_NAME}
${SRCS}
)
-set_target_properties(${PROJECT_NAME}
- PROPERTIES
- OUTPUT_NAME "sdl-freerdp"
- )
target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBS})
set_property(TARGET ${PROJECT_NAME} PROPERTY FOLDER "Client/SDL")
install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT client)
+
+add_subdirectory(man)
diff --git a/client/SDL/man/CMakeLists.txt b/client/SDL/man/CMakeLists.txt
new file mode 100644
index 000000000..8e89ad70b
--- /dev/null
+++ b/client/SDL/man/CMakeLists.txt
@@ -0,0 +1,6 @@
+set(DEPS
+ sdl-freerdp-channels.1.xml
+ sdl-freerdp-examples.1.xml
+ sdl-freerdp-envvar.1.xml
+ )
+generate_and_install_freerdp_man_from_xml(sdl-freerdp.1 ${DEPS})
diff --git a/client/X11/xfreerdp-channels.1.xml b/client/SDL/man/sdl-freerdp-channels.1.xml
similarity index 100%
rename from client/X11/xfreerdp-channels.1.xml
rename to client/SDL/man/sdl-freerdp-channels.1.xml
diff --git a/client/SDL/man/sdl-freerdp-envvar.1.xml b/client/SDL/man/sdl-freerdp-envvar.1.xml
new file mode 100644
index 000000000..ab6c8c558
--- /dev/null
+++ b/client/SDL/man/sdl-freerdp-envvar.1.xml
@@ -0,0 +1,15 @@
+
+ Environment variables
+
+
+
+ wlog environment variable
+
+ sdl-freerdp uses wLog as its log facility, you can refer to the
+ corresponding man page (wlog(7)) for more informations. Arguments passed
+ via the /log-level or /log-filters
+ have precedence over the environment variables.
+
+
+
+
diff --git a/client/SDL/man/sdl-freerdp-examples.1.xml b/client/SDL/man/sdl-freerdp-examples.1.xml
new file mode 100644
index 000000000..7b0f87384
--- /dev/null
+++ b/client/SDL/man/sdl-freerdp-examples.1.xml
@@ -0,0 +1,95 @@
+
+ Examples
+
+
+ sdl-freerdp connection.rdp /p:Pwd123! /f
+
+ Connect in fullscreen mode using a stored configuration connection.rdp and the password Pwd123!
+
+
+
+ sdl-freerdp /u:USER /size:50%h /v:rdp.contoso.com
+
+ Connect to host rdp.contoso.com with user USER and a size of 50 percent of the height. If width (w) is set instead of height (h) like /size:50%w. 50 percent of the width is used.
+
+
+
+ sdl-freerdp /u:CONTOSO\\JohnDoe /p:Pwd123! /v:rdp.contoso.com
+
+ Connect to host rdp.contoso.com with user CONTOSO\\JohnDoe and password Pwd123!
+
+
+
+ sdl-freerdp /u:JohnDoe /p:Pwd123! /w:1366 /h:768 /v:192.168.1.100:4489
+
+ Connect to host 192.168.1.100 on port 4489 with user JohnDoe, password Pwd123!. The screen width is set to 1366 and the height to 768
+
+
+
+ sdl-freerdp /u:JohnDoe /p:Pwd123! /vmconnect:C824F53E-95D2-46C6-9A18-23A5BB403532 /v:192.168.1.100
+
+ Establish a connection to host 192.168.1.100 with user JohnDoe, password Pwd123! and connect to Hyper-V console (use port 2179, disable negotiation) with VMID C824F53E-95D2-46C6-9A18-23A5BB403532
+
+
+
+ +clipboard
+
+ Activate clipboard redirection
+
+
+
+ /drive:home,/home/user
+
+ Activate drive redirection of /home/user as home drive
+
+
+
+ /smartcard:<device>
+
+ Activate smartcard redirection for device device
+
+
+
+ /printer:<device>,<driver>
+
+ Activate printer redirection for printer device using driver driver
+
+
+
+ /serial:<device>
+
+ Activate serial port redirection for port device
+
+
+
+ /parallel:<device>
+
+ Activate parallel port redirection for port device
+
+
+
+ /sound:sys:alsa
+
+ Activate audio output redirection using device sys:alsa
+
+
+
+ /microphone:sys:alsa
+
+ Activate audio input redirection using device sys:alsa
+
+
+
+ /multimedia:sys:alsa
+
+ Activate multimedia redirection using device sys:alsa
+
+
+
+ /usb:id,dev:054c:0268
+
+ Activate USB device redirection for the device identified by 054c:0268
+
+
+
+
diff --git a/client/SDL/man/sdl-freerdp.1.xml.in b/client/SDL/man/sdl-freerdp.1.xml.in
new file mode 100644
index 000000000..fcac5682d
--- /dev/null
+++ b/client/SDL/man/sdl-freerdp.1.xml.in
@@ -0,0 +1,63 @@
+
+
+
+
+
+ ]
+>
+
+
+
+ @MAN_TODAY@
+
+ The FreeRDP Team
+
+
+
+ sdl-freerdp
+ 1
+ freerdp
+ sdl-freerdp
+
+
+ sdl-freerdp
+ FreeRDP X11 client
+
+
+
+ @MAN_TODAY@
+
+
+ sdl-freerdp [file] [options] [/v:server[:port]]
+
+
+
+
+ @MAN_TODAY@
+
+ DESCRIPTION
+
+ sdl-freerdp is an X11 Remote Desktop Protocol (RDP)
+ client which is part of the FreeRDP project. An RDP server is built-in
+ to many editions of Windows. Alternative servers included xrdp and VRDP (VirtualBox).
+
+
+
+ &syntax;
+
+ &channels;
+
+ &envvar;
+
+ &examples;
+
+
+ LINKS
+
+ http://www.freerdp.com/
+
+
+
diff --git a/client/X11/CMakeLists.txt b/client/X11/CMakeLists.txt
index 48ca040e4..8d449dada 100644
--- a/client/X11/CMakeLists.txt
+++ b/client/X11/CMakeLists.txt
@@ -43,7 +43,6 @@ include(ConfigureRPATH)
find_package(X11 REQUIRED)
-include(FindDocBookXSL)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../resources)
include_directories(${X11_INCLUDE_DIRS})
include_directories(${OPENSSL_INCLUDE_DIR})
@@ -113,52 +112,7 @@ set(LIBS
${X11_LIBRARIES}
)
-if(WITH_MANPAGES)
- find_program(XSLTPROC_EXECUTABLE NAMES xsltproc REQUIRED)
- if (NOT DOCBOOKXSL_FOUND)
- message(FATAL_ERROR "docbook xsl not found but required for manpage generation")
- endif()
-
- # We need the variable ${MAN_TODAY} to contain the current date in ISO
- # format to replace it in the configure_file step.
- include(today)
-
- TODAY(MAN_TODAY)
-
- configure_file(xfreerdp.1.xml.in xfreerdp.1.xml @ONLY IMMEDIATE)
-
- # Compile the helper tool with default compiler settings.
- # We need the include paths though.
- get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
- set(GENERATE_INCLUDES "")
- foreach(dir ${dirs})
- set(GENERATE_INCLUDES ${GENERATE_INCLUDES} -I${dir})
- endforeach(dir)
-
- add_custom_command(OUTPUT xfreerdp.1
- COMMAND ${CMAKE_C_COMPILER} ${GENERATE_INCLUDES}
- ${CMAKE_CURRENT_SOURCE_DIR}/generate_argument_docbook.c
- -o ${CMAKE_CURRENT_BINARY_DIR}/generate_argument_docbook
- COMMAND ${CMAKE_CURRENT_BINARY_DIR}/generate_argument_docbook
- COMMAND ${CMAKE_COMMAND} -E copy
- ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-channels.1.xml ${CMAKE_CURRENT_BINARY_DIR}
- COMMAND ${CMAKE_COMMAND} -E copy
- ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-examples.1.xml ${CMAKE_CURRENT_BINARY_DIR}
- COMMAND ${CMAKE_COMMAND} -E copy
- ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-envvar.1.xml ${CMAKE_CURRENT_BINARY_DIR}
- COMMAND ${XSLTPROC_EXECUTABLE} ${DOCBOOKXSL_DIR}/manpages/docbook.xsl xfreerdp.1.xml
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
- DEPENDS
- ${CMAKE_CURRENT_BINARY_DIR}/xfreerdp.1.xml
- ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-examples.1.xml
- ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-channels.1.xml
- ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp-envvar.1.xml)
-
- add_custom_target(xfreerdp.manpage ALL
- DEPENDS xfreerdp.1)
-
- install_freerdp_man(${CMAKE_CURRENT_BINARY_DIR}/xfreerdp.1 1)
-endif(WITH_MANPAGES)
+add_subdirectory(man)
find_package(X11 REQUIRED)
if(X11_XShm_FOUND)
diff --git a/client/X11/man/CMakeLists.txt b/client/X11/man/CMakeLists.txt
new file mode 100644
index 000000000..aa8570bd0
--- /dev/null
+++ b/client/X11/man/CMakeLists.txt
@@ -0,0 +1,6 @@
+set(DEPS
+ xfreerdp-channels.1.xml
+ xfreerdp-examples.1.xml
+ xfreerdp-envvar.1.xml
+ )
+generate_and_install_freerdp_man_from_xml(xfreerdp.1 ${DEPS})
diff --git a/client/X11/man/xfreerdp-channels.1.xml b/client/X11/man/xfreerdp-channels.1.xml
new file mode 100644
index 000000000..e69de29bb
diff --git a/client/X11/xfreerdp-envvar.1.xml b/client/X11/man/xfreerdp-envvar.1.xml
similarity index 100%
rename from client/X11/xfreerdp-envvar.1.xml
rename to client/X11/man/xfreerdp-envvar.1.xml
diff --git a/client/X11/xfreerdp-examples.1.xml b/client/X11/man/xfreerdp-examples.1.xml
similarity index 100%
rename from client/X11/xfreerdp-examples.1.xml
rename to client/X11/man/xfreerdp-examples.1.xml
diff --git a/client/X11/xfreerdp.1.xml.in b/client/X11/man/xfreerdp.1.xml.in
similarity index 96%
rename from client/X11/xfreerdp.1.xml.in
rename to client/X11/man/xfreerdp.1.xml.in
index 119f7f344..f775d801f 100644
--- a/client/X11/xfreerdp.1.xml.in
+++ b/client/X11/man/xfreerdp.1.xml.in
@@ -2,7 +2,7 @@
+
diff --git a/client/X11/generate_argument_docbook.c b/client/common/man/generate_argument_docbook.c
similarity index 98%
rename from client/X11/generate_argument_docbook.c
rename to client/common/man/generate_argument_docbook.c
index 37fdd40a9..a4909faa0 100644
--- a/client/X11/generate_argument_docbook.c
+++ b/client/common/man/generate_argument_docbook.c
@@ -3,7 +3,7 @@
#include
#include
-#include "../common/cmdline.h"
+#include "../cmdline.h"
#define TAG FREERDP_TAG("generate_argument_docbook")
LPSTR tr_esc_str(LPCSTR arg, bool format)
@@ -172,7 +172,7 @@ int main(int argc, char* argv[])
{
size_t elements = sizeof(global_cmd_args) / sizeof(global_cmd_args[0]);
size_t x;
- const char* fname = "xfreerdp-argument.1.xml";
+ const char* fname = "freerdp-argument.1.xml";
FILE* fp = NULL;
/* Open output file for writing, truncate if existing. */
fp = fopen(fname, "w");
diff --git a/cmake/InstallFreeRDPMan.cmake b/cmake/InstallFreeRDPMan.cmake
index 9114500b9..b410e6170 100644
--- a/cmake/InstallFreeRDPMan.cmake
+++ b/cmake/InstallFreeRDPMan.cmake
@@ -1,7 +1,69 @@
include(GNUInstallDirs)
+include(FindDocBookXSL)
function(install_freerdp_man manpage section)
if(WITH_MANPAGES)
install(FILES ${manpage} DESTINATION ${CMAKE_INSTALL_MANDIR}/man${section})
endif()
endfunction()
+
+function(generate_and_install_freerdp_man_from_xml manpage dependencies)
+ if(WITH_MANPAGES)
+ find_program(XSLTPROC_EXECUTABLE NAMES xsltproc REQUIRED)
+ if (NOT DOCBOOKXSL_FOUND)
+ message(FATAL_ERROR "docbook xsl not found but required for manpage generation")
+ endif()
+
+ # We need the variable ${MAN_TODAY} to contain the current date in ISO
+ # format to replace it in the configure_file step.
+ include(today)
+
+ TODAY(MAN_TODAY)
+
+ configure_file(${manpage}.xml.in ${manpage}.xml @ONLY IMMEDIATE)
+
+ # Compile the helper tool with default compiler settings.
+ # We need the include paths though.
+ get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
+ set(GENERATE_INCLUDES "")
+ foreach(dir ${dirs})
+ set(GENERATE_INCLUDES ${GENERATE_INCLUDES} -I${dir})
+ endforeach(dir)
+
+ set(dep_SRC)
+ set(deb_BIN)
+ foreach(dep ${dependencies})
+ set(cur_SRC ${CMAKE_CURRENT_SOURCE_DIR}/${dep})
+ set(cur_BIN ${CMAKE_CURRENT_BINARY_DIR}/${dep})
+ list(APPEND dep_SRC ${cur_SRC})
+ list(APPEND dep_BIN ${cur_BIN})
+
+ add_custom_command(
+ OUTPUT ${cur_BIN}
+ COMMAND ${CMAKE_COMMAND} -E copy ${cur_SRC} ${cur_BIN}
+ DEPENDS ${cur_SRC}
+ VERBATIM
+ )
+ endforeach()
+
+ add_custom_command(
+ OUTPUT ${manpage}
+ COMMAND ${CMAKE_C_COMPILER} ${GENERATE_INCLUDES}
+ ${CMAKE_SOURCE_DIR}/client/common/man/generate_argument_docbook.c
+ -o ${CMAKE_CURRENT_BINARY_DIR}/generate_argument_docbook
+ COMMAND ${CMAKE_CURRENT_BINARY_DIR}/generate_argument_docbook
+ COMMAND ${XSLTPROC_EXECUTABLE} ${DOCBOOKXSL_DIR}/manpages/docbook.xsl ${manpage}.xml
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ DEPENDS
+ ${CMAKE_CURRENT_BINARY_DIR}/${manpage}.xml
+ ${dep_BIN}
+ )
+
+ add_custom_target(
+ ${manpage}.manpage ALL
+ DEPENDS
+ ${manpage}
+ )
+ install_freerdp_man(${CMAKE_CURRENT_BINARY_DIR}/${manpage} 1)
+ endif()
+endfunction()