From ba5c3563e603e9518e79f691f6c27c556d56999d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C3=ABl=20Carr=C3=A9?= Date: Thu, 9 Oct 2014 16:08:19 -0400 Subject: [PATCH] contrib: add optional rules to build developer tools Useful for platforms where autotools, cmake etc. are out of date or not easily available. Change-Id: I8fd37e0ca12daf2af7379ede8b80bc9fd57e5d62 --- daemon/extras/tools/bootstrap | 116 ++++++++++++++ daemon/extras/tools/packages.mak | 41 +++++ daemon/extras/tools/tools.mak | 260 +++++++++++++++++++++++++++++++ 3 files changed, 417 insertions(+) create mode 100755 daemon/extras/tools/bootstrap create mode 100644 daemon/extras/tools/packages.mak create mode 100644 daemon/extras/tools/tools.mak diff --git a/daemon/extras/tools/bootstrap b/daemon/extras/tools/bootstrap new file mode 100755 index 000000000..b526e2221 --- /dev/null +++ b/daemon/extras/tools/bootstrap @@ -0,0 +1,116 @@ +#!/bin/sh +# Copyright © 2011 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. + +export LC_ALL= +NEEDED= + +if [ ! -f tools.mak ] +then + echo "You must run me in ./extras/tools !" + exit 1 +fi + +check_tar() { +if ! tar PcJ /dev/null >/dev/null 2>&1 +then + echo "tar doesn't support xz (J option)" + NEEDED="$NEEDED .tar .xz" +fi +} + +check_sed() { +tmp="`pwd`/check_sed" +trap "rm $tmp{,-e} 2>/dev/null" EXIT +echo "test file for GNU sed" > $tmp +if ! sed -i -e 's/sed//' $tmp >/dev/null 2>&1 +then + echo "sed doesn't do in-place editing (-i option)" + NEEDED="$NEEDED .sed" +fi +} + +check() { +if ! $1 --version >/dev/null 2>&1 +then + echo "$1 not found" + NEEDED="$NEEDED .$1" +else + # found, need to check version ? + [ -z "$2" ] && return # no + gotver=`$1 --version | head -1 | sed s/'.* '//` + gotmajor=`echo $gotver|cut -d. -f1` + gotminor=`echo $gotver|cut -d. -f2` + gotmicro=`echo $gotver|cut -d. -f3` + [ -z "$gotmicro" ] && gotmicro=0 + needmajor=`echo $2|cut -d. -f1` + needminor=`echo $2|cut -d. -f2` + needmicro=`echo $2|cut -d. -f3` + [ -z "$needmicro" ] && needmicro=0 + if [ "$needmajor" -gt "$gotmajor" \ + -o "$needmajor" -eq "$gotmajor" -a "$needminor" -gt "$gotminor" \ + -o "$needmajor" -eq "$gotmajor" -a "$needminor" -eq "$gotminor" -a "$needmicro" -gt "$gotmicro" ] + then + echo "$1 too old" + NEEDED="$NEEDED .$1" + fi +fi +} + +check autoconf 2.69 +check automake 1.14 +check m4 1.4.16 +check libtool 2.4 +check pkg-config +check cmake 2.8.8 +check yasm +check_tar +check_sed + +[ -n "$NEEDED" ] && mkdir -p build/ + +CPUS= +CC= +CXX= +case `uname` in + Linux) + CPUS=`grep -c ^processor /proc/cpuinfo` + ;; + Darwin) + CPUS=`sysctl hw.ncpu|cut -d: -f2` + gcc-4.2 --version >/dev/null 2>&1 && CC=CC=gcc-4.2 + g++-4.2 --version >/dev/null 2>&1 && CXX=CXX=g++-4.2 + ;; + SunOS) + CPUS=`/usr/bin/kstat -p :::state | grep 'on-line$' | wc -l | sed 's/ //g'` + ;; + *) + CPUS=1 # default + ;; +esac + + +cat > Makefile << EOF +MAKEFLAGS += -j$CPUS +$CC +$CXX +PREFIX=\$(abspath ./build) + +all: $NEEDED + @echo "You are ready to build SFLPhone and its contribs" + +include tools.mak +EOF diff --git a/daemon/extras/tools/packages.mak b/daemon/extras/tools/packages.mak new file mode 100644 index 000000000..a70477d9a --- /dev/null +++ b/daemon/extras/tools/packages.mak @@ -0,0 +1,41 @@ +GNU=http://ftp.gnu.org/gnu +APACHE=http://mirror.csclub.uwaterloo.ca/apache +SF= http://downloads.sourceforge.net/project + +YASM_VERSION=1.2.0 +#YASM_URL=$(CONTRIB_VIDEOLAN)/yasm-$(YASM_VERSION).tar.gz +YASM_URL=http://www.tortall.net/projects/yasm/releases/yasm-$(YASM_VERSION).tar.gz + +CMAKE_VERSION=2.8.12.2 +CMAKE_URL=http://www.cmake.org/files/v2.8/cmake-$(CMAKE_VERSION).tar.gz + +LIBTOOL_VERSION=2.4.2 +LIBTOOL_URL=$(GNU)/libtool/libtool-$(LIBTOOL_VERSION).tar.gz + +AUTOCONF_VERSION=2.69 +AUTOCONF_URL=$(GNU)/autoconf/autoconf-$(AUTOCONF_VERSION).tar.gz + +AUTOMAKE_VERSION=1.14 +AUTOMAKE_URL=$(GNU)/automake/automake-$(AUTOMAKE_VERSION).tar.gz + +M4_VERSION=1.4.16 +M4_URL=$(GNU)/m4/m4-$(M4_VERSION).tar.gz + +PKGCFG_VERSION=0.27.1-1 +#PKGCFG_URL=http://downloads.videolan.org/pub/videolan/testing/contrib/pkg-config-$(PKGCFG_VERSION).tar.gz +PKGCFG_URL=$(SF)/pkgconfiglite/$(PKGCFG_VERSION)/pkg-config-lite-$(PKGCFG_VERSION).tar.gz + +TAR_VERSION=1.26 +TAR_URL=$(GNU)/tar/tar-$(TAR_VERSION).tar.bz2 + +XZ_VERSION=5.0.3 +XZ_URL=http://tukaani.org/xz/xz-$(XZ_VERSION).tar.bz2 + +GAS_VERSION=72887b9 +GAS_URL=http://git.libav.org/?p=gas-preprocessor.git;a=snapshot;h=$(GAS_VERSION);sf=tgz + +SED_VERSION=4.2.2 +SED_URL=$(GNU)/sed/sed-$(SED_VERSION).tar.bz2 + +ANT_VERSION=1.9.4 +ANT_URL=$(APACHE)/ant/binaries/apache-ant-$(ANT_VERSION)-bin.tar.bz2 diff --git a/daemon/extras/tools/tools.mak b/daemon/extras/tools/tools.mak new file mode 100644 index 000000000..4ea849824 --- /dev/null +++ b/daemon/extras/tools/tools.mak @@ -0,0 +1,260 @@ +# Copyright (C) 2003-2011 the VideoLAN team +# +# This file is under the same license as the vlc package. + +include packages.mak + +# +# common rules +# + +AUTOCONF=$(PREFIX)/bin/autoconf +export AUTOCONF + +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 + +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 -p1) < +MOVE = mv $(UNPACK_DIR) $@ && touch $@ + +# +# package rules +# + +# yasm + +yasm-$(YASM_VERSION).tar.gz: + $(call download,$(YASM_URL)) + +yasm: yasm-$(YASM_VERSION).tar.gz + $(UNPACK) + $(MOVE) + +.yasm: yasm + (cd $<; ./configure --prefix=$(PREFIX) && $(MAKE) && $(MAKE) install) + touch $@ + +CLEAN_FILE += .yasm +CLEAN_PKG += yasm +DISTCLEAN_PKG += yasm-$(YASM_VERSION).tar.gz + +# cmake + +cmake-$(CMAKE_VERSION).tar.gz: + $(call download,$(CMAKE_URL)) + +cmake: cmake-$(CMAKE_VERSION).tar.gz + $(UNPACK) + $(MOVE) + +.cmake: cmake + (cd $<; ./configure --prefix=$(PREFIX) && $(MAKE) && $(MAKE) install) + touch $@ + +CLEAN_FILE += .cmake +CLEAN_PKG += cmake +DISTCLEAN_PKG += cmake-$(CMAKE_VERSION).tar.gz + +# libtool + +libtool-$(LIBTOOL_VERSION).tar.gz: + $(call download,$(LIBTOOL_URL)) + +libtool: libtool-$(LIBTOOL_VERSION).tar.gz + $(UNPACK) + $(MOVE) + +.libtool: libtool + (cd $<; ./configure --prefix=$(PREFIX) && $(MAKE) && $(MAKE) install) + ln -sf libtool $(PREFIX)/bin/glibtool + ln -sf libtoolize $(PREFIX)/bin/glibtoolize + touch $@ + +CLEAN_PKG += libtool +DISTCLEAN_PKG += libtool-$(LIBTOOL_VERSION).tar.gz +CLEAN_FILE += .libtool + +# GNU tar (with xz support) + +tar-$(TAR_VERSION).tar.bz2: + $(call download,$(TAR_URL)) + +tar: tar-$(TAR_VERSION).tar.bz2 + $(UNPACK) + $(MOVE) + +.tar: tar + (cd $<; ./configure --prefix=$(PREFIX) && $(MAKE) && $(MAKE) install) + touch $@ + +CLEAN_PKG += tar +DISTCLEAN_PKG += tar-$(TAR_VERSION).tar.bz2 +CLEAN_FILE += .tar + +# xz + +xz-$(XZ_VERSION).tar.bz2: + $(call download,$(XZ_URL)) + +xz: xz-$(XZ_VERSION).tar.bz2 + $(UNPACK) + $(MOVE) + +.xz: xz + (cd $<; ./configure --prefix=$(PREFIX) && $(MAKE) && $(MAKE) install) + touch $@ + +CLEAN_PKG += xz +DISTCLEAN_PKG += xz-$(XZ_VERSION).tar.bz2 +CLEAN_FILE += .xz + +# autoconf + +autoconf-$(AUTOCONF_VERSION).tar.gz: + $(call download,$(AUTOCONF_URL)) + +autoconf: autoconf-$(AUTOCONF_VERSION).tar.gz + $(UNPACK) + $(MOVE) + +.autoconf: autoconf .pkg-config + (cd $<; ./configure --prefix=$(PREFIX) && $(MAKE) && $(MAKE) install) + touch $@ + +CLEAN_FILE += .autoconf +CLEAN_PKG += autoconf +DISTCLEAN_PKG += autoconf-$(AUTOCONF_VERSION).tar.gz + +# automake + +automake-$(AUTOMAKE_VERSION).tar.gz: + $(call download,$(AUTOMAKE_URL)) + +automake: automake-$(AUTOMAKE_VERSION).tar.gz + $(UNPACK) + $(MOVE) + +.automake: automake .autoconf + (cd $<; ./configure --prefix=$(PREFIX) && $(MAKE) && $(MAKE) install) + touch $@ + +CLEAN_FILE += .automake +CLEAN_PKG += automake +DISTCLEAN_PKG += automake-$(AUTOMAKE_VERSION).tar.gz + +# m4 + +m4-$(M4_VERSION).tar.gz: + $(call download,$(M4_URL)) + +m4: m4-$(M4_VERSION).tar.gz + $(UNPACK) + $(MOVE) + +.m4: m4 + (cd $<; ./configure --prefix=$(PREFIX) && $(MAKE) && $(MAKE) install) + touch $@ + +CLEAN_FILE += .m4 +CLEAN_PKG += m4 +DISTCLEAN_PKG += m4-$(M4_VERSION).tar.gz + +# pkg-config + +pkg-config-$(PKGCFG_VERSION).tar.gz: + $(call download,$(PKGCFG_URL)) + +pkgconfig: pkg-config-$(PKGCFG_VERSION).tar.gz + $(UNPACK) + mv pkg-config-lite-$(PKGCFG_VERSION) pkg-config-$(PKGCFG_VERSION) + $(MOVE) + +.pkg-config: pkgconfig + (cd pkgconfig; ./configure --prefix=$(PREFIX) --disable-shared --enable-static && $(MAKE) && $(MAKE) install) + touch $@ + +CLEAN_FILE += .pkg-config +CLEAN_PKG += pkgconfig +DISTCLEAN_PKG += pkg-config-$(PKGCFG_VERSION).tar.gz + +# gas-preprocessor +gas-preprocessor-$(GAS_VERSION).tar.gz: + $(call download,$(GAS_URL)) + +gas: gas-preprocessor-$(GAS_VERSION).tar.gz + $(UNPACK) + $(MOVE) + +.gas: gas + cp gas/gas-preprocessor.pl build/bin/ + touch $@ + +CLEAN_FILE += .gas +CLEAN_PKG += gas +DISTCLEAN_PKG += yuvi-gas-preprocessor-$(GAS_VERSION).tar.gz + +# GNU sed + +sed-$(SED_VERSION).tar.bz2: + $(call download,$(SED_URL)) + +sed: sed-$(SED_VERSION).tar.bz2 + $(UNPACK) + $(MOVE) + +.sed: sed + (cd $<; ./configure --prefix=$(PREFIX) && $(MAKE) && $(MAKE) install) + touch $@ + +CLEAN_PKG += sed +DISTCLEAN_PKG += sed-$(SED_VERSION).tar.bz2 +CLEAN_FILE += .sed + +# Apache ANT + +apache-ant-$(ANT_VERSION).tar.bz2: + $(call download,$(ANT_URL)) + +ant: apache-ant-$(ANT_VERSION).tar.bz2 + $(UNPACK) + $(MOVE) + +.ant: ant + (cp $