Mercurial > irccd
annotate cmake/function/IrccdDefinePlugin.cmake @ 655:cda30ca5bb76
Irccd: style (controller) #782
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 27 Mar 2018 20:30:59 +0200 |
parents | 27587ff92a64 |
children | e9adad05580f |
rev | line source |
---|---|
0 | 1 # |
2 # IrccdDefinePlugin.cmake -- CMake build system for irccd | |
3 # | |
628
27587ff92a64
Misc: update copyrights
David Demelier <markand@malikania.fr>
parents:
513
diff
changeset
|
4 # Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> |
0 | 5 # |
6 # Permission to use, copy, modify, and/or distribute this software for any | |
7 # purpose with or without fee is hereby granted, provided that the above | |
8 # copyright notice and this permission notice appear in all copies. | |
9 # | |
10 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 # | |
18 | |
19 # | |
20 # irccd_define_plugin | |
21 # ------------------------------------------------------------------- | |
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 | 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 | 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 | 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. |
513
928a40398dec
CMake: split options and conditions, closes #716
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
113 if (PLG_DOCS AND HAVE_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() |