You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

198 lines
11 KiB

  1. #################################################
  2. # Generate platform metadata files
  3. #################################################
  4. if( APPLE )
  5. #TODO Generate this at runtime as well
  6. include( ${KICAD_CMAKE_MODULE_PATH}/WritePlatformMetadata_macos.cmake )
  7. elseif( UNIX )
  8. # Note: We use two different app IDs here for legacy reasons. The org.kicad.KiCad
  9. # ID is from FlatHub Flatpaks, while the org.kicad.kicad ID is used everywhere else.
  10. # Having these two be separate causes problems in Gnome Software because they wll
  11. # each appear as their own app, so KiCad gets two entries.
  12. #
  13. # To work around this, we include a provides statement in the metainfo for the other
  14. # app ID to link the two IDs together.
  15. # Default values for regular builds
  16. set( KICAD_REVERSE_DOMAIN "org.kicad" )
  17. set( KICAD_APP_NAME "${KICAD_REVERSE_DOMAIN}.kicad" )
  18. set( KICAD_PROVIDES_APP_ID "${KICAD_REVERSE_DOMAIN}.KiCad" )
  19. set( KICAD_APP_PREFIX "${KICAD_REVERSE_DOMAIN}" )
  20. set( KICAD_ICON_PREFIX "" )
  21. set( KICAD_DESKTOP_FILE_ICON_PREFIX "" )
  22. set( KICAD_DESKTOP_FILE_ICON_KICAD "kicad" )
  23. set( KICAD_MIME_FILE_PREFIX "kicad" )
  24. set( KICAD_MIME_ICON_PREFIX "" )
  25. # Override default values from above if we are building a flatpak
  26. if( KICAD_BUILD_FLATPAK )
  27. set( KICAD_APP_NAME "${KICAD_REVERSE_DOMAIN}.KiCad" )
  28. set( KICAD_PROVIDES_APP_ID "${KICAD_REVERSE_DOMAIN}.kicad" )
  29. if( KICAD_BUILD_NIGHTLY_FLATPAK )
  30. set( KICAD_APP_NAME "${KICAD_APP_NAME}.Nightly" )
  31. set( KICAD_PROVIDES_APP_ID "${KICAD_PROVIDES_APP_ID}.Nightly" )
  32. endif()
  33. set( KICAD_APP_PREFIX "${KICAD_APP_NAME}" )
  34. set( KICAD_ICON_PREFIX "${KICAD_APP_NAME}" )
  35. set( KICAD_DESKTOP_FILE_ICON_PREFIX "${KICAD_APP_PREFIX}." )
  36. set( KICAD_DESKTOP_FILE_ICON_KICAD "${KICAD_APP_NAME}" )
  37. set( KICAD_MIME_FILE_PREFIX "${KICAD_APP_PREFIX}" )
  38. set( KICAD_MIME_ICON_PREFIX "${KICAD_APP_PREFIX}." )
  39. endif()
  40. # Add the command to configure the linux metainfo file with the version information
  41. add_custom_command(
  42. OUTPUT ${PROJECT_BINARY_DIR}/resources/linux/metainfo/org.kicad.kicad.metainfo.xml.in
  43. COMMAND ${CMAKE_COMMAND}
  44. -DSRC_PATH=${PROJECT_SOURCE_DIR}
  45. -DBUILD_PATH=${PROJECT_BINARY_DIR}
  46. -DKICAD_CMAKE_MODULE_PATH=${PROJECT_SOURCE_DIR}/cmake
  47. -DKICAD_APP_NAME=${KICAD_APP_NAME}
  48. -DKICAD_PROVIDES_APP_ID=${KICAD_PROVIDES_APP_ID}
  49. -P ${KICAD_CMAKE_MODULE_PATH}/BuildSteps/WritePlatformMetadata_linux.cmake
  50. DEPENDS ${KICAD_CMAKE_MODULE_PATH}/BuildSteps/WritePlatformMetadata_linux.cmake
  51. COMMENT "Configuring Linux metainfo"
  52. )
  53. # Read the metainfo from the binary directory because it has been configured by Cmake already
  54. # to have the version string in it
  55. linux_metadata_translation( ${PROJECT_BINARY_DIR}/resources/linux/metainfo/org.kicad.kicad.metainfo.xml.in
  56. ${PROJECT_BINARY_DIR}/resources/linux/metainfo/${KICAD_APP_NAME}.metainfo.xml
  57. ${PROJECT_SOURCE_DIR}/translation/pofiles )
  58. # All the desktop files take two passes: First they are configured to replace the variables,
  59. # then they are translated from the binary directory
  60. configure_file( ${PROJECT_SOURCE_DIR}/resources/linux/launchers/org.kicad.bitmap2component.desktop.in
  61. ${PROJECT_BINARY_DIR}/resources/linux/launchers/org.kicad.bitmap2component.desktop.in
  62. @ONLY )
  63. linux_metadata_translation( ${PROJECT_BINARY_DIR}/resources/linux/launchers/org.kicad.bitmap2component.desktop.in
  64. ${PROJECT_BINARY_DIR}/resources/linux/launchers/${KICAD_APP_PREFIX}.bitmap2component.desktop
  65. ${PROJECT_SOURCE_DIR}/translation/pofiles )
  66. configure_file( ${PROJECT_SOURCE_DIR}/resources/linux/launchers/org.kicad.eeschema.desktop.in
  67. ${PROJECT_BINARY_DIR}/resources/linux/launchers/org.kicad.eeschema.desktop.in
  68. @ONLY )
  69. linux_metadata_translation( ${PROJECT_BINARY_DIR}/resources/linux/launchers/org.kicad.eeschema.desktop.in
  70. ${PROJECT_BINARY_DIR}/resources/linux/launchers/${KICAD_APP_PREFIX}.eeschema.desktop
  71. ${PROJECT_SOURCE_DIR}/translation/pofiles )
  72. configure_file( ${PROJECT_SOURCE_DIR}/resources/linux/launchers/org.kicad.gerbview.desktop.in
  73. ${PROJECT_BINARY_DIR}/resources/linux/launchers/org.kicad.gerbview.desktop.in
  74. @ONLY )
  75. linux_metadata_translation( ${PROJECT_BINARY_DIR}/resources/linux/launchers/org.kicad.gerbview.desktop.in
  76. ${PROJECT_BINARY_DIR}/resources/linux/launchers/${KICAD_APP_PREFIX}.gerbview.desktop
  77. ${PROJECT_SOURCE_DIR}/translation/pofiles )
  78. configure_file( ${PROJECT_SOURCE_DIR}/resources/linux/launchers/org.kicad.kicad.desktop.in
  79. ${PROJECT_BINARY_DIR}/resources/linux/launchers/org.kicad.kicad.desktop.in
  80. @ONLY )
  81. linux_metadata_translation( ${PROJECT_BINARY_DIR}/resources/linux/launchers/org.kicad.kicad.desktop.in
  82. ${PROJECT_BINARY_DIR}/resources/linux/launchers/${KICAD_APP_NAME}.desktop
  83. ${PROJECT_SOURCE_DIR}/translation/pofiles )
  84. configure_file( ${PROJECT_SOURCE_DIR}/resources/linux/launchers/org.kicad.pcbcalculator.desktop.in
  85. ${PROJECT_BINARY_DIR}/resources/linux/launchers/org.kicad.pcbcalculator.desktop.in
  86. @ONLY )
  87. linux_metadata_translation( ${PROJECT_BINARY_DIR}/resources/linux/launchers/org.kicad.pcbcalculator.desktop.in
  88. ${PROJECT_BINARY_DIR}/resources/linux/launchers/${KICAD_APP_PREFIX}.pcbcalculator.desktop
  89. ${PROJECT_SOURCE_DIR}/translation/pofiles )
  90. configure_file( ${PROJECT_SOURCE_DIR}/resources/linux/launchers/org.kicad.pcbnew.desktop.in
  91. ${PROJECT_BINARY_DIR}/resources/linux/launchers/org.kicad.pcbnew.desktop.in
  92. @ONLY )
  93. linux_metadata_translation( ${PROJECT_BINARY_DIR}/resources/linux/launchers/org.kicad.pcbnew.desktop.in
  94. ${PROJECT_BINARY_DIR}/resources/linux/launchers/${KICAD_APP_PREFIX}.pcbnew.desktop
  95. ${PROJECT_SOURCE_DIR}/translation/pofiles )
  96. # Translate the MIME info, which are read from the source directory...
  97. linux_metadata_translation( ${PROJECT_SOURCE_DIR}/resources/linux/mime/kicad-gerbers.xml.in
  98. ${PROJECT_BINARY_DIR}/resources/linux/mime/${KICAD_MIME_FILE_PREFIX}-gerbers.xml
  99. ${PROJECT_SOURCE_DIR}/translation/pofiles )
  100. # ...except for the KiCad MIME info, which is also configured first to replace variables
  101. configure_file( ${PROJECT_SOURCE_DIR}/resources/linux/mime/kicad-kicad.xml.in
  102. ${PROJECT_BINARY_DIR}/resources/linux/mime/kicad-kicad.xml.in
  103. @ONLY )
  104. linux_metadata_translation( ${PROJECT_BINARY_DIR}/resources/linux/mime/kicad-kicad.xml.in
  105. ${PROJECT_BINARY_DIR}/resources/linux/mime/${KICAD_MIME_FILE_PREFIX}-kicad.xml
  106. ${PROJECT_SOURCE_DIR}/translation/pofiles )
  107. add_custom_target( metadata ALL
  108. DEPENDS ${PROJECT_BINARY_DIR}/resources/linux/metainfo/${KICAD_APP_NAME}.metainfo.xml
  109. ${PROJECT_BINARY_DIR}/resources/linux/launchers/${KICAD_APP_PREFIX}.bitmap2component.desktop
  110. ${PROJECT_BINARY_DIR}/resources/linux/launchers/${KICAD_APP_PREFIX}.eeschema.desktop
  111. ${PROJECT_BINARY_DIR}/resources/linux/launchers/${KICAD_APP_PREFIX}.gerbview.desktop
  112. ${PROJECT_BINARY_DIR}/resources/linux/launchers/${KICAD_APP_NAME}.desktop
  113. ${PROJECT_BINARY_DIR}/resources/linux/launchers/${KICAD_APP_PREFIX}.pcbcalculator.desktop
  114. ${PROJECT_BINARY_DIR}/resources/linux/launchers/${KICAD_APP_PREFIX}.pcbnew.desktop
  115. ${PROJECT_BINARY_DIR}/resources/linux/mime/${KICAD_MIME_FILE_PREFIX}-gerbers.xml
  116. ${PROJECT_BINARY_DIR}/resources/linux/mime/${KICAD_MIME_FILE_PREFIX}-kicad.xml
  117. )
  118. # Copy icons to binary dir, where they can be renamed for flatpak, if needed
  119. file( COPY ${PROJECT_SOURCE_DIR}/resources/linux/icons/
  120. DESTINATION ${PROJECT_BINARY_DIR}/resources/linux/icons
  121. FILES_MATCHING
  122. PATTERN "*.png"
  123. PATTERN "*.svg"
  124. )
  125. if( KICAD_BUILD_FLATPAK )
  126. # Rename all icons to start with KICAD_ICON_PREFIX
  127. file( GLOB_RECURSE _ALL_ICONS
  128. LIST_DIRECTORIES false
  129. ${PROJECT_BINARY_DIR}/resources/linux/icons/*.png
  130. ${PROJECT_BINARY_DIR}/resources/linux/icons/*.svg
  131. )
  132. foreach( _ICON ${_ALL_ICONS} )
  133. get_filename_component( _ICON_PATH ${_ICON} DIRECTORY )
  134. get_filename_component( _ICON_NAME ${_ICON} NAME_WE )
  135. get_filename_component( _ICON_EXT ${_ICON} EXT )
  136. if( _ICON_NAME STREQUAL "kicad" )
  137. set( _RENAMED_ICON "${_ICON_PATH}/${KICAD_APP_NAME}${_ICON_EXT}" )
  138. else()
  139. set( _RENAMED_ICON "${_ICON_PATH}/${KICAD_ICON_PREFIX}.${_ICON_NAME}${_ICON_EXT}" )
  140. endif()
  141. file( RENAME ${_ICON} ${_RENAMED_ICON} )
  142. endforeach()
  143. endif()
  144. # Install icons from binary dir, as they might have been renamed above
  145. install( DIRECTORY ${PROJECT_BINARY_DIR}/resources/linux/icons/
  146. DESTINATION ${CMAKE_INSTALL_DATADIR}/icons
  147. COMPONENT resources
  148. FILES_MATCHING
  149. PATTERN "${KICAD_ICON_PREFIX}*.png"
  150. PATTERN "${KICAD_ICON_PREFIX}*.svg"
  151. )
  152. # Install MIME type files
  153. install( DIRECTORY ${PROJECT_BINARY_DIR}/resources/linux/mime/
  154. DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages
  155. COMPONENT resources
  156. FILES_MATCHING
  157. PATTERN "*.xml"
  158. PATTERN "*.in" EXCLUDE
  159. )
  160. # Install application launchers (.desktop files)
  161. install( DIRECTORY ${PROJECT_BINARY_DIR}/resources/linux/launchers/
  162. DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
  163. COMPONENT resources
  164. FILES_MATCHING
  165. PATTERN "*.desktop"
  166. PATTERN "*.in" EXCLUDE
  167. )
  168. # Install appstream metadata (app store entry)
  169. install( DIRECTORY ${PROJECT_BINARY_DIR}/resources/linux/metainfo/
  170. DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo
  171. COMPONENT resources
  172. FILES_MATCHING
  173. PATTERN "*metainfo.xml"
  174. PATTERN "*.in" EXCLUDE
  175. )
  176. endif()
  177. add_subdirectory(bitmaps_png)
  178. add_subdirectory(project_template)