annotate cmake/FindPandoc.cmake @ 676:a84f1baeb9e7

c/extern: provided by libbsd
author David Demelier <markand@malikania.fr>
date Thu, 24 Mar 2022 07:32:50 +0100
parents 5bd9424a523a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 # FindPandoc
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 # ----------
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 # Find Pandoc executable, this modules defines:
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 # Pandoc_EXECUTABLE, where to find pandoc's executable
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 # Pandoc_FOUND, if it is found
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 # Pandoc_VERSION, the version
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 # This module also defines the following macros:
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 # pandoc(
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
13 # SOURCES file1 [file2 ...]
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
14 # OUTPUT output
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
15 # [FROM format]
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
16 # [TO format]
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
17 # [TARGET target]
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
18 # [DEPENDS dependency ...]
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
19 # [ALL]
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
20 # [TOC]
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
21 # [STANDALONE]
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
22 # [MAKE_DIRECTORY]
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
23 # [TEMPLATE file]
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
24 # [FILTER filter]
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
25 # [HEADER header ...]
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
26 # [FOOTER footer ...]
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
27 # [BODY body ...]
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
28 # [VARIABLE var ...]
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
29 # [METADATA meta ...]
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
30 # [ARGS argument ...]
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
31 # [WORKING_DIRECTORY directory]
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 # )
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 # The sources files are listed in the parameter SOURCES, all files are passed
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 # in the same order they are passed to that variable.
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 # The OUTPUT file is set with OUTPUT. It is generated only if one of the file
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 # has changed.
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 # The FROM (-f) and TO (-t) arguments specify respectively the source and
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 # destinations formats.
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 # If the parameter TARGET is set, then a target named `target` will be added
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 # with the OUTPUT file as the dependency but not listed as sources files.
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 # But the SOURCES files will be added as the target sources in the IDE.
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 # Optional dependencies can be added to the output command (not the target) with
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 # the DEPENDS parameter.
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 # If ALL is set and TARGET is also set, the target will be added to the ALL_BUILD.
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 # If TOC (--toc) is specified, a table of content will be automatically created.
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 # If STANDALONE (-s) is set, the compilation will assume that it is standalone
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 # and adds the necessary of the output format.
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 # Optional MAKE_DIRECTORY can be set to create the output directory before
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 # pandoc processes the file (recommended).
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 # The TEMPLATE parameter can be used to specify the formate template file.
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 # You can set a filter with the parameter FILTER. The filter will be added to
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 # the output dependencies so you can safely use CMake's targets.
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 # The HEADER (-H), FOOTER (-A) and BODY (-B) are copied verbatim before, just
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 # after and after the body respectively. They can be set more than once.
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 # You can pass variables (-V) and metadata (-M) to the parameters VARIABLE
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 # and METADATA, be sure to pass the same syntax as pandoc. (e.g VARIABLE foo=1)
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 # ARGS is an optional list of additional arguments to pass to pandoc.
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 # The parameter WORKING_DIRECTORY can be set to change the directory when pandoc
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 # is invoked.
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 #
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
76
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 find_program(
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
78 Pandoc_EXECUTABLE
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
79 NAMES pandoc
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
80 DOC "Pandoc executable"
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 )
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
82
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 include(FindPackageHandleStandardArgs)
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 include(CMakeParseArguments)
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
85
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 # Extract the version
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 if (Pandoc_EXECUTABLE)
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
88 execute_process(
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
89 COMMAND ${Pandoc_EXECUTABLE} --version
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
90 OUTPUT_VARIABLE _pandoc_version_tmp
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
91 )
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
92
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
93 if (_pandoc_version_tmp MATCHES "^pandoc[^ ]* ([0-9]+\\.[0-9]+\\.[0-9]+)")
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
94 set(Pandoc_VERSION "${CMAKE_MATCH_1}")
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
95 endif ()
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 endif ()
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
97
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 find_package_handle_standard_args(
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
99 Pandoc
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
100 FOUND_VAR Pandoc_FOUND
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
101 VERSION_VAR Pandoc_VERSION
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
102 REQUIRED_VARS Pandoc_EXECUTABLE
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 )
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
104
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 if (Pandoc_FOUND)
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
106 function(pandoc)
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
107 set(options MAKE_DIRECTORY STANDALONE TOC)
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
108 set(oneValueArgs FILTER FROM TARGET TEMPLATE TO OUTPUT WORKING_DIRECTORY)
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
109 set(multiValueArgs ARGS FOOTER HEADER METADATA SOURCES VARIABLE)
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
110
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
111 #
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
112 # The following variables will be set in that scope:
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
113 # _pandoc_arguments - List of all arguments that will passed to pandoc invocation.
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
114 # _pandoc_depends - List of all dependencies attached to the add_custom_command.
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
115 # _pandoc_mkdir - The mkdir command if MAKE_DIRECTORY is set
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
116 # _pandoc_output_base - The base output directory
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
117 #
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
118 cmake_parse_arguments(PANDOC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
119
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
120 #
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
121 # Output and sources are mandatory
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
122 #
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
123 if (NOT PANDOC_OUTPUT)
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
124 message(FATAL_ERROR "Please define OUTPUT")
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
125 elseif (NOT PANDOC_SOURCES)
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
126 message(FATAL_ERROR "Please defines SOURCES")
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
127 endif ()
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
128
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
129 #
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
130 # Handle the filter with care.
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
131 #
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
132 # 1. If it is a target, depend on it and use a generator
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
133 # expression to get its full path on the disk.
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
134 # 2. If it is not a target, just use the user provided path.
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
135 #
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
136 if (PANDOC_FILTER)
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
137 # If it is a target, add a dependency so that it is built
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
138 if (TARGET ${PANDOC_FILTER})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
139 list(APPEND _pandoc_arguments --filter "$<TARGET_FILE:${PANDOC_FILTER}>")
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
140 list(APPEND _pandoc_depends ${PANDOC_FILTER})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
141 else ()
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
142 list(APPEND _pandoc_arguments --filter ${PANDOC_FILTER})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
143 endif ()
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
144 endif ()
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
145
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
146 if (PANDOC_TOC)
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
147 list(APPEND _pandoc_arguments --toc)
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
148 endif ()
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
149 if (PANDOC_STANDALONE)
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
150 list(APPEND _pandoc_arguments -s)
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
151 endif ()
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
152 if (PANDOC_FROM)
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
153 list(APPEND _pandoc_arguments -f ${PANDOC_FROM})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
154 endif ()
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
155 if (PANDOC_TO)
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
156 list(APPEND _pandoc_arguments -t ${PANDOC_TO})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
157 endif ()
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
158 if (PANDOC_TEMPLATE)
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
159 list(APPEND _pandoc_arguments --template ${PANDOC_TEMPLATE})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
160 list(APPEND _pandoc_depends ${PANDOC_TEMPLATE})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
161 endif ()
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
162
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
163 # Header, footers and body
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
164 foreach (h ${PANDOC_HEADER})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
165 list(APPEND _pandoc_arguments -H ${h})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
166 list(APPEND _pandoc_depends ${h})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
167 endforeach ()
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
168 foreach (b ${PANDOC_BODY})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
169 list(APPEND _pandoc_arguments -B ${b})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
170 list(APPEND _pandoc_depends ${b})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
171 endforeach ()
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
172 foreach (f ${PANDOC_FOOTER})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
173 list(APPEND _pandoc_arguments -A ${f})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
174 list(APPEND _pandoc_depends ${f})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
175 endforeach ()
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
176
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
177 # Variables and metadata
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
178 foreach (var ${PANDOC_VARIABLE})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
179 list(APPEND _pandoc_arguments -V ${var})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
180 endforeach ()
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
181 foreach (meta ${PANDOC_METADATA})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
182 list(APPEND _pandoc_arguments -M ${meta})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
183 endforeach ()
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
184
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
185 # Optional list of arguments
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
186 foreach (arg ${PANDOC_ARGS})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
187 list(APPEND _pandoc_arguments ${arg})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
188 endforeach ()
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
189
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
190 # Output and sources
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
191 list(APPEND _pandoc_arguments -o ${PANDOC_OUTPUT})
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
192
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
193 #
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
194 # The following variables are set within the loop:
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
195 #
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
196 # _pandoc_input The absolute path to the input file.
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
197 # _pandoc_output_base The base output directory.
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
198 #
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
199 foreach (s ${PANDOC_SOURCES})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
200 get_filename_component(_pandoc_input ${s} ABSOLUTE)
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
201 get_filename_component(_pandoc_output_base ${PANDOC_OUTPUT} DIRECTORY)
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
202 list(APPEND _pandoc_depends ${_pandoc_input})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
203 list(APPEND _pandoc_arguments ${_pandoc_input})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
204 endforeach ()
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
205
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
206 # Create the output directory if requested
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
207 if (PANDOC_MAKE_DIRECTORY)
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
208 set(_pandoc_mkdir ${CMAKE_COMMAND} -E make_directory ${_pandoc_output_base})
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
209 endif ()
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
210
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
211 add_custom_command(
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
212 OUTPUT ${PANDOC_OUTPUT}
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
213 COMMAND ${_pandoc_mkdir}
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
214 COMMAND ${Pandoc_EXECUTABLE} ${_pandoc_arguments}
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
215 DEPENDS ${_pandoc_depends} ${PANDOC_DEPENDS}
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
216 WORKING_DIRECTORY ${PANDOC_WORKING_DIRECTORY}
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
217 VERBATIM
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
218 )
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
219
648
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
220 if (PANDOC_TARGET)
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
221 add_custom_target(
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
222 ${PANDOC_TARGET} ${PANDOC_ALL}
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
223 SOURCES ${_pandoc_depends}
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
224 DEPENDS ${PANDOC_OUTPUT}
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
225 WORKING_DIRECTORY ${PANDOC_WORKING_DIRECTORY}
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
226 )
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
227 endif ()
5bd9424a523a misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents: 624
diff changeset
228 endfunction()
624
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 endif ()
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
230
01e01777ff50 CMake: initial import of CMake modules, closes #720
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 mark_as_advanced(Pandoc_EXECUTABLE)