summaryrefslogtreecommitdiffstats
path: root/project/cmake/scripts/common/addon-helpers.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'project/cmake/scripts/common/addon-helpers.cmake')
-rw-r--r--project/cmake/scripts/common/addon-helpers.cmake80
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
12macro(add_cpack_workaround target version ext) 12macro(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})
15endmacro() 20endmacro()
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
18macro (addon_version dir prefix) 23macro (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)
82endmacro() 140endmacro()
83 141