summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorAlan Antonuk <alan.antonuk@gmail.com>2012-05-24 12:50:03 -0700
committerAlan Antonuk <alan.antonuk@gmail.com>2012-05-24 12:50:03 -0700
commit09cdaf8ce729b99c134c5a01ad7ab081fa7d5b8d (patch)
tree7dbaf1b0ccf1805e8821caf8aaee9fd9471c66db /cmake
parent7a74c3574afb32ab31dc5f946afbf89f3022a36d (diff)
parent16341eb2140c848bd549a112960164bd11924e85 (diff)
downloadrabbitmq-c-github-ask-09cdaf8ce729b99c134c5a01ad7ab081fa7d5b8d.tar.gz
Merge pull request #20 from alanxz/cmake_build_improvements
CMake build system improvements
Diffstat (limited to 'cmake')
-rw-r--r--cmake/FindXmlTo.cmake103
1 files changed, 103 insertions, 0 deletions
diff --git a/cmake/FindXmlTo.cmake b/cmake/FindXmlTo.cmake
new file mode 100644
index 0000000..713e0e8
--- /dev/null
+++ b/cmake/FindXmlTo.cmake
@@ -0,0 +1,103 @@
+# - Convert XML docBook files to various formats
+# This will convert XML docBook files to various formats like:
+# man html txt dvi ps pdf
+# macro XMLTO(outfiles infiles... MODES modes...)
+
+set ( XmlTo_FOUND false )
+
+find_program ( XMLTO_EXECUTABLE
+ NAMES xmlto
+ DOC "path to the xmlto docbook xslt frontend"
+)
+
+if ( XMLTO_EXECUTABLE )
+ set ( XmlTo_FOUND true )
+endif ( XMLTO_EXECUTABLE )
+
+if ( NOT XmlTo_FIND_QUIETLY )
+ if ( XmlTo_FIND_REQUIRED )
+ FATAL_ERROR ( "xmlto not found" )
+ endif ( XmlTo_FIND_REQUIRED )
+endif ( NOT XmlTo_FIND_QUIETLY )
+
+macro ( _XMLTO_FILE outfiles mode)
+ #special settings
+ set ( XMLTO_FILEEXT_man 1 )
+ set ( XMLTO_MODE_html xhtml-nochunks )
+
+ if ( NOT XMLTO_MODE_${mode})
+ set ( XMLTO_MODE_${mode} ${mode} )
+ endif ( NOT XMLTO_MODE_${mode} )
+ if ( NOT XMLTO_FILEEXT_${mode} )
+ set ( XMLTO_FILEEXT_${mode} ${mode} )
+ endif ( NOT XMLTO_FILEEXT_${mode} )
+
+ foreach ( dbFile ${ARGN} )
+ #TODO: set XMLTO_FILEEXT_man to value from <manvolnum>
+ if ( "${mode}" STREQUAL "man" )
+ file ( READ "${dbFile}" _DB_FILE_CONTENTS )
+ string ( REGEX MATCH "<manvolnum>[^<]*" XMLTO_FILEEXT_${mode} "${_DB_FILE_CONTENTS}" )
+ string ( REGEX REPLACE "^<manvolnum>" "" XMLTO_FILEEXT_${mode} "${XMLTO_FILEEXT_${mode}}" )
+ string ( REGEX REPLACE "[[:space:]]" "" XMLTO_FILEEXT_${mode} "${XMLTO_FILEEXT_${mode}}" )
+ endif ( "${mode}" STREQUAL "man" )
+
+ get_filename_component ( dbFilePath ${CMAKE_CURRENT_BINARY_DIR}/${dbFile} PATH )
+ get_filename_component ( dbFileWE ${dbFile} NAME_WE )
+ get_filename_component ( dbFileAbsWE ${dbFilePath}/${dbFileWE} ABSOLUTE )
+
+ add_custom_command (
+ OUTPUT ${dbFileAbsWE}.${XMLTO_FILEEXT_${mode}}
+ COMMAND ${XMLTO_EXECUTABLE} ${XMLTO_COMMAND_ARGS} -o ${dbFilePath}
+ ${XMLTO_MODE_${mode}} "${CMAKE_CURRENT_SOURCE_DIR}/${dbFile}"
+ MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/${dbFile}
+ DEPENDS ${XMLTO_DEPENDS}
+ VERBATIM
+ )
+
+ set ( ${outfiles}
+ ${${outfiles}}
+ ${dbFileAbsWE}.${XMLTO_FILEEXT_${mode}}
+ )
+ endforeach ( dbFile )
+endmacro ( _XMLTO_FILE outfiles )
+
+macro ( XMLTO )
+ set ( XMLTO_MODES )
+ set ( XMLTO_FILES )
+ set ( XMLTO_HAS_MODES false )
+ set ( XMLTO_ADD_DEFAULT false )
+ foreach ( arg ${ARGN} )
+ if ( ${arg} STREQUAL "MODES" )
+ set ( XMLTO_HAS_MODES true )
+ elseif ( ${arg} STREQUAL "ALL" )
+ set ( XMLTO_ADD_DEFAULT true )
+ else ( ${arg} STREQUAL "MODES" )
+ if ( XMLTO_HAS_MODES )
+ set ( XMLTO_MODES ${XMLTO_MODES} ${arg} )
+ else ( XMLTO_HAS_MODES )
+ set ( XMLTO_FILES ${XMLTO_FILES} ${arg} )
+ endif ( XMLTO_HAS_MODES )
+ endif ( ${arg} STREQUAL "MODES" )
+ endforeach ( arg ${ARGN} )
+ if ( NOT XMLTO_MODES )
+ set ( XMLTO_MODES html )
+ endif ( NOT XMLTO_MODES )
+
+ foreach ( mode ${XMLTO_MODES} )
+ _xmlto_file ( XMLTO_FILES_${mode} ${mode} ${XMLTO_FILES} )
+ if ( XMLTO_ADD_DEFAULT )
+ add_custom_target ( ${mode} ALL
+ DEPENDS ${XMLTO_FILES_${mode}}
+ VERBATIM
+ )
+ else ( XMLTO_ADD_DEFAULT )
+ add_custom_target ( ${mode}
+ DEPENDS ${XMLTO_FILES_${mode}}
+ VERBATIM
+ )
+ endif ( XMLTO_ADD_DEFAULT )
+ endforeach ( mode )
+
+ set ( XMLTO_MODES )
+ set ( XMLTO_FILES )
+endmacro ( XMLTO )