diff --git a/.gitignore b/.gitignore index 2ebaa5e..634f043 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,5 @@ CHANGELOG config.h #* \#* +wmfs.1.gz +wmfs.1.xml diff --git a/CMakeLists.txt b/CMakeLists.txt index a12b6be..166b5da 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,7 @@ set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}) # Other #set(CMAKE_BUILD_TYPE RELEASE) option(WITH_LOGOS "install wmfs logos") +option(GENERATE_MANPAGES "generate manpages" ON) # Project name - wmfs set(PROJECT_NAME wmfs) project(${PROJECT_NAME} C) @@ -46,7 +47,24 @@ pkg_check_modules(wmfs_required x11 libconfuse) # Find exterbal programs +macro(a_find_program var prg req) + set(required ${req}) + find_program(${var} ${prg}) + if(NOT ${var}) + message(STATUS "${prg} not found.") + if(required) + message(FATAL_ERROR "${prg} is required to build wmfs") + endif() + else() + message(STATUS "${prg} -> ${${var}}") + endif() +endmacro() find_program(GIT_EXECUTABLE git) +# programs needed for man pages +a_find_program(ASCIIDOC_EXECUTABLE asciidoc FALSE) +a_find_program(XMLTO_EXECUTABLE xmlto FALSE) +a_find_program(GZIP_EXECUTABLE gzip FALSE) +a_find_program(CAT_EXECUTABLE cat TRUE) # Remplace strings in configs set(WMFS_VERSION ${VERSION}) set(WMFS_COMPILE_MACHINE ${CMAKE_SYSTEM_PROCESSOR}) @@ -84,19 +102,98 @@ set(CHANGELOG_FILE ${SOURCE_DIR}/CHANGELOG) file(WRITE ${CHANGELOG_FILE} ${WMFS_CHANGELOG}) endif() +# {{{ Check if documentation can be build +if(GENERATE_MANPAGES) + if(NOT ASCIIDOC_EXECUTABLE OR NOT XMLTO_EXECUTABLE OR NOT GZIP_EXECUTABLE) + if(NOT ASCIIDOC_EXECUTABLE) + SET(missing "asciidoc") + endif() + if(NOT XMLTO_EXECUTABLE) + SET(missing ${missing} " xmlto") + endif() + if(NOT GZIP_EXECUTABLE) + SET(missing ${missing} " gzip") + endif() + + message(STATUS "Not generating manpages. Missing: " ${missing}) + set(GENERATE_MANPAGES OFF) + endif() +endif() + +# sets +# {{{ Install path and configuration variables +if(DEFINED PREFIX) + set(PREFIX ${PREFIX} CACHE PATH "install prefix") + set(CMAKE_INSTALL_PREFIX ${PREFIX}) +else() + set(PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "install prefix") +endif() + +# set man path +set(WMFS_MAN_SRCS + ${SOURCE_DIR}/wmfs.1.txt) + +if(DEFINED WMFS_MAN_PATH) + set(WMFS_MAN_PATH ${WMFS_MAN_PATH} CACHE PATH "wmfs manpage directory") +else() + set(WMFS_MAN_PATH ${PREFIX}/share/man CACHE PATH "wmfs manpage directory") +endif() + +# {{{ Manpages +if(GENERATE_MANPAGES) + foreach(txtfile ${WMFS_MAN_SRCS}) + string(REGEX REPLACE ".txt\$" ".xml" xmlfile ${txtfile}) + string(REPLACE ${SOURCE_DIR} + ${BUILD_DIR} xmlfile ${xmlfile}) + string(REGEX REPLACE ".xml\$" ".gz" gzfile ${xmlfile}) + string(REGEX REPLACE ".gz\$" "" manfile ${gzfile}) + + add_custom_command( + COMMAND ${CAT_EXECUTABLE} ${txtfile} + | ${ASCIIDOC_EXECUTABLE} -d manpage -b docbook -o ${xmlfile} - + WORKING_DIRECTORY ${BUILD_DIR} + OUTPUT ${xmlfile} + DEPENDS ${txtfile} + VERBATIM) + add_custom_command( + COMMAND ${XMLTO_EXECUTABLE} man ${xmlfile} + OUTPUT ${manfile} + DEPENDS ${xmlfile}) + add_custom_command( + COMMAND ${CAT_EXECUTABLE} ${manfile} + | ${GZIP_EXECUTABLE} + > ${gzfile} + OUTPUT ${gzfile} + DEPENDS ${manfile} + VERBATIM) + + set(MAN_FILES ${MAN_FILES} ${gzfile}) + + # figure out in what section to install to from filename + string(REGEX REPLACE "^.*\\.([0-9])\\.gz\$" "\\1" section ${gzfile}) + set(WMFS_MAN${section}_FILES ${WMFS_MAN${section}_FILES} ${gzfile}) + endforeach() + + add_custom_target(man ALL DEPENDS ${MAN_FILES}) +endif() +# }}} + set(PROJECT_DATA_PATH share/${PROJECT_NAME}) set(PROJECT_TODO ${SOURCE_DIR}/TODO) set(PROJECT_README ${SOURCE_DIR}/README) set(PROJECT_CHANGELOG ${SOURCE_DIR}/CHANGELOG) set(PROJECT_DEFAULT_CONF ${SOURCE_DIR}/wmfsrc) -install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin) +# installs +install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin) if(WITH_LOGOS) set(PROJECT_LOGOS ${PROJECT_DATA_PATH}/logos) set(PROJECT_LOGOS_DIR ${SOURCE_DIR}/logos) install(DIRECTORY ${PROJECT_LOGOS_DIR} DESTINATION ${PROJECT_DATA_PATH}) message("Install With logos") endif() - +if(GENERATE_MANPAGES) + install(FILES ${WMFS_MAN1_FILES} DESTINATION ${WMFS_MAN_PATH}/man1) +endif() install(FILES ${PROJECT_TODO} ${PROJECT_README} ${PROJECT_CHANGELOG} ${PROJECT_DEFAULT_CONF} DESTINATION ${PROJECT_DATA_PATH}) diff --git a/build/wmfs.1 b/build/wmfs.1 new file mode 100644 index 0000000..360983e --- /dev/null +++ b/build/wmfs.1 @@ -0,0 +1,75 @@ +.\" Title: wmfs +.\" Author: +.\" Generator: DocBook XSL Stylesheets v1.73.2 +.\" Date: 09/13/2008 +.\" Manual: +.\" Source: +.\" +.TH "WMFS" "1" "09/13/2008" "" "" +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.SH "NAME" +wmfs - Windows Manager From Scratch +.SH "SYNOPSIS" +\fBwmfs\fR [\fB\-v\fR | \fB\-\-version\fR] [\fB\-h\fR | \fB\-\-help\fR] [\fB\-c\fR | \fB\-\-config\fR \fIFILE\fR] +.sp +.SH "DESCRIPTION" +\fBWmfs\fR is a windows manager for X\. You can use Floating and Tiling apps\. blahblahblah\&... +.sp +.SH "OPTIONS" +.PP +\fB\-v\fR, \fB\-\-version\fR +.RS 4 +Print version information to standard output, then exit\. +.RE +.PP +\fB\-h\fR, \fB\-\-help\fR +.RS 4 +Print help information, then exit\. +.RE +.PP +\fB\-c\fR, \fB\-\-config\fR +.RS 4 +Use an alternate configuration file instead of +\fI$HOME/\.wmfsrc\fR\. +.RE +.SH "DEFAULT MOUSE BINDINGS" +.SS "Type de bind\." +.PP +\fBtouche + truc\fR on XYZ +.RS 4 +Description\. +.RE +.SS "Autre type de bind\." +.PP +\fBtruc + machin\fR +.RS 4 +Desc\. +.RE +.SH "DEFAULT KEY BINDINGS" +.SS "Type de bind\." +.PP +\fBtouche + truc\fR on XYZ +.RS 4 +Description\. +.RE +.SS "Autre type de bind\." +.PP +\fBtruc + machin\fR +.RS 4 +Desc\. +.RE +.SH "CONFIGURATION" +\fBWmfs\fR is configured by \fI$HOME/\.wmfsrc\fR +.sp +.SH "BUGS" +Know bug list here\. +.sp +.SH "AUTHORS" +Marc Lagrange for the build system and Gentoo ebuilds\. Martin Duquesnoy for the code\. +.sp +.SH "WWW" +http://wmfs\.sangor\.net/ +.sp diff --git a/wmfs.1.txt b/wmfs.1.txt new file mode 100644 index 0000000..9af1253 --- /dev/null +++ b/wmfs.1.txt @@ -0,0 +1,76 @@ +wmfs(1) +======= + +NAME +---- + +wmfs - Windows Manager From Scratch + +SYNOPSIS +-------- + +*wmfs* [*-v* | *--version*] [*-h* | *--help*] [*-c* | *--config* 'FILE'] + +DESCRIPTION +----------- + +*Wmfs* is a windows manager for X. You can use Floating and Tiling apps. +blahblahblah... + +OPTIONS +------- +*-v*, *--version*:: + Print version information to standard output, then exit. +*-h*, *--help*:: + Print help information, then exit. +*-c*, *--config*:: + Use an alternate configuration file instead of '$HOME/.wmfsrc'. + +DEFAULT MOUSE BINDINGS +---------------------- + +Type de bind. +~~~~~~~~~~~~~ + +*touche + truc* on XYZ:: + Description. + + +Autre type de bind. +~~~~~~~~~~~~~~~~~~~ + +*truc + machin*:: + Desc. + +DEFAULT KEY BINDINGS +--------------------- + +Type de bind. +~~~~~~~~~~~~~ + +*touche + truc* on XYZ:: + Description. + +Autre type de bind. +~~~~~~~~~~~~~~~~~~~ + +*truc + machin*:: + Desc. + + +CONFIGURATION +------------- +*Wmfs* is configured by '$HOME/.wmfsrc' + +BUGS +---- +Know bug list here. + +AUTHORS +------- +Marc Lagrange for the build system and Gentoo ebuilds. +Martin Duquesnoy for the code. + +WWW +--- +http://wmfs.sangor.net/