BuildPlugin.cmake 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. # BuildPlugin.cmake - Copyright (c) 2008 Tobias Doerffel
  2. #
  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> LINK <SHARED|MODULE>)
  5. MACRO(BUILD_PLUGIN PLUGIN_NAME)
  6. CMAKE_PARSE_ARGUMENTS(PLUGIN "" "" "MOCFILES;EMBEDDED_RESOURCES;UICFILES;LINK" ${ARGN})
  7. SET(PLUGIN_SOURCES ${PLUGIN_UNPARSED_ARGUMENTS})
  8. INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/src/gui)
  9. ADD_DEFINITIONS(-DPLUGIN_NAME=${PLUGIN_NAME})
  10. LIST(LENGTH PLUGIN_EMBEDDED_RESOURCES ER_LEN)
  11. IF(ER_LEN)
  12. # Expand and sort arguments to avoid locale dependent sorting in
  13. # shell
  14. SET(NEW_ARGS)
  15. FOREACH(ARG ${PLUGIN_EMBEDDED_RESOURCES})
  16. FILE(GLOB EXPANDED "${ARG}")
  17. LIST(SORT EXPANDED)
  18. FOREACH(ITEM ${EXPANDED})
  19. LIST(APPEND NEW_ARGS ${ITEM})
  20. ENDFOREACH()
  21. ENDFOREACH()
  22. SET(PLUGIN_EMBEDDED_RESOURCES ${NEW_ARGS})
  23. SET(ER_H ${CMAKE_CURRENT_BINARY_DIR}/embedded_resources.h)
  24. ADD_CUSTOM_COMMAND(OUTPUT ${ER_H}
  25. COMMAND ${BIN2RES}
  26. ARGS ${PLUGIN_EMBEDDED_RESOURCES} > ${ER_H}
  27. DEPENDS bin2res)
  28. ENDIF(ER_LEN)
  29. IF(QT5)
  30. QT5_WRAP_CPP(plugin_MOC_out ${PLUGIN_MOCFILES})
  31. QT5_WRAP_UI(plugin_UIC_out ${PLUGIN_UICFILES})
  32. ELSE()
  33. QT4_WRAP_CPP(plugin_MOC_out ${PLUGIN_MOCFILES})
  34. QT4_WRAP_UI(plugin_UIC_out ${PLUGIN_UICFILES})
  35. ENDIF()
  36. FOREACH(f ${PLUGIN_SOURCES})
  37. ADD_FILE_DEPENDENCIES(${f} ${ER_H} ${plugin_UIC_out})
  38. ENDFOREACH(f)
  39. IF(LMMS_BUILD_APPLE)
  40. LINK_DIRECTORIES(${CMAKE_BINARY_DIR})
  41. LINK_LIBRARIES(${QT_LIBRARIES})
  42. ENDIF(LMMS_BUILD_APPLE)
  43. IF(LMMS_BUILD_WIN32)
  44. LINK_DIRECTORIES(${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR})
  45. LINK_LIBRARIES(${QT_LIBRARIES})
  46. ENDIF(LMMS_BUILD_WIN32)
  47. IF(LMMS_BUILD_MSYS AND CMAKE_BUILD_TYPE STREQUAL "Debug")
  48. # Override Qt debug libraries with release versions
  49. SET(QT_LIBRARIES "${QT_OVERRIDE_LIBRARIES}")
  50. ENDIF()
  51. IF ("${PLUGIN_LINK}" STREQUAL "SHARED")
  52. ADD_LIBRARY(${PLUGIN_NAME} SHARED ${PLUGIN_SOURCES} ${plugin_MOC_out})
  53. ELSE ()
  54. ADD_LIBRARY(${PLUGIN_NAME} MODULE ${PLUGIN_SOURCES} ${plugin_MOC_out})
  55. ENDIF ()
  56. IF(QT5)
  57. TARGET_LINK_LIBRARIES(${PLUGIN_NAME} Qt5::Widgets Qt5::Xml)
  58. ENDIF()
  59. IF(LMMS_BUILD_WIN32)
  60. TARGET_LINK_LIBRARIES(${PLUGIN_NAME} lmms)
  61. ENDIF(LMMS_BUILD_WIN32)
  62. INSTALL(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION "${PLUGIN_DIR}")
  63. IF(LMMS_BUILD_APPLE)
  64. SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES LINK_FLAGS "-bundle_loader ${CMAKE_BINARY_DIR}/lmms")
  65. ADD_DEPENDENCIES(${PLUGIN_NAME} lmms)
  66. ENDIF(LMMS_BUILD_APPLE)
  67. IF(LMMS_BUILD_WIN32)
  68. SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES PREFIX "")
  69. ADD_CUSTOM_COMMAND(TARGET ${PLUGIN_NAME} POST_BUILD COMMAND ${STRIP} $<TARGET_FILE:${PLUGIN_NAME}>)
  70. ENDIF(LMMS_BUILD_WIN32)
  71. SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${ER_H} ${plugin_MOC_out}")
  72. ENDMACRO(BUILD_PLUGIN)