CalamaresAddPlugin.cmake 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. # Convenience function for creating a C++ (qtplugin) module for Calamares.
  2. # This function provides cmake-time feedback about the plugin, adds
  3. # targets for compilation and boilerplate information, and creates
  4. # a module.desc with standard values if none is provided (which only
  5. # happens for very unusual plugins).
  6. #
  7. # Usage:
  8. #
  9. # calamares_add_plugin(
  10. # module-name
  11. # TYPE <view|job>
  12. # EXPORT_MACRO macro-name
  13. # SOURCES source-file...
  14. # UI ui-file...
  15. # LINK_LIBRARIES lib...
  16. # LINK_PRIVATE_LIBRARIES lib...
  17. # COMPILE_DEFINITIONS def...
  18. # RESOURCES resource-file
  19. # [NO_INSTALL]
  20. # [SHARED_LIB]
  21. # )
  22. include( CMakeParseArguments )
  23. include( CalamaresAddLibrary )
  24. include( CMakeColors )
  25. function( calamares_add_plugin )
  26. # parse arguments ( name needs to be saved before passing ARGN into the macro )
  27. set( NAME ${ARGV0} )
  28. set( options NO_INSTALL SHARED_LIB )
  29. set( oneValueArgs NAME TYPE EXPORT_MACRO RESOURCES )
  30. set( multiValueArgs SOURCES UI LINK_LIBRARIES LINK_PRIVATE_LIBRARIES COMPILE_DEFINITIONS )
  31. cmake_parse_arguments( PLUGIN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
  32. set( PLUGIN_NAME ${NAME} )
  33. set( PLUGIN_DESTINATION ${CMAKE_INSTALL_LIBDIR}/calamares/modules/${PLUGIN_NAME} )
  34. set( PLUGIN_DESC_FILE module.desc )
  35. file( GLOB PLUGIN_CONFIG_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.conf" )
  36. set( PLUGIN_DATA_DESTINATION share/calamares/modules )
  37. set( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" )
  38. set( CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" )
  39. set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" )
  40. message( "-- ${BoldYellow}Found ${CALAMARES_APPLICATION_NAME} module: ${BoldRed}${PLUGIN_NAME}${ColorReset}" )
  41. if( NOT CMAKE_BUILD_TYPE STREQUAL "Release" )
  42. message( " ${Green}TYPE:${ColorReset} ${PLUGIN_TYPE}" )
  43. message( " ${Green}LINK_LIBRARIES:${ColorReset} ${PLUGIN_LINK_LIBRARIES}" )
  44. message( " ${Green}LINK_PRIVATE_LIBRARIES:${ColorReset} ${PLUGIN_LINK_PRIVATE_LIBRARIES}" )
  45. # message( " ${Green}SOURCES:${ColorReset} ${PLUGIN_SOURCES}" )
  46. # message( " ${Green}UI:${ColorReset} ${PLUGIN_UI}" )
  47. # message( " ${Green}EXPORT_MACRO:${ColorReset} ${PLUGIN_EXPORT_MACRO}" )
  48. # message( " ${Green}NO_INSTALL:${ColorReset} ${PLUGIN_NO_INSTALL}" )
  49. message( " ${Green}PLUGIN_DESTINATION:${ColorReset} ${PLUGIN_DESTINATION}" )
  50. if( PLUGIN_CONFIG_FILES )
  51. if ( INSTALL_CONFIG )
  52. message( " ${Green}CONFIGURATION_FILES:${ColorReset} ${PLUGIN_CONFIG_FILES} => ${PLUGIN_DATA_DESTINATION}" )
  53. else()
  54. message( " ${Green}CONFIGURATION_FILES:${ColorReset} ${PLUGIN_CONFIG_FILES} => [Skipping installation]" )
  55. endif()
  56. endif()
  57. if( PLUGIN_RESOURCES )
  58. message( " ${Green}RESOURCES:${ColorReset} ${PLUGIN_RESOURCES}" )
  59. endif()
  60. message( "" )
  61. endif()
  62. # create target name once for convenience
  63. set( target "calamares_${PLUGIN_TYPE}_${PLUGIN_NAME}" )
  64. # determine target type
  65. if( NOT ${PLUGIN_SHARED_LIB} )
  66. set( target_type "MODULE" )
  67. else()
  68. set( target_type "SHARED" )
  69. endif()
  70. list( APPEND calamares_add_library_args
  71. "${target}"
  72. "EXPORT_MACRO" "${PLUGIN_EXPORT_MACRO}"
  73. "TARGET_TYPE" "${target_type}"
  74. "SOURCES" "${PLUGIN_SOURCES}"
  75. )
  76. if( PLUGIN_UI )
  77. list( APPEND calamares_add_library_args "UI" "${PLUGIN_UI}" )
  78. endif()
  79. if( PLUGIN_LINK_LIBRARIES )
  80. list( APPEND calamares_add_library_args "LINK_LIBRARIES" "${PLUGIN_LINK_LIBRARIES}" )
  81. endif()
  82. if( PLUGIN_LINK_PRIVATE_LIBRARIES )
  83. list( APPEND calamares_add_library_args "LINK_PRIVATE_LIBRARIES" "${PLUGIN_LINK_PRIVATE_LIBRARIES}" )
  84. endif()
  85. if( PLUGIN_COMPILE_DEFINITIONS )
  86. list( APPEND calamares_add_library_args "COMPILE_DEFINITIONS" ${PLUGIN_COMPILE_DEFINITIONS} )
  87. endif()
  88. list( APPEND calamares_add_library_args "NO_VERSION" )
  89. list( APPEND calamares_add_library_args "INSTALL_BINDIR" "${PLUGIN_DESTINATION}" )
  90. if( PLUGIN_RESOURCES )
  91. list( APPEND calamares_add_library_args "RESOURCES" "${PLUGIN_RESOURCES}" )
  92. endif()
  93. calamares_add_library( ${calamares_add_library_args} )
  94. if ( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${PLUGIN_DESC_FILE} )
  95. configure_file( ${PLUGIN_DESC_FILE} ${PLUGIN_DESC_FILE} COPYONLY )
  96. else()
  97. set( _file ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_DESC_FILE} )
  98. set( _type ${PLUGIN_TYPE} )
  99. file( WRITE ${_file} "# AUTO-GENERATED metadata file\n# Syntax is YAML 1.2\n---\n" )
  100. file( APPEND ${_file} "type: \"${_type}\"\nname: \"${PLUGIN_NAME}\"\ninterface: \"qtplugin\"\nload: \"lib${target}.so\"\n" )
  101. endif()
  102. install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_DESC_FILE}
  103. DESTINATION ${PLUGIN_DESTINATION} )
  104. if ( INSTALL_CONFIG )
  105. foreach( PLUGIN_CONFIG_FILE ${PLUGIN_CONFIG_FILES} )
  106. configure_file( ${PLUGIN_CONFIG_FILE} ${PLUGIN_CONFIG_FILE} COPYONLY )
  107. install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_CONFIG_FILE}
  108. DESTINATION ${PLUGIN_DATA_DESTINATION} )
  109. endforeach()
  110. endif()
  111. endfunction()