CMakeLists: make fftw3 a requirement and not optional anymore
[lmms.git] / cmake / modules / BuildPlugin.cmake
blob2e21eb0adc74d7d46e3dcaa7a6e678364c1d1c30
1 # BuildPlugin.cmake - Copyright (c) 2008 Tobias Doerffel
3 # description: build LMMS-plugin
4 # usage: BUILD_PLUGIN(<PLUGIN_NAME> <PLUGIN_SOURCES> MOCFILES <HEADERS_FOR_MOC> EMBEDDED_RESOURCES <LIST_OF_FILES_TO_EMBED> UICFILES <UI_FILES_TO_COMPILE> )
6 MACRO(CAR var)
7   SET(${var} ${ARGV1})
8 ENDMACRO(CAR)
10 MACRO(CDR var junk)
11   SET(${var} ${ARGN})
12 ENDMACRO(CDR)
14 MACRO(LIST_CONTAINS var value)
15         SET(${var})
16                 FOREACH (value2 ${ARGN})
17                         IF (${value} STREQUAL ${value2})
18                                 SET(${var} TRUE)
19                         ENDIF (${value} STREQUAL ${value2})
20         ENDFOREACH (value2)
21 ENDMACRO(LIST_CONTAINS)
23 MACRO(PARSE_ARGUMENTS prefix arg_names option_names)
24   SET(DEFAULT_ARGS)
25   FOREACH(arg_name ${arg_names})
26     SET(${prefix}_${arg_name})
27   ENDFOREACH(arg_name)
28   FOREACH(option ${option_names})
29     SET(${prefix}_${option} FALSE)
30   ENDFOREACH(option)
32   SET(current_arg_name DEFAULT_ARGS)
33   SET(current_arg_list)
34   FOREACH(arg ${ARGN})
35     LIST_CONTAINS(is_arg_name ${arg} ${arg_names})
36     IF (is_arg_name)
37       SET(${prefix}_${current_arg_name} ${current_arg_list})
38       SET(current_arg_name ${arg})
39       SET(current_arg_list)
40     ELSE (is_arg_name)
41       LIST_CONTAINS(is_option ${arg} ${option_names})
42       IF (is_option)
43         SET(${prefix}_${arg} TRUE)
44       ELSE (is_option)
45         SET(current_arg_list ${current_arg_list} ${arg})
46       ENDIF (is_option)
47     ENDIF (is_arg_name)
48   ENDFOREACH(arg)
49   SET(${prefix}_${current_arg_name} ${current_arg_list})
50 ENDMACRO(PARSE_ARGUMENTS)
52 MACRO(BUILD_PLUGIN)
53         PARSE_ARGUMENTS(PLUGIN "MOCFILES;EMBEDDED_RESOURCES;UICFILES" "" ${ARGN} )
54         CAR(PLUGIN_NAME ${PLUGIN_DEFAULT_ARGS})
55         CDR(PLUGIN_SOURCES ${PLUGIN_DEFAULT_ARGS})
57         INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/src/gui ${CMAKE_INSTALL_PREFIX}/include)
59         ADD_DEFINITIONS(-DPLUGIN_NAME=${PLUGIN_NAME})
61         LIST(LENGTH PLUGIN_EMBEDDED_RESOURCES ER_LEN)
62         IF(ER_LEN)
63                 SET(ER_H ${CMAKE_CURRENT_BINARY_DIR}/embedded_resources.h)
64                 ADD_CUSTOM_COMMAND(OUTPUT ${ER_H}
65                         COMMAND ${BIN2RES}
66                         ARGS ${PLUGIN_EMBEDDED_RESOURCES} > ${ER_H}
67                         DEPENDS ${BIN2RES})
68         ENDIF(ER_LEN)
70         QT4_WRAP_CPP(plugin_MOC_out ${PLUGIN_MOCFILES})
71         QT4_WRAP_UI(plugin_UIC_out ${PLUGIN_UICFILES})
72         FOREACH(f ${PLUGIN_SOURCES})
73                 ADD_FILE_DEPENDENCIES(${f} ${ER_H} ${plugin_MOC_out} ${plugin_UIC_out})
74         ENDFOREACH(f)
76         IF(LMMS_BUILD_APPLE)
77                 LINK_DIRECTORIES(${CMAKE_BINARY_DIR})
78                 LINK_LIBRARIES(${QT_LIBRARIES})
79         ENDIF(LMMS_BUILD_APPLE)
80         IF(LMMS_BUILD_WIN32)
81                 LINK_DIRECTORIES(${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR})
82                 LINK_LIBRARIES(-llmms ${QT_LIBRARIES})
83         ENDIF(LMMS_BUILD_WIN32)
85         ADD_LIBRARY(${PLUGIN_NAME} MODULE ${PLUGIN_SOURCES})
86         INSTALL(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION "${PLUGIN_DIR}")
88         IF(LMMS_BUILD_APPLE)
89                 SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES LINK_FLAGS "-bundle_loader ${CMAKE_BINARY_DIR}/lmms")
90         ENDIF(LMMS_BUILD_APPLE)
91         IF(LMMS_BUILD_WIN32)
92                 SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES PREFIX "")
93                 ADD_CUSTOM_COMMAND(TARGET ${PLUGIN_NAME} POST_BUILD COMMAND ${STRIP} ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_NAME}.dll)
94         ENDIF(LMMS_BUILD_WIN32)
96         SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${ER_H} ${plugin_MOC_out}")
97 ENDMACRO(BUILD_PLUGIN)