Skip to content

Commit 1c4124a

Browse files
committed
Bug #2524: Addition of CMake build files - use of module "FindXmlTo"
A few build scripts were updated for the use of the module "FindXmlTo.cmake". Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
1 parent f1dfbf6 commit 1c4124a

3 files changed

Lines changed: 118 additions & 17 deletions

File tree

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ cmake_minimum_required (VERSION 2.6)
1414

1515
PROJECT(CPPCHECK)
1616

17+
set(CMAKE_MODULE_PATH "${CPPCHECK_SOURCE_DIR}/cmake/modules" ${CMAKE_MODULE_PATH})
18+
1719
# Building lib as static library is disabled due to bug
1820
# #1299 CMake: The CheckClass is not used
1921
# https://sourceforge.net/apps/trac/cppcheck/ticket/1299

cmake/modules/FindXmlTo.cmake

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
# Is Hendrik Sattler the original author of the following script?
2+
# http://cmake.org/pipermail/cmake/2007-April/013545.html
3+
4+
# - Convert XML docBook files to various formats
5+
# This will convert XML docBook files to various formats like:
6+
# man html txt dvi ps pdf
7+
# macro XMLTO(outfiles infiles... MODES modes...)
8+
9+
set ( XmlTo_FOUND false )
10+
11+
find_program ( XMLTO_EXECUTABLE NAMES xmlto
12+
DOC "path to the xmlto docbook xslt frontend" )
13+
14+
if ( XMLTO_EXECUTABLE )
15+
set ( XmlTo_FOUND true )
16+
17+
if ( NOT XmlTo_FIND_QUIETLY )
18+
message ( STATUS "Found ${XMLTO_EXECUTABLE}" )
19+
endif ( NOT XmlTo_FIND_QUIETLY )
20+
else ( XMLTO_EXECUTABLE )
21+
if ( XmlTo_FIND_REQUIRED )
22+
message ( FATAL_ERROR "The xmlto program was not found." )
23+
endif ( XmlTo_FIND_REQUIRED )
24+
endif ( XMLTO_EXECUTABLE )
25+
26+
macro ( _XMLTO_FILE outfiles mode)
27+
#special settings
28+
set ( XMLTO_FILEEXT_man 1 )
29+
set ( XMLTO_MODE_html xhtml-nochunks )
30+
31+
if ( NOT XMLTO_MODE_${mode})
32+
set ( XMLTO_MODE_${mode} ${mode} )
33+
endif ( NOT XMLTO_MODE_${mode} )
34+
if ( NOT XMLTO_FILEEXT_${mode} )
35+
set ( XMLTO_FILEEXT_${mode} ${mode} )
36+
endif ( NOT XMLTO_FILEEXT_${mode} )
37+
38+
foreach ( dbFile ${ARGN} )
39+
#TODO: set XMLTO_FILEEXT_man to value from <manvolnum>
40+
if ( "${mode}" STREQUAL "man" )
41+
file ( READ "${dbFile}" _DB_FILE_CONTENTS )
42+
string ( REGEX MATCH "<manvolnum>[^<]*" XMLTO_FILEEXT_${mode} "${_DB_FILE_CONTENTS}" )
43+
string ( REGEX REPLACE "^<manvolnum>" "" XMLTO_FILEEXT_${mode} "${XMLTO_FILEEXT_${mode}}" )
44+
string ( REGEX REPLACE "[[:space:]]" "" XMLTO_FILEEXT_${mode} "${XMLTO_FILEEXT_${mode}}" )
45+
endif ( "${mode}" STREQUAL "man" )
46+
47+
get_filename_component ( dbFilePath ${CMAKE_CURRENT_BINARY_DIR}/${dbFile} PATH )
48+
get_filename_component ( dbFileWE ${dbFile} NAME_WE )
49+
get_filename_component ( dbFileAbsWE ${dbFilePath}/${dbFileWE} ABSOLUTE )
50+
51+
add_custom_command (
52+
OUTPUT ${dbFileAbsWE}.${XMLTO_FILEEXT_${mode}}
53+
COMMAND ${XMLTO_EXECUTABLE} ${XMLTO_COMMAND_ARGS} -o ${CMAKE_CURRENT_BINARY_DIR}
54+
${XMLTO_MODE_${mode}} "${CMAKE_CURRENT_SOURCE_DIR}/${dbFile}"
55+
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/${dbFile}
56+
VERBATIM
57+
)
58+
59+
set ( ${outfiles}
60+
${${outfiles}}
61+
${dbFileAbsWE}.${XMLTO_FILEEXT_${mode}}
62+
)
63+
endforeach ( dbFile )
64+
endmacro ( _XMLTO_FILE outfiles )
65+
66+
macro ( XMLTO )
67+
set ( XMLTO_MODES )
68+
set ( XMLTO_FILES )
69+
set ( XMLTO_HAS_MODES false )
70+
set ( XMLTO_ADD_DEFAULT false )
71+
foreach ( arg ${ARGN} )
72+
if ( ${arg} STREQUAL "MODES" )
73+
set ( XMLTO_HAS_MODES true )
74+
elseif ( ${arg} STREQUAL "ALL" )
75+
set ( XMLTO_ADD_DEFAULT true )
76+
else ( ${arg} STREQUAL "MODES" )
77+
if ( XMLTO_HAS_MODES )
78+
set ( XMLTO_MODES ${XMLTO_MODES} ${arg} )
79+
else ( XMLTO_HAS_MODES )
80+
set ( XMLTO_FILES ${XMLTO_FILES} ${arg} )
81+
endif ( XMLTO_HAS_MODES )
82+
endif ( ${arg} STREQUAL "MODES" )
83+
endforeach ( arg ${ARGN} )
84+
if ( NOT XMLTO_MODES )
85+
set ( XMLTO_MODES html )
86+
endif ( NOT XMLTO_MODES )
87+
88+
foreach ( mode ${XMLTO_MODES} )
89+
_xmlto_file ( XMLTO_FILES_${mode} ${mode} ${XMLTO_FILES} )
90+
if ( XMLTO_ADD_DEFAULT )
91+
add_custom_target ( ${mode} ALL
92+
DEPENDS ${XMLTO_FILES_${mode}}
93+
VERBATIM
94+
)
95+
else ( XMLTO_ADD_DEFAULT )
96+
add_custom_target ( ${mode}
97+
DEPENDS ${XMLTO_FILES_${mode}}
98+
VERBATIM
99+
)
100+
endif ( XMLTO_ADD_DEFAULT )
101+
endforeach ( mode )
102+
103+
set ( XMLTO_MODES )
104+
set ( XMLTO_FILES )
105+
endmacro ( XMLTO )

man/CMakeLists.txt

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,16 @@
11
# Build Docbook manual
22
# Run 'make html' to build manual
33

4-
# Build manual in Linux/Cygwin - xmlto is not available in Windows
4+
set(DOC_TARGETS "html")
55

6-
SET(DOC_TARGETS "html")
6+
if(CYGWIN)
7+
# Build also htmlhelp in Cygwin - this can be used to build
8+
# htmlhelp manual for Windows.
9+
set(DOC_TARGETS ${DOC_TARGETS} "htmlhelp")
10+
endif()
711

8-
# Build also htmlhelp in Cygwin - this can be used to build
9-
# htmlhelp manual for Windows.
10-
11-
IF (CYGWIN)
12-
SET(DOC_TARGETS
13-
${DOC_TARGETS}
14-
"htmlhelp"
15-
)
16-
ENDIF(CYGWIN)
17-
18-
IF (UNIX OR CYGWIN)
19-
#macro XMLTO(outfiles infiles... MODES modes...)
20-
INCLUDE("../CMake/xmlto.cmake")
21-
XMLTO("" "manual.docbook" MODES ${DOC_TARGETS})
22-
ENDIF (UNIX OR CYGWIN)
12+
if(UNIX OR CYGWIN)
13+
# Build manual in Linux/Cygwin - xmlto is not available in Windows
14+
find_package(XmlTo REQUIRED)
15+
xmlto("" "manual.docbook" MODES ${DOC_TARGETS})
16+
endif()

0 commit comments

Comments
 (0)