annotate cmake/function/MalikaniaDefineExecutable.cmake @ 110:119bcc5a727e

Misc: replace copyrights, closes #655
author David Demelier <markand@malikania.fr>
date Tue, 05 Sep 2017 14:06:31 +0200
parents 858621081b95
children 8963c68f023c
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 # MalikaniaDefineExecutable.cmake -- CMake build system for malikania
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 #
110
119bcc5a727e Misc: replace copyrights, closes #655
David Demelier <markand@malikania.fr>
parents: 76
diff changeset
4 # Copyright (c) 2013-2017 David Demelier <markand@malikania.fr>
49
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_executable
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_executable(
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 list of sources
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 # FLAGS (Optional) List of flags
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 # INCLUDES (Optional) List of include directories
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 # LIBRARIES (Optional) List of libraries
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 # )
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 # Create an executable. Be sure to quote SOURCES, if not only the first file will be passed.
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 # If you need flags, just pass them without -D or /D, this is automatically done for you.
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
34
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 include(CMakeParseArguments)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
54
0edaba9986ba CMake: add vera++, closes 602
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
37 include(${CMAKE_CURRENT_LIST_DIR}/MalikaniaVeraCheck.cmake)
0edaba9986ba CMake: add vera++, closes 602
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
38
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 function(malikania_define_executable)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 set(singleArgs TARGET)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 set(multiArgs SOURCES FLAGS INCLUDES LIBRARIES)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
42
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 cmake_parse_arguments(EXE "" "${singleArgs}" "${multiArgs}" ${ARGN})
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
44
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 if (NOT EXE_TARGET)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 message(FATAL_ERROR "Missing TARGET parameter")
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 endif ()
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 if (NOT EXE_SOURCES)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 message(FATAL_ERROR "Missing SOURCES parameter")
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 endif ()
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 add_executable(${EXE_TARGET} ${EXE_SOURCES})
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 target_link_libraries(${EXE_TARGET} ${EXE_LIBRARIES})
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 target_include_directories(${EXE_TARGET} PRIVATE ${EXE_INCLUDES})
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 target_compile_definitions(${EXE_TARGET} PRIVATE ${EXE_FLAGS})
50
697bf85e8e19 CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
56 set_target_properties(
697bf85e8e19 CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
57 ${EXE_TARGET}
697bf85e8e19 CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
58 PROPERTIES
697bf85e8e19 CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
59 RUNTIME_OUTPUT_DIRECTORY ${WITH_FAKEROOT_DIR}/bin
697bf85e8e19 CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
60 )
697bf85e8e19 CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
61 foreach (c ${CMAKE_CONFIGURATION_TYPES})
697bf85e8e19 CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
62 string(TOUPPER ${c} c)
697bf85e8e19 CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
63 set_target_properties(
697bf85e8e19 CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
64 ${EXE_TARGET}
697bf85e8e19 CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
65 PROPERTIES
697bf85e8e19 CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
66 RUNTIME_OUTPUT_DIRECTORY_${c} ${WITH_FAKEROOT_DIR}/bin
697bf85e8e19 CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
67 )
697bf85e8e19 CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
68 endforeach()
54
0edaba9986ba CMake: add vera++, closes 602
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
69
68
0a1e3bb3c629 CMake: quote sources in malikania_vera_check to pass the whole list
David Demelier <markand@malikania.fr>
parents: 54
diff changeset
70 malikania_vera_check(${EXE_TARGET} "${EXE_SOURCES}")
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 endfunction()