Mercurial > irccd
annotate cmake/function/IrccdBuildHtml.cmake @ 628:27587ff92a64
Misc: update copyrights
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 09 Jan 2018 14:06:40 +0100 |
parents | 241583937af0 |
children | e9adad05580f |
rev | line source |
---|---|
275
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 # IrccdBuildHtml.cmake -- CMake build system for irccd |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 # |
628
27587ff92a64
Misc: update copyrights
David Demelier <markand@malikania.fr>
parents:
617
diff
changeset
|
4 # Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> |
275
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 # Permission to use, copy, modify, and/or distribute this software for any |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 # purpose with or without fee is hereby granted, provided that the above |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 # copyright notice and this permission notice appear in all copies. |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 include(CMakeParseArguments) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 # irccd_build_html |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 # ------------------------------------------------------------------- |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 # irccd_build_html( |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 # COMPONENT (Optional) install the output documentation as the given component |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 # OUTPUT (Optional) override output path |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 # OUTPUT_VAR (Optional) store the output file in the output variable |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 # SOURCE the source markdown file |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 # ) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 # Create a rule to build the markdown file specified by SOURCE parameter. |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 # By default, the output file is built in the same directory relative to the |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 # current project. Specifying /foo/bar/baz/foo.md as SOURCE from the |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 # directory /foo/var ends in an output file baz/foo.html. |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 # The output file path can be overriden with the OUTPUT variable which must be |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 # relative and must contain the filename without extension (e.g. api/misc/Foo). |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 # This macro does not create a target, just the output rule and the output file |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 # can be retrieved using the OUTPUT_VAR variable. |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 # Example: |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 # irccd_build_html( |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 # COMPONENT documentation |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 # OUTPUT dev/howto-create-a-plugin |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 # SOURCE myfile.md |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 # OUTPUT_VAR output |
607
bb9771fb5f44
Docs: rework documentation
David Demelier <markand@malikania.fr>
parents:
485
diff
changeset
|
51 # VARIABLES ... (Optional) variables to pass to pandoc |
275
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 # ) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 # add_custom_target(mytarget DEPENDS ${output}) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 # It's perfectly safe to call this macro multiple times with the same COMPONENT. |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 macro(irccd_build_html) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 set(oneValueArgs COMPONENT OUTPUT OUTPUT_VAR SOURCE) |
607
bb9771fb5f44
Docs: rework documentation
David Demelier <markand@malikania.fr>
parents:
485
diff
changeset
|
61 set(multiValueArgs VARIABLES) |
275
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 |
607
bb9771fb5f44
Docs: rework documentation
David Demelier <markand@malikania.fr>
parents:
485
diff
changeset
|
63 cmake_parse_arguments(HTML "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) |
275
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 if (NOT HTML_SOURCE) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 message(FATAL_ERROR "Missing SOURCE parameter") |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 endif () |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 # Example with SOURCES set to CMAKE_CURRENT_SOURCE_DIR/api/event/onMessage.md |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 # Extract the following variables: |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 # dirname: api/event |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 # basename: onMessage |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 # baseurl: ../../ |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 # |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 if (HTML_OUTPUT) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 if (IS_ABSOLUTE ${HTML_OUTPUT}) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 message(FATAL_ERROR "OUTPUT variable must not be absolute") |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 endif () |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 get_filename_component(dirname ${HTML_OUTPUT} DIRECTORY) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 get_filename_component(basename ${HTML_OUTPUT} NAME) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 else() |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 get_filename_component(dirname ${HTML_SOURCE} DIRECTORY) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 file(RELATIVE_PATH dirname ${CMAKE_CURRENT_SOURCE_DIR} ${dirname}) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 get_filename_component(basename ${HTML_SOURCE} NAME) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 endif () |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 # Remove extension from basename. |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 string(REGEX REPLACE "^(.*)\\.md$" "\\1" basename ${basename}) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 file( |
485
daf3aa8b2ddb
CMake: get rid of fakeroot mechanism, closes #674
David Demelier <markand@malikania.fr>
parents:
421
diff
changeset
|
95 RELATIVE_PATH |
daf3aa8b2ddb
CMake: get rid of fakeroot mechanism, closes #674
David Demelier <markand@malikania.fr>
parents:
421
diff
changeset
|
96 baseurl |
daf3aa8b2ddb
CMake: get rid of fakeroot mechanism, closes #674
David Demelier <markand@malikania.fr>
parents:
421
diff
changeset
|
97 ${CMAKE_CURRENT_BINARY_DIR}/${dirname} |
daf3aa8b2ddb
CMake: get rid of fakeroot mechanism, closes #674
David Demelier <markand@malikania.fr>
parents:
421
diff
changeset
|
98 ${CMAKE_CURRENT_BINARY_DIR}/ |
275
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 ) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 if (baseurl STREQUAL "") |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 set(baseurl "./") |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 endif () |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 # Replace CMake variables. |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 configure_file( |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 ${HTML_SOURCE} |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
607
diff
changeset
|
108 ${doc_BINARY_DIR}/${dirname}/${basename}.md |
275
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 @ONLY |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 ) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
607
diff
changeset
|
112 set(input ${doc_BINARY_DIR}/${dirname}/${basename}.md) |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
607
diff
changeset
|
113 set(output ${doc_BINARY_DIR}/html/${dirname}/${basename}.html) |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
607
diff
changeset
|
114 |
275
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 # Pandoc the file. |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 pandoc( |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
607
diff
changeset
|
117 OUTPUT ${output} |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
607
diff
changeset
|
118 SOURCES ${input} |
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
607
diff
changeset
|
119 DEPENDS ${HTML_SOURCE} ${input} |
607
bb9771fb5f44
Docs: rework documentation
David Demelier <markand@malikania.fr>
parents:
485
diff
changeset
|
120 TEMPLATE ${html_SOURCE_DIR}/template.html |
bb9771fb5f44
Docs: rework documentation
David Demelier <markand@malikania.fr>
parents:
485
diff
changeset
|
121 VARIABLE baseurl:${baseurl} ${HTML_VARIABLES} |
275
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 FROM markdown |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 TO html5 |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 STANDALONE TOC MAKE_DIRECTORY |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 ) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 # Install the documentation file as component if provided. |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 if (HTML_COMPONENT) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 install( |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
607
diff
changeset
|
130 FILES ${output} |
275
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 COMPONENT ${HTML_COMPONENT} |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 DESTINATION ${WITH_DOCDIR}/${dirname} |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 ) |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 endif () |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 if (HTML_OUTPUT_VAR) |
617
241583937af0
Docs: recreate correctly files
David Demelier <markand@malikania.fr>
parents:
607
diff
changeset
|
137 set(${HTML_OUTPUT_VAR} ${output}) |
275
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 endif () |
c143682678b9
CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 endmacro () |