diff options
Diffstat (limited to 'project/cmake/scripts/common/addon-helpers.cmake')
| -rw-r--r-- | project/cmake/scripts/common/addon-helpers.cmake | 80 |
1 files changed, 69 insertions, 11 deletions
diff --git a/project/cmake/scripts/common/addon-helpers.cmake b/project/cmake/scripts/common/addon-helpers.cmake index b94df2a..9541df4 100644 --- a/project/cmake/scripts/common/addon-helpers.cmake +++ b/project/cmake/scripts/common/addon-helpers.cmake | |||
| @@ -10,13 +10,23 @@ add_custom_target(addon-package | |||
| 10 | COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target package) | 10 | COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target package) |
| 11 | 11 | ||
| 12 | macro(add_cpack_workaround target version ext) | 12 | macro(add_cpack_workaround target version ext) |
| 13 | if(NOT PACKAGE_DIR) | ||
| 14 | set(PACKAGE_DIR "${CMAKE_INSTALL_PREFIX}/zips") | ||
| 15 | endif() | ||
| 16 | |||
| 13 | add_custom_command(TARGET addon-package PRE_BUILD | 17 | add_custom_command(TARGET addon-package PRE_BUILD |
| 14 | COMMAND ${CMAKE_COMMAND} -E rename addon-${target}-${version}.${ext} ${target}-${version}.${ext}) | 18 | COMMAND ${CMAKE_COMMAND} -E make_directory ${PACKAGE_DIR} |
| 19 | COMMAND ${CMAKE_COMMAND} -E copy ${CPACK_PACKAGE_DIRECTORY}/addon-${target}-${version}.${ext} ${PACKAGE_DIR}/${target}-${version}.${ext}) | ||
| 15 | endmacro() | 20 | endmacro() |
| 16 | 21 | ||
| 17 | # Grab the version from a given add-on's addon.xml | 22 | # Grab the version from a given add-on's addon.xml |
| 18 | macro (addon_version dir prefix) | 23 | macro (addon_version dir prefix) |
| 19 | FILE(READ ${dir}/addon.xml ADDONXML) | 24 | IF(EXISTS ${PROJECT_SOURCE_DIR}/${dir}/addon.xml.in) |
| 25 | FILE(READ ${PROJECT_SOURCE_DIR}/${dir}/addon.xml.in ADDONXML) | ||
| 26 | ELSE() | ||
| 27 | FILE(READ ${dir}/addon.xml ADDONXML) | ||
| 28 | ENDIF() | ||
| 29 | |||
| 20 | STRING(REGEX MATCH "<addon[^>]*version.?=.?.[0-9\\.]+" VERSION_STRING ${ADDONXML}) | 30 | STRING(REGEX MATCH "<addon[^>]*version.?=.?.[0-9\\.]+" VERSION_STRING ${ADDONXML}) |
| 21 | STRING(REGEX REPLACE ".*version=.([0-9\\.]+).*" "\\1" ${prefix}_VERSION ${VERSION_STRING}) | 31 | STRING(REGEX REPLACE ".*version=.([0-9\\.]+).*" "\\1" ${prefix}_VERSION ${VERSION_STRING}) |
| 22 | message(STATUS ${prefix}_VERSION=${${prefix}_VERSION}) | 32 | message(STATUS ${prefix}_VERSION=${${prefix}_VERSION}) |
| @@ -34,6 +44,25 @@ macro (build_addon target prefix libs) | |||
| 34 | SET_TARGET_PROPERTIES(${target} PROPERTIES PREFIX "lib") | 44 | SET_TARGET_PROPERTIES(${target} PROPERTIES PREFIX "lib") |
| 35 | ENDIF(OS STREQUAL "android") | 45 | ENDIF(OS STREQUAL "android") |
| 36 | 46 | ||
| 47 | # get the library's location | ||
| 48 | SET(LIBRARY_LOCATION $<TARGET_FILE:${target}>) | ||
| 49 | # get the library's filename | ||
| 50 | if("${CORE_SYSTEM_NAME}" STREQUAL "android") | ||
| 51 | # for android we need the filename without any version numbers | ||
| 52 | set(LIBRARY_FILENAME $<TARGET_LINKER_FILE_NAME:${target}>) | ||
| 53 | else() | ||
| 54 | SET(LIBRARY_FILENAME $<TARGET_FILE_NAME:${target}>) | ||
| 55 | endif() | ||
| 56 | |||
| 57 | # if there's an addon.xml.in we need to generate the addon.xml | ||
| 58 | IF(EXISTS ${PROJECT_SOURCE_DIR}/${target}/addon.xml.in) | ||
| 59 | SET(PLATFORM ${CORE_SYSTEM_NAME}) | ||
| 60 | |||
| 61 | FILE(READ ${PROJECT_SOURCE_DIR}/${target}/addon.xml.in addon_file) | ||
| 62 | STRING(CONFIGURE "${addon_file}" addon_file_conf @ONLY) | ||
| 63 | FILE(GENERATE OUTPUT ${PROJECT_SOURCE_DIR}/${target}/addon.xml CONTENT "${addon_file_conf}") | ||
| 64 | ENDIF() | ||
| 65 | |||
| 37 | # set zip as default if addon-package is called without PACKAGE_XXX | 66 | # set zip as default if addon-package is called without PACKAGE_XXX |
| 38 | SET(CPACK_GENERATOR "ZIP") | 67 | SET(CPACK_GENERATOR "ZIP") |
| 39 | SET(ext "zip") | 68 | SET(ext "zip") |
| @@ -51,33 +80,62 @@ macro (build_addon target prefix libs) | |||
| 51 | set(CPACK_COMPONENTS_IGNORE_GROUPS 1) | 80 | set(CPACK_COMPONENTS_IGNORE_GROUPS 1) |
| 52 | list(APPEND CPACK_COMPONENTS_ALL ${target}-${${prefix}_VERSION}) | 81 | list(APPEND CPACK_COMPONENTS_ALL ${target}-${${prefix}_VERSION}) |
| 53 | # Pack files together to create an archive | 82 | # Pack files together to create an archive |
| 54 | INSTALL(DIRECTORY ${target} DESTINATION ./ COMPONENT ${target}-${${prefix}_VERSION}) | 83 | INSTALL(DIRECTORY ${target} DESTINATION ./ COMPONENT ${target}-${${prefix}_VERSION} PATTERN "addon.xml.in" EXCLUDE) |
| 55 | IF(WIN32) | 84 | IF(WIN32) |
| 56 | # get the installation location for the addon's target | 85 | if(NOT CPACK_PACKAGE_DIRECTORY) |
| 57 | get_property(dll_location TARGET ${target} PROPERTY LOCATION) | 86 | # determine the temporary path |
| 87 | file(TO_CMAKE_PATH "$ENV{TEMP}" WIN32_TEMP_PATH) | ||
| 88 | string(LENGTH "${WIN32_TEMP_PATH}" WIN32_TEMP_PATH_LENGTH) | ||
| 89 | string(LENGTH "${PROJECT_BINARY_DIR}" PROJECT_BINARY_DIR_LENGTH) | ||
| 90 | |||
| 91 | # check if the temporary path is shorter than the default packaging directory path | ||
| 92 | if(WIN32_TEMP_PATH_LENGTH GREATER 0 AND WIN32_TEMP_PATH_LENGTH LESS PROJECT_BINARY_DIR_LENGTH) | ||
| 93 | # set the directory used by CPack for packaging to the temp directory | ||
| 94 | set(CPACK_PACKAGE_DIRECTORY ${WIN32_TEMP_PATH}) | ||
| 95 | endif() | ||
| 96 | endif() | ||
| 97 | |||
| 58 | # in case of a VC++ project the installation location contains a $(Configuration) VS variable | 98 | # in case of a VC++ project the installation location contains a $(Configuration) VS variable |
| 59 | # we replace it with ${CMAKE_BUILD_TYPE} (which doesn't cover the case when the build configuration | 99 | # we replace it with ${CMAKE_BUILD_TYPE} (which doesn't cover the case when the build configuration |
| 60 | # is changed within Visual Studio) | 100 | # is changed within Visual Studio) |
| 61 | string(REPLACE "$(Configuration)" "${CMAKE_BUILD_TYPE}" dll_location "${dll_location}") | 101 | string(REPLACE "$(Configuration)" "${CMAKE_BUILD_TYPE}" LIBRARY_LOCATION "${LIBRARY_LOCATION}") |
| 62 | 102 | ||
| 63 | # install the generated DLL file | 103 | # install the generated DLL file |
| 64 | INSTALL(PROGRAMS ${dll_location} DESTINATION ${target} | 104 | INSTALL(PROGRAMS ${LIBRARY_LOCATION} DESTINATION ${target} |
| 65 | COMPONENT ${target}-${${prefix}_VERSION}) | 105 | COMPONENT ${target}-${${prefix}_VERSION}) |
| 66 | 106 | ||
| 67 | IF(CMAKE_BUILD_TYPE MATCHES Debug) | 107 | IF(CMAKE_BUILD_TYPE MATCHES Debug) |
| 68 | # for debug builds also install the PDB file | 108 | # for debug builds also install the PDB file |
| 69 | get_filename_component(dll_directory ${dll_location} DIRECTORY) | 109 | get_filename_component(LIBRARY_DIR ${LIBRARY_LOCATION} DIRECTORY) |
| 70 | INSTALL(FILES ${dll_directory}/${target}.pdb DESTINATION ${target} | 110 | INSTALL(FILES ${LIBRARY_DIR}/${target}.pdb DESTINATION ${target} |
| 71 | COMPONENT ${target}-${${prefix}_VERSION}) | 111 | COMPONENT ${target}-${${prefix}_VERSION}) |
| 72 | ENDIF() | 112 | ENDIF() |
| 73 | ELSE(WIN32) | 113 | ELSE(WIN32) |
| 114 | if(NOT CPACK_PACKAGE_DIRECTORY) | ||
| 115 | set(CPACK_PACKAGE_DIRECTORY ${CMAKE_BINARY_DIR}) | ||
| 116 | endif() | ||
| 74 | INSTALL(TARGETS ${target} DESTINATION ${target} | 117 | INSTALL(TARGETS ${target} DESTINATION ${target} |
| 75 | COMPONENT ${target}-${${prefix}_VERSION}) | 118 | COMPONENT ${target}-${${prefix}_VERSION}) |
| 76 | ENDIF(WIN32) | 119 | ENDIF(WIN32) |
| 77 | add_cpack_workaround(${target} ${${prefix}_VERSION} ${ext}) | 120 | add_cpack_workaround(${target} ${${prefix}_VERSION} ${ext}) |
| 78 | ELSE(PACKAGE_ZIP OR PACKAGE_TGZ) | 121 | ELSE(PACKAGE_ZIP OR PACKAGE_TGZ) |
| 79 | INSTALL(TARGETS ${target} DESTINATION lib/kodi/addons/${target}) | 122 | if(CMAKE_SYSTEM_NAME STREQUAL "Linux") |
| 80 | INSTALL(DIRECTORY ${target} DESTINATION share/kodi/addons) | 123 | if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR NOT CMAKE_INSTALL_PREFIX) |
| 124 | message(STATUS "setting install paths to match ${APP_NAME}: CMAKE_INSTALL_PREFIX: ${${APP_NAME_UC}_PREFIX}") | ||
| 125 | set(CMAKE_INSTALL_PREFIX "${${APP_NAME_UC}_PREFIX}" CACHE PATH "${APP_NAME} install prefix" FORCE) | ||
| 126 | set(CMAKE_INSTALL_LIBDIR "${${APP_NAME_UC}_LIB_DIR}" CACHE PATH "${APP_NAME} install libdir" FORCE) | ||
| 127 | elseif(NOT CMAKE_INSTALL_PREFIX STREQUAL "${${APP_NAME_UC}_PREFIX}" AND NOT OVERRIDE_PATHS) | ||
| 128 | message(FATAL_ERROR "CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} differs from ${APP_NAME} prefix ${${APP_NAME_UC}_PREFIX}. Please pass -DOVERRIDE_PATHS=1 to skip this check") | ||
| 129 | else() | ||
| 130 | if(NOT CMAKE_INSTALL_LIBDIR) | ||
| 131 | set(CMAKE_INSTALL_LIBDIR "${CMAKE_INSTALL_PREFIX}/lib/${APP_NAME_LC}") | ||
| 132 | endif() | ||
| 133 | endif() | ||
| 134 | else() | ||
| 135 | set(CMAKE_INSTALL_LIBDIR "lib/${APP_NAME_LC}") | ||
| 136 | endif() | ||
| 137 | INSTALL(TARGETS ${target} DESTINATION ${CMAKE_INSTALL_LIBDIR}/addons/${target}) | ||
| 138 | INSTALL(DIRECTORY ${target} DESTINATION share/${APP_NAME_LC}/addons PATTERN "addon.xml.in" EXCLUDE) | ||
| 81 | ENDIF(PACKAGE_ZIP OR PACKAGE_TGZ) | 139 | ENDIF(PACKAGE_ZIP OR PACKAGE_TGZ) |
| 82 | endmacro() | 140 | endmacro() |
| 83 | 141 | ||
