annotate cmake/function/MalikaniaDefineLibrary.cmake @ 54:0edaba9986ba

CMake: add vera++, closes 602
author David Demelier <markand@malikania.fr>
date Fri, 16 Dec 2016 13:59:55 +0100
parents 2804ae55c70f
children c6d410648367
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 # MalikaniaDefineLibrary.cmake -- CMake build system for malikania
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 # Copyright (c) 2013-2016 Malikania Authors
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 # Permission to use, copy, modify, and/or distribute this software for any
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 # purpose with or without fee is hereby granted, provided that the above
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 # copyright notice and this permission notice appear in all copies.
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 # malikania_define_library
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 # ------------------------
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 # malikania_define_library(
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 # TARGET The target name
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 # SOURCES The sources
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 # ASSETS (Optional) Additional assets files
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 # FLAGS (Optional) List of flags
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 # PRIVATE_INCLUDES (Optional) List of includes only for building the library
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 # PUBLIC_INCLUDES (Optional) List of public includes to share with the library users
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 # LIBRARIES (Optional) List of libraries to link against
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 # )
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 # Create a shared library. Follow the same specification as malikania_define_executable.
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 # However, additional PRIVATE_INCLUDES and PUBLIC_INCLUDES are available.
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 include(CMakeParseArguments)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 include(${CMAKE_CURRENT_LIST_DIR}/MalikaniaBuildAssets.cmake)
54
0edaba9986ba CMake: add vera++, closes 602
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
40 include(${CMAKE_CURRENT_LIST_DIR}/MalikaniaVeraCheck.cmake)
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 function(malikania_define_library)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 set(singleArgs TARGET)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 set(multiArgs ASSETS SOURCES FLAGS PRIVATE_INCLUDES PUBLIC_INCLUDES LIBRARIES)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 set(mandatory TARGET SOURCES)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
46
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 cmake_parse_arguments(LIB "" "${singleArgs}" "${multiArgs}" ${ARGN})
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
48
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 if (NOT LIB_TARGET)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 message(FATAL_ERROR "Missing TARGET parameter")
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 endif ()
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 if (NOT LIB_SOURCES)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 message(FATAL_ERROR "Missing SOURCES parameter")
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 endif ()
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
55
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 # Enable assets for libraries.
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 malikania_build_assets("${LIB_ASSETS}" assets)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
58
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 # Create the shared library.
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 add_library(${LIB_TARGET} SHARED ${LIB_SOURCES} ${assets})
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 set_target_properties(${LIB_TARGET} PROPERTIES PREFIX "")
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 target_link_libraries(${LIB_TARGET} ${LIB_LIBRARIES})
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 target_include_directories(
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 ${LIB_TARGET}
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 PRIVATE
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 ${CMAKE_CURRENT_BINARY_DIR}/assets
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 ${LIB_PRIVATE_INCLUDES}
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 PUBLIC
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 ${CMAKE_CURRENT_SOURCE_DIR}
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 ${LIB_PUBLIC_INCLUDES}
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 )
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 target_compile_definitions(${LIB_TARGET} PRIVATE ${LIB_FLAGS})
54
0edaba9986ba CMake: add vera++, closes 602
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
73
0edaba9986ba CMake: add vera++, closes 602
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
74 malikania_vera_check(${LIB_TARGET} ${LIB_SOURCES})
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 endfunction()