Mercurial > irccd
annotate cmake/function/IrccdDefineLibrary.cmake @ 765:3f5e8ae58a84
Irccd: style (transport_client|transport_server)
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 13 Aug 2018 13:29:00 +0200 |
parents | a17de53db29b |
children | 8c44bbcbbab9 |
rev | line source |
---|---|
0 | 1 # |
2 # IrccdDefineLibrary.cmake -- CMake build system for irccd | |
3 # | |
628
27587ff92a64
Misc: update copyrights
David Demelier <markand@malikania.fr>
parents:
510
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_library | |
659 | 21 # -------------------- |
0 | 22 # |
23 # irccd_define_library( | |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
24 # TARGET target name |
710
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
25 # EXPORT (Optional) set to true to export library through irccd |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
26 # EXTERN (Optional) set to true to mark library as external |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
27 # HEADERS (Optional) headers to install |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
28 # HEADERS_DIRECTORY (Optional) subdirectory where to install headers |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
29 # SOURCES src1, src2, srcn |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
30 # FLAGS (Optional) C/C++ flags (without -D) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
31 # LIBRARIES (Optional) libraries to link |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
32 # LOCAL_INCLUDES (Optional) local includes for the target only |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
33 # PUBLIC_INCLUDES (Optional) includes to share with target dependencies |
0 | 34 # ) |
35 # | |
36 | |
510
6ec510722582
CMake: enable vera++ as code checking, closes #603
David Demelier <markand@malikania.fr>
parents:
509
diff
changeset
|
37 include(${CMAKE_CURRENT_LIST_DIR}/IrccdVeraCheck.cmake) |
6ec510722582
CMake: enable vera++ as code checking, closes #603
David Demelier <markand@malikania.fr>
parents:
509
diff
changeset
|
38 |
0 | 39 function(irccd_define_library) |
710
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
40 set(options EXPORT) |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
41 set(oneValueArgs HEADERS_DIRECTORY TARGET) |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
42 set(multiValueArgs HEADERS SOURCES FLAGS LIBRARIES LOCAL_INCLUDES PUBLIC_INCLUDES) |
0 | 43 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
44 cmake_parse_arguments(LIB "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) |
0 | 45 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
46 if (NOT LIB_TARGET) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
47 message(FATAL_ERROR "Please set TARGET") |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
48 endif () |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
49 if (NOT LIB_SOURCES) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
50 message(FATAL_ERROR "Please set SOURCES") |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
51 endif () |
0 | 52 |
710
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
53 add_library(${LIB_TARGET} ${LIB_SOURCES} ${LIB_HEADERS}) |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
54 target_include_directories(${LIB_TARGET} PRIVATE ${LIB_LOCAL_INCLUDES} PUBLIC ${LIB_PUBLIC_INCLUDES}) |
663
65a54b126c08
CMake: do not use TESTS_BINARY_DIR in libirccd-test
David Demelier <markand@malikania.fr>
parents:
659
diff
changeset
|
55 target_compile_definitions( |
65a54b126c08
CMake: do not use TESTS_BINARY_DIR in libirccd-test
David Demelier <markand@malikania.fr>
parents:
659
diff
changeset
|
56 ${LIB_TARGET} |
65a54b126c08
CMake: do not use TESTS_BINARY_DIR in libirccd-test
David Demelier <markand@malikania.fr>
parents:
659
diff
changeset
|
57 PRIVATE |
65a54b126c08
CMake: do not use TESTS_BINARY_DIR in libirccd-test
David Demelier <markand@malikania.fr>
parents:
659
diff
changeset
|
58 CMAKE_BINARY_DIR="${CMAKE_BINARY_DIR}" |
65a54b126c08
CMake: do not use TESTS_BINARY_DIR in libirccd-test
David Demelier <markand@malikania.fr>
parents:
659
diff
changeset
|
59 CMAKE_SOURCE_DIR="${CMAKE_SOURCE_DIR}" |
65a54b126c08
CMake: do not use TESTS_BINARY_DIR in libirccd-test
David Demelier <markand@malikania.fr>
parents:
659
diff
changeset
|
60 PUBLIC |
65a54b126c08
CMake: do not use TESTS_BINARY_DIR in libirccd-test
David Demelier <markand@malikania.fr>
parents:
659
diff
changeset
|
61 ${LIB_FLAGS} |
65a54b126c08
CMake: do not use TESTS_BINARY_DIR in libirccd-test
David Demelier <markand@malikania.fr>
parents:
659
diff
changeset
|
62 ) |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
63 target_link_libraries(${LIB_TARGET} ${LIB_LIBRARIES}) |
509
c9a6d9df083f
CMake: output all runtimes to bin, closes #715
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
64 set_target_properties( |
c9a6d9df083f
CMake: output all runtimes to bin, closes #715
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
65 ${LIB_TARGET} |
c9a6d9df083f
CMake: output all runtimes to bin, closes #715
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
66 PROPERTIES |
c9a6d9df083f
CMake: output all runtimes to bin, closes #715
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
67 PREFIX "" |
c9a6d9df083f
CMake: output all runtimes to bin, closes #715
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
68 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin |
c9a6d9df083f
CMake: output all runtimes to bin, closes #715
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
69 ) |
c9a6d9df083f
CMake: output all runtimes to bin, closes #715
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
70 foreach (c ${CMAKE_CONFIGURATION_TYPES}) |
c9a6d9df083f
CMake: output all runtimes to bin, closes #715
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
71 string(TOUPPER ${c} cu) |
c9a6d9df083f
CMake: output all runtimes to bin, closes #715
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
72 set_target_properties( |
c9a6d9df083f
CMake: output all runtimes to bin, closes #715
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
73 ${LIB_TARGET} |
c9a6d9df083f
CMake: output all runtimes to bin, closes #715
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
74 PROPERTIES |
c9a6d9df083f
CMake: output all runtimes to bin, closes #715
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
75 RUNTIME_OUTPUT_DIRECTORY_${cu} ${CMAKE_BINARY_DIR}/bin/${c} |
c9a6d9df083f
CMake: output all runtimes to bin, closes #715
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
76 ) |
c9a6d9df083f
CMake: output all runtimes to bin, closes #715
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
77 endforeach() |
510
6ec510722582
CMake: enable vera++ as code checking, closes #603
David Demelier <markand@malikania.fr>
parents:
509
diff
changeset
|
78 |
710
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
79 if (NOT ${LIB_EXTERN}) |
510
6ec510722582
CMake: enable vera++ as code checking, closes #603
David Demelier <markand@malikania.fr>
parents:
509
diff
changeset
|
80 irccd_vera_check(${LIB_TARGET} "${LIB_SOURCES}") |
6ec510722582
CMake: enable vera++ as code checking, closes #603
David Demelier <markand@malikania.fr>
parents:
509
diff
changeset
|
81 endif () |
710
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
82 |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
83 if (${LIB_EXPORT}) |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
84 install( |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
85 TARGETS ${LIB_TARGET} |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
86 EXPORT irccd-targets |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
87 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
88 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
89 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
90 ) |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
91 endif () |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
92 |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
93 if (LIB_HEADERS) |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
94 if (NOT LIB_HEADERS_DIRECTORY) |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
95 message(FATAL_ERROR "HEADERS_DIRECTORY must be defined") |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
96 endif () |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
97 |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
98 install( |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
99 FILES ${LIB_HEADERS} |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
100 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${LIB_HEADERS_DIRECTORY} |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
101 ) |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
102 endif () |
72
98ac3c79009f
Irccd: start making a library, #429
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
103 endfunction() |