diff --git a/contrib/bootstrap b/contrib/bootstrap new file mode 100755 index 0000000000000000000000000000000000000000..ea80a7ca1d4aa5aa4e7c979306a59c55a80011c8 --- /dev/null +++ b/contrib/bootstrap @@ -0,0 +1,266 @@ +#! /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 $? diff --git a/contrib/src/README b/contrib/src/README new file mode 100644 index 0000000000000000000000000000000000000000..581a3921954324841a710cb5a10a56ad0e4a4b43 --- /dev/null +++ b/contrib/src/README @@ -0,0 +1,125 @@ +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. diff --git a/contrib/src/change_prefix.sh b/contrib/src/change_prefix.sh new file mode 100755 index 0000000000000000000000000000000000000000..43636204dfb7846e930a5e1fe19fbdd0fe79684d --- /dev/null +++ b/contrib/src/change_prefix.sh @@ -0,0 +1,62 @@ +#!/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" diff --git a/contrib/src/get-arch.sh b/contrib/src/get-arch.sh new file mode 100755 index 0000000000000000000000000000000000000000..2df77de83c942337c4d9dcba6eb00585499c112c --- /dev/null +++ b/contrib/src/get-arch.sh @@ -0,0 +1,29 @@ +#! /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 diff --git a/contrib/src/main.mak b/contrib/src/main.mak new file mode 100644 index 0000000000000000000000000000000000000000..5937f08ac2016207c8f60e57ab9502455a129254 --- /dev/null +++ b/contrib/src/main.mak @@ -0,0 +1,461 @@ +# 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: diff --git a/contrib/src/pkg-static.sh b/contrib/src/pkg-static.sh new file mode 100755 index 0000000000000000000000000000000000000000..25c2af754a6f648493d52fb40cf62eda5131bdb1 --- /dev/null +++ b/contrib/src/pkg-static.sh @@ -0,0 +1,29 @@ +#! /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" diff --git a/contrib/tarballs/.gitignore b/contrib/tarballs/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..7e4045957f870c852233ec8bd36be58657c3fe32 --- /dev/null +++ b/contrib/tarballs/.gitignore @@ -0,0 +1,5 @@ +*.tar.* +*.zip +*.h +*.tgz +*-git/