Skip to content
Snippets Groups Projects
Commit 37a99466 authored by Vittorio Giovara's avatar Vittorio Giovara Committed by Tristan Matthews
Browse files

import contrib system from VideoLan

Refs: #46617
Change-Id: I51a7bc40954c6d1175aaf6ef4d86fbec1fb9d44d
parent 8abd0fcc
Branches
Tags
No related merge requests found
#! /bin/sh
# Copyright (C) 2003-2011 the VideoLAN team
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
#
# Command line handling
#
usage()
{
echo "Usage: $0 [--build=BUILD] [--host=HOST] [--prefix=PREFIX]"
echo " --build=BUILD configure for building on BUILD"
echo " --host=HOST cross-compile to build to run on HOST"
echo " --prefix=PREFIX install files in PREFIX"
echo " --disable-FOO configure to not build package FOO"
echo " --enable-FOO configure to build package FOO"
}
BUILD=
HOST=
PREFIX=
PKGS_ENABLE=
PKGS_DISABLE=
if test ! -f "../../contrib/src/main.mak"
then
echo "$0 must be run from a subdirectory"
exit 1
fi
while test -n "$1"
do
case "$1" in
--build=*)
BUILD="${1#--build=}"
;;
--help|-h)
usage
exit 0
;;
--host=*)
HOST="${1#--host=}"
;;
--prefix=*)
PREFIX="${1#--prefix=}"
;;
--disable-*)
PKGS_DISABLE="${PKGS_DISABLE} ${1#--disable-}"
;;
--enable-*)
PKGS_ENABLE="${PKGS_ENABLE} ${1#--enable-}"
;;
*)
echo "Unrecognized options $1"
usage
exit 1
;;
esac
shift
done
if test -z "$BUILD"
then
echo -n "Guessing build system... "
BUILD="`${CC:-cc} -dumpmachine`"
if test -z "$BUILD"; then
echo "FAIL!"
exit 1
fi
echo "$BUILD"
fi
if test -z "$HOST"
then
echo -n "Guessing host system... "
HOST="$BUILD"
echo "$HOST"
fi
if test "$PREFIX"
then
# strip trailing slash
PREFIX="${PREFIX%/}"
fi
#
# Prepare files
#
echo "Creating configuration file... config.mak"
exec 3>config.mak || exit $?
cat >&3 << EOF
# This file was automatically generated.
# Any change will be overwritten if ../bootstrap is run again.
BUILD := $BUILD
HOST := $HOST
PKGS_DISABLE := $PKGS_DISABLE
PKGS_ENABLE := $PKGS_ENABLE
EOF
add_make()
{
while test -n "$1"
do
echo "$1" >&3
shift
done
}
add_make_enabled()
{
while test -n "$1"
do
add_make "$1 := 1"
shift
done
}
check_ios_sdk()
{
if test -z "$SDKROOT"
then
SDKROOT=`xcode-select -print-path`/Platforms/iPhone${PLATFORM}.platform/Developer/SDKs/iPhone${PLATFORM}${SDK_VERSION}.sdk
echo "SDKROOT not specified, assuming $SDKROOT"
else
SDKROOT="$SDKROOT"
fi
if [ ! -d "${SDKROOT}" ]
then
echo "*** ${SDKROOT} does not exist, please install required SDK, or set SDKROOT manually. ***"
exit 1
fi
add_make "IOS_SDK=${SDKROOT}"
}
check_macosx_sdk()
{
if [ -z "${OSX_VERSION}" ]
then
OSX_VERSION=`xcrun --show-sdk-version`
echo "OSX_VERSION not specified, assuming $OSX_VERSION"
fi
if test -z "$SDKROOT"
then
SDKROOT=`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$OSX_VERSION.sdk
echo "SDKROOT not specified, assuming $SDKROOT"
fi
if [ ! -d "${SDKROOT}" ]
then
SDKROOT_NOT_FOUND=`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$OSX_VERSION.sdk
SDKROOT=`xcode-select -print-path`/SDKs/MacOSX$OSX_VERSION.sdk
echo "SDKROOT not found at $SDKROOT_NOT_FOUND, trying $SDKROOT"
fi
if [ ! -d "${SDKROOT}" ]
then
SDKROOT_NOT_FOUND="$SDKROOT"
SDKROOT=`xcrun --show-sdk-path`
echo "SDKROOT not found at $SDKROOT_NOT_FOUND, trying $SDKROOT"
fi
if [ ! -d "${SDKROOT}" ]
then
echo "*** ${SDKROOT} does not exist, please install required SDK, or set SDKROOT manually. ***"
exit 1
fi
add_make "MACOSX_SDK=${SDKROOT}"
add_make "OSX_VERSION ?= ${OSX_VERSION}"
}
check_android_sdk()
{
[ -z "${ANDROID_NDK}" ] && echo "You must set ANDROID_NDK environment variable" && exit 1
add_make "ANDROID_NDK := ${ANDROID_NDK}"
[ -z "${ANDROID_ABI}" ] && echo "You must set ANDROID_ABI environment variable" && exit 1
add_make "ANDROID_ABI := ${ANDROID_ABI}"
[ ${ANDROID_ABI} = "armeabi-v7a" ] && add_make_enabled "HAVE_NEON"
[ ${ANDROID_ABI} = "armeabi-v7a" ] && add_make_enabled "HAVE_ARMV7A"
[ ${ANDROID_ABI} = "armeabi" -a -z "${NO_ARMV6}" ] && add_make_enabled "HAVE_ARMV6"
}
test -z "$PREFIX" || add_make "PREFIX := $PREFIX"
#
# Checks
#
OS="${HOST#*-}" # strip architecture
case "${OS}" in
apple-darwin*)
if test -z "$BUILDFORIOS"
then
check_macosx_sdk
add_make_enabled "HAVE_MACOSX" "HAVE_DARWIN_OS" "HAVE_BSD"
else
check_ios_sdk
add_make_enabled "HAVE_IOS" "HAVE_DARWIN_OS" "HAVE_BSD" "HAVE_NEON" "HAVE_ARMV7A"
fi
;;
*bsd*)
add_make_enabled "HAVE_BSD"
;;
*android*)
check_android_sdk
add_make_enabled "HAVE_LINUX" "HAVE_ANDROID"
case "${HOST}" in
*arm*)
add_make "PLATFORM_SHORT_ARCH := arm"
;;
*i686*)
add_make "PLATFORM_SHORT_ARCH := x86"
;;
*mipsel*)
add_make "PLATFORM_SHORT_ARCH := mips"
;;
esac
;;
*linux*)
add_make_enabled "HAVE_LINUX"
;;
*wince*)
add_make_enabled "HAVE_WINCE"
;;
*mingw*)
add_make_enabled "HAVE_WIN32"
;;
*solaris*)
add_make_enabled "HAVE_SOLARIS"
;;
esac
#
# Results output
#
test -e Makefile && unlink Makefile
ln -sf ../../contrib/src/main.mak Makefile || exit $?
cat << EOF
Bootstrap completed.
Run "make" to start compilation.
Other targets:
* make install same as "make"
* make prebuilt fetch and install prebuilt binaries
* make list list packages
* make fetch fetch required source tarballs
* make fetch-all fetch all source tarballs
* make distclean clean everything and undo bootstrap
* make mostlyclean clean everything except source tarballs
* make clean clean everything
* make package prepare prebuilt packages
EOF
mkdir -p ../../contrib/tarballs || exit $?
Writing rules
==============
At the bare minimum, a package in contrib must provide two Makefile
targets in src/foo/rules.mak:
- .foo to build and install the package, and
- .sum-foo to fetch or create a source tarball and verify it,
where foo the package name.
Tarball
--------
.sum-foo typically depends on a separate target that fetches the source
code. In that case, .sum-foo needs only verify that the tarball
is correct, e.g.:
$(TARBALLS)/libfoo-$(FOO_VERSION).tar.bz2:
$(call download,$(FOO_URL))
# This will use the default rule: check SHA-512
.sum-foo: libfoo-$(FOO_VERSION).tar.bz2
NOTE: contrary to the previous VLC contribs, this system always uses
a source tarball, even if the source code is downloaded from a VCS.
This serves two purposes:
- offline builds (or behind a firewall),
- source code requirements compliance.
Compilation
------------
Similarly, .foo typically depends on the source code directory. In this
case, care must be taken that the directory name only exists if the
source code is fully ready. Otherwise Makefile dependencies will break
(this is not an issue for files, only directories).
libfoo: libfoo-$(FOO_VERSION).tar.bz2 .sum-foo
$(UNPACK) # to libfoo-$(FOO_VERSION)
### apply patches here ###
# last command: make the target directory
$(MOVE)
.foo: libfoo
cd $< && $(HOSTVARS) ./configure $(HOSTCONF)
cd $< && $(MAKE) install
touch $@
Conditional builds
-------------------
As far as possible, build rules should determine automatically whether
a package is useful (for VLC media player) or not. Useful packages
should be listed in the PKGS special variable. See some examples:
# FFmpeg is always useful
PKGS += ffmpeg
# DirectX headers are useful only on Windows
ifdef HAVE_WIN32
PKGS += directx
endif
# x264 is only useful when stream output is enabled
ifdef BUILD_ENCODERS
PKGS += x264
endif
If a package is a dependency of another package, but it is not a
direct dependency of VLC, then it should NOT be added to PKGS. The
build system will automatically build it via dependencies (see below).
Some packages may be provided by the target system. This is especially
common when building natively on Linux or BSD. When this situation is
detected, the package name should be added to the PKGS_FOUND special
variable. The build system will then skip building this package:
# Asks pkg-config if foo version 1.2.3 or later is present:
ifeq ($(call need_pkg,'foo >= 1.2.3'),)
PKGS_FOUND += foo
endif
Note: The need_pkg function always return 1 during cross-compilation.
This is a known bug.
Dependencies
-------------
If package bar depends on package foo, the special DEPS_bar variable
should be defined as follow:
DEPS_bar = foo $(DEPS_foo)
Note that dependency resolution is unfortunately _not_ recursive.
Therefore $(DEPS_foo) really should be specified explicitly as shown
above. (In practice, this will not make any difference insofar as there
are no pure second-level nested dependencies. For instance, libass
depends on FontConfig, which depends on FreeType, but libass depends
directly on FreeType anyway.)
Also note that DEPS_bar is set "recursively" with =, rather than
"immediately" with :=. This is so that $(DEPS_foo) is expanded
correctly, even if DEPS_foo it is defined after DEPS_bar.
Implementation note:
If you must know, the main.mak build hackery will automatically
emit a dependency from .bar onto .dep-foo:
.bar: .dep-foo
...whereby .dep-foo will depend on .foo:
.dep-foo: .foo
touch $@
...unless foo was detected in the target distribution:
.dep-foo:
touch $@
So you really only need to set DEPS_bar.
#!/bin/sh
# ***************************************************************************
# change_prefix.sh : allow to transfer a contrib dir
# ***************************************************************************
# Copyright © 2012 VideoLAN and its authors
#
# Authors: Rafaël Carré
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
# ***************************************************************************
set -e
LANG=C
export LANG
if test "$1" = "-h" -o "$1" = "--help" -o $# -gt 2; then
echo "Usage: $0 [old prefix] [new prefix]
Without arguments, this script assumes old prefix = @@CONTRIB_PREFIX@@,
and new prefix = current directory.
"
fi
if [ $# != 2 ]
then
old_prefix=@@CONTRIB_PREFIX@@
new_prefix=`pwd`
else
old_prefix=$1
new_prefix=$2
fi
# process [dir] [filemask] [text only]
process() {
for file in `find $1 -maxdepth 1 -type f -name "$2"`
do
if [ -n "$3" ]
then
file $file | sed "s/^.*: //" | grep -q 'text\|shell' || continue
fi
echo "Fixing up $file"
sed -i.orig -e "s,$old_prefix,$new_prefix,g" $file
rm -f $file.orig
done
}
process bin/ "*" check
process lib/ "*.la"
process lib/pkgconfig/ "*.pc"
#! /bin/sh
HOST="$1"
if test -z "$HOST"; then
echo "Usage: $0 <target machine>" >&2
exit 1
fi
case "$HOST" in
amd64-*)
ARCH="x86_64"
;;
i[3456]86-*)
ARCH="i386"
;;
powerpc-*|ppc-*)
ARCH="ppc"
;;
powerpc64-*|ppc64-*)
ARCH="ppc64"
;;
*-*)
ARCH="${HOST%%-*}"
;;
*)
echo "$HOST: invalid machine specification" >&2
exit 1
esac
echo $ARCH
# Main makefile for VLC 3rd party libraries ("contrib")
# Copyright (C) 2003-2011 the VideoLAN team
#
# This file is under the same license as the vlc package.
all: install
# bootstrap configuration
include config.mak
TOPSRC ?= ../../contrib
TOPDST ?= ..
SRC := $(TOPSRC)/src
TARBALLS := $(TOPSRC)/tarballs
PATH :=$(abspath ../../extras/tools/build/bin):$(PATH)
export PATH
PKGS_ALL := $(patsubst $(SRC)/%/rules.mak,%,$(wildcard $(SRC)/*/rules.mak))
DATE := $(shell date +%Y%m%d)
VPATH := $(TARBALLS)
# Common download locations
GNU := http://ftp.gnu.org/gnu
SF := http://heanet.dl.sourceforge.net/sourceforge
CONTRIB_VIDEOLAN := http://downloads.videolan.org/pub/contrib
GNUTELEPHONY := http://dev.gnutelephony.org/dist/tarballs
#
# Machine-dependent variables
#
PREFIX ?= $(TOPDST)/$(HOST)
PREFIX := $(abspath $(PREFIX))
ifneq ($(HOST),$(BUILD))
HAVE_CROSS_COMPILE = 1
endif
ARCH := $(shell $(SRC)/get-arch.sh $(HOST))
ifeq ($(ARCH)-$(HAVE_WIN32),x86_64-1)
HAVE_WIN64 := 1
endif
ifdef HAVE_CROSS_COMPILE
need_pkg = 1
else
need_pkg = $(shell $(PKG_CONFIG) $(1) || echo 1)
endif
#
# Default values for tools
#
ifndef HAVE_CROSS_COMPILE
ifneq ($(findstring $(origin CC),undefined default),)
CC := gcc
endif
ifneq ($(findstring $(origin CXX),undefined default),)
CXX := g++
endif
ifneq ($(findstring $(origin LD),undefined default),)
LD := ld
endif
ifneq ($(findstring $(origin AR),undefined default),)
AR := ar
endif
ifneq ($(findstring $(origin RANLIB),undefined default),)
RANLIB := ranlib
endif
ifneq ($(findstring $(origin STRIP),undefined default),)
STRIP := strip
endif
else
ifneq ($(findstring $(origin CC),undefined default),)
CC := $(HOST)-gcc
endif
ifneq ($(findstring $(origin CXX),undefined default),)
CXX := $(HOST)-g++
endif
ifneq ($(findstring $(origin LD),undefined default),)
LD := $(HOST)-ld
endif
ifneq ($(findstring $(origin AR),undefined default),)
AR := $(HOST)-ar
endif
ifneq ($(findstring $(origin RANLIB),undefined default),)
RANLIB := $(HOST)-ranlib
endif
ifneq ($(findstring $(origin STRIP),undefined default),)
STRIP := $(HOST)-strip
endif
endif
ifdef HAVE_ANDROID
CC := $(HOST)-gcc --sysroot=$(ANDROID_NDK)/platforms/android-9/arch-$(PLATFORM_SHORT_ARCH)
CXX := $(HOST)-g++ --sysroot=$(ANDROID_NDK)/platforms/android-9/arch-$(PLATFORM_SHORT_ARCH)
endif
ifdef HAVE_MACOSX
MIN_OSX_VERSION=10.6
CC=xcrun cc
CXX=xcrun c++
AR=xcrun ar
LD=xcrun ld
STRIP=xcrun strip
RANLIB=xcrun ranlib
EXTRA_CFLAGS += -isysroot $(MACOSX_SDK) -mmacosx-version-min=$(MIN_OSX_VERSION) -DMACOSX_DEPLOYMENT_TARGET=$(MIN_OSX_VERSION)
EXTRA_LDFLAGS += -Wl,-syslibroot,$(MACOSX_SDK) -mmacosx-version-min=$(MIN_OSX_VERSION) -isysroot $(MACOSX_SDK) -DMACOSX_DEPLOYMENT_TARGET=$(MIN_OSX_VERSION)
ifeq ($(ARCH),x86_64)
EXTRA_CFLAGS += -m64
EXTRA_LDFLAGS += -m64
else
EXTRA_CFLAGS += -m32
EXTRA_LDFLAGS += -m32
endif
XCODE_FLAGS = -sdk macosx$(OSX_VERSION)
ifeq ($(shell xcodebuild -version 2>/dev/null | tee /dev/null|head -1|cut -d\ -f2|cut -d. -f1),3)
XCODE_FLAGS += ARCHS=$(ARCH)
# XCode 3 doesn't support -arch
else
XCODE_FLAGS += -arch $(ARCH)
endif
endif
CCAS=$(CC) -c
ifdef HAVE_IOS
CC=xcrun clang
CXX=xcrun clang++
ifdef HAVE_NEON
AS=perl $(abspath ../../extras/tools/build/bin/gas-preprocessor.pl) $(CC)
CCAS=gas-preprocessor.pl $(CC) -c
else
CCAS=$(CC) -c
endif
AR=xcrun ar
LD=xcrun ld
STRIP=xcrun strip
RANLIB=xcrun ranlib
EXTRA_CFLAGS += $(CFLAGS)
EXTRA_LDFLAGS += $(LDFLAGS)
endif
ifdef HAVE_WIN32
ifneq ($(shell $(CC) $(CFLAGS) -E -dM -include _mingw.h - < /dev/null | grep -E __MINGW64_VERSION_MAJOR),)
HAVE_MINGW_W64 := 1
endif
endif
ifdef HAVE_SOLARIS
ifeq ($(ARCH),x86_64)
EXTRA_CFLAGS += -m64
EXTRA_LDFLAGS += -m64
else
EXTRA_CFLAGS += -m32
EXTRA_LDFLAGS += -m32
endif
endif
cppcheck = $(shell $(CC) $(CFLAGS) -E -dM - < /dev/null | grep -E $(1))
EXTRA_CFLAGS += -I$(PREFIX)/include
CPPFLAGS := $(CPPFLAGS) $(EXTRA_CFLAGS)
CFLAGS := $(CFLAGS) $(EXTRA_CFLAGS) -g
CXXFLAGS := $(CXXFLAGS) $(EXTRA_CFLAGS) -g
EXTRA_LDFLAGS += -L$(PREFIX)/lib
LDFLAGS := $(LDFLAGS) $(EXTRA_LDFLAGS)
# Do not export those! Use HOSTVARS.
# Do the FPU detection, after we have figured out our compilers and flags.
ifneq ($(findstring $(ARCH),aarch64 i386 ppc ppc64 sparc sparc64 x86_64),)
# This should be consistent with include/vlc_cpu.h
HAVE_FPU = 1
else ifneq ($(findstring $(ARCH),arm),)
ifneq ($(call cppcheck, __VFP_FP__)),)
ifeq ($(call cppcheck, __SOFTFP__),)
HAVE_FPU = 1
endif
endif
else ifneq ($(call cppcheck, __mips_hard_float),)
HAVE_FPU = 1
endif
ACLOCAL_AMFLAGS += -I$(PREFIX)/share/aclocal
export ACLOCAL_AMFLAGS
PKG_CONFIG ?= pkg-config
ifdef HAVE_CROSS_COMPILE
# This inhibits .pc file from within the cross-compilation toolchain sysroot.
# Hopefully, nobody ever needs that.
PKG_CONFIG_PATH := /usr/share/pkgconfig
PKG_CONFIG_LIBDIR := /usr/$(HOST)/lib/pkgconfig
export PKG_CONFIG_LIBDIR
endif
PKG_CONFIG_PATH := $(PKG_CONFIG_PATH):$(PREFIX)/lib/pkgconfig
export PKG_CONFIG_PATH
ifndef GIT
ifeq ($(shell git --version >/dev/null 2>&1 || echo FAIL),)
GIT = git
endif
endif
GIT ?= $(error git not found!)
ifndef SVN
ifeq ($(shell svn --version >/dev/null 2>&1 || echo FAIL),)
SVN = svn
endif
endif
SVN ?= $(error subversion client (svn) not found!)
ifeq ($(shell curl --version >/dev/null 2>&1 || echo FAIL),)
download = curl -f -L -- "$(1)" > "$@"
else ifeq ($(shell wget --version >/dev/null 2>&1 || echo FAIL),)
download = rm -f $@.tmp && \
wget --passive -c -p -O $@.tmp "$(1)" && \
touch $@.tmp && \
mv $@.tmp $@
else ifeq ($(which fetch >/dev/null 2>&1 || echo FAIL),)
download = rm -f $@.tmp && \
fetch -p -o $@.tmp "$(1)" && \
touch $@.tmp && \
mv $@.tmp $@
else
download = $(error Neither curl nor wget found!)
endif
ifeq ($(shell which bzcat >/dev/null 2>&1 || echo FAIL),)
BZCAT = bzcat
else
BZCAT ?= $(error Bunzip2 client (bzcat) not found!)
endif
ifeq ($(shell gzcat --version >/dev/null 2>&1 || echo FAIL),)
ZCAT = gzcat
else ifeq ($(shell zcat --version >/dev/null 2>&1 || echo FAIL),)
ZCAT = zcat
else
ZCAT ?= $(error Gunzip client (zcat) not found!)
endif
ifeq ($(shell sha512sum --version >/dev/null 2>&1 || echo FAIL),)
SHA512SUM = sha512sum --check
else ifeq ($(shell shasum --version >/dev/null 2>&1 || echo FAIL),)
SHA512SUM = shasum -a 512 --check
else ifeq ($(shell openssl version >/dev/null 2>&1 || echo FAIL),)
SHA512SUM = openssl dgst -sha512
else
SHA512SUM = $(error SHA-512 checksumming not found!)
endif
#
# Common helpers
#
HOSTCONF := --prefix="$(PREFIX)"
HOSTCONF += --datarootdir="$(PREFIX)/share"
HOSTCONF += --includedir="$(PREFIX)/include"
HOSTCONF += --libdir="$(PREFIX)/lib"
HOSTCONF += --build="$(BUILD)" --host="$(HOST)" --target="$(HOST)"
HOSTCONF += --program-prefix=""
# libtool stuff:
HOSTCONF += --enable-static --disable-shared --disable-dependency-tracking
ifdef HAVE_WIN32
HOSTCONF += --without-pic
PIC :=
else
HOSTCONF += --with-pic
PIC := -fPIC
endif
HOSTTOOLS := \
CC="$(CC)" CXX="$(CXX)" LD="$(LD)" \
AR="$(AR)" CCAS="$(CCAS)" RANLIB="$(RANLIB)" STRIP="$(STRIP)" \
PATH="$(PREFIX)/bin:$(PATH)"
# this part is different from VideoLan main.mak
HOSTVARS_NOPIC := $(HOSTTOOLS) \
CPPFLAGS="$(CPPFLAGS)" \
CFLAGS="$(CFLAGS)" \
CXXFLAGS="$(CXXFLAGS)" \
LDFLAGS="$(LDFLAGS)"
HOSTVARS := $(HOSTTOOLS) \
CPPFLAGS="$(CPPFLAGS) $(PIC)" \
CFLAGS="$(CFLAGS) $(PIC)" \
CXXFLAGS="$(CXXFLAGS) $(PIC)" \
LDFLAGS="$(LDFLAGS)"
download_git = \
rm -Rf $(@:.tar.xz=) && \
$(GIT) clone $(2:%=--branch %) $(1) $(@:.tar.xz=) && \
(cd $(@:.tar.xz=) && $(GIT) checkout $(3:%= %)) && \
rm -Rf $(@:%.tar.xz=%)/.git && \
(cd $(dir $@) && \
tar cvJ $(notdir $(@:.tar.xz=))) > $@ && \
rm -Rf $(@:.tar.xz=)
checksum = \
$(foreach f,$(filter $(TARBALLS)/%,$^), \
grep -- " $(f:$(TARBALLS)/%=%)$$" \
"$(SRC)/$(patsubst .sum-%,%,$@)/$(2)SUMS" &&) \
(cd $(TARBALLS) && $(1) /dev/stdin) < \
"$(SRC)/$(patsubst .sum-%,%,$@)/$(2)SUMS"
CHECK_SHA512 = $(call checksum,$(SHA512SUM),SHA512)
UNPACK = $(RM) -R $@ \
$(foreach f,$(filter %.tar.gz %.tgz,$^), && tar xvzf $(f)) \
$(foreach f,$(filter %.tar.bz2,$^), && tar xvjf $(f)) \
$(foreach f,$(filter %.tar.xz,$^), && tar xvJf $(f)) \
$(foreach f,$(filter %.zip,$^), && unzip $(f))
UNPACK_DIR = $(basename $(basename $(notdir $<)))
APPLY = (cd $(UNPACK_DIR) && patch -fp1) <
pkg_static = (cd $(UNPACK_DIR) && ../../../contrib/src/pkg-static.sh $(1))
MOVE = mv $(UNPACK_DIR) $@ && touch $@
AUTOMAKE_DATA_DIRS=$(foreach n,$(foreach n,$(subst :, ,$(shell echo $$PATH)),$(abspath $(n)/../share)),$(wildcard $(n)/automake*))
UPDATE_AUTOCONFIG = for dir in $(AUTOMAKE_DATA_DIRS); do \
if test -f "$${dir}/config.sub" -a -f "$${dir}/config.guess"; then \
cp "$${dir}/config.sub" "$${dir}/config.guess" $(UNPACK_DIR); \
break; \
fi; \
done
RECONF = mkdir -p -- $(PREFIX)/share/aclocal && \
cd $< && autoreconf -fiv $(ACLOCAL_AMFLAGS)
CMAKE = cmake . -DCMAKE_TOOLCHAIN_FILE=$(abspath toolchain.cmake) \
-DCMAKE_INSTALL_PREFIX=$(PREFIX)
#
# Per-package build rules
#
include $(SRC)/*/rules.mak
ifeq ($(PKGS_DISABLE), all)
PKGS :=
endif
#
# Targets
#
ifneq ($(filter $(PKGS_DISABLE),$(PKGS_ENABLE)),)
$(error Same package(s) disabled and enabled at the same time)
endif
# Apply automatic selection (= remove distro packages):
PKGS_AUTOMATIC := $(filter-out $(PKGS_FOUND),$(PKGS))
# Apply manual selection (from bootstrap):
PKGS_MANUAL := $(sort $(PKGS_ENABLE) $(filter-out $(PKGS_DISABLE),$(PKGS_AUTOMATIC)))
# Resolve dependencies:
PKGS_DEPS := $(filter-out $(PKGS_FOUND) $(PKGS_MANUAL),$(sort $(foreach p,$(PKGS_MANUAL),$(DEPS_$(p)))))
PKGS := $(sort $(PKGS_MANUAL) $(PKGS_DEPS))
fetch: $(PKGS:%=.sum-%)
fetch-all: $(PKGS_ALL:%=.sum-%)
install: $(PKGS:%=.%)
mostlyclean:
-$(RM) $(foreach p,$(PKGS_ALL),.$(p) .sum-$(p) .dep-$(p))
-$(RM) toolchain.cmake
-$(RM) -R "$(PREFIX)"
-$(RM) -R */
clean: mostlyclean
-$(RM) $(TARBALLS)/*.*
distclean: clean
$(RM) config.mak
unlink Makefile
# TODO: set up the correct url
#PREBUILT_URL=$(URL)/contrib/$(HOST)/sflphone-contrib-$(HOST)-latest.tar.bz2
sflphone-contrib-$(HOST)-latest.tar.bz2:
$(call download,$(PREBUILT_URL))
prebuilt: sflphone-contrib-$(HOST)-latest.tar.bz2
-$(UNPACK)
mv $(HOST) $(TOPDST)
cd $(TOPDST)/$(HOST) && $(SRC)/change_prefix.sh
package: install
rm -Rf tmp/
mkdir -p tmp/
cp -r $(PREFIX) tmp/
# remove useless files
cd tmp/$(notdir $(PREFIX)); \
cd share; rm -Rf man doc gtk-doc info lua projectM gettext; cd ..; \
rm -Rf man sbin etc lib/lua lib/sidplay
cd tmp/$(notdir $(PREFIX)) && $(abspath $(SRC))/change_prefix.sh $(PREFIX) @@CONTRIB_PREFIX@@
(cd tmp && tar c $(notdir $(PREFIX))/) | bzip2 -c > ../sflphone-contrib-$(HOST)-$(DATE).tar.bz2
list:
@echo All packages:
@echo ' $(PKGS_ALL)' | fmt
@echo Distribution-provided packages:
@echo ' $(PKGS_FOUND)' | fmt
@echo Automatically selected packages:
@echo ' $(PKGS_AUTOMATIC)' | fmt
@echo Manually deselected packages:
@echo ' $(PKGS_DISABLE)' | fmt
@echo Manually selected packages:
@echo ' $(PKGS_ENABLE)' | fmt
@echo Depended-on packages:
@echo ' $(PKGS_DEPS)' | fmt
@echo To-be-built packages:
@echo ' $(PKGS)' | fmt
.PHONY: all fetch fetch-all install mostlyclean clean distclean package list prebuilt
# CMake toolchain
toolchain.cmake:
$(RM) $@
ifdef HAVE_WIN32
echo "set(CMAKE_SYSTEM_NAME Windows)" >> $@
echo "set(CMAKE_RC_COMPILER $(HOST)-windres)" >> $@
endif
ifdef HAVE_DARWIN_OS
echo "set(CMAKE_SYSTEM_NAME Darwin)" >> $@
echo "set(CMAKE_C_FLAGS $(CFLAGS))" >> $@
echo "set(CMAKE_CXX_FLAGS $(CFLAGS))" >> $@
echo "set(CMAKE_LD_FLAGS $(LDFLAGS))" >> $@
echo "set(CMAKE_AR ar CACHE FILEPATH "Archiver")" >> $@
ifdef HAVE_IOS
echo "set(CMAKE_OSX_SYSROOT $(IOS_SDK))" >> $@
else
echo "set(CMAKE_OSX_SYSROOT $(MACOSX_SDK))" >> $@
endif
endif
ifdef HAVE_CROSS_COMPILE
echo "set(_CMAKE_TOOLCHAIN_PREFIX $(HOST)-)" >> $@
ifdef HAVE_ANDROID
# cmake will overwrite our --sysroot with a native (host) one on Darwin
# Set it to "" right away to short-circuit this behaviour
echo "set(CMAKE_CXX_SYSROOT_FLAG \"\")" >> $@
echo "set(CMAKE_C_SYSROOT_FLAG \"\")" >> $@
endif
endif
echo "set(CMAKE_C_COMPILER $(CC))" >> $@
echo "set(CMAKE_CXX_COMPILER $(CXX))" >> $@
echo "set(CMAKE_FIND_ROOT_PATH $(PREFIX))" >> $@
echo "set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)" >> $@
echo "set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)" >> $@
echo "set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)" >> $@
# Default pattern rules
.sum-%: $(SRC)/%/SHA512SUMS
$(CHECK_SHA512)
touch $@
.sum-%:
$(error Download and check target not defined for $*)
# Dummy dependency on found packages
$(patsubst %,.dep-%,$(PKGS_FOUND)): .dep-%:
touch $@
# Real dependency on missing packages
$(patsubst %,.dep-%,$(filter-out $(PKGS_FOUND),$(PKGS_ALL))): .dep-%: .%
touch -r $< $@
.SECONDEXPANSION:
# Dependency propagation (convert 'DEPS_foo = bar' to '.foo: .bar')
$(foreach p,$(PKGS_ALL),.$(p)): .%: $$(foreach d,$$(DEPS_$$*),.dep-$$(d))
.DELETE_ON_ERROR:
#! /bin/sh
# Copyright (C) 2012 Rémi Denis-Courmont
# This file is distributed under the same license as the vlc package.
if test -z "$1" || test -n "$2"; then
echo "Usage: $0 <file.pc>" >&2
echo "Merges the pkg-config Libs.private stanza into Libs stanza." >&2
exit 1
fi
exec <"$1" >"$1.tmp" || exit $?
PUBLIC=""
PRIVATE=""
while read LINE; do
pub="${LINE#Libs:}"
priv="${LINE#Libs.private:}"
if test "$pub" != "$LINE"; then
PUBLIC="$pub"
elif test "$priv" != "$LINE"; then
PRIVATE="$priv"
else
echo "$LINE"
fi
done
echo "Libs: $PUBLIC $PRIVATE"
mv -f -- "$1.tmp" "$1"
*.tar.*
*.zip
*.h
*.tgz
*-git/
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment