diff options
author | huceke <ebsi4711@gmail.com> | 2012-09-04 15:20:59 -0700 |
---|---|---|
committer | huceke <ebsi4711@gmail.com> | 2012-09-04 15:20:59 -0700 |
commit | 45fe6fce168e99e34cd7ffd437d482eabb2bd3da (patch) | |
tree | f5d2d10366d2152e505ee8137e662300b845a0e4 /tools | |
parent | d9d303f93a201e5fb70f84765766bbdbb906eecb (diff) | |
parent | 494cb5e4f24766f76cf6db8114f33a81fd00b8ba (diff) |
Merge pull request #1282 from huceke/raspberrypi
RaspberryPI support
Diffstat (limited to 'tools')
50 files changed, 2326 insertions, 2 deletions
diff --git a/tools/android/depends/xbmc/Makefile b/tools/android/depends/xbmc/Makefile index 38ca256899..f5de74080c 100644 --- a/tools/android/depends/xbmc/Makefile +++ b/tools/android/depends/xbmc/Makefile @@ -17,7 +17,7 @@ CONFIGURE=cp -f $(CONFIG_SUB) $(CONFIG_GUESS) build-aux/ ;\ --enable-neon --enable-gles --enable-debug \ --disable-sdl --disable-x11 --disable-xrandr \ --disable-optical-drive --disable-joystick --disable-optimizations \ - --enable-shared-lib --disable-alsa + --enable-shared-lib --enable-alsa all: $(SOURCE)/libxbmc.so diff --git a/tools/darwin/depends/libcec/Makefile b/tools/darwin/depends/libcec/Makefile index 367386783e..c516346a23 100644 --- a/tools/darwin/depends/libcec/Makefile +++ b/tools/darwin/depends/libcec/Makefile @@ -3,7 +3,7 @@ include ../config.site.mk # lib name, version LIBNAME=libcec -VERSION=1.7.1 +VERSION=1.8.1 SOURCE=$(LIBNAME)-$(VERSION) ARCHIVE=$(SOURCE).tar.gz diff --git a/tools/rbp/depends/Makefile b/tools/rbp/depends/Makefile new file mode 100644 index 0000000000..0bb195ef7d --- /dev/null +++ b/tools/rbp/depends/Makefile @@ -0,0 +1,37 @@ +include ../Makefile.include + +ifeq ($(USE_BUILDROOT),1) + BUILDTOOLS = + SUBDIRS = xbmc +else + BUILDTOOLS = help2man autoconf automake libtool pkg-config yasm cmake patchelf + SUBDIRS = liblzo2 tiff libnfs jasper libplist libshairport tinyxml xbmc +endif + +IMAGENAME = xbmc-rbp-`date +'%y%m%d'` + +.PHONY: buildtools subdirs + +all: buildtools subdirs + +buildtools: + for d in $(BUILDTOOLS); do $(MAKE) -C $$d; done + +subdirs: + for d in $(SUBDIRS); do $(MAKE) -C $$d; done + +clean: + for d in $(BUILDTOOLS); do $(MAKE) -C $$d clean; done + for d in $(SUBDIRS); do $(MAKE) -C $$d clean; done + +distclean:: + for d in $(BUILDTOOLS); do $(MAKE) -C $$d distclean; done + for d in $(SUBDIRS); do $(MAKE) -C $$d distclean; done + rm -rf $(XBMCPREFIX) + +image: + make -C $(BUILDROOT) tarroot IMAGE=$(CURDIR)/$(IMAGENAME) TAR_COMPRESSOR= + echo "S111xbmc S110rc.local" | cat $(TARGETFS)/etc/init.d/rc.deps - > $(CURDIR)/packaging/etc/init.d/rc.deps + cd packaging; tar -uf $(CURDIR)/$(IMAGENAME).tar * + tar -uf $(CURDIR)/$(IMAGENAME).tar $(XBMCPREFIX) + gzip $(IMAGENAME).tar diff --git a/tools/rbp/depends/autoconf/.gitignore b/tools/rbp/depends/autoconf/.gitignore new file mode 100644 index 0000000000..e832e48ede --- /dev/null +++ b/tools/rbp/depends/autoconf/.gitignore @@ -0,0 +1 @@ +autoconf-2.63 diff --git a/tools/rbp/depends/autoconf/Makefile b/tools/rbp/depends/autoconf/Makefile new file mode 100644 index 0000000000..2a5ca9efdb --- /dev/null +++ b/tools/rbp/depends/autoconf/Makefile @@ -0,0 +1,41 @@ +include ../../Makefile.include + +# lib name, version +LIBNAME=autoconf +VERSION=2.63 +SOURCE=$(LIBNAME)-$(VERSION) +ARCHIVE=$(SOURCE).tar.gz + +# configuration settings +export PREFIX=$(XBMCPREFIX) +export PATH:=$(PREFIX)/bin:$(PATH) +CONFIGURE=./configure --prefix=$(PREFIX) + +LIBDYLIB=$(SOURCE)/bin/autoconf + +CLEAN_FILES=$(ARCHIVE) $(SOURCE) + +all: $(LIBDYLIB) .installed + +$(TARBALLS_LOCATION)/$(ARCHIVE): + $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE) + -rm -rf $(SOURCE) + $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + echo $(SOURCE) > .gitignore + cd $(SOURCE); $(CONFIGURE) + +$(LIBDYLIB): $(SOURCE) + make -j $(JOBS) -C $(SOURCE) + +.installed: + make -C $(SOURCE) install + touch $@ + +clean: + make -C $(SOURCE) clean + rm -f .installed + +distclean:: + rm -rf $(SOURCE) .installed diff --git a/tools/rbp/depends/automake/.gitignore b/tools/rbp/depends/automake/.gitignore new file mode 100644 index 0000000000..409d7e1529 --- /dev/null +++ b/tools/rbp/depends/automake/.gitignore @@ -0,0 +1 @@ +automake-1.10.3 diff --git a/tools/rbp/depends/automake/Makefile b/tools/rbp/depends/automake/Makefile new file mode 100644 index 0000000000..38c5d6476c --- /dev/null +++ b/tools/rbp/depends/automake/Makefile @@ -0,0 +1,41 @@ +include ../../Makefile.include + +# lib name, version +LIBNAME=automake +VERSION=1.10.3 +SOURCE=$(LIBNAME)-$(VERSION) +ARCHIVE=$(SOURCE).tar.gz + +# configuration settings +export PREFIX=$(XBMCPREFIX) +export PATH:=$(PREFIX)/bin:$(PATH) +CONFIGURE=./configure --prefix=$(PREFIX) + +LIBDYLIB=$(SOURCE)/bin/automake + +CLEAN_FILES=$(ARCHIVE) $(SOURCE) + +all: $(LIBDYLIB) .installed + +$(TARBALLS_LOCATION)/$(ARCHIVE): + $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE) + -rm -rf $(SOURCE) + $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + echo $(SOURCE) > .gitignore + cd $(SOURCE); $(CONFIGURE) + +$(LIBDYLIB): $(SOURCE) + make -j $(JOBS) -C $(SOURCE) + +.installed: + make -C $(SOURCE) install + touch $@ + +clean: + make -C $(SOURCE) clean + rm -f .installed + +distclean:: + rm -rf $(SOURCE) .installed diff --git a/tools/rbp/depends/cmake/.gitignore b/tools/rbp/depends/cmake/.gitignore new file mode 100644 index 0000000000..5acc817257 --- /dev/null +++ b/tools/rbp/depends/cmake/.gitignore @@ -0,0 +1 @@ +cmake-2.8.4 diff --git a/tools/rbp/depends/cmake/Makefile b/tools/rbp/depends/cmake/Makefile new file mode 100644 index 0000000000..a081187c9c --- /dev/null +++ b/tools/rbp/depends/cmake/Makefile @@ -0,0 +1,41 @@ +include ../../Makefile.include + +APPNAME=cmake +VERSION=2.8.4 +SOURCE=$(APPNAME)-$(VERSION) +ARCHIVE=$(SOURCE).tar.gz + +# configuration settings +PREFIX:=$(XBMCPREFIX) +export PATH:=$(PREFIX)/bin:$(PATH) +CONFIGURE=./bootstrap --prefix=$(PREFIX) + +APP=$(SOURCE)/$(APPNAME) + +CLEAN_FILES=$(ARCHIVE) $(SOURCE) + +all: $(APP) .installed + +$(TARBALLS_LOCATION)/$(ARCHIVE): + $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE) + -rm -rf $(SOURCE) + $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + echo $(SOURCE) > .gitignore + cd $(SOURCE); $(CONFIGURE) + +$(APP): $(SOURCE) + make -j $(JOBS) -C $(SOURCE) + +.installed: + make -C $(SOURCE) install + touch $@ + +clean: + make -C $(SOURCE) clean + rm -f .installed + +distclean:: + rm -rf $(SOURCE) .installed + diff --git a/tools/rbp/depends/depends.mk b/tools/rbp/depends/depends.mk new file mode 100644 index 0000000000..68d0ffeca5 --- /dev/null +++ b/tools/rbp/depends/depends.mk @@ -0,0 +1,55 @@ +ifeq ($(USE_BUILDROOT),1) + export CFLAGS=-pipe -O3 -mcpu=arm1176jzf-s -mtune=arm1176jzf-s -mfloat-abi=hard -mfpu=vfp -mabi=aapcs-linux -Wno-psabi -Wa,-mno-warn-deprecated -Wno-deprecated-declarations + export HOST=arm-unknown-linux-gnueabi + export BUILD=i686-linux + export PREFIX=$(XBMCPREFIX) + export SYSROOT=$(BUILDROOT)/output/host/usr/arm-unknown-linux-gnueabi/sysroot + export CFLAGS+=-isystem$(SYSROOT)/usr/include -isystem$(SYSROOT)/opt/vc/include -isystem$(SDKSTAGE)/opt/vc/include/interface/vcos/pthreads -isystem$(PREFIX)/include -isystem$(PREFIX)/usr/include/mysql --sysroot=$(SYSROOT) + export CXXFLAGS=$(CFLAGS) --sysroot=$(SYSROOT) + export CPPFLAGS=$(CFLAGS) --sysroot=$(SYSROOT) + export LDFLAGS=-L$(SYSROOT)/opt/vc/lib -L$(XBMCPREFIX)/lib + export LD=$(TOOLCHAIN)/bin/$(HOST)-ld + export CC=$(TOOLCHAIN)/bin/$(HOST)-gcc + export CXX=$(TOOLCHAIN)/bin/$(HOST)-g++ + export OBJDUMP=$(TOOLCHAIN)/bin/$(HOST)-objdump + export RANLIB=$(TOOLCHAIN)/bin/$(HOST)-ranlib + export STRIP=$(TOOLCHAIN)/bin/$(HOST)-strip + export AR=$(TOOLCHAIN)/bin/$(HOST)-ar + export CXXCPP=$(CXX) -E + export PKG_CONFIG_PATH=$(PREFIX)/lib/pkgconfig + export PYTHON_VERSION=2.7 + export PATH:=$(PREFIX)/bin:$(BUILDROOT)/output/host/usr/bin:$(PATH) + export TEXTUREPACKER_NATIVE_ROOT=/usr + export PYTHON_LDFLAGS=-L$(SDKSTAGE)/usr/lib -lpython$(PYTHON_VERSION) -lpthread -ldl -lutil -lm +else + export CFLAGS=-pipe -O3 -mcpu=arm1176jzf-s -mtune=arm1176jzf-s -mfloat-abi=softfp -mfpu=vfp -mabi=aapcs-linux -Wno-psabi -Wa,-mno-warn-deprecated -Wno-deprecated-declarations + export HOST=arm-bcm2708-linux-gnueabi + export BUILD=i686-linux + export PREFIX=${XBMCPREFIX} + export TARGETFS + export SYSROOT=/usr/local/bcm-gcc/arm-bcm2708-linux-gnueabi/sys-root + export RLINK_PATH=-Wl,-rpath-link,${SYSROOT}/lib -Wl,-rpath-link,${TARGETFS}/lib -Wl,-rpath-link,${TARGETFS}/usr/lib -Wl,-rpath-link,${TARGETFS}/opt/vc/ + export CFLAGS+=-isystem${XBMCPREFIX}/include -isystem${SDKSTAGE}/usr/include -isystem${SDKSTAGE}/opt/vc/include -isystem$(SDKSTAGE)/opt/vc/include/interface/vcos/pthreads -isystem${SDKSTAGE}/opt/vc + export CFLAGS+=-L${XBMCPREFIX}/lib -L${SYSROOT}/lib -L${TARGETFS}/lib -L${TARGETFS}/usr/lib -L${TARGETFS}/opt/vc/lib ${RLINK_PATH} + export CXXFLAGS=${CFLAGS} + export CPPFLAGS=${CFLAGS} + export LDFLAGS=${RLINK_PATH} -L${TARGETFS}/lib -L${TARGETFS}/usr/lib -L${XBMCPREFIX}/lib + export LD=${TOOLCHAIN}/bin/${HOST}-ld + export AR=${TOOLCHAIN}/bin/${HOST}-ar + export CC=${TOOLCHAIN}/bin/${HOST}-gcc + export CXX=${TOOLCHAIN}/bin/${HOST}-g++ + export CXXCPP=${CXX} -E + export RANLIB=${TOOLCHAIN}/bin/${HOST}-ranlib + export STRIP=${TOOLCHAIN}/bin/${HOST}-strip + export OBJDUMP=${TOOLCHAIN}/bin/${HOST}-objdump + #export ACLOCAL=aclocal -I ${SDKSTAGE}/usr/share/aclocal -I ${TARGETFS}/usr/share/aclocal-1.11 + export PKG_CONFIG_LIBDIR=${PREFIX}/lib/pkgconfig:${SDKSTAGE}/lib/pkgconfig:${SDKSTAGE}/usr/lib/pkgconfig + export PKG_CONFIG_PATH=$(PREFIX)/bin/pkg-config + export PYTHON_VERSION=2.6 + export PATH:=${PREFIX}/bin:$(PATH):${TOOLCHAIN}/bin + export TEXTUREPACKER_NATIVE_ROOT=/usr + export PYTHON_LDFLAGS=-L$(SDKSTAGE)/usr/lib -lpython$(PYTHON_VERSION) +endif +export PYTHON_CPPFLAGS=-I$(SDKSTAGE)/usr/include/python$(PYTHON_VERSION) +export PYTHON_SITE_PKG=$(SDKSTAGE)/usr/lib/python$(PYTHON_VERSION)/site-packages +export PYTHON_NOVERSIONCHECK=no-check diff --git a/tools/rbp/depends/help2man/.gitignore b/tools/rbp/depends/help2man/.gitignore new file mode 100644 index 0000000000..eecdd7be98 --- /dev/null +++ b/tools/rbp/depends/help2man/.gitignore @@ -0,0 +1 @@ +help2man-1.38.2 diff --git a/tools/rbp/depends/help2man/Makefile b/tools/rbp/depends/help2man/Makefile new file mode 100644 index 0000000000..e8e53a50b6 --- /dev/null +++ b/tools/rbp/depends/help2man/Makefile @@ -0,0 +1,40 @@ +include ../../Makefile.include + +# lib name, version +LIBNAME=help2man +VERSION=1.38.2 +SOURCE=$(LIBNAME)-$(VERSION) +ARCHIVE=$(SOURCE).tar.gz + +# configuration settings +export PREFIX=$(XBMCPREFIX) +CONFIGURE=./configure --prefix=$(PREFIX) + +CLEAN_FILES=$(ARCHIVE) $(SOURCE) + +LIBDYLIB=$(SOURCE)/help2man + +all: $(LIBDYLIB) .installed + +$(TARBALLS_LOCATION)/$(ARCHIVE): + $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE) + -rm -rf $(SOURCE) + $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + echo $(SOURCE) > .gitignore + cd $(SOURCE); $(CONFIGURE) + +$(LIBDYLIB): $(SOURCE) + make -j $(JOBS) -C $(SOURCE) + +.installed: + make -C $(SOURCE) install + touch $@ + +clean: + make -C $(SOURCE) clean + rm -f .installed + +distclean:: + rm -rf $(SOURCE) .installed diff --git a/tools/rbp/depends/jasper/.gitignore b/tools/rbp/depends/jasper/.gitignore new file mode 100644 index 0000000000..7030c19dfa --- /dev/null +++ b/tools/rbp/depends/jasper/.gitignore @@ -0,0 +1 @@ +jasper-1.900.1 diff --git a/tools/rbp/depends/jasper/Makefile b/tools/rbp/depends/jasper/Makefile new file mode 100644 index 0000000000..8898a56f83 --- /dev/null +++ b/tools/rbp/depends/jasper/Makefile @@ -0,0 +1,43 @@ +include ../../Makefile.include +include ../depends.mk + +# lib name, version +LIBNAME=jasper +VERSION=1.900.1 +SOURCE=$(LIBNAME)-$(VERSION) +ARCHIVE=$(SOURCE).zip +ARCHIVE_TOOL=unzip +ARCHIVE_TOOL_FLAGS= + +# configuration settings +CONFIGURE=./configure --prefix=$(PREFIX) --host=$(HOST) + +LIBDYLIB=$(SOURCE)/$(LIBNAME)/.libs/$(LIBNAME).so + +CLEAN_FILES=$(ARCHIVE) $(SOURCE) + +all: $(LIBDYLIB) .installed + +$(TARBALLS_LOCATION)/$(ARCHIVE): + $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE) + rm -rf $(SOURCE) + $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + echo $(SOURCE) > .gitignore + cd $(SOURCE); $(CONFIGURE) + +$(LIBDYLIB): $(SOURCE) + make -j $(JOBS) -C $(SOURCE) + +.installed: + make -C $(SOURCE) install + touch $@ + +clean: + make -C $(SOURCE) clean + rm -f .installed + +distclean:: + rm -rf $(SOURCE) .installed + diff --git a/tools/rbp/depends/liblzo2/.gitignore b/tools/rbp/depends/liblzo2/.gitignore new file mode 100644 index 0000000000..ef00f815a5 --- /dev/null +++ b/tools/rbp/depends/liblzo2/.gitignore @@ -0,0 +1 @@ +lzo-2.03 diff --git a/tools/rbp/depends/liblzo2/Makefile b/tools/rbp/depends/liblzo2/Makefile new file mode 100644 index 0000000000..7b627062ab --- /dev/null +++ b/tools/rbp/depends/liblzo2/Makefile @@ -0,0 +1,41 @@ +include ../../Makefile.include +include ../depends.mk + +# lib name, version +LIBNAME=lzo +VERSION=2.03 +SOURCE=$(LIBNAME)-$(VERSION) +ARCHIVE=$(SOURCE).tar.gz + +# configuration settings +CONFIGURE=./configure --prefix=$(PREFIX) --host=$(HOST) + +LIBDYLIB=$(SOURCE)/src/.libs/lib$(LIBNAME)2.so + +CLEAN_FILES=$(ARCHIVE) $(SOURCE) + +all: $(LIBDYLIB) .installed + +$(TARBALLS_LOCATION)/$(ARCHIVE): + $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE) + rm -rf $(SOURCE) + $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + echo $(SOURCE) > .gitignore + cd $(SOURCE); $(CONFIGURE) + +$(LIBDYLIB): $(SOURCE) + make -j $(JOBS) -C $(SOURCE) + +.installed: + make -C $(SOURCE) install + touch $@ + +clean: + make -C $(SOURCE) clean + rm -f .installed + +distclean:: + rm -rf $(SOURCE) .installed + diff --git a/tools/rbp/depends/libnfs/.gitignore b/tools/rbp/depends/libnfs/.gitignore new file mode 100644 index 0000000000..72f8fd72df --- /dev/null +++ b/tools/rbp/depends/libnfs/.gitignore @@ -0,0 +1 @@ +libnfs-0804e67 diff --git a/tools/rbp/depends/libnfs/Makefile b/tools/rbp/depends/libnfs/Makefile new file mode 100644 index 0000000000..fb55937a1d --- /dev/null +++ b/tools/rbp/depends/libnfs/Makefile @@ -0,0 +1,41 @@ +include ../../Makefile.include +include ../depends.mk + +# lib name, version +LIBNAME=libnfs +VERSION=1.3.0 +SOURCE=$(LIBNAME)-$(VERSION) +ARCHIVE=$(SOURCE).tar.gz + +# configuration settings +CONFIGURE=./configure CFLAGS=-D_FILE_OFFSET_BITS=64 --prefix=$(PREFIX) --host=$(HOST) + +SO_NAME=$(SOURCE)/lib/libnfs.so + +CLEAN_FILES=$(ARCHIVE) $(SOURCE) + +all: $(SO_NAME) .installed + +$(TARBALLS_LOCATION)/$(ARCHIVE): + $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE) + -rm -rf $(SOURCE) + $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + echo $(SOURCE) > .gitignore + cd $(SOURCE); ./bootstrap + cd $(SOURCE); $(CONFIGURE) + +$(SO_NAME): $(SOURCE) + make -C $(SOURCE) + +.installed: + make -C $(SOURCE) install + touch $@ +clean: + make -C $(SOURCE) clean + rm -f .installed + rm -rf $(SOURCE) + +distclean:: + rm -rf $(SOURCE) .installed diff --git a/tools/rbp/depends/libplist/0001-dontbuildswig.patch b/tools/rbp/depends/libplist/0001-dontbuildswig.patch new file mode 100644 index 0000000000..7ff491df8d --- /dev/null +++ b/tools/rbp/depends/libplist/0001-dontbuildswig.patch @@ -0,0 +1,11 @@ +--- a/CMakeLists.txt 2011-08-18 21:45:33.000000000 +0200 ++++ b/CMakeLists.txt 2011-08-18 21:45:16.000000000 +0200 +@@ -36,7 +36,7 @@ + ADD_SUBDIRECTORY( test ) + + IF ( SWIG_FOUND AND PYTHONLIBS_FOUND AND PYTHONINTERP_FOUND ) +- ADD_SUBDIRECTORY( swig ) ++# ADD_SUBDIRECTORY( swig ) + ENDIF ( SWIG_FOUND AND PYTHONLIBS_FOUND AND PYTHONINTERP_FOUND ) + + # add uninstall target diff --git a/tools/rbp/depends/libplist/Makefile b/tools/rbp/depends/libplist/Makefile new file mode 100644 index 0000000000..ebe049d59d --- /dev/null +++ b/tools/rbp/depends/libplist/Makefile @@ -0,0 +1,45 @@ +include ../../Makefile.include +include ../depends.mk + +# lib name, version +LIBNAME=libplist +VERSION=1.6 +SOURCE=$(LIBNAME)-$(VERSION) +FILENAME=v$(VERSION) +ARCHIVE=$(SOURCE).tar.gz + +LIBDYLIB=$(SOURCE)/build/src/$(LIBNAME).so + +all: $(LIBDYLIB) .installed + +$(TARBALLS_LOCATION)/$(ARCHIVE): + $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE) + rm -rf $(SOURCE) + $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + echo $(SOURCE) > .gitignore + cd $(SOURCE); patch -p1 < ../0001-dontbuildswig.patch + cd $(SOURCE); rm -rf build; mkdir -p build + cd $(SOURCE)/build; CC=$(CC) CXX=$(CXX) cmake \ + -DCMAKE_C_FLAGS:STRING="$(CPPFLAGS) $(CFLAGS)" \ + -DCMAKE_CXX_FLAGS:STRING="$(CPPFLAGS) $(CXXFLAGS)" \ + -DCMAKE_INCLUDE_PATH=$(PREFIX)/include \ + -DCMAKE_LIBRARY_PATH=$(PREFIX)/lib \ + -DCMAKE_INSTALL_NAME_DIR=$(PREFIX)/lib \ + -DCMAKE_INSTALL_PREFIX=$(PREFIX) \ + -DCMAKE_FIND_ROOT_PATH=$(platform_sdk_path) .. + +$(LIBDYLIB): $(SOURCE) + make -j 1 -C $(SOURCE)/build + +.installed: + make -C $(SOURCE)/build install + touch $@ + +clean: + rm -rf $(SOURCE) .installed + +distclean:: + rm -rf $(SOURCE) .installed + diff --git a/tools/rbp/depends/libshairport/.gitignore b/tools/rbp/depends/libshairport/.gitignore new file mode 100644 index 0000000000..fbc1ee7dff --- /dev/null +++ b/tools/rbp/depends/libshairport/.gitignore @@ -0,0 +1 @@ +libshairport-1.2.0.20310_lib diff --git a/tools/rbp/depends/libshairport/001_add_ao.patch b/tools/rbp/depends/libshairport/001_add_ao.patch new file mode 100644 index 0000000000..995f7b78ee --- /dev/null +++ b/tools/rbp/depends/libshairport/001_add_ao.patch @@ -0,0 +1,270 @@ +diff -uP libshairport-1.2.0.20310_lib/src/ao.h ../../../../../libshairport-1.2.0.20310_lib/src/ao.h +--- src/ao.h 1970-01-01 01:00:00.000000000 +0100 ++++ src/ao.h 2011-09-25 20:36:36.000000000 +0200 +@@ -0,0 +1,156 @@ ++/* ++ * ++ * ao.h ++ * ++ * Original Copyright (C) Aaron Holtzman - May 1999 ++ * Modifications Copyright (C) Stan Seibert - July 2000, July 2001 ++ * More Modifications Copyright (C) Jack Moffitt - October 2000 ++ * ++ * This file is part of libao, a cross-platform audio outputlibrary. See ++ * README for a history of this source code. ++ * ++ * libao 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, or (at your option) ++ * any later version. ++ * ++ * libao 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 GNU Make; see the file COPYING. If not, write to ++ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ++ * ++ */ ++#ifndef __AO_H__ ++#define __AO_H__ ++ ++#ifdef __cplusplus ++extern "C" ++{ ++#endif /* __cplusplus */ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <stdint.h> ++#include <errno.h> ++ ++/* --- Constants ---*/ ++ ++#define AO_TYPE_LIVE 1 ++#define AO_TYPE_FILE 2 ++ ++ ++#define AO_ENODRIVER 1 ++#define AO_ENOTFILE 2 ++#define AO_ENOTLIVE 3 ++#define AO_EBADOPTION 4 ++#define AO_EOPENDEVICE 5 ++#define AO_EOPENFILE 6 ++#define AO_EFILEEXISTS 7 ++#define AO_EBADFORMAT 8 ++ ++#define AO_EFAIL 100 ++ ++ ++#define AO_FMT_LITTLE 1 ++#define AO_FMT_BIG 2 ++#define AO_FMT_NATIVE 4 ++ ++/* --- Structures --- */ ++ ++typedef struct ao_info { ++ int type; /* live output or file output? */ ++ char *name; /* full name of driver */ ++ char *short_name; /* short name of driver */ ++ char *author; /* driver author */ ++ char *comment; /* driver comment */ ++ int preferred_byte_format; ++ int priority; ++ char **options; ++ int option_count; ++} ao_info; ++ ++typedef struct ao_functions ao_functions; ++typedef struct ao_device ao_device; ++ ++typedef struct ao_sample_format { ++ int bits; /* bits per sample */ ++ int rate; /* samples per second (in a single channel) */ ++ int channels; /* number of audio channels */ ++ int byte_format; /* Byte ordering in sample, see constants below */ ++ char *matrix; /* input channel location/ordering */ ++} ao_sample_format; ++ ++typedef struct ao_option { ++ char *key; ++ char *value; ++ struct ao_option *next; ++} ao_option; ++ ++#if defined(AO_BUILDING_LIBAO) ++#include "ao_private.h" ++#endif ++ ++/* --- Functions --- */ ++ ++/* library setup/teardown */ ++void ao_initialize(void); ++void ao_shutdown(void); ++ ++/* device setup/playback/teardown */ ++int ao_append_global_option(const char *key, ++ const char *value); ++int ao_append_option(ao_option **options, ++ const char *key, ++ const char *value); ++void ao_free_options(ao_option *options); ++ ++char* ao_get_option(ao_option *options, const char* key); ++ ++ao_device* ao_open_live(int driver_id, ++ ao_sample_format *format, ++ ao_option *option); ++ao_device* ao_open_file(int driver_id, ++ const char *filename, ++ int overwrite, ++ ao_sample_format *format, ++ ao_option *option); ++ ++int ao_play(ao_device *device, ++ char *output_samples, ++ uint32_t num_bytes); ++int ao_close(ao_device *device); ++ ++/* driver information */ ++int ao_driver_id(const char *short_name); ++int ao_default_driver_id(void); ++ao_info *ao_driver_info(int driver_id); ++ao_info **ao_driver_info_list(int *driver_count); ++char *ao_file_extension(int driver_id); ++ ++/* miscellaneous */ ++int ao_is_big_endian(void); ++ ++ ++#ifdef __cplusplus ++} ++#endif /* __cplusplus */ ++ ++#endif /* __AO_H__ */ ++ ++extern struct AudioOutput g_ao; ++struct AudioOutput ++ { ++ void (*ao_initialize)(void); ++ int (*ao_play)(ao_device *, char *, uint32_t); ++ int (*ao_default_driver_id)(void); ++ ao_device* (*ao_open_live)( int, ao_sample_format *, ao_option *); ++ int (*ao_close)(ao_device *); ++ /* -- Device Setup/Playback/Teardown -- */ ++ int (*ao_append_option)(ao_option **, const char *, const char *); ++ void (*ao_free_options)(ao_option *); ++ char* (*ao_get_option)(ao_option *, const char* ); ++ }; +diff -uP libshairport-1.2.0.20310_lib/src/hairtunes.c ../../../../../libshairport-1.2.0.20310_lib/src/hairtunes.c +--- src/hairtunes.c 2011-09-23 21:55:48.000000000 +0200 ++++ src/hairtunes.c 2011-09-25 20:37:49.000000000 +0200 +@@ -25,7 +25,7 @@ + */ + + #define XBMC +-//#defined HAS_AO ++#define HAS_AO + + #include <stdio.h> + #include <stdlib.h> +@@ -45,7 +45,7 @@ + #include <sys/signal.h> + #include <fcntl.h> + #ifdef HAS_AO +-#include <ao/ao.h> ++#include "ao.h" + #endif + + #ifdef FANCY_RESAMPLING +@@ -881,7 +881,7 @@ + } + #ifdef HAS_AO + } else { +- ao_play(dev, (char *)outbuf, play_samples*4); ++ g_ao.ao_play(dev, (char *)outbuf, play_samples*4); + #endif + } + } +@@ -906,7 +906,7 @@ + ao_device *dev; + + void* init_ao() { +- ao_initialize(); ++ g_ao.ao_initialize(); + + int driver; + #ifndef XBMC +@@ -921,7 +921,7 @@ + #endif + { + // otherwise choose the default +- driver = ao_default_driver_id(); ++ driver = g_ao.ao_default_driver_id(); + } + + ao_sample_format fmt; +@@ -944,9 +944,9 @@ + } + #endif + +- ao_append_option(&ao_opts, "name", "Streaming..."); ++ g_ao.ao_append_option(&ao_opts, "name", "Streaming..."); + +- dev = ao_open_live(driver, &fmt, ao_opts); ++ dev = g_ao.ao_open_live(driver, &fmt, ao_opts); + if (dev == NULL) { + die("Could not open ao device"); + } +@@ -985,7 +985,7 @@ + audio_running = 0; + pthread_join(audio_thread, NULL); + #ifdef HAS_AO +- ao_close(dev); ++ g_ao.ao_close(dev); + #endif + } + +diff -uP libshairport-1.2.0.20310_lib/src/shairport.c ../../../../../libshairport-1.2.0.20310_lib/src/shairport.c +--- src/shairport.c 2011-08-21 01:57:56.000000000 +0200 ++++ src/shairport.c 2011-09-25 20:44:40.000000000 +0200 +@@ -92,6 +92,14 @@ + static char tPassword[56] = ""; + static char tHWID[HWID_SIZE] = {0,51,52,53,54,55}; + ++#ifdef XBMC ++struct AudioOutput g_ao; ++void shairport_set_ao(struct AudioOutput *ao) ++{ ++ g_ao=*ao; ++} ++#endif ++ + #ifndef XBMC + int main(int argc, char **argv) + #else +diff -uP libshairport-1.2.0.20310_lib/src/shairport.h ../../../../../libshairport-1.2.0.20310_lib/src/shairport.h +--- src/shairport.h 2011-08-21 01:58:11.000000000 +0200 ++++ src/shairport.h 2011-09-25 20:36:43.000000000 +0200 +@@ -11,6 +11,7 @@ + #include <regex.h> + #include <sys/types.h> + #include <regex.h> ++#include "ao.h" + + + #define HWID_SIZE 6 +@@ -62,9 +63,11 @@ + void shairport_exit(void); + int shairport_loop(void); + int shairport_is_running(void); ++void shairport_set_ao(struct AudioOutput *ao); + + #ifdef __cplusplus + } + #endif /* __cplusplus */ + + #endif ++ diff --git a/tools/rbp/depends/libshairport/002_fix_install_header.patch b/tools/rbp/depends/libshairport/002_fix_install_header.patch new file mode 100644 index 0000000000..495b97346c --- /dev/null +++ b/tools/rbp/depends/libshairport/002_fix_install_header.patch @@ -0,0 +1,12 @@ +--- src/Makefile.am.old 2011-09-23 23:14:39.000000000 +0200 ++++ src/Makefile.am 2011-09-25 21:38:08.000000000 +0200 +@@ -1,7 +1,7 @@ + lib_LTLIBRARIES=libshairport.la + +-library_includedir=$(includedir) +-library_include_HEADERS = shairport.h ++library_includedir=$(includedir)/shairport ++library_include_HEADERS = shairport.h ao.h socketlib.h + + libshairport_la_SOURCES=shairport.c hairtunes.c socketlib.c alac.c + libshairport_la_LDFLAGS=-dynamiclib diff --git a/tools/rbp/depends/libshairport/003_fix_deadlock.patch b/tools/rbp/depends/libshairport/003_fix_deadlock.patch new file mode 100644 index 0000000000..c05970e138 --- /dev/null +++ b/tools/rbp/depends/libshairport/003_fix_deadlock.patch @@ -0,0 +1,10 @@ +--- src/hairtunes.c.orig 2011-09-25 21:58:08.000000000 +0200 ++++ src/hairtunes.c 2011-09-25 21:58:12.000000000 +0200 +@@ -991,6 +991,7 @@ + + void hairtunes_cleanup(void) + { ++ pthread_cond_signal(&ab_buffer_ready); + clean_output(); + clean_rtp(); + clean_buffer(); diff --git a/tools/rbp/depends/libshairport/004_fix_bad_access.patch b/tools/rbp/depends/libshairport/004_fix_bad_access.patch new file mode 100644 index 0000000000..1976904c4d --- /dev/null +++ b/tools/rbp/depends/libshairport/004_fix_bad_access.patch @@ -0,0 +1,22 @@ +--- src/hairtunes.c.orig 2011-09-25 23:26:56.000000000 +0200 ++++ src/hairtunes.c 2011-09-25 23:29:27.000000000 +0200 +@@ -89,7 +89,6 @@ + // maximal resampling shift - conservative + #define OUTFRAME_BYTES (4*(frame_size+3)) + +- + alac_file *decoder_info; + + #ifdef FANCY_RESAMPLING +@@ -849,6 +848,11 @@ + inbuf = buffer_get_frame(); + } while (!inbuf && audio_running); + ++ if(!audio_running) ++ { ++ return 0; //don't access inbuf if audio stopped ++ } ++ + #ifdef FANCY_RESAMPLING + if (fancy_resampling) { + int i; diff --git a/tools/rbp/depends/libshairport/005_fix_shutdown.patch b/tools/rbp/depends/libshairport/005_fix_shutdown.patch new file mode 100644 index 0000000000..32bd282719 --- /dev/null +++ b/tools/rbp/depends/libshairport/005_fix_shutdown.patch @@ -0,0 +1,10 @@ +--- src/shairport.c 2011-09-25 23:58:06.000000000 +0200 ++++ src/shairport.c.new 2011-09-25 23:57:54.000000000 +0200 +@@ -368,6 +368,7 @@ + void shairport_exit(void) + { + m_running = 0; ++ close(tServerSock); + } + + int shairport_is_running(void) diff --git a/tools/rbp/depends/libshairport/006_no_printf.patch b/tools/rbp/depends/libshairport/006_no_printf.patch new file mode 100644 index 0000000000..eb69d42b74 --- /dev/null +++ b/tools/rbp/depends/libshairport/006_no_printf.patch @@ -0,0 +1,843 @@ +--- src/alac.c 2011-08-21 00:06:21.000000000 +0200 ++++ src/alac.c 2011-10-01 04:12:09.000000000 +0200 +@@ -804,7 +804,7 @@ + } + else + { +- fprintf(stderr, "FIXME: unhandled predicition type: %i\n", prediction_type); ++ xprintf("FIXME: unhandled predicition type: %i\n", prediction_type); + /* i think the only other prediction type (or perhaps this is just a + * boolean?) runs adaptive fir twice.. like: + * predictor_decompress_fir_adapt(predictor_error, tempout, ...) +@@ -885,7 +885,7 @@ + } + case 20: + case 32: +- fprintf(stderr, "FIXME: unimplemented sample size %i\n", alac->setinfo_sample_size); ++ xprintf("FIXME: unimplemented sample size %i\n", alac->setinfo_sample_size); + break; + default: + break; +@@ -1004,7 +1004,7 @@ + } + else + { /* see mono case */ +- fprintf(stderr, "FIXME: unhandled predicition type: %i\n", prediction_type_a); ++ xprintf("FIXME: unhandled predicition type: %i\n", prediction_type_a); + } + + /* channel 2 */ +@@ -1029,7 +1029,7 @@ + } + else + { +- fprintf(stderr, "FIXME: unhandled predicition type: %i\n", prediction_type_b); ++ xprintf("FIXME: unhandled predicition type: %i\n", prediction_type_b); + } + } + else +@@ -1106,7 +1106,7 @@ + } + case 20: + case 32: +- fprintf(stderr, "FIXME: unimplemented sample size %i\n", alac->setinfo_sample_size); ++ xprintf("FIXME: unimplemented sample size %i\n", alac->setinfo_sample_size); + break; + default: + break; +--- src/hairtunes.c 2011-10-01 17:45:08.000000000 +0200 ++++ src/hairtunes.c 2011-10-01 17:42:07.000000000 +0200 +@@ -121,8 +121,8 @@ + pthread_cond_t ab_buffer_ready; + + static void die(char *why) { +- fprintf(stderr, "FATAL: %s\n", why); +- exit(1); ++ xprintf("FATAL: %s\n", why); ++ //exit(1); + } + + static int hex2bin(unsigned char *buf, char *hex) { +@@ -245,13 +245,13 @@ + continue; + } + if (!strcmp(line, "exit\n")) { +- exit(0); ++ ;//exit(0); + } + if (!strcmp(line, "flush\n")) { + hairtunes_flush(); + } + } +- fprintf(stderr, "bye!\n"); ++ xprintf("bye!\n"); + fflush(stderr); + #endif + +@@ -262,7 +262,7 @@ + { + assert(f<=0); + if (debug) +- fprintf(stderr, "VOL: %lf\n", f); ++ xprintf("VOL: %lf\n", f); + volume = pow(10.0,0.05*f); + fix_volume = 65536.0 * volume; + } +@@ -273,7 +273,7 @@ + ab_resync(); + pthread_mutex_unlock(&ab_mutex); + if (debug) +- fprintf(stderr, "FLUSH\n"); ++ xprintf("FLUSH\n"); + } + + #ifdef HAIRTUNES_STANDALONE +@@ -423,7 +423,7 @@ + } else if (seq_order(ab_read, seqno)) { // late but not yet played + abuf = audio_buffer + BUFIDX(seqno); + } else { // too late. +- fprintf(stderr, "\nlate packet %04X (%04X:%04X)\n", seqno, ab_read, ab_write); ++ xprintf("\nlate packet %04X (%04X:%04X)\n", seqno, ab_read, ab_write); + } + buf_fill = ab_write - ab_read; + pthread_mutex_unlock(&ab_mutex); +@@ -520,7 +520,7 @@ + if (seq_order(last, first)) + return; + +- fprintf(stderr, "requesting resend on %d packets (port %d)\n", last-first+1, controlport); ++ xprintf("requesting resend on %d packets (port %d)\n", last-first+1, controlport); + + char req[8]; // *not* a standard RTCP NACK + req[0] = 0x80; +@@ -604,8 +604,8 @@ + port += 3; + } + +- printf("port: %d\n", port); // let our handler know where we end up listening +- printf("cport: %d\n", port+1); ++ xprintf("port: %d\n", port); // let our handler know where we end up listening ++ xprintf("cport: %d\n", port+1); + + rtp_sockets[0] = sock; + rtp_sockets[1] = csock; +@@ -708,7 +708,7 @@ + bf_est_drift = biquad_filt(&bf_drift_lpf, CONTROL_B*(bf_est_err*CONTROL_A + err_deriv) + bf_est_drift); + + if (debug) +- fprintf(stderr, "bf %d err %f drift %f desiring %f ed %f estd %f\r", fill, bf_est_err, bf_est_drift, desired_fill, err_deriv, err_deriv + CONTROL_A*bf_est_err); ++ xprintf("bf %d err %f drift %f desiring %f ed %f estd %f\r", fill, bf_est_err, bf_est_drift, desired_fill, err_deriv, err_deriv + CONTROL_A*bf_est_err); + bf_playback_rate = 1.0 + CONTROL_A*bf_est_err + bf_est_drift; + + bf_last_err = bf_est_err; +@@ -724,7 +724,7 @@ + buf_fill = ab_write - ab_read; + if (buf_fill < 1 || !ab_synced || ab_buffering) { // init or underrun. stop and wait + if (ab_synced) +- fprintf(stderr, "\nunderrun\n"); ++ xprintf("\nunderrun\n"); + + ab_buffering = 1; + pthread_cond_wait(&ab_buffer_ready, &ab_mutex); +@@ -736,7 +736,7 @@ + return 0; + } + if (buf_fill >= BUFFER_FRAMES) { // overrunning! uh-oh. restart at a sane distance +- fprintf(stderr, "\noverrun.\n"); ++ xprintf("\noverrun.\n"); + ab_read = ab_write - START_FILL; + } + read = ab_read; +@@ -748,7 +748,7 @@ + + volatile abuf_t *curframe = audio_buffer + BUFIDX(read); + if (!curframe->ready) { +- fprintf(stderr, "\nmissing frame.\n"); ++ xprintf("\nmissing frame.\n"); + memset(curframe->data, 0, FRAME_BYTES); + } + curframe->ready = 0; +@@ -775,13 +775,13 @@ + if (stuff) { + if (stuff==1) { + if (debug) +- fprintf(stderr, "+++++++++\n"); ++ xprintf("+++++++++\n"); + // interpolate one sample + *outptr++ = dithered_vol(((long)inptr[-2] + (long)inptr[0]) >> 1); + *outptr++ = dithered_vol(((long)inptr[-1] + (long)inptr[1]) >> 1); + } else if (stuff==-1) { + if (debug) +- fprintf(stderr, "---------\n"); ++ xprintf("---------\n"); + inptr++; + inptr++; + } +--- src/shairport.c 2011-10-01 17:45:08.000000000 +0200 ++++ src/shairport.c 2011-10-01 17:41:04.000000000 +0200 +@@ -31,6 +31,27 @@ + #include "shairport.h" + #include "hairtunes.h" + ++static struct printfPtr g_printf={NULL}; ++ ++int xprintf(const char *format, ...) ++{ ++ char dbg[2048]; ++ va_list args; ++ va_start(args, format); ++ vsnprintf(dbg, sizeof(dbg), format, args); ++ va_end(args); ++ if(g_printf.extprintf) ++ { ++ g_printf.extprintf(dbg, sizeof(dbg)); ++ } ++ else ++ { ++ printf(dbg); ++ } ++ ++ return 1; ++} ++ + #ifndef TRUE + #define TRUE (-1) + #endif +@@ -98,6 +119,11 @@ + { + g_ao=*ao; + } ++ ++void shairport_set_printf(struct printfPtr *funcPtr) ++{ ++ g_printf = *funcPtr; ++} + #endif + + #ifndef XBMC +@@ -106,7 +132,7 @@ + int shairport_main(int argc, char **argv) + #endif + { +- printf("initializing shairport\n"); ++ xprintf("initializing shairport\n",NULL); + char tHWID_Hex[HWID_SIZE * 2 + 1]; + char tKnownHwid[32]; + +@@ -185,22 +211,22 @@ + } + else if(!strcmp(arg, "-h") || !strcmp(arg, "--help")) + { +- slog(LOG_INFO, "ShairPort version 0.05 C port - Airport Express emulator\n"); +- slog(LOG_INFO, "Usage:\nshairport [OPTION...]\n\nOptions:\n"); +- slog(LOG_INFO, " -a, --apname=AirPort Sets Airport name\n"); +- slog(LOG_INFO, " -p, --password=secret Sets Password (not working)\n"); +- slog(LOG_INFO, " -o, --server_port=5000 Sets Port for Avahi/dns-sd\n"); +- slog(LOG_INFO, " -b, --buffer=282 Sets Number of frames to buffer before beginning playback\n"); +- slog(LOG_INFO, " -d Daemon mode\n"); +- slog(LOG_INFO, " -q, --quiet Supresses all output.\n"); +- slog(LOG_INFO, " -v,-v2,-v3,-vv Various debugging levels\n"); +- slog(LOG_INFO, "\n"); ++ xprintf("ShairPort version 0.05 C port - Airport Express emulator\n"); ++ xprintf("Usage:\nshairport [OPTION...]\n\nOptions:\n"); ++ xprintf(" -a, --apname=AirPort Sets Airport name\n"); ++ xprintf(" -p, --password=secret Sets Password (not working)\n"); ++ xprintf(" -o, --server_port=5000 Sets Port for Avahi/dns-sd\n"); ++ xprintf(" -b, --buffer=282 Sets Number of frames to buffer before beginning playback\n"); ++ xprintf(" -d Daemon mode\n"); ++ xprintf(" -q, --quiet Supresses all output.\n"); ++ xprintf(" -v,-v2,-v3,-vv Various debugging levels\n"); ++ xprintf("\n"); + return 0; + } + } + + if ( buffer_start_fill < 30 || buffer_start_fill > BUFFER_FRAMES ) { +- fprintf(stderr, "buffer value must be > 30 and < %d\n", BUFFER_FRAMES); ++ xprintf("buffer value must be > 30 and < %d\n", BUFFER_FRAMES); + return(0); + } + +@@ -209,11 +235,11 @@ + int tPid = fork(); + if(tPid < 0) + { +- exit(1); // Error on fork ++ //exit(1); // Error on fork + } + else if(tPid > 0) + { +- exit(0); ++ //exit(0); + } + else + { +@@ -254,10 +280,10 @@ + sscanf(tHWID_Hex, "%02X%02X%02X%02X%02X%02X", &tHWID[0], &tHWID[1], &tHWID[2], &tHWID[3], &tHWID[4], &tHWID[5]); + } + +- slog(LOG_INFO, "LogLevel: %d\n", kCurrentLogLevel); +- slog(LOG_INFO, "AirName: %s\n", tServerName); +- slog(LOG_INFO, "HWID: %.*s\n", HWID_SIZE, tHWID+1); +- slog(LOG_INFO, "HWID_Hex(%d): %s\n", strlen(tHWID_Hex), tHWID_Hex); ++ xprintf("LogLevel: %d\n", kCurrentLogLevel); ++ xprintf("AirName: %s\n", tServerName); ++ xprintf("HWID: %.*s\n", HWID_SIZE, tHWID+1); ++ xprintf("HWID_Hex(%d): %s\n", strlen(tHWID_Hex), tHWID_Hex); + + if(tSimLevel >= 1) + { +@@ -271,12 +297,12 @@ + #ifndef XBMC + startAvahi(tHWID_Hex, tServerName, tPort); + #endif +- slog(LOG_DEBUG_V, "Starting connection server: specified server port: %d\n", tPort); ++ xprintf("Starting connection server: specified server port: %d\n", tPort); + tServerSock = setupListenServer(&tAddrInfo, tPort); + if(tServerSock < 0) + { + freeaddrinfo(tAddrInfo); +- slog(LOG_INFO, "Error setting up server socket on port %d, try specifying a different port\n", tPort); ++ xprintf("Error setting up server socket on port %d, try specifying a different port\n", tPort); + return 0; + } + +@@ -303,7 +329,7 @@ + + int readsock; + +- slog(LOG_DEBUG_V, "Waiting for clients to connect\n"); ++ xprintf("Waiting for clients to connect\n"); + + while(m_running) + { +@@ -335,7 +361,7 @@ + { + freeaddrinfo(tAddrInfo); + tAddrInfo = NULL; +- slog(LOG_DEBUG, "...Accepted Client Connection..\n"); ++ xprintf("...Accepted Client Connection..\n"); + close(tServerSock); + handleClient(tClientSock, tPassword, tHWID); + //close(tClientSock); +@@ -343,11 +369,11 @@ + } + else + { +- slog(LOG_DEBUG_VV, "Child now busy handling new client\n"); ++ xprintf("Child now busy handling new client\n"); + close(tClientSock); + } + #else +- slog(LOG_DEBUG, "...Accepted Client Connection..\n"); ++ xprintf("...Accepted Client Connection..\n"); + handleClient(tClientSock, tPassword, tHWID); + #endif + } +@@ -357,7 +383,7 @@ + } + } + +- slog(LOG_DEBUG_VV, "Finished\n"); ++ xprintf("Finished\n"); + if(tAddrInfo != NULL) + { + freeaddrinfo(tAddrInfo); +@@ -416,7 +442,7 @@ + + void handleClient(int pSock, char *pPassword, char *pHWADDR) + { +- slog(LOG_DEBUG_VV, "In Handle Client\n"); ++ xprintf("In Handle Client\n"); + fflush(stdout); + + socklen_t len; +@@ -435,7 +461,7 @@ + + // deal with both IPv4 and IPv6: + if (addr.ss_family == AF_INET) { +- slog(LOG_DEBUG_V, "Constructing ipv4 address\n"); ++ xprintf("Constructing ipv4 address\n"); + struct sockaddr_in *s = (struct sockaddr_in *)&addr; + port = ntohs(s->sin_port); + inet_ntop(AF_INET, &s->sin_addr, ipstr, sizeof ipstr); +@@ -455,20 +481,20 @@ + if(memcmp(&addr.bin[0], "\x00\x00\x00\x00" "\x00\x00\x00\x00" "\x00\x00\xff\xff", 12) == 0) + { + // its ipv4... +- slog(LOG_DEBUG_V, "Constructing ipv4 from ipv6 address\n"); ++ xprintf("Constructing ipv4 from ipv6 address\n"); + memcpy(ipbin, &addr.bin[12], 4); + ipbinlen = 4; + } + else + { +- slog(LOG_DEBUG_V, "Constructing ipv6 address\n"); ++ xprintf("Constructing ipv6 address\n"); + memcpy(ipbin, &s->sin6_addr, 16); + ipbinlen = 16; + } + } + +- slog(LOG_DEBUG_V, "Peer IP address: %s\n", ipstr); +- slog(LOG_DEBUG_V, "Peer port : %d\n", port); ++ xprintf("Peer IP address: %s\n", ipstr); ++ xprintf("Peer port : %d\n", port); + + int tMoreDataNeeded = 1; + struct keyring tKeys; +@@ -489,16 +515,16 @@ + tError = readDataFromClient(pSock, &(tConn.recv)); + if(!tError && strlen(tConn.recv.data) > 0) + { +- slog(LOG_DEBUG_VV, "Finished Reading some data from client\n"); ++ xprintf("Finished Reading some data from client\n"); + // parse client request + tMoreDataNeeded = parseMessage(&tConn, ipbin, ipbinlen, pHWADDR); + if(1 == tMoreDataNeeded) + { +- slog(LOG_DEBUG_VV, "\n\nNeed to read more data\n"); ++ xprintf("\n\nNeed to read more data\n"); + } + else if(-1 == tMoreDataNeeded) // Forked process down below ended. + { +- slog(LOG_DEBUG_V, "Forked Process ended...cleaning up\n"); ++ xprintf("Forked Process ended...cleaning up\n"); + cleanup(&tConn); + // pSock was already closed + return; +@@ -507,13 +533,13 @@ + } + else + { +- slog(LOG_DEBUG, "Error reading from socket, closing client\n"); ++ xprintf("Error reading from socket, closing client\n"); + // Error reading data....quit. + cleanup(&tConn); + return; + } + } +- slog(LOG_DEBUG_VV, "Writing: %d chars to socket\n", tConn.resp.current); ++ xprintf("Writing: %d chars to socket\n", tConn.resp.current); + //tConn->resp.data[tConn->resp.current-1] = '\0'; + writeDataToClient(pSock, &(tConn.resp)); + // Finished reading one message... +@@ -526,9 +552,9 @@ + + void writeDataToClient(int pSock, struct shairbuffer *pResponse) + { +- slog(LOG_DEBUG_VV, "\n----Beg Send Response Header----\n%.*s\n", pResponse->current, pResponse->data); ++ xprintf("\n----Beg Send Response Header----\n%.*s\n", pResponse->current, pResponse->data); + send(pSock, pResponse->data, pResponse->current,0); +- slog(LOG_DEBUG_VV, "----Send Response Header----\n"); ++ xprintf("----Send Response Header----\n"); + } + + int readDataFromClient(int pSock, struct shairbuffer *pClientBuffer) +@@ -541,7 +567,7 @@ + while(tRetval > 0 && tEnd < 0) + { + // Read from socket until \n\n, \r\n\r\n, or \r\r is found +- slog(LOG_DEBUG_V, "Waiting To Read...\n"); ++ xprintf("Waiting To Read...\n"); + fflush(stdout); + tRetval = read(pSock, tReadBuf, MAX_SIZE); + // if new buffer contains the end of request string, only copy partial buffer? +@@ -552,40 +578,40 @@ + { + pClientBuffer->marker = tEnd+1; // Marks start of content + } +- slog(SOCKET_LOG_LEVEL, "Found end of http request at: %d\n", tEnd); ++ xprintf("Found end of http request at: %d\n", tEnd); + fflush(stdout); + } + else + { + tEnd = MAX_SIZE; +- slog(SOCKET_LOG_LEVEL, "Read %d of data so far\n%s\n", tRetval, tReadBuf); ++ xprintf("Read %d of data so far\n%s\n", tRetval, tReadBuf); + fflush(stdout); + } + if(tRetval > 0) + { + // Copy read data into tReceive; +- slog(SOCKET_LOG_LEVEL, "Read %d data, using %d of it\n", tRetval, tEnd); ++ xprintf("Read %d data, using %d of it\n", tRetval, tEnd); + addNToShairBuffer(pClientBuffer, tReadBuf, tRetval); +- slog(LOG_DEBUG_VV, "Finished copying data\n"); ++ xprintf("Finished copying data\n"); + } + else + { +- slog(LOG_DEBUG, "Error reading data from socket, got: %d bytes", tRetval); ++ xprintf("Error reading data from socket, got: %d bytes", tRetval); + return tRetval; + } + } + if(tEnd + 1 != tRetval) + { +- slog(SOCKET_LOG_LEVEL, "Read more data after end of http request. %d instead of %d\n", tRetval, tEnd+1); ++ xprintf("Read more data after end of http request. %d instead of %d\n", tRetval, tEnd+1); + } +- slog(SOCKET_LOG_LEVEL, "Finished Reading Data:\n%s\nEndOfData\n", pClientBuffer->data); ++ xprintf("Finished Reading Data:\n%s\nEndOfData\n", pClientBuffer->data); + fflush(stdout); + return 0; + } + + char *getFromBuffer(char *pBufferPtr, const char *pField, int pLenAfterField, int *pReturnSize, char *pDelims) + { +- slog(LOG_DEBUG_V, "GettingFromBuffer: %s\n", pField); ++ xprintf("GettingFromBuffer: %s\n", pField); + char* tFound = strstr(pBufferPtr, pField); + int tSize = 0; + if(tFound != NULL) +@@ -606,7 +632,7 @@ + } + + tSize = (int) (tShortest - tFound); +- slog(LOG_DEBUG_VV, "Found %.*s length: %d\n", tSize, tFound, tSize); ++ xprintf("Found %.*s length: %d\n", tSize, tFound, tSize); + if(pReturnSize != NULL) + { + *pReturnSize = tSize; +@@ -614,7 +640,7 @@ + } + else + { +- slog(LOG_DEBUG_V, "Not Found\n"); ++ xprintf("Not Found\n"); + } + return tFound; + } +@@ -648,10 +674,10 @@ + { + char tTrim[tFoundSize + 2]; + getTrimmed(tFound, tFoundSize, TRUE, TRUE, tTrim); +- slog(LOG_DEBUG_VV, "HeaderChallenge: [%s] len: %d sizeFound: %d\n", tTrim, strlen(tTrim), tFoundSize); ++ xprintf("HeaderChallenge: [%s] len: %d sizeFound: %d\n", tTrim, strlen(tTrim), tFoundSize); + int tChallengeDecodeSize = 16; + char *tChallenge = decode_base64((unsigned char *)tTrim, tFoundSize, &tChallengeDecodeSize); +- slog(LOG_DEBUG_VV, "Challenge Decode size: %d expected 16\n", tChallengeDecodeSize); ++ xprintf("Challenge Decode size: %d expected 16\n", tChallengeDecodeSize); + + int tCurSize = 0; + unsigned char tChalResp[38]; +@@ -673,7 +699,7 @@ + } + + char *tTmp = encode_base64((unsigned char *)tChalResp, tCurSize); +- slog(LOG_DEBUG_VV, "Full sig: %s\n", tTmp); ++ xprintf("Full sig: %s\n", tTmp); + free(tTmp); + + // RSA Encrypt +@@ -722,10 +748,10 @@ + { + if(isLogEnabledFor(HEADER_LOG_LEVEL)) + { +- slog(HEADER_LOG_LEVEL, "Content-Length: %s value -> %d\n", tContent, tContentSize); ++ xprintf("Content-Length: %s value -> %d\n", tContent, tContentSize); + if(pConn->recv.marker != 0) + { +- slog(HEADER_LOG_LEVEL, "ContentPtr has %d, but needs %d\n", ++ xprintf("ContentPtr has %d, but needs %d\n", + strlen(pConn->recv.data+pConn->recv.marker), tContentSize); + } + } +@@ -735,7 +761,7 @@ + } + else + { +- slog(LOG_DEBUG_VV, "No content, header only\n"); ++ xprintf("No content, header only\n"); + } + + // "Creates" a new Response Header for our response message +@@ -748,7 +774,7 @@ + { + tLen = 20; + } +- slog(LOG_INFO, "********** RECV %.*s **********\n", tLen, pConn->recv.data); ++ xprintf("********** RECV %.*s **********\n", tLen, pConn->recv.data); + } + + if(pConn->password != NULL) +@@ -758,7 +784,7 @@ + + if(buildAppleResponse(pConn, pIpBin, pIpBinLen, pHWID)) // need to free sig + { +- slog(LOG_DEBUG_V, "Added AppleResponse to Apple-Challenge request\n"); ++ xprintf("Added AppleResponse to Apple-Challenge request\n"); + } + + // Find option, then based on option, do different actions. +@@ -778,14 +804,14 @@ + int tKeySize = 0; + char tEncodedAesIV[tSize + 2]; + getTrimmed(tHeaderVal, tSize, TRUE, TRUE, tEncodedAesIV); +- slog(LOG_DEBUG_VV, "AESIV: [%.*s] Size: %d Strlen: %d\n", tSize, tEncodedAesIV, tSize, strlen(tEncodedAesIV)); ++ xprintf("AESIV: [%.*s] Size: %d Strlen: %d\n", tSize, tEncodedAesIV, tSize, strlen(tEncodedAesIV)); + char *tDecodedIV = decode_base64((unsigned char*) tEncodedAesIV, tSize, &tSize); + + // grab the key, copy it out of the receive buffer + tHeaderVal = getFromContent(tContent, "a=rsaaeskey", &tKeySize); + char tEncodedAesKey[tKeySize + 2]; // +1 for nl, +1 for \0 + getTrimmed(tHeaderVal, tKeySize, TRUE, TRUE, tEncodedAesKey); +- slog(LOG_DEBUG_VV, "AES KEY: [%s] Size: %d Strlen: %d\n", tEncodedAesKey, tKeySize, strlen(tEncodedAesKey)); ++ xprintf("AES KEY: [%s] Size: %d Strlen: %d\n", tEncodedAesKey, tKeySize, strlen(tEncodedAesKey)); + // remove base64 coding from key + char *tDecodedAesKey = decode_base64((unsigned char*) tEncodedAesKey, + tKeySize, &tKeySize); // Need to free DecodedAesKey +@@ -794,7 +820,7 @@ + int tFmtpSize = 0; + char *tFmtp = getFromContent(tContent, "a=fmtp", &tFmtpSize); // Don't need to free + tFmtp = getTrimmedMalloc(tFmtp, tFmtpSize, TRUE, FALSE); // will need to free +- slog(LOG_DEBUG_VV, "Format: %s\n", tFmtp); ++ xprintf("Format: %s\n", tFmtp); + + RSA *rsa = loadKey(); + // Decrypt the binary aes key +@@ -803,11 +829,11 @@ + if(RSA_private_decrypt(tKeySize, (unsigned char *)tDecodedAesKey, + (unsigned char*) tDecryptedKey, rsa, RSA_PKCS1_OAEP_PADDING) >= 0) + { +- slog(LOG_DEBUG, "Decrypted AES key from RSA Successfully\n"); ++ xprintf("Decrypted AES key from RSA Successfully\n"); + } + else + { +- slog(LOG_INFO, "Error Decrypting AES key from RSA\n"); ++ xprintf("Error Decrypting AES key from RSA\n"); + } + free(tDecodedAesKey); + RSA_free(rsa); +@@ -823,13 +849,13 @@ + // struct comms *tComms = pConn->hairtunes; + // if (! (pipe(tComms->in) == 0 && pipe(tComms->out) == 0)) + // { +-// slog(LOG_INFO, "Error setting up hairtunes communications...some things probably wont work very well.\n"); ++// xprintf("Error setting up hairtunes communications...some things probably wont work very well.\n"); + // } + + // Setup fork + char tPort[8] = "6000"; // get this from dup()'d stdout of child pid + +- printf("******** SETUP!!!!!\n"); ++ xprintf("******** SETUP!!!!!\n",NULL); + #ifndef XBMC + int tPid = fork(); + if(tPid == 0) +@@ -845,11 +871,11 @@ + tFound = getFromSetup(pConn->recv.data, "timing_port", &tSize); + getTrimmed(tFound, tSize, 1, 0, tTPortStr); + +- slog(LOG_DEBUG_VV, "converting %s and %s from str->int\n", tCPortStr, tTPortStr); ++ xprintf("converting %s and %s from str->int\n", tCPortStr, tTPortStr); + int tControlport = atoi(tCPortStr); + int tTimingport = atoi(tTPortStr); + +- slog(LOG_DEBUG_V, "Got %d for CPort and %d for TPort\n", tControlport, tTimingport); ++ xprintf("Got %d for CPort and %d for TPort\n", tControlport, tTimingport); + char *tRtp = NULL; + char *tPipe = NULL; + char *tAoDriver = NULL; +@@ -884,7 +910,7 @@ + tDataport, tRtp, tPipe, tAoDriver, tAoDeviceName, tAoDeviceId); + #ifndef XBMC + // Quit when finished. +- slog(LOG_DEBUG, "Returned from hairtunes init....returning -1, should close out this whole side of the fork\n"); ++ xprintf("Returned from hairtunes init....returning -1, should close out this whole side of the fork\n"); + return -1; + } + else if(tPid >0) +@@ -897,7 +923,7 @@ + int tRead = read(tComms->out[0], tFromHairtunes, 80); + if(tRead <= 0) + { +- slog(LOG_INFO, "Error reading port from hairtunes function, assuming default port: %d\n", tPort); ++ xprintf("Error reading port from hairtunes function, assuming default port: %d\n", tPort); + } + else + { +@@ -909,7 +935,7 @@ + } + else + { +- slog(LOG_INFO, "Read %d bytes, Error translating %s into a port\n", tRead, tFromHairtunes); ++ xprintf("Read %d bytes, Error translating %s into a port\n", tRead, tFromHairtunes); + } + } + +@@ -930,7 +956,7 @@ + } + else + { +- slog(LOG_INFO, "Error forking process....dere' be errors round here.\n"); ++ xprintf("Error forking process....dere' be errors round here.\n"); + return -1; + } + #endif +@@ -942,7 +968,7 @@ + propogateCSeq(pConn); + #ifndef XBMC + close(pConn->hairtunes->in[1]); +- slog(LOG_DEBUG, "Tearing down connection, closing pipes\n"); ++ xprintf("Tearing down connection, closing pipes\n"); + #else + hairtunes_cleanup(); + #endif +@@ -964,7 +990,7 @@ + propogateCSeq(pConn); + int tSize = 0; + char *tVol = getFromHeader(pConn->recv.data, "volume", &tSize); +- slog(LOG_DEBUG_VV, "About to write [vol: %.*s] data to hairtunes\n", tSize, tVol); ++ xprintf("About to write [vol: %.*s] data to hairtunes\n", tSize, tVol); + // TBD VOLUME + #ifndef XBMC + write(pConn->hairtunes->in[1], "vol: ", 5); +@@ -973,11 +999,11 @@ + #else + hairtunes_setvolume(atof(tVol)); + #endif +- slog(LOG_DEBUG_VV, "Finished writing data write data to hairtunes\n"); ++ xprintf("Finished writing data write data to hairtunes\n"); + } + else + { +- slog(LOG_DEBUG, "\n\nUn-Handled recv: %s\n", pConn->recv.data); ++ xprintf("\n\nUn-Handled recv: %s\n", pConn->recv.data); + propogateCSeq(pConn); + } + addToShairBuffer(&(pConn->resp), "\r\n"); +@@ -1056,7 +1082,7 @@ + char tName[100 + HWID_SIZE + 3]; + if(strlen(pServerName) > tMaxServerName) + { +- slog(LOG_INFO,"Hey dog, we see you like long server names, " ++ xprintf("Hey dog, we see you like long server names, " + "so we put a strncat in our command so we don't buffer overflow, while you listen to your flow.\n" + "We just used the first %d characters. Pick something shorter if you want\n", tMaxServerName); + } +@@ -1067,7 +1093,7 @@ + strcat(tName, pHWStr); + strcat(tName, "@"); + strncat(tName, pServerName, tMaxServerName); +- slog(AVAHI_LOG_LEVEL, "Avahi/DNS-SD Name: %s\n", tName); ++ xprintf("Avahi/DNS-SD Name: %s\n", tName); + + execlp("avahi-publish-service", "avahi-publish-service", tName, + "_raop._tcp", tPort, "tp=UDP","sm=false","sv=false","ek=1","et=0,1", +@@ -1079,12 +1105,12 @@ + perror("error"); + } + +- slog(LOG_INFO, "Bad error... couldn't find or failed to run: avahi-publish-service OR dns-sd\n"); +- exit(1); ++ xprintf("Bad error... couldn't find or failed to run: avahi-publish-service OR dns-sd\n"); ++ //exit(1); + } + else + { +- slog(LOG_DEBUG_VV, "Avahi/DNS-SD started on PID: %d\n", tPid); ++ xprintf("Avahi/DNS-SD started on PID: %d\n", tPid); + } + return tPid; + } +@@ -1092,7 +1118,7 @@ + + void printBufferInfo(struct shairbuffer *pBuf, int pLevel) + { +- slog(pLevel, "Buffer: [%s] size: %d maxchars:%d\n", pBuf->data, pBuf->current, pBuf->maxsize/sizeof(char)); ++ xprintf("Buffer: [%s] size: %d maxchars:%d\n", pBuf->data, pBuf->current, pBuf->maxsize/sizeof(char)); + } + + int getAvailChars(struct shairbuffer *pBuf) +@@ -1173,7 +1199,8 @@ + { + va_list argp; + va_start(argp, pFormat); +- vprintf(pFormat, argp); ++ xprintf(pFormat, argp); ++ //vprintf(pFormat, argp); + va_end(argp); + } + //#endif +@@ -1227,9 +1254,9 @@ + { + if(pBuf->data != NULL) + { +- slog(LOG_DEBUG_VV, "Hrm, buffer wasn't cleaned up....trying to free\n"); ++ xprintf("Hrm, buffer wasn't cleaned up....trying to free\n"); + free(pBuf->data); +- slog(LOG_DEBUG_VV, "Free didn't seem to seg fault....huzzah\n"); ++ xprintf("Free didn't seem to seg fault....huzzah\n"); + } + pBuf->current = 0; + pBuf->marker = 0; +@@ -1287,6 +1314,6 @@ + BIO *tBio = BIO_new_mem_buf(AIRPORT_PRIVATE_KEY, -1); + RSA *rsa = PEM_read_bio_RSAPrivateKey(tBio, NULL, NULL, NULL); //NULL, NULL, NULL); + BIO_free(tBio); +- slog(RSA_LOG_LEVEL, "RSA Key: %d\n", RSA_check_key(rsa)); ++ xprintf("RSA Key: %d\n", RSA_check_key(rsa)); + return rsa; + } +--- src/shairport.h 2011-10-01 17:45:08.000000000 +0200 ++++ src/shairport.h 2011-10-01 17:19:43.000000000 +0200 +@@ -59,11 +59,17 @@ + { + #endif /* __cplusplus */ + ++struct printfPtr ++{ ++ int (*extprintf)(const char* msg, size_t msgSize); ++}; ++ + int shairport_main(int argc, char **argv); + void shairport_exit(void); + int shairport_loop(void); + int shairport_is_running(void); + void shairport_set_ao(struct AudioOutput *ao); ++void shairport_set_printf(struct printfPtr *funcPtr); + + #ifdef __cplusplus + } +--- src/socketlib.c 2011-09-23 22:00:48.000000000 +0200 ++++ src/socketlib.c 2011-10-01 17:42:39.000000000 +0200 +@@ -82,7 +82,7 @@ + delay(RETRY_DELAY, &tRes); + } + } +- printf("%d Retry attempts exceeded\n", RETRY_COUNT); ++ xprintf("%d Retry attempts exceeded\n", RETRY_COUNT); + return ERROR; + } + +@@ -102,7 +102,7 @@ + tError = getaddrinfo(pHostname, pService, &hints, pAddrInfo); + if(tError != 0) + { +- printf("Error getting address info\n"); ++ xprintf("Error getting address info\n"); + } + return tError; + } +@@ -200,7 +200,7 @@ + else + { + // Invalid encoded data, no other cases are possible. +- printf("Unrecoverable error....base64 values are incorrectly encoded\n"); ++ xprintf("Unrecoverable error....base64 values are incorrectly encoded\n"); + return pSize; + } + } +@@ -226,7 +226,7 @@ + memset(input, 0, length); + memcpy(input, pInput, pLength); + memset(input+pLength, '=', length-pLength); +- printf("Fixed value: [%.*s]\n", length, input); ++ xprintf("Fixed value: [%.*s]\n", length, input); + } + char *buffer = (char *)malloc(length); + memset(buffer, 0, length); diff --git a/tools/rbp/depends/libshairport/007_fix_syslog_defines.patch b/tools/rbp/depends/libshairport/007_fix_syslog_defines.patch new file mode 100644 index 0000000000..4d9b834f9c --- /dev/null +++ b/tools/rbp/depends/libshairport/007_fix_syslog_defines.patch @@ -0,0 +1,24 @@ +--- src/shairport.h 2011-10-01 04:09:16.000000000 +0200 ++++ src/shairport.h 2011-11-07 18:05:05.000000000 +0100 +@@ -16,10 +16,17 @@ + + #define HWID_SIZE 6 + #define SHAIRPORT_LOG 1 +-#define LOG_INFO 1 +-#define LOG_DEBUG 5 +-#define LOG_DEBUG_V 6 +-#define LOG_DEBUG_VV 7 ++ ++#ifndef LOG_INFO ++#define LOG_INFO 5 ++#endif ++ ++#ifndef LOG_DEBUG ++#define LOG_DEBUG 6 ++#endif ++ ++#define LOG_DEBUG_V 7 ++#define LOG_DEBUG_VV 8 + + struct shairbuffer + { diff --git a/tools/rbp/depends/libshairport/008-add-missing-libs.patch b/tools/rbp/depends/libshairport/008-add-missing-libs.patch new file mode 100644 index 0000000000..6efd30222a --- /dev/null +++ b/tools/rbp/depends/libshairport/008-add-missing-libs.patch @@ -0,0 +1,21 @@ +--- configure.in-org 2011-11-08 11:53:42.802419355 -0500 ++++ configure.in 2011-11-08 11:55:38.082419413 -0500 +@@ -11,8 +11,9 @@ AC_PROG_LIBTOOL + + # Checks for libraries. + #AC_CHECK_LIB([c], [main]) +-#AC_CHECK_LIB([m], [main]) ++AC_CHECK_LIB([m], [main]) + AC_CHECK_LIB([ssl], [main],, AC_MSG_ERROR($missing_library)) ++AC_CHECK_LIB([crypto], [main],, AC_MSG_ERROR($missing_library)) + AC_CHECK_LIB([pthread], [main],, AC_MSG_ERROR($missing_library)) + + OUTPUT_FILES="Makefile" +@@ -21,4 +22,4 @@ LIBDIR=$PREFIX + + AC_CONFIG_FILES([${OUTPUT_FILES}]) + AC_OUTPUT(Makefile src/Makefile) +-AC_OUTPUT +\ No newline at end of file ++AC_OUTPUT + diff --git a/tools/rbp/depends/libshairport/009_fix_ipv6.patch b/tools/rbp/depends/libshairport/009_fix_ipv6.patch new file mode 100644 index 0000000000..01ff026d07 --- /dev/null +++ b/tools/rbp/depends/libshairport/009_fix_ipv6.patch @@ -0,0 +1,22 @@ +--- src/socketlib.c 2012-01-04 20:41:05.000000000 +0100 ++++ src/socketlib.c 2012-01-04 20:35:53.000000000 +0100 +@@ -48,7 +48,7 @@ + if((tSock==-1) && (pAddrInfo->ai_family == AF_INET6) && (errno == EAFNOSUPPORT)) + { + //Fallback to ipv4 +- perror("Failed to create ipv6 socket. Trying ipv4"); ++ xprintf("Failed to create ipv6 socket. Trying ipv4"); + pAddrInfo->ai_family = AF_INET; + tSock = socket(pAddrInfo->ai_family, pAddrInfo->ai_socktype, 0); + } +@@ -158,8 +158,8 @@ + sprintf(tService, "%d", pPort); // copies port to string + int tFamily = AF_INET; + #ifdef AF_INET6 +- //printf("Listening on IPv6 Socket\n"); +- //tFamily = AF_INET6; ++ xprintf("Listening on IPv6 Socket\n"); ++ tFamily = AF_INET6; + #else + //printf("Listening on IPv4 Socket"); + #endif diff --git a/tools/rbp/depends/libshairport/010_handle_metadata.patch b/tools/rbp/depends/libshairport/010_handle_metadata.patch new file mode 100644 index 0000000000..a48782ed08 --- /dev/null +++ b/tools/rbp/depends/libshairport/010_handle_metadata.patch @@ -0,0 +1,154 @@ +diff -ruP src/ao.h libshairport.new/src/ao.h +--- src/ao.h 2012-05-07 22:26:53.000000000 +0200 ++++ src/ao.h 2012-05-08 18:46:42.000000000 +0200 +@@ -152,5 +152,7 @@ + /* -- Device Setup/Playback/Teardown -- */ + int (*ao_append_option)(ao_option **, const char *, const char *); + void (*ao_free_options)(ao_option *); +- char* (*ao_get_option)(ao_option *, const char* ); ++ char* (*ao_get_option)(ao_option *, const char* ); ++ void (*ao_set_metadata)(const char *buffer, unsigned int size); ++ void (*ao_set_metadata_coverart)(const char *buffer, unsigned int size); + }; +diff -ruP src/hairtunes.c src/hairtunes.c +--- src/hairtunes.c 2012-05-07 22:26:53.000000000 +0200 ++++ src/hairtunes.c 2012-05-08 18:45:51.000000000 +0200 +@@ -267,6 +267,16 @@ + fix_volume = 65536.0 * volume; + } + ++void hairtunes_set_metadata(const char *buffer, unsigned int size) ++{ ++ g_ao.ao_set_metadata(buffer, size); ++} ++ ++void hairtunes_set_metadata_coverart(const char *buffer, unsigned int size) ++{ ++ g_ao.ao_set_metadata_coverart(buffer, size); ++} ++ + void hairtunes_flush(void) + { + pthread_mutex_lock(&ab_mutex); +diff -ruP src/hairtunes.h src/hairtunes.h +--- src/hairtunes.h 2011-08-21 00:06:21.000000000 +0200 ++++ src/hairtunes.h 2012-05-08 18:46:00.000000000 +0200 +@@ -4,6 +4,8 @@ + int hairtunes_init(char *pAeskey, char *pAesiv, char *pFmtpstr, int pCtrlPort, int pTimingPort, + int pDataPort, char *pRtpHost, char*pPipeName, char *pLibaoDriver, char *pLibaoDeviceName, char *pLibaoDeviceId); + void hairtunes_setvolume(float vol); ++void hairtunes_set_metadata(const char *buffer, unsigned int size); ++void hairtunes_set_metadata_coverart(const char *buffer, unsigned int size); + void hairtunes_flush(void); + void hairtunes_cleanup(void); + +diff -ruP src/shairport.c src/shairport.c +--- src/shairport.c 2012-05-07 22:26:53.000000000 +0200 ++++ src/shairport.c 2012-05-08 18:45:30.000000000 +0200 +@@ -513,7 +513,8 @@ + while(1 == tMoreDataNeeded) + { + tError = readDataFromClient(pSock, &(tConn.recv)); +- if(!tError && strlen(tConn.recv.data) > 0) ++ //if(!tError && strlen(tConn.recv.data) > 0) ++ if(!tError && tConn.recv.current > 0) + { + xprintf("Finished Reading some data from client\n"); + // parse client request +@@ -632,7 +633,7 @@ + } + + tSize = (int) (tShortest - tFound); +- xprintf("Found %.*s length: %d\n", tSize, tFound, tSize); ++ xprintf("Found %s length: %d\n",tFound, tSize); + if(pReturnSize != NULL) + { + *pReturnSize = tSize; +@@ -744,7 +745,7 @@ + if(tContent != NULL) + { + int tContentSize = atoi(tContent); +- if(pConn->recv.marker == 0 || strlen(pConn->recv.data+pConn->recv.marker) != tContentSize) ++ if(pConn->recv.marker == 0 || pConn->recv.current-pConn->recv.marker != tContentSize) + { + if(isLogEnabledFor(HEADER_LOG_LEVEL)) + { +@@ -752,7 +753,7 @@ + if(pConn->recv.marker != 0) + { + xprintf("ContentPtr has %d, but needs %d\n", +- strlen(pConn->recv.data+pConn->recv.marker), tContentSize); ++ (pConn->recv.current-pConn->recv.marker), tContentSize); + } + } + // check if value in tContent > 2nd read from client. +@@ -989,15 +990,67 @@ + { + propogateCSeq(pConn); + int tSize = 0; ++ char *buffer = NULL; ++ char *contentType = getFromHeader(pConn->recv.data, "Content-Type", &tSize); ++ char *tContent = getFromHeader(pConn->recv.data, "Content-Length", NULL); ++ int iContentSize = 0; ++ int isJpg = 0; ++ ++ if(tContent != NULL) ++ { ++ iContentSize = atoi(tContent); ++ } ++ ++ if( tSize > 1 && ++ (strncmp(contentType, "application/x-dmap-tagged", tSize) == 0) || ++ (strncmp(contentType, "image/jpeg", tSize) == 0) ) ++ { ++ if( (pConn->recv.current - pConn->recv.marker) == iContentSize && pConn->recv.marker != 0) ++ { ++ if(strncmp(contentType, "image/jpeg", tSize) == 0) ++ { ++ isJpg = 1; ++ } ++ buffer = (char *)malloc(iContentSize * sizeof(char)); ++ memcpy(buffer, pConn->recv.data + pConn->recv.marker, iContentSize); ++ } ++ else ++ { ++ iContentSize = 0; ++ } ++ } ++ else ++ { ++ iContentSize = 0; ++ } + char *tVol = getFromHeader(pConn->recv.data, "volume", &tSize); +- xprintf("About to write [vol: %.*s] data to hairtunes\n", tSize, tVol); ++ if( tVol) ++ { ++ xprintf("About to write [vol: %.*s] data to hairtunes\n", tSize, tVol); ++ } + // TBD VOLUME + #ifndef XBMC + write(pConn->hairtunes->in[1], "vol: ", 5); + write(pConn->hairtunes->in[1], tVol, tSize); + write(pConn->hairtunes->in[1], "\n", 1); + #else +- hairtunes_setvolume(atof(tVol)); ++ if(tVol) ++ { ++ hairtunes_setvolume(atof(tVol)); ++ } ++ ++ if(iContentSize) ++ { ++ if(isJpg) ++ { ++ hairtunes_set_metadata_coverart(buffer, iContentSize); ++ } ++ else ++ { ++ hairtunes_set_metadata(buffer, iContentSize); ++ } ++ free(buffer); ++ } + #endif + xprintf("Finished writing data write data to hairtunes\n"); + } diff --git a/tools/rbp/depends/libshairport/Makefile b/tools/rbp/depends/libshairport/Makefile new file mode 100644 index 0000000000..7993c0dafb --- /dev/null +++ b/tools/rbp/depends/libshairport/Makefile @@ -0,0 +1,50 @@ +include ../../Makefile.include +include ../depends.mk + +# lib name, version +LIBNAME=libshairport +VERSION=1.2.0.20310_lib +SOURCE=$(LIBNAME)-$(VERSION) +ARCHIVE=$(SOURCE).tar.gz + +# configuration settings +CONFIGURE=./configure --prefix=$(PREFIX) --host=$(HOST) + + +LIBDYLIB=$(SOURCE)/.libs/$(LIBNAME).so + +all: $(LIBDYLIB) .installed + +$(TARBALLS_LOCATION)/$(ARCHIVE): + $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE) + rm -rf $(SOURCE) + $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + echo $(SOURCE) > .gitignore + cd $(SOURCE); patch -p0 < ../001_add_ao.patch + cd $(SOURCE); patch -p0 < ../002_fix_install_header.patch + cd $(SOURCE); patch -p0 < ../003_fix_deadlock.patch + cd $(SOURCE); patch -p0 < ../004_fix_bad_access.patch + cd $(SOURCE); patch -p0 < ../005_fix_shutdown.patch + cd $(SOURCE); patch -p0 < ../006_no_printf.patch + cd $(SOURCE); patch -p0 < ../007_fix_syslog_defines.patch + cd $(SOURCE); patch -p0 < ../008-add-missing-libs.patch + #cd $(SOURCE); patch -p0 < ../009_fix_ipv6.patch + cd $(SOURCE); patch -p0 < ../010_handle_metadata.patch + cd $(SOURCE); autoreconf -vif + cd $(SOURCE); $(CONFIGURE) + +$(LIBDYLIB): $(SOURCE) + make -j 1 -C $(SOURCE) + +.installed: + make -C $(SOURCE) install + touch $@ + +clean: + rm -rf $(SOURCE) .installed + +distclean:: + rm -rf $(SOURCE) .installed + diff --git a/tools/rbp/depends/libtool/.gitignore b/tools/rbp/depends/libtool/.gitignore new file mode 100644 index 0000000000..717e6efd35 --- /dev/null +++ b/tools/rbp/depends/libtool/.gitignore @@ -0,0 +1 @@ +libtool-2.2.6 diff --git a/tools/rbp/depends/libtool/Makefile b/tools/rbp/depends/libtool/Makefile new file mode 100644 index 0000000000..b6edefee22 --- /dev/null +++ b/tools/rbp/depends/libtool/Makefile @@ -0,0 +1,41 @@ +include ../../Makefile.include + +# lib name, version +LIBNAME=libtool +VERSION=2.2.6 +SOURCE=$(LIBNAME)-$(VERSION) +ARCHIVE=$(SOURCE)a.tar.gz + +# configuration settings +export PREFIX=$(XBMCPREFIX) +export PATH:=$(PREFIX)/bin:$(PATH) +CONFIGURE=./configure --prefix=$(PREFIX) + +LIBDYLIB=$(SOURCE)/bin/libtool + +CLEAN_FILES=$(ARCHIVE) $(SOURCE) + +all: $(LIBDYLIB) .installed + +$(TARBALLS_LOCATION)/$(ARCHIVE): + $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE) + -rm -rf $(SOURCE) + $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + echo $(SOURCE) > .gitignore + cd $(SOURCE); $(CONFIGURE) + +$(LIBDYLIB): $(SOURCE) + make -j $(JOBS) -C $(SOURCE) + +.installed: + make -C $(SOURCE) install + touch $@ + +clean: + make -C $(SOURCE) clean + rm -f .installed + +distclean:: + rm -rf $(SOURCE) .installed diff --git a/tools/rbp/depends/patchelf/.gitignore b/tools/rbp/depends/patchelf/.gitignore new file mode 100644 index 0000000000..28b53ff265 --- /dev/null +++ b/tools/rbp/depends/patchelf/.gitignore @@ -0,0 +1 @@ +patchelf-0.6pre25969 diff --git a/tools/rbp/depends/patchelf/Makefile b/tools/rbp/depends/patchelf/Makefile new file mode 100644 index 0000000000..7846462a03 --- /dev/null +++ b/tools/rbp/depends/patchelf/Makefile @@ -0,0 +1,41 @@ +include ../../Makefile.include + +# lib name, version +LIBNAME=patchelf +VERSION=0.6pre25969 +SOURCE=$(LIBNAME)-$(VERSION) +ARCHIVE=$(SOURCE).tar.gz + +# configuration settings +export PREFIX=$(XBMCPREFIX) +export PATH:=$(PREFIX)/bin:$(PATH) +CONFIGURE=./configure --prefix=$(PREFIX) + +LIBDYLIB=$(SOURCE)/src/patchelf + +CLEAN_FILES=$(ARCHIVE) $(SOURCE) + +all: $(LIBDYLIB) .installed + +$(TARBALLS_LOCATION)/$(ARCHIVE): + $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE) + -rm -rf $(SOURCE) + $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + echo $(SOURCE) > .gitignore + cd $(SOURCE); $(CONFIGURE) + +$(LIBDYLIB): $(SOURCE) + make -j $(JOBS) -C $(SOURCE) + +.installed: + make -C $(SOURCE) install + touch $@ + +clean: + make -C $(SOURCE) clean + rm -f .installed + +distclean:: + rm -rf $(SOURCE) .installed diff --git a/tools/rbp/depends/pkg-config/.gitignore b/tools/rbp/depends/pkg-config/.gitignore new file mode 100644 index 0000000000..b6b0a86fe2 --- /dev/null +++ b/tools/rbp/depends/pkg-config/.gitignore @@ -0,0 +1 @@ +pkg-config-0.23 diff --git a/tools/rbp/depends/pkg-config/Makefile b/tools/rbp/depends/pkg-config/Makefile new file mode 100644 index 0000000000..716e6e3db7 --- /dev/null +++ b/tools/rbp/depends/pkg-config/Makefile @@ -0,0 +1,42 @@ +include ../../Makefile.include + +# lib name, version +# lib name, version +LIBNAME=pkg-config +VERSION=0.23 +SOURCE=$(LIBNAME)-$(VERSION) +ARCHIVE=$(SOURCE).tar.gz + +# configuration settings +PREFIX:=$(XBMCPREFIX) +export PATH:=$(PREFIX)/bin:$(PATH) +CONFIGURE=./configure --prefix=$(PREFIX) --enable-indirect-deps --with-pc-path=$(PREFIX)/lib/pkgconfig:$(PREFIX)/share/pkgconfig + +LIBDYLIB=$(SOURCE)/bin/pkg-config + +CLEAN_FILES=$(ARCHIVE) $(SOURCE) + +all: $(LIBDYLIB) .installed + +$(TARBALLS_LOCATION)/$(ARCHIVE): + $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE) + -rm -rf $(SOURCE) + $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + echo $(SOURCE) > .gitignore + cd $(SOURCE); $(CONFIGURE) + +$(LIBDYLIB): $(SOURCE) + make -j $(JOBS) -C $(SOURCE) + +.installed: + make -C $(SOURCE) install + touch $@ + +clean: + make -C $(SOURCE) clean + rm -f .installed + +distclean:: + rm -rf $(SOURCE) .installed diff --git a/tools/rbp/depends/tiff/.gitignore b/tools/rbp/depends/tiff/.gitignore new file mode 100644 index 0000000000..48e2237089 --- /dev/null +++ b/tools/rbp/depends/tiff/.gitignore @@ -0,0 +1 @@ +tiff-3.8.2 diff --git a/tools/rbp/depends/tiff/Makefile b/tools/rbp/depends/tiff/Makefile new file mode 100644 index 0000000000..e6539c38b7 --- /dev/null +++ b/tools/rbp/depends/tiff/Makefile @@ -0,0 +1,41 @@ +include ../../Makefile.include +include ../depends.mk + +# lib name, version +LIBNAME=tiff +VERSION=3.8.2 +SOURCE=$(LIBNAME)-$(VERSION) +ARCHIVE=$(SOURCE).tar.gz + +# configuration settings +CONFIGURE=./configure --prefix=$(PREFIX) --host=$(HOST) + +LIBDYLIB=$(SOURCE)/libtiff/.libs/lib$(LIBNAME).so + +CLEAN_FILES=$(ARCHIVE) $(SOURCE) + +all: $(LIBDYLIB) .installed + +$(TARBALLS_LOCATION)/$(ARCHIVE): + $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE) + rm -rf $(SOURCE) + $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + echo $(SOURCE) > .gitignore + cd $(SOURCE); $(CONFIGURE) + +$(LIBDYLIB): $(SOURCE) + make -j $(JOBS) -C $(SOURCE) + +.installed: + make -C $(SOURCE) install + touch $@ + +clean: + make -C $(SOURCE) clean + rm -f .installed + +distclean:: + rm -rf $(SOURCE) .installed + diff --git a/tools/rbp/depends/tinyxml/.gitignore b/tools/rbp/depends/tinyxml/.gitignore new file mode 100644 index 0000000000..f2c5bb8d1f --- /dev/null +++ b/tools/rbp/depends/tinyxml/.gitignore @@ -0,0 +1 @@ +tinyxml diff --git a/tools/rbp/depends/tinyxml/Makefile b/tools/rbp/depends/tinyxml/Makefile new file mode 100644 index 0000000000..98212e2c4f --- /dev/null +++ b/tools/rbp/depends/tinyxml/Makefile @@ -0,0 +1,49 @@ +include ../../Makefile.include +include ../depends.mk + +# lib name, version +LIBNAME=tinyxml +VERSION=2.6.2 +SOURCE=$(LIBNAME) +ARCHIVE=$(LIBNAME)_2_6_2.tar.gz +BASE_URL=http://sourceforge.net/projects/tinyxml/files/tinyxml/$(VERSION) + +# configuration settings +CONFIGURE=./configure --prefix=$(PREFIX) --host=$(HOST) + +LIBDYLIB=$(SOURCE)/.libs/lib$(LIBNAME).so + +CLEAN_FILES=$(ARCHIVE) $(SOURCE) + +all: $(LIBDYLIB) .installed + +$(TARBALLS_LOCATION)/$(ARCHIVE): + $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE) + rm -rf $(SOURCE) + $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + cd $(SOURCE); patch -p1 -i ../enforce-use-stl.patch + cd $(SOURCE); patch -p1 -i ../entity.patch + cd $(SOURCE); patch -p1 -i ../makefix.patch + cd $(SOURCE); sed -i -e '/^TINYXML_USE_STL/ s|=.*|=YES|' -e "s|^RELEASE_CFLAGS.*|& $(CXXFLAGS) -fPIC|" Makefile + echo $(SOURCE) > .gitignore + +$(LIBDYLIB): $(SOURCE) + make -j $(JOBS) -C $(SOURCE) CFLAGS="$(CFLAGS) -DTIXML_USE_STL" CXXFLAGS="$(CXXFLAGS) -DTIXML_USE_STL" LDFLAGS="$(LDFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" CC="$(CC)" CXX="$(CXX)" LD="$(LD)" LIBS="-ldl -lc -lstdc++" + cd $(SOURCE); $(CXX) -fPIC $(CXXFLAGS) $(LDFLAGS) -shared -o lib$(LIBNAME).so.$(VERSION) -Wl,-soname,lib$(LIBNAME).so.0 *.o + +.installed: + install -m 0644 $(SOURCE)/tinyxml.h $(PREFIX)/include/ + install -m 0644 $(SOURCE)/tinystr.h $(PREFIX)/include/ + install -m 0755 $(SOURCE)/libtinyxml.so.$(VERSION) $(PREFIX)/lib + cd $(PREFIX)/lib; rm -f libtinyxml.so; ln -s libtinyxml.so.$(VERSION) libtinyxml.so + cd $(PREFIX)/lib; rm -f libtinyxml.so.0; ln -s libtinyxml.so.$(VERSION) libtinyxml.so.0 + touch $@ + +clean: + make -C $(SOURCE) clean + rm -f .installed + +distclean:: + rm -rf $(SOURCE) .installed diff --git a/tools/rbp/depends/tinyxml/disable_xmltest.patch b/tools/rbp/depends/tinyxml/disable_xmltest.patch new file mode 100644 index 0000000000..abc9f6c068 --- /dev/null +++ b/tools/rbp/depends/tinyxml/disable_xmltest.patch @@ -0,0 +1,20 @@ +--- a/Makefile 2012-05-04 07:53:05.910023997 +0200 ++++ b/Makefile 2012-05-04 07:53:19.030023561 +0200 +@@ -81,7 +81,7 @@ + # Targets of the build + #**************************************************************************** + +-OUTPUT := xmltest ++OUTPUT := xmltest + + all: ${OUTPUT} + +@@ -90,7 +90,7 @@ + # Source files + #**************************************************************************** + +-SRCS := tinyxml.cpp tinyxmlparser.cpp xmltest.cpp tinyxmlerror.cpp tinystr.cpp ++SRCS := tinyxml.cpp tinyxmlparser.cpp tinyxmlerror.cpp tinystr.cpp + + # Add on the sources for libraries + SRCS := ${SRCS} diff --git a/tools/rbp/depends/tinyxml/enforce-use-stl.patch b/tools/rbp/depends/tinyxml/enforce-use-stl.patch new file mode 100644 index 0000000000..f930ba9c2c --- /dev/null +++ b/tools/rbp/depends/tinyxml/enforce-use-stl.patch @@ -0,0 +1,18 @@ +Description: TinyXml is built with TIXML_USE_STL, so we have to + enforce it when the library is used. +Author: Felix Geyer <debfx-pkg@fobos.de> + +diff -Nur tinyxml-2.5.3/tinyxml.h tinyxml-2.5.3.patch/tinyxml.h +--- tinyxml-2.5.3/tinyxml.h 2007-05-07 00:41:23.000000000 +0200 ++++ tinyxml-2.5.3.patch/tinyxml.h 2009-07-08 22:32:03.000000000 +0200 +@@ -26,6 +26,10 @@ + #ifndef TINYXML_INCLUDED + #define TINYXML_INCLUDED + ++#ifndef TIXML_USE_STL ++ #define TIXML_USE_STL ++#endif ++ + #ifdef _MSC_VER + #pragma warning( push ) + #pragma warning( disable : 4530 ) diff --git a/tools/rbp/depends/tinyxml/entity.patch b/tools/rbp/depends/tinyxml/entity.patch new file mode 100644 index 0000000000..2ccbd701ac --- /dev/null +++ b/tools/rbp/depends/tinyxml/entity.patch @@ -0,0 +1,64 @@ +? entity.patch +Index: tinyxml.cpp +=================================================================== +RCS file: /cvsroot/tinyxml/tinyxml/tinyxml.cpp,v +retrieving revision 1.105 +diff -u -r1.105 tinyxml.cpp +--- a/tinyxml.cpp 5 Jun 2010 19:06:57 -0000 1.105 ++++ b/tinyxml.cpp 19 Jul 2010 21:24:16 -0000 +@@ -57,30 +57,7 @@ + { + unsigned char c = (unsigned char) str[i]; + +- if ( c == '&' +- && i < ( (int)str.length() - 2 ) +- && str[i+1] == '#' +- && str[i+2] == 'x' ) +- { +- // Hexadecimal character reference. +- // Pass through unchanged. +- // © -- copyright symbol, for example. +- // +- // The -1 is a bug fix from Rob Laveaux. It keeps +- // an overflow from happening if there is no ';'. +- // There are actually 2 ways to exit this loop - +- // while fails (error case) and break (semicolon found). +- // However, there is no mechanism (currently) for +- // this function to return an error. +- while ( i<(int)str.length()-1 ) +- { +- outString->append( str.c_str() + i, 1 ); +- ++i; +- if ( str[i] == ';' ) +- break; +- } +- } +- else if ( c == '&' ) ++ if ( c == '&' ) + { + outString->append( entity[0].str, entity[0].strLength ); + ++i; +Index: xmltest.cpp +=================================================================== +RCS file: /cvsroot/tinyxml/tinyxml/xmltest.cpp,v +retrieving revision 1.89 +diff -u -r1.89 xmltest.cpp +--- a/xmltest.cpp 5 Jun 2010 17:41:52 -0000 1.89 ++++ b/xmltest.cpp 19 Jul 2010 21:24:16 -0000 +@@ -1340,6 +1340,16 @@ + }*/ + } + ++ #ifdef TIXML_USE_STL ++ { ++ TiXmlDocument xml; ++ xml.Parse("<foo>foo&#xa+bar</foo>"); ++ std::string str; ++ str << xml; ++ XmlTest( "Entity escaping", "<foo>foo&#xa+bar</foo>", str.c_str() ); ++ } ++ #endif ++ + /* 1417717 experiment + { + TiXmlDocument xml; diff --git a/tools/rbp/depends/tinyxml/makefix.patch b/tools/rbp/depends/tinyxml/makefix.patch new file mode 100644 index 0000000000..fbc65ac728 --- /dev/null +++ b/tools/rbp/depends/tinyxml/makefix.patch @@ -0,0 +1,11 @@ +--- a/Makefile 2012-05-04 08:45:03.326587176 +0200 ++++ b/Makefile 2012-05-04 08:45:10.073253616 +0200 +@@ -102,7 +102,7 @@ + #**************************************************************************** + + ${OUTPUT}: ${OBJS} +- ${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS} ++ ${CXX} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS} + + #**************************************************************************** + # common rules diff --git a/tools/rbp/depends/xbmc/Makefile b/tools/rbp/depends/xbmc/Makefile new file mode 100644 index 0000000000..5c81a31038 --- /dev/null +++ b/tools/rbp/depends/xbmc/Makefile @@ -0,0 +1,27 @@ +include ../../Makefile.include +include ../depends.mk + +SOURCE=../../../../ + +ifeq ($(USE_BUILDROOT),1) + export PATH:=$(PREFIX)/bin:$(BUILDROOT)/output/host/usr/bin:$(SYSROOT)/usr/bin:$(PATH) +endif + +CONFIGURE=./configure --prefix=$(PREFIX) --build=$(BUILD) --host=$(HOST) \ + --enable-gles --disable-sdl --disable-x11 --disable-xrandr --disable-openmax \ + --disable-optical-drive --disable-dvdcss --disable-joystick --disable-debug \ + --disable-crystalhd --disable-vtbdecoder --disable-vaapi --disable-vdpau \ + --disable-pulse --disable-projectm --with-platform=raspberry-pi --enable-optimizations \ + --enable-rpi-cec-api --enable-player=omxplayer + +all: configure + +clean: +distclean: + cd $(SOURCE); + +configure: + cd $(SOURCE); ./bootstrap + cd $(SOURCE); $(CONFIGURE) + #cd $(SOURCE); make -j $(JOBS) + #cd $(SOURCE); make install diff --git a/tools/rbp/depends/yasm/.gitignore b/tools/rbp/depends/yasm/.gitignore new file mode 100644 index 0000000000..065ab0dec2 --- /dev/null +++ b/tools/rbp/depends/yasm/.gitignore @@ -0,0 +1 @@ +yasm-1.1.0 diff --git a/tools/rbp/depends/yasm/Makefile b/tools/rbp/depends/yasm/Makefile new file mode 100644 index 0000000000..10026b1d94 --- /dev/null +++ b/tools/rbp/depends/yasm/Makefile @@ -0,0 +1,41 @@ +include ../../Makefile.include + +APPNAME=yasm +VERSION=1.1.0 +SOURCE=$(APPNAME)-$(VERSION) +ARCHIVE=$(SOURCE).tar.gz + +# configuration settings +PREFIX:=$(XBMCPREFIX) +export PATH:=$(PREFIX)/bin:$(PATH) +CONFIGURE=./configure --prefix=$(PREFIX) + +APP=$(SOURCE)/$(APPNAME) + +CLEAN_FILES=$(ARCHIVE) $(SOURCE) + +all: $(APP) .installed + +$(TARBALLS_LOCATION)/$(ARCHIVE): + $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(SOURCE): $(TARBALLS_LOCATION)/$(ARCHIVE) + -rm -rf $(SOURCE) + $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + echo $(SOURCE) > .gitignore + cd $(SOURCE); $(CONFIGURE) + +$(APP): $(SOURCE) + make -j $(JOBS) -C $(SOURCE) + +.installed: + make -C $(SOURCE) install + touch $@ + +clean: + make -C $(SOURCE) clean + rm .installed + +distclean:: + rm -rf $(SOURCE) .installed + diff --git a/tools/rbp/setup-sdk.sh b/tools/rbp/setup-sdk.sh new file mode 100644 index 0000000000..9da68cbcb6 --- /dev/null +++ b/tools/rbp/setup-sdk.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +SCRIPT_PATH=$(cd `dirname $0` && pwd) + +USE_BUILDROOT=1 + +if [ "$USE_BUILDROOT" = "1" ]; then + BUILDROOT=/opt/xbmc-bcm/buildroot + TARBALLS=/opt/xbmc-tarballs + XBMCPREFIX=/opt/xbmc-bcm/xbmc-bin + + SDKSTAGE=$BUILDROOT/output/staging + TARGETFS=$BUILDROOT/output/target + TOOLCHAIN=$BUILDROOT/output/host/usr/ +else + TARBALLS=/opt/xbmc-tarballs + SDKSTAGE=/opt/bcm-rootfs + XBMCPREFIX=/opt/xbmc-bcm/xbmc-bin + TARGETFS=/opt/bcm-rootfs + TOOLCHAIN=/usr/local/bcm-gcc + BUILDROOT=/opt/bcm-rootfs +fi + +sudo mkdir -p $XBMCPREFIX +sudo chmod 777 $XBMCPREFIX +mkdir -p $XBMCPREFIX/lib +mkdir -p $XBMCPREFIX/include + +echo "SDKSTAGE=$SDKSTAGE" > $SCRIPT_PATH/Makefile.include +echo "XBMCPREFIX=$XBMCPREFIX" >> $SCRIPT_PATH/Makefile.include +echo "TARGETFS=$TARGETFS" >> $SCRIPT_PATH/Makefile.include +echo "TOOLCHAIN=$TOOLCHAIN" >> $SCRIPT_PATH/Makefile.include +echo "BUILDROOT=$BUILDROOT" >> $SCRIPT_PATH/Makefile.include +echo "USE_BUILDROOT=$USE_BUILDROOT" >> $SCRIPT_PATH/Makefile.include +echo "BASE_URL=http://mirrors.xbmc.org/build-deps/darwin-libs" >> $SCRIPT_PATH/Makefile.include +echo "TARBALLS_LOCATION=$TARBALLS" >> $SCRIPT_PATH/Makefile.include +echo "RETRIEVE_TOOL=/usr/bin/curl" >> $SCRIPT_PATH/Makefile.include +echo "RETRIEVE_TOOL_FLAGS=-Ls --create-dirs --output \$(TARBALLS_LOCATION)/\$(ARCHIVE)" >> $SCRIPT_PATH/Makefile.include +echo "ARCHIVE_TOOL=/bin/tar" >> $SCRIPT_PATH/Makefile.include +echo "ARCHIVE_TOOL_FLAGS=xf" >> $SCRIPT_PATH/Makefile.include +echo "JOBS=$((`grep -c processor /proc/cpuinfo -1`))" >> $SCRIPT_PATH/Makefile.include |