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
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 # IrccdDefineLibrary.cmake -- CMake build system for irccd
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
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_library
659
e9adad05580f CMake: style #782
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
21 # --------------------
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 # )
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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()