1
MACRO(PARSE_ARGUMENTS prefix arg_names option_names)
3
FOREACH(arg_name ${arg_names})
4
SET(${prefix}_${arg_name})
6
FOREACH(option ${option_names})
7
SET(${prefix}_${option} FALSE)
10
SET(current_arg_name DEFAULT_ARGS)
13
SET(larg_names ${arg_names})
14
LIST(FIND larg_names "${arg}" is_arg_name)
15
IF (is_arg_name GREATER -1)
16
SET(${prefix}_${current_arg_name} ${current_arg_list})
17
SET(current_arg_name ${arg})
19
ELSE (is_arg_name GREATER -1)
20
SET(loption_names ${option_names})
21
LIST(FIND loption_names "${arg}" is_option)
22
IF (is_option GREATER -1)
23
SET(${prefix}_${arg} TRUE)
24
ELSE (is_option GREATER -1)
25
SET(current_arg_list ${current_arg_list} ${arg})
26
ENDIF (is_option GREATER -1)
27
ENDIF (is_arg_name GREATER -1)
29
SET(${prefix}_${current_arg_name} ${current_arg_list})
30
ENDMACRO(PARSE_ARGUMENTS)
41
macro(add_tomahawk_plugin)
42
parse_arguments(PLUGIN
43
"SOURCES;UI;LINK_LIBRARIES;TYPE;EXPORT_MACRO;COMPILE_DEFINITIONS"
47
car(PLUGIN_NAME ${PLUGIN_DEFAULT_ARGS})
49
# message("*** Arguments for ${PLUGIN_NAME}")
50
# message("Sources: ${PLUGIN_SOURCES}")
51
# message("Link libraries: ${PLUGIN_LINK_LIBRARIES}")
52
# message("UI: ${PLUGIN_UI}")
53
# message("TYPE: ${PLUGIN_TYPE}")
54
# message("EXPORT_MACRO: ${PLUGIN_EXPORT_MACRO}")
56
# create target name once for convenience
57
set(target "tomahawk_${PLUGIN_TYPE}_${PLUGIN_NAME}")
60
include_directories(${CMAKE_CURRENT_BINARY_DIR})
62
qt4_wrap_ui(PLUGIN_UI_SOURCES ${PLUGIN_UI})
63
list(APPEND PLUGIN_SOURCES ${PLUGIN_UI_SOURCES})
66
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/resources.qrc")
67
qt4_add_resources(PLUGIN_RC_SOURCES "resources.qrc")
68
list(APPEND PLUGIN_SOURCES ${PLUGIN_RC_SOURCES})
69
unset(PLUGIN_RC_SOURCES)
73
add_library(${target} MODULE ${PLUGIN_SOURCES})
75
# definitions - can this be moved into set_target_properties below?
76
add_definitions(${QT_DEFINITIONS})
77
set_target_properties(${target} PROPERTIES AUTOMOC TRUE COMPILE_DEFINITIONS ${PLUGIN_EXPORT_MACRO})
78
if(PLUGIN_COMPILE_DEFINITIONS)
79
# Dear CMake, i hate you! Sincerely, domme
80
# At least in CMake 2.8.8, you CANNOT set more than one COMPILE_DEFINITIONS value
81
# only takes the first one if called multiple times or bails out with wrong number of arguments
82
# when passing in a list, thus i redefine the export macro here in hope it won't mess up other targets
83
add_definitions( "-D${PLUGIN_EXPORT_MACRO}" )
85
set_target_properties(${target} PROPERTIES COMPILE_DEFINITIONS ${PLUGIN_COMPILE_DEFINITIONS})
89
target_link_libraries(${target} tomahawklib)
90
if(PLUGIN_LINK_LIBRARIES)
91
target_link_libraries(${target} ${PLUGIN_LINK_LIBRARIES})
94
# make installation optional, maybe useful for dummy plugins one day
95
if(NOT PLUGIN_NO_INSTALL)
96
include(GNUInstallDirs)
97
install(TARGETS ${target} DESTINATION ${CMAKE_INSTALL_LIBDIR})