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.
117 lines
4.1 KiB
117 lines
4.1 KiB
# |
|
# Install local dependency from external deb package |
|
# |
|
# Functions: |
|
# |
|
# target_architecture_deb (output_var) |
|
# Sets output_var to current architecture (usable for Debin repos) |
|
# output_var name of return variable |
|
# |
|
# ExternalDeb_add (NAME URL) |
|
# Downloads and installs external deb from URL. |
|
# |
|
# Parameters: |
|
# NAME name of deb (used for internal naming) |
|
# URL full URL to deb, with %ARCH% variable, which is replaced with current arch |
|
# (basing on target_architecture_deb function) – should be usable for wget |
|
# |
|
# Returns: |
|
# ${NAME}_FOUND if deb was installed properly |
|
# ${NAME}_INCLUDE_DIRS list of include dirs |
|
# ${NAME}_LIBRARY_DIRS list of library dirs (included in link_directories list) |
|
# ${NAME}_SLIBRARIES list of static libraries |
|
# ${NAME}_DLIBRARIES list of dynamic libraries |
|
# All lists are generated by this simple cmake script, so they may be incomplete! |
|
# |
|
# Dependencies: |
|
# wget for downloading deb from URL |
|
# ar to unpack deb archive |
|
# tar to unpack internal data archive |
|
# |
|
# |
|
# Copyright (c) 2015, Marek Pikuła <marek@pikula.co> |
|
# All rights reserved. |
|
# |
|
# Distributed under the OSI-approved BSD License (the "License") see accompanying file Copyright.txt for details. |
|
# |
|
# This software is distributed WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY |
|
# or FITNESS FOR A PARTICULAR PURPOSE. See the License for more information. |
|
# |
|
|
|
function (target_architecture_deb output_var) |
|
include (TargetArch) |
|
target_architecture(ARCH) |
|
|
|
if (${ARCH} STREQUAL armv7) |
|
set (DARCH armhf) |
|
elseif (${ARCH} STREQUAL armv6) |
|
set (DARCH armel) |
|
elseif (${ARCH} STREQUAL armv5) |
|
set (DARCH armel) |
|
elseif (${ARCH} STREQUAL arm) |
|
set (DARCH arm) |
|
elseif (${ARCH} STREQUAL i386) |
|
set (DARCH i386) |
|
elseif (${ARCH} STREQUAL x86_64) |
|
set (DARCH amd64) |
|
elseif (${ARCH} STREQUAL ia64) |
|
set (DARCH ia64) |
|
elseif (${ARCH} STREQUAL ppc64) |
|
set (DARCH ppc64) |
|
elseif (${ARCH} STREQUAL ppc) |
|
set (DARCH powerpc) |
|
elseif (${ARCH} STREQUAL unknown) |
|
set (DARCH unknown) |
|
endif (${ARCH} STREQUAL armv7) |
|
|
|
set (${output_var} ${DARCH} PARENT_SCOPE) |
|
endfunction (target_architecture_deb) |
|
|
|
function (ExternalDeb_add NAME URL) |
|
|
|
find_program (PATH_WGET wget) |
|
if (NOT PATH_WGET) |
|
message (FATAL_ERROR "wget not found (needed to download deb files)") |
|
endif (NOT PATH_WGET) |
|
|
|
find_program (PATH_AR ar) |
|
if (NOT PATH_AR) |
|
message (FATAL_ERROR "ar not found (needed to unpack deb files)") |
|
endif (NOT PATH_AR) |
|
|
|
find_program (PATH_TAR tar) |
|
if (NOT PATH_TAR) |
|
message (FATAL_ERROR "tar not found (needed to unpack deb files)") |
|
endif (NOT PATH_TAR) |
|
|
|
target_architecture_deb (ARCH) |
|
set (URL "${URL}") |
|
string (REPLACE "%ARCH%" ${ARCH} URL "${URL}") |
|
|
|
set (DEB_PREFIX "${CMAKE_BINARY_DIR}/${NAME}-prefix") |
|
file (MAKE_DIRECTORY "${DEB_PREFIX}") |
|
|
|
if (NOT EXISTS "${DEB_PREFIX}/usr") |
|
execute_process (COMMAND ${PATH_WGET} -O ${NAME}.deb ${URL} WORKING_DIRECTORY "${DEB_PREFIX}") |
|
execute_process (COMMAND ${PATH_AR} x ${NAME}.deb WORKING_DIRECTORY "${DEB_PREFIX}") |
|
execute_process (COMMAND ${PATH_TAR} -xf data.tar.xz WORKING_DIRECTORY "${DEB_PREFIX}") |
|
endif (NOT EXISTS "${DEB_PREFIX}/usr") |
|
|
|
set (${NAME}_FOUND TRUE PARENT_SCOPE) |
|
|
|
file (GLOB INCLUDE_DIRS "${DEB_PREFIX}/usr/include/*") |
|
set (${NAME}_INCLUDE_DIRS "${INCLUDE_DIRS}" PARENT_SCOPE) |
|
|
|
file (GLOB LIBRARY_DIRS "${DEB_PREFIX}/usr/lib/*") |
|
set (${NAME}_LIBRARY_DIRS "${LIBRARY_DIRS}" PARENT_SCOPE) |
|
link_directories (${LIBRARY_DIRS}) |
|
|
|
foreach (DIRECTORY ${LIBRARY_DIRS}) |
|
file (GLOB SLIBRARIES_TMP "${DIRECTORY}/*.a") |
|
set (${NAME}_SLIBRARIES ${${NAME}_SLIBRARIES} ${SLIBRARIES_TMP} PARENT_SCOPE) |
|
|
|
file (GLOB DLIBRARIES_TMP "${DIRECTORY}/*.so") |
|
set (${NAME}_DLIBRARIES ${${NAME}_DLIBRARIES} ${DLIBRARIES_TMP} PARENT_SCOPE) |
|
endforeach (DIRECTORY) |
|
|
|
endfunction (ExternalDeb_add)
|
|
|