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.cmake171
1 files changed, 0 insertions, 171 deletions
diff --git a/project/cmake/scripts/common/addon-helpers.cmake b/project/cmake/scripts/common/addon-helpers.cmake
deleted file mode 100644
index caef610..0000000
--- a/project/cmake/scripts/common/addon-helpers.cmake
+++ /dev/null
@@ -1,171 +0,0 @@
1# Workaround for the fact that cpack's filenames are not customizable.
2# Each add-on is added as a separate component to facilitate zip/tgz packaging.
3# The filenames are always of the form basename-component, which is
4# incompatible with the addonid-version scheme we want. This hack renames
5# the files from the file names generated by the 'package' target.
6# Sadly we cannot extend the 'package' target, as it is a builtin target, see
7# http://public.kitware.com/Bug/view.php?id=8438
8# Thus, we have to add an 'addon-package' target.
9add_custom_target(addon-package
10 COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target package)
11
12macro(add_cpack_workaround target version ext)
13 if(NOT PACKAGE_DIR)
14 set(PACKAGE_DIR "${CMAKE_INSTALL_PREFIX}/zips")
15 endif()
16
17 add_custom_command(TARGET addon-package PRE_BUILD
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})
20endmacro()
21
22# Grab the version from a given add-on's addon.xml
23macro (addon_version dir prefix)
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
30 STRING(REGEX MATCH "<addon[^>]*version.?=.?.[0-9\\.]+" VERSION_STRING ${ADDONXML})
31 STRING(REGEX REPLACE ".*version=.([0-9\\.]+).*" "\\1" ${prefix}_VERSION ${VERSION_STRING})
32 message(STATUS ${prefix}_VERSION=${${prefix}_VERSION})
33endmacro()
34
35# Build, link and optionally package an add-on
36macro (build_addon target prefix libs)
37 ADD_LIBRARY(${target} ${${prefix}_SOURCES})
38 TARGET_LINK_LIBRARIES(${target} ${${libs}})
39 addon_version(${target} ${prefix})
40 SET_TARGET_PROPERTIES(${target} PROPERTIES VERSION ${${prefix}_VERSION}
41 SOVERSION ${APP_VERSION_MAJOR}.${APP_VERSION_MINOR}
42 PREFIX "")
43 IF(OS STREQUAL "android")
44 SET_TARGET_PROPERTIES(${target} PROPERTIES PREFIX "lib")
45 ENDIF(OS STREQUAL "android")
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
66 # set zip as default if addon-package is called without PACKAGE_XXX
67 SET(CPACK_GENERATOR "ZIP")
68 SET(ext "zip")
69 IF(PACKAGE_ZIP OR PACKAGE_TGZ)
70 IF(PACKAGE_TGZ)
71 SET(CPACK_GENERATOR "TGZ")
72 SET(ext "tar.gz")
73 ENDIF(PACKAGE_TGZ)
74 SET(CPACK_INCLUDE_TOPLEVEL_DIRECTORY OFF)
75 set(CPACK_PACKAGE_FILE_NAME addon)
76 IF(CMAKE_BUILD_TYPE STREQUAL "Release")
77 SET(CPACK_STRIP_FILES TRUE)
78 ENDIF(CMAKE_BUILD_TYPE STREQUAL "Release")
79 set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
80 set(CPACK_COMPONENTS_IGNORE_GROUPS 1)
81 list(APPEND CPACK_COMPONENTS_ALL ${target}-${${prefix}_VERSION})
82 # Pack files together to create an archive
83 INSTALL(DIRECTORY ${target} DESTINATION ./ COMPONENT ${target}-${${prefix}_VERSION} PATTERN "addon.xml.in" EXCLUDE)
84 IF(WIN32)
85 if(NOT CPACK_PACKAGE_DIRECTORY)
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
98 # in case of a VC++ project the installation location contains a $(Configuration) VS variable
99 # we replace it with ${CMAKE_BUILD_TYPE} (which doesn't cover the case when the build configuration
100 # is changed within Visual Studio)
101 string(REPLACE "$(Configuration)" "${CMAKE_BUILD_TYPE}" LIBRARY_LOCATION "${LIBRARY_LOCATION}")
102
103 # install the generated DLL file
104 INSTALL(PROGRAMS ${LIBRARY_LOCATION} DESTINATION ${target}
105 COMPONENT ${target}-${${prefix}_VERSION})
106
107 IF(CMAKE_BUILD_TYPE MATCHES Debug)
108 # for debug builds also install the PDB file
109 get_filename_component(LIBRARY_DIR ${LIBRARY_LOCATION} DIRECTORY)
110 INSTALL(FILES $<TARGET_PDB_FILE:${target}> DESTINATION ${target}
111 COMPONENT ${target}-${${prefix}_VERSION})
112 ENDIF()
113 ELSE(WIN32)
114 if(NOT CPACK_PACKAGE_DIRECTORY)
115 set(CPACK_PACKAGE_DIRECTORY ${CMAKE_BINARY_DIR})
116 endif()
117 INSTALL(TARGETS ${target} DESTINATION ${target}
118 COMPONENT ${target}-${${prefix}_VERSION})
119 ENDIF(WIN32)
120 add_cpack_workaround(${target} ${${prefix}_VERSION} ${ext})
121 ELSE(PACKAGE_ZIP OR PACKAGE_TGZ)
122 if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
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)
139 ENDIF(PACKAGE_ZIP OR PACKAGE_TGZ)
140endmacro()
141
142# finds a path to a given file (recursive)
143function (kodi_find_path var_name filename search_path strip_file)
144 file(GLOB_RECURSE PATH_TO_FILE ${search_path} ${filename})
145 if(strip_file)
146 string(REPLACE ${filename} "" PATH_TO_FILE ${PATH_TO_FILE})
147 endif(strip_file)
148 set (${var_name} ${PATH_TO_FILE} PARENT_SCOPE)
149endfunction()
150
151# Cmake build options
152include(addoptions)
153include(TestCXXAcceptsFlag)
154OPTION(PACKAGE_ZIP "Package Zip file?" OFF)
155OPTION(PACKAGE_TGZ "Package TGZ file?" OFF)
156OPTION(BUILD_SHARED_LIBS "Build shared libs?" ON)
157
158# LTO support?
159CHECK_CXX_ACCEPTS_FLAG("-flto" HAVE_LTO)
160IF(HAVE_LTO)
161 OPTION(USE_LTO "use link time optimization" OFF)
162 IF(USE_LTO)
163 add_options(ALL_LANGUAGES ALL_BUILDS "-flto")
164 ENDIF(USE_LTO)
165ENDIF(HAVE_LTO)
166
167# set this to try linking dependencies as static as possible
168IF(ADDONS_PREFER_STATIC_LIBS)
169 SET(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
170ENDIF(ADDONS_PREFER_STATIC_LIBS)
171