CalamaresAddPlugin.cmake 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. include( CMakeParseArguments )
  2. include( ${CALAMARES_CMAKE_DIR}/CalamaresAddLibrary.cmake )
  3. function( calamares_add_plugin )
  4. # parse arguments ( name needs to be saved before passing ARGN into the macro )
  5. set( NAME ${ARGV0} )
  6. set( options NO_INSTALL SHARED_LIB )
  7. set( oneValueArgs NAME TYPE EXPORT_MACRO RESOURCES )
  8. set( multiValueArgs SOURCES UI LINK_LIBRARIES LINK_PRIVATE_LIBRARIES COMPILE_DEFINITIONS )
  9. cmake_parse_arguments( PLUGIN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
  10. set( PLUGIN_NAME ${NAME} )
  11. set( PLUGIN_DESTINATION ${CMAKE_INSTALL_LIBDIR}/calamares/modules/${PLUGIN_NAME} )
  12. set( PLUGIN_DESC_FILE module.desc )
  13. file( GLOB PLUGIN_CONFIG_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.conf" )
  14. set( PLUGIN_DATA_DESTINATION share/calamares/modules )
  15. set( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" )
  16. set( CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" )
  17. set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" )
  18. include( CMakeColors )
  19. message( "-- ${BoldYellow}Found ${CALAMARES_APPLICATION_NAME} module: ${BoldRed}${PLUGIN_NAME}${ColorReset}" )
  20. if( NOT CMAKE_BUILD_TYPE STREQUAL "Release" )
  21. message( " ${Green}TYPE:${ColorReset} ${PLUGIN_TYPE}" )
  22. message( " ${Green}LINK_LIBRARIES:${ColorReset} ${PLUGIN_LINK_LIBRARIES}" )
  23. message( " ${Green}LINK_PRIVATE_LIBRARIES:${ColorReset} ${PLUGIN_LINK_PRIVATE_LIBRARIES}" )
  24. # message( " ${Green}SOURCES:${ColorReset} ${PLUGIN_SOURCES}" )
  25. # message( " ${Green}UI:${ColorReset} ${PLUGIN_UI}" )
  26. # message( " ${Green}EXPORT_MACRO:${ColorReset} ${PLUGIN_EXPORT_MACRO}" )
  27. # message( " ${Green}NO_INSTALL:${ColorReset} ${PLUGIN_NO_INSTALL}" )
  28. message( " ${Green}PLUGIN_DESTINATION:${ColorReset} ${PLUGIN_DESTINATION}" )
  29. if( PLUGIN_CONFIG_FILES )
  30. if ( INSTALL_CONFIG )
  31. message( " ${Green}CONFIGURATION_FILES:${ColorReset} ${PLUGIN_CONFIG_FILES} => ${PLUGIN_DATA_DESTINATION}" )
  32. else()
  33. message( " ${Green}CONFIGURATION_FILES:${ColorReset} ${PLUGIN_CONFIG_FILES} => [Skipping installation]" )
  34. endif()
  35. endif()
  36. if( PLUGIN_RESOURCES )
  37. message( " ${Green}RESOURCES:${ColorReset} ${PLUGIN_RESOURCES}" )
  38. endif()
  39. message( "" )
  40. endif()
  41. # create target name once for convenience
  42. set( target "calamares_${PLUGIN_TYPE}_${PLUGIN_NAME}" )
  43. # determine target type
  44. if( NOT ${PLUGIN_SHARED_LIB} )
  45. set( target_type "MODULE" )
  46. else()
  47. set( target_type "SHARED" )
  48. endif()
  49. list( APPEND calamares_add_library_args
  50. "${target}"
  51. "EXPORT_MACRO" "${PLUGIN_EXPORT_MACRO}"
  52. "TARGET_TYPE" "${target_type}"
  53. "SOURCES" "${PLUGIN_SOURCES}"
  54. )
  55. if( PLUGIN_UI )
  56. list( APPEND calamares_add_library_args "UI" "${PLUGIN_UI}" )
  57. endif()
  58. if( PLUGIN_LINK_LIBRARIES )
  59. list( APPEND calamares_add_library_args "LINK_LIBRARIES" "${PLUGIN_LINK_LIBRARIES}" )
  60. endif()
  61. if( PLUGIN_LINK_PRIVATE_LIBRARIES )
  62. list( APPEND calamares_add_library_args "LINK_PRIVATE_LIBRARIES" "${PLUGIN_LINK_PRIVATE_LIBRARIES}" )
  63. endif()
  64. if( PLUGIN_COMPILE_DEFINITIONS )
  65. list( APPEND calamares_add_library_args "COMPILE_DEFINITIONS" ${PLUGIN_COMPILE_DEFINITIONS} )
  66. endif()
  67. list( APPEND calamares_add_library_args "NO_VERSION" )
  68. list( APPEND calamares_add_library_args "INSTALL_BINDIR" "${PLUGIN_DESTINATION}" )
  69. if( PLUGIN_RESOURCES )
  70. list( APPEND calamares_add_library_args "RESOURCES" "${PLUGIN_RESOURCES}" )
  71. endif()
  72. calamares_add_library( ${calamares_add_library_args} )
  73. configure_file( ${PLUGIN_DESC_FILE} ${PLUGIN_DESC_FILE} COPYONLY )
  74. install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_DESC_FILE}
  75. DESTINATION ${PLUGIN_DESTINATION} )
  76. if ( INSTALL_CONFIG )
  77. foreach( PLUGIN_CONFIG_FILE ${PLUGIN_CONFIG_FILES} )
  78. configure_file( ${PLUGIN_CONFIG_FILE} ${PLUGIN_CONFIG_FILE} COPYONLY )
  79. install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_CONFIG_FILE}
  80. DESTINATION ${PLUGIN_DATA_DESTINATION} )
  81. endforeach()
  82. endif()
  83. endfunction()