annotate cmake/function/IrccdDefinePlugin.cmake @ 486:0b156b82b8c1

Irccd: rework of paths, closes #611
author David Demelier <markand@malikania.fr>
date Thu, 20 Jul 2017 15:12:41 +0200
parents daf3aa8b2ddb
children 928a40398dec
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 # IrccdDefinePlugin.cmake -- CMake build system for irccd
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 #
394
c6fbb6e0e06d Happy new year!
David Demelier <markand@malikania.fr>
parents: 275
diff changeset
4 # Copyright (c) 2013-2017 David Demelier <markand@malikania.fr>
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 # Permission to use, copy, modify, and/or distribute this software for any
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 # purpose with or without fee is hereby granted, provided that the above
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 # copyright notice and this permission notice appear in all copies.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 # irccd_define_plugin
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 # -------------------------------------------------------------------
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #
257
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
23 # irccd_define_plugin(
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
24 # NAME canonical plugin name
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
25 # TYPE JS or NATIVE
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
26 # DOCS documentation files in markdown
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
27 #
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
28 # Options for TYPE JS:
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
29 #
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
30 # SCRIPT absolute path to the Javascript file (ending with .js)
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
31 #
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
32 # Options for TYPE NATIVE:
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
33 #
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
34 # SOURCES c++ source files
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 #
257
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
36 # Create a Javascript or Native plugin.
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
37 #
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
38 # The NAME parameter identifies the plugin. The same name will be used for the
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
39 # plugin filename.
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
40 #
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
41 # Both Javascript and native plugins are supported specified by the TYPE
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
42 # parameter to JS or NATIVE respectively. For Javascript plugin, a unique file
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
43 # must be given as SCRIPT parameter. For native plugins, any source files can
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
44 # be given as SOURCES parameter.
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
45 #
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
46 # Additional documentation can be built in markdown and installed along the
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
47 # plugin using DOCS parameter.
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
48 #
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
49 # A CMake option is also created in the form OPTION_<PLG> where PLG is the
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
50 # uppercase NAME value.
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 #
257
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
52
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
53 function(_irccd_define_javascript_plugin)
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
54 if (NOT PLG_SCRIPT)
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
55 message(FATAL_ERROR "Missing SCRIPT parameter")
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
56 endif ()
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
57
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
58 get_filename_component(name ${PLG_SCRIPT} NAME)
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
59
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
60 configure_file(
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
61 ${PLG_SCRIPT}
485
daf3aa8b2ddb CMake: get rid of fakeroot mechanism, closes #674
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
62 ${CMAKE_CURRENT_BINARY_DIR}/${name}
257
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
63 )
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
64
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
65 install(
485
daf3aa8b2ddb CMake: get rid of fakeroot mechanism, closes #674
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
66 FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}
257
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
67 COMPONENT ${PLG_NAME}
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
68 DESTINATION ${WITH_PLUGINDIR}
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
69 )
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
70
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
71 add_custom_target(
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
72 plugin-${PLG_NAME}
259
0fd0290d61b4 CMake: add ALL to add_custom_target for plugins
David Demelier <markand@malikania.fr>
parents: 257
diff changeset
73 ALL
257
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
74 DEPENDS ${PLG_OUTPUT_DOC}
274
750157368a42 CMake: add documentation to plugin targets
David Demelier <markand@malikania.fr>
parents: 263
diff changeset
75 SOURCES ${PLG_SCRIPT} ${PLG_DOCS}
257
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
76 )
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
77 endfunction()
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
78
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
79 function(_irccd_define_native_plugin)
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
80 if (NOT PLG_SOURCES)
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
81 message(FATAL_ERROR "Missing SOURCES parameter")
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
82 endif ()
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
83
274
750157368a42 CMake: add documentation to plugin targets
David Demelier <markand@malikania.fr>
parents: 263
diff changeset
84 add_library(plugin-${PLG_NAME} MODULE ${PLG_SOURCES} ${PLG_OUTPUT_DOC} ${PLG_DOCS})
257
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
85 target_link_libraries(plugin-${PLG_NAME} libirccd)
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
86 install(
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
87 TARGETS plugin-${PLG_NAME}
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
88 COMPONENT ${PLG_NAME}
486
0b156b82b8c1 Irccd: rework of paths, closes #611
David Demelier <markand@malikania.fr>
parents: 485
diff changeset
89 LIBRARY DESTINATION ${WITH_PLUGINDIR}
257
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
90 )
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
91 endfunction()
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
92
257
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
93 function(irccd_define_plugin)
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
94 set(options "")
275
c143682678b9 CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents: 274
diff changeset
95 set(oneValueArgs NAME DOCS TYPE SCRIPT)
c143682678b9 CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents: 274
diff changeset
96 set(multiValueArgs SOURCES)
257
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
97
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
98 cmake_parse_arguments(PLG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
99
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
100 if (NOT PLG_NAME)
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
101 message(FATAL_ERROR "Missing NAME parameter")
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
102 endif ()
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
103
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
104 string(TOUPPER ${PLG_NAME} PLG_UPPER_NAME)
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
105 option(WITH_PLUGIN_${PLG_UPPER_NAME} "Enable ${PLG_NAME} plugin" On)
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
106
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
107 if (NOT WITH_PLUGIN_${PLG_UPPER_NAME})
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
108 setg(WITH_PLUGIN_${PLG_UPPER_NAME}_MSG "No (disabled by user)")
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
109 else ()
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
110 setg(WITH_PLUGIN_${PLG_UPPER_NAME}_MSG "Yes")
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
111
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
112 # Optional documentation.
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
113 if (PLG_DOCS AND WITH_HTML)
275
c143682678b9 CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents: 274
diff changeset
114 irccd_build_html(
c143682678b9 CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents: 274
diff changeset
115 SOURCE ${PLG_DOCS}
c143682678b9 CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents: 274
diff changeset
116 OUTPUT plugin/${PLG_NAME}
257
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
117 COMPONENT ${PLG_NAME}
275
c143682678b9 CMake: improve documentation related to plugins
David Demelier <markand@malikania.fr>
parents: 274
diff changeset
118 OUTPUT_VAR PLG_OUTPUT_DOC
257
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
119 )
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
120 endif ()
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
121
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
122 if (PLG_TYPE MATCHES "JS")
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
123 _irccd_define_javascript_plugin()
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
124 elseif (PLG_TYPE MATCHES "NATIVE")
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
125 _irccd_define_native_plugin()
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
126 else ()
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
127 message(FATAL_ERROR "Invalid TYPE given, must be JS or NATIVE")
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
128 endif ()
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
129
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
130 # Component grouping in installer.
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
131 setg(CPACK_COMPONENT_${PLG_UPPER_NAME}_GROUP "Plugins")
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
132 setg(CPACK_COMPONENT_${PLG_UPPER_NAME}_DESCRIPTION "Install ${PLG_NAME} plugin.")
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
133 endif ()
60b94daf4d24 CMake: update irccd_define_plugin, closes #534
David Demelier <markand@malikania.fr>
parents: 207
diff changeset
134 endfunction()