banshee r4701 - in trunk/banshee: . build/osx



Author: abock
Date: Sun Oct 19 04:37:03 2008
New Revision: 4701
URL: http://svn.gnome.org/viewvc/banshee?rev=4701&view=rev

Log:
2008-10-19  Aaron Bockover  <abock gnome org>

    This commit adds preliminary build scripts/environment/directions for 
    building Banshee on OS X, based heavily on Eoin's great work on porting
    Banshee to OS X. Banshee does not actually build yet on OS X with this    commit, so don't try. This is phase one of merging Eoin's great work     into our trunk.

    * build/osx/*: Scripts and an awesome README for building on OS X

    * autogen.osx.sh: Helper to call into the real OS X autogen wrapper



Added:
   trunk/banshee/autogen.osx.sh   (contents, props changed)
   trunk/banshee/build/osx/
   trunk/banshee/build/osx/README
   trunk/banshee/build/osx/autogen.sh   (contents, props changed)
   trunk/banshee/build/osx/build-deps.sh   (contents, props changed)
   trunk/banshee/build/osx/build.env
Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/autogen.sh

Added: trunk/banshee/autogen.osx.sh
==============================================================================
--- (empty file)
+++ trunk/banshee/autogen.osx.sh	Sun Oct 19 04:37:03 2008
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+build/osx/autogen.sh
+

Modified: trunk/banshee/autogen.sh
==============================================================================
--- trunk/banshee/autogen.sh	(original)
+++ trunk/banshee/autogen.sh	Sun Oct 19 04:37:03 2008
@@ -50,17 +50,19 @@
 	error "Directory \"$srcdir\" does not look like the top-level $PROJECT directory"
 }
 
+# MacPorts on OS X only seems to have glibtoolize
+LIBTOOLIZE=$(basename $(which libtoolize || which glibtoolize))
+
 check_autotool_version aclocal 1.9
 check_autotool_version automake 1.9
 check_autotool_version autoconf 2.53
-check_autotool_version libtoolize 1.4.3
+check_autotool_version $LIBTOOLIZE 1.4.3
 check_autotool_version glib-gettextize 2.0.0
 check_autotool_version intltoolize 0.21.0
 check_autotool_version pkg-config 0.14.0
 
-run libtoolize --force --copy
 run glib-gettextize --force --copy
-run intltoolize --force --copy --automake
+run $LIBTOOLIZE --force --copy --automake
 run aclocal -I build/m4/banshee -I build/m4/shamrock $ACLOCAL_FLAGS
 run autoconf
 run autoheader

Added: trunk/banshee/build/osx/README
==============================================================================
--- (empty file)
+++ trunk/banshee/build/osx/README	Sun Oct 19 04:37:03 2008
@@ -0,0 +1,70 @@
+Building Banshee on Mac OS X 10.5
+=================================
+
+Dependency Frameworks
+---------------------
+
+  Before building Banshee, you must first install a few dependency 
+  frameworks, namely Mono, Xcode, and a few small bootstrap libraries
+  from the MacPorts project.
+
+  When installing these frameworks, it is highly recommended that you
+  leave all installation paths to their defaults.
+
+  Install the frameworks in this order:
+
+    * Xcode    (http://developer.apple.com/technology/xcode.html)
+    * Mono 2.0 (http://mono-project.com/Downloads)
+    * MacPorts (http://macports.org/install.php)
+
+
+Working Environment
+-------------------
+
+  Ensure that whenever you will be working with MacPorts (i.e.
+  the 'port' command) or building Banshee or any of its dependencies
+  that you have the /opt/local/bin path set in your PATH. It MUST
+  come before Mono's framework!
+
+  It is recommended that as a precaution you add this line to your
+  ~/.bash_profile
+
+    export PATH="/opt/local/bin:$PATH"
+
+  Additionally, there are two helper scripts for actually building
+  Banshee and any native libraries that will be bundled with it. 
+  These scripts will be covered later.
+
+
+MacPorts Dependencies
+---------------------
+
+  Install the gettext, intltool, glib2, and libtool ports from 
+  MacPorts, in that order. This can be done like this:
+
+    $ sudo port install gettext intltool glib2 libtool
+
+  After this is done, you should not need to worry about the port
+  command or dealing with MacPorts for building Banshee.
+
+
+Banshee Bundle Dependencies
+---------------------------
+
+  A few libraries need to be built manually, outside of the MacPorts
+  context. These are libraries that are bundled within Banshee.app
+  to reduce the runtime dependencies that end users must deal with.
+
+  Once your build environment is set up (as described in the three
+  sections above), building these bundle dependencies is as easy
+  as running the build-deps.sh script in this directory.
+
+
+Building Banshee
+----------------
+
+  Once the build environment and the bundled dependencies are built,
+  as described in the four sections above, building Banshee is as
+  easy as running the build-banshee.sh script in this directory.
+
+

Added: trunk/banshee/build/osx/autogen.sh
==============================================================================
--- (empty file)
+++ trunk/banshee/build/osx/autogen.sh	Sun Oct 19 04:37:03 2008
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+pushd $(dirname $0) &>/dev/null
+source build.env
+
+if [ ! -d $BUILD_PREFIX ]; then
+	echo "Error: Banshee bundle dependencies do not appear to be built."
+	echo "       please run the build-deps.sh script, and refer to the"
+	echo "       README file for building on Mac OS X."
+	echo
+	echo "       $(dirname $0)/README"
+	echo
+	exit 1
+fi
+
+pushd ../.. &>/dev/null
+
+# Fix up the configure.ac script, unfortunately there
+# is not an easy way around this; autoconf just sucks
+if [ ! -f configure.ac.orig ]; then
+	cp configure.ac configure.ac.orig
+	grep -v AM_GCONF_SOURCE_2 < configure.ac.orig > configure.ac
+fi
+
+# Run the upstream autogen
+./autogen.sh \
+	--disable-mtp \
+	--disable-daap \
+	--disable-ipod \
+	--disable-docs \
+	--disable-gnome
+
+popd &>/dev/null
+popd &>/dev/null
+

Added: trunk/banshee/build/osx/build-deps.sh
==============================================================================
--- (empty file)
+++ trunk/banshee/build/osx/build-deps.sh	Sun Oct 19 04:37:03 2008
@@ -0,0 +1,123 @@
+#!/bin/bash
+
+GST_DOWNLOAD_URI="http://gstreamer.freedesktop.org/src/%n/%f";
+GST_CONFIGURE_ARGS="--disable-gtk-doc"
+
+TARGETS=(
+    # name (%n)        version (%v)  dir (%d)  file (%f)  download uri          configure args
+	"liboil            0.3.15        %n-%v     %d.tar.gz  http://liboil.freedesktop.org/download/%f  ${GST_CONFIGURE_ARGS}"
+	"gstreamer         0.10.19       %n-%v     %d.tar.gz  ${GST_DOWNLOAD_URI}  ${GST_CONFIGURE_ARGS}"
+	"gst-plugins-base  0.10.19       %n-%v     %d.tar.gz  ${GST_DOWNLOAD_URI}  ${GST_CONFIGURE_ARGS}"
+	"gst-plugins-good  0.10.7        %n-%v     %d.tar.gz  ${GST_DOWNLOAD_URI}  ${GST_CONFIGURE_ARGS}"
+)
+
+# There's probably no need to modify anything below
+
+VERBOSE=0
+BUILD_LOG=`pwd`/build-log
+
+pushd $(dirname $0) &>/dev/null
+source build.env
+
+function show_help () {
+	echo "Usage: $0 [options]"
+	echo
+	echo "Available Options:"
+	echo "  -h, --help        show this help"
+	echo "  -v, --verbose     show all build messages"
+	echo
+	exit 1
+}
+
+for arg in $@; do
+	case $arg in
+		-v|--verbose) VERBOSE=1 ;;
+		-h|--help)    show_help ;;
+	esac
+done
+
+function expand_target_defs () {
+	for def in $@; do
+		in_value=$(eval "echo \$$(echo ${def})")
+		out_value=$(echo "${in_value}" | sed "
+			s,%n,${TARGET_NAME},g;
+			s,%v,${TARGET_VERSION},g;
+			s,%d,${TARGET_DIR},g;
+			s,%f,${TARGET_FILE},g;
+		")
+		eval $def="${out_value}"
+	done
+}
+
+function bail () {
+	echo "ERROR: $1" 1>&2
+	exit $2
+}
+
+function run () {
+	echo "--> Running: $@"
+	BAIL_MESSAGE="Failed to run $1 against ${TARGET_NAME}"
+	if [ $VERBOSE -ne 0 ]; then
+		$@ || bail "${BAIL_MESSAGE}" $?
+	else 
+		$@ &>$BUILD_LOG || bail "${BAIL_MESSAGE}" $?
+	fi
+}
+
+which wget &>/dev/null || bail "You need to install wget (sudo port install wget)"
+
+SOURCES_ROOT=sources
+mkdir -p $SOURCES_ROOT
+pushd $SOURCES_ROOT &>/dev/null
+
+for ((i = 0, n = ${#TARGETS[ ]}; i < n; i++)); do
+	# Break the target definition into its parts
+	TARGET=(${TARGETS[$i]})
+	TARGET_NAME=${TARGET[0]}
+	TARGET_VERSION=${TARGET[1]}
+	TARGET_DIR=${TARGET[2]}
+	TARGET_FILE=${TARGET[3]}
+	TARGET_URI=${TARGET[4]}
+	TARGET_CONFIGURE_ARGS="${TARGET[ ]:5}"
+
+	# Perform expansion through indirect variable referencing
+	expand_target_defs TARGET_DIR TARGET_FILE TARGET_URI
+
+	echo "Processing ${TARGET_NAME} ($(($i + 1)) of $n)"
+
+	if [ ! -d $TARGET_DIR ]; then
+		# Download the tarball
+		if [ ! -a $TARGET_FILE ]; then
+			echo "--> Downloading ${TARGET_FILE}..."
+			wget -q $TARGET_URI || bail "Failed to download: ${TARGET_NAME}" $?
+		fi
+
+		# Extract the tarball
+		echo "--> Extracting ${TARGET_FILE}..."
+		case ${TARGET_FILE#*tar.} in
+			bz2) TAR_ARGS=jxf ;;
+			gz)  TAR_ARGS=zxf ;;
+			*)   bail "Unknown archive type: ${TARGET_FILE}" 1 ;;
+		esac
+
+		tar $TAR_ARGS $TARGET_FILE || bail "Could not extract archive: ${TARGET_FILE}" $?
+	fi
+
+	pushd $TARGET_DIR &>/dev/null
+		CONFIGURE=./configure
+		if [ -f ./autogen.sh ]; then
+			CONFIGURE=./autogen.sh
+		fi
+
+		run $CONFIGURE --prefix=$BUILD_PREFIX $TARGET_CONFIGURE_ARGS
+		run make clean
+		run make -j2
+		run make install
+	popd &>/dev/null
+done
+
+popd &>/dev/null
+popd &>/dev/null
+
+test -f $BUILD_LOG && rm $BUILD_LOG
+

Added: trunk/banshee/build/osx/build.env
==============================================================================
--- (empty file)
+++ trunk/banshee/build/osx/build.env	Sun Oct 19 04:37:03 2008
@@ -0,0 +1,18 @@
+# Ensure these paths are set to the correct locations of 
+# the XCode, Mono 2.0, and MacPorts installations
+MAC_SDK_PATH="/Developer/SDKs/MacOSX10.4u.sdk"
+MONO_SDK_PATH="/Library/Frameworks/Mono.framework/Versions/Current/"
+MACPORTS_SDK_PATH="/opt/local/bin"
+
+# Where GStreamer and other Banshee dependencies that will
+# end up being bundled should be installed for the build.
+# It's generally a good idea to leave this alone.
+BUILD_PREFIX="`pwd`/bundle-deps"
+
+# Build configuration. Really, no reason to touch this.
+export PKG_CONFIG_PATH="/usr/lib/pkgconfig:$MONO_SDK_PATH/lib/pkgconfig:$BUILD_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH"
+export PATH="$MACPORTS_SDK_PATH:$MONO_SDK_PATH/bin:$PATH"
+export LDFLAGS="-L$MONO_SDK_PATH/lib $LDFLAGS"
+export CFLAGS="-isysroot $MAC_SDK_PATH -mmacosx-version-min=10.4 -I$MONO_SDK_PATH/include $CFLAGS"
+export LD_LIBRARY_PATH="$MONO_SDK_PATH/lib:$LD_LIBRARY_PATH"
+export ACLOCAL_FLAGS="-I $MONO_SDK_PATH/share/aclocal"



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]