From 9fc8b732737f139d3e466510d75668ab45578960 Mon Sep 17 00:00:00 2001 From: manuel Date: Tue, 8 Mar 2016 21:02:53 +0100 Subject: sync with upstream --- project/cmake/scripts/common/addon-helpers.cmake | 80 ++++++++++++++++++++---- 1 file changed, 69 insertions(+), 11 deletions(-) (limited to 'project/cmake/scripts/common/addon-helpers.cmake') 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 COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target package) macro(add_cpack_workaround target version ext) + if(NOT PACKAGE_DIR) + set(PACKAGE_DIR "${CMAKE_INSTALL_PREFIX}/zips") + endif() + add_custom_command(TARGET addon-package PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E rename addon-${target}-${version}.${ext} ${target}-${version}.${ext}) + COMMAND ${CMAKE_COMMAND} -E make_directory ${PACKAGE_DIR} + COMMAND ${CMAKE_COMMAND} -E copy ${CPACK_PACKAGE_DIRECTORY}/addon-${target}-${version}.${ext} ${PACKAGE_DIR}/${target}-${version}.${ext}) endmacro() # Grab the version from a given add-on's addon.xml macro (addon_version dir prefix) - FILE(READ ${dir}/addon.xml ADDONXML) + IF(EXISTS ${PROJECT_SOURCE_DIR}/${dir}/addon.xml.in) + FILE(READ ${PROJECT_SOURCE_DIR}/${dir}/addon.xml.in ADDONXML) + ELSE() + FILE(READ ${dir}/addon.xml ADDONXML) + ENDIF() + STRING(REGEX MATCH "]*version.?=.?.[0-9\\.]+" VERSION_STRING ${ADDONXML}) STRING(REGEX REPLACE ".*version=.([0-9\\.]+).*" "\\1" ${prefix}_VERSION ${VERSION_STRING}) message(STATUS ${prefix}_VERSION=${${prefix}_VERSION}) @@ -34,6 +44,25 @@ macro (build_addon target prefix libs) SET_TARGET_PROPERTIES(${target} PROPERTIES PREFIX "lib") ENDIF(OS STREQUAL "android") + # get the library's location + SET(LIBRARY_LOCATION $) + # get the library's filename + if("${CORE_SYSTEM_NAME}" STREQUAL "android") + # for android we need the filename without any version numbers + set(LIBRARY_FILENAME $) + else() + SET(LIBRARY_FILENAME $) + endif() + + # if there's an addon.xml.in we need to generate the addon.xml + IF(EXISTS ${PROJECT_SOURCE_DIR}/${target}/addon.xml.in) + SET(PLATFORM ${CORE_SYSTEM_NAME}) + + FILE(READ ${PROJECT_SOURCE_DIR}/${target}/addon.xml.in addon_file) + STRING(CONFIGURE "${addon_file}" addon_file_conf @ONLY) + FILE(GENERATE OUTPUT ${PROJECT_SOURCE_DIR}/${target}/addon.xml CONTENT "${addon_file_conf}") + ENDIF() + # set zip as default if addon-package is called without PACKAGE_XXX SET(CPACK_GENERATOR "ZIP") SET(ext "zip") @@ -51,33 +80,62 @@ macro (build_addon target prefix libs) set(CPACK_COMPONENTS_IGNORE_GROUPS 1) list(APPEND CPACK_COMPONENTS_ALL ${target}-${${prefix}_VERSION}) # Pack files together to create an archive - INSTALL(DIRECTORY ${target} DESTINATION ./ COMPONENT ${target}-${${prefix}_VERSION}) + INSTALL(DIRECTORY ${target} DESTINATION ./ COMPONENT ${target}-${${prefix}_VERSION} PATTERN "addon.xml.in" EXCLUDE) IF(WIN32) - # get the installation location for the addon's target - get_property(dll_location TARGET ${target} PROPERTY LOCATION) + if(NOT CPACK_PACKAGE_DIRECTORY) + # determine the temporary path + file(TO_CMAKE_PATH "$ENV{TEMP}" WIN32_TEMP_PATH) + string(LENGTH "${WIN32_TEMP_PATH}" WIN32_TEMP_PATH_LENGTH) + string(LENGTH "${PROJECT_BINARY_DIR}" PROJECT_BINARY_DIR_LENGTH) + + # check if the temporary path is shorter than the default packaging directory path + if(WIN32_TEMP_PATH_LENGTH GREATER 0 AND WIN32_TEMP_PATH_LENGTH LESS PROJECT_BINARY_DIR_LENGTH) + # set the directory used by CPack for packaging to the temp directory + set(CPACK_PACKAGE_DIRECTORY ${WIN32_TEMP_PATH}) + endif() + endif() + # in case of a VC++ project the installation location contains a $(Configuration) VS variable # we replace it with ${CMAKE_BUILD_TYPE} (which doesn't cover the case when the build configuration # is changed within Visual Studio) - string(REPLACE "$(Configuration)" "${CMAKE_BUILD_TYPE}" dll_location "${dll_location}") + string(REPLACE "$(Configuration)" "${CMAKE_BUILD_TYPE}" LIBRARY_LOCATION "${LIBRARY_LOCATION}") # install the generated DLL file - INSTALL(PROGRAMS ${dll_location} DESTINATION ${target} + INSTALL(PROGRAMS ${LIBRARY_LOCATION} DESTINATION ${target} COMPONENT ${target}-${${prefix}_VERSION}) IF(CMAKE_BUILD_TYPE MATCHES Debug) # for debug builds also install the PDB file - get_filename_component(dll_directory ${dll_location} DIRECTORY) - INSTALL(FILES ${dll_directory}/${target}.pdb DESTINATION ${target} + get_filename_component(LIBRARY_DIR ${LIBRARY_LOCATION} DIRECTORY) + INSTALL(FILES ${LIBRARY_DIR}/${target}.pdb DESTINATION ${target} COMPONENT ${target}-${${prefix}_VERSION}) ENDIF() ELSE(WIN32) + if(NOT CPACK_PACKAGE_DIRECTORY) + set(CPACK_PACKAGE_DIRECTORY ${CMAKE_BINARY_DIR}) + endif() INSTALL(TARGETS ${target} DESTINATION ${target} COMPONENT ${target}-${${prefix}_VERSION}) ENDIF(WIN32) add_cpack_workaround(${target} ${${prefix}_VERSION} ${ext}) ELSE(PACKAGE_ZIP OR PACKAGE_TGZ) - INSTALL(TARGETS ${target} DESTINATION lib/kodi/addons/${target}) - INSTALL(DIRECTORY ${target} DESTINATION share/kodi/addons) + if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR NOT CMAKE_INSTALL_PREFIX) + message(STATUS "setting install paths to match ${APP_NAME}: CMAKE_INSTALL_PREFIX: ${${APP_NAME_UC}_PREFIX}") + set(CMAKE_INSTALL_PREFIX "${${APP_NAME_UC}_PREFIX}" CACHE PATH "${APP_NAME} install prefix" FORCE) + set(CMAKE_INSTALL_LIBDIR "${${APP_NAME_UC}_LIB_DIR}" CACHE PATH "${APP_NAME} install libdir" FORCE) + elseif(NOT CMAKE_INSTALL_PREFIX STREQUAL "${${APP_NAME_UC}_PREFIX}" AND NOT OVERRIDE_PATHS) + 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") + else() + if(NOT CMAKE_INSTALL_LIBDIR) + set(CMAKE_INSTALL_LIBDIR "${CMAKE_INSTALL_PREFIX}/lib/${APP_NAME_LC}") + endif() + endif() + else() + set(CMAKE_INSTALL_LIBDIR "lib/${APP_NAME_LC}") + endif() + INSTALL(TARGETS ${target} DESTINATION ${CMAKE_INSTALL_LIBDIR}/addons/${target}) + INSTALL(DIRECTORY ${target} DESTINATION share/${APP_NAME_LC}/addons PATTERN "addon.xml.in" EXCLUDE) ENDIF(PACKAGE_ZIP OR PACKAGE_TGZ) endmacro() -- cgit v1.2.3