libjpeg
Alan Staniforth
alan at apollonia.org
Fri May 4 12:16:35 PDT 2007
At 9:03 am +0200 4/5/07, Stéphane Corthésy wrote:
>Hi,
>
>I did it like this (it's not a universal binary, though):
[...snip...]
Here's a script I used when building a universal binary of the static library
for a project. I have lightly modified it with Stéphane's suggestions so it
plays nice with libtool and it seems to build and install a universal shared
version OK.
Apologies for any word wrap problems.
-Alan.
#!/bin/sh
#
# jpeg-build-univ
#
# Script to crteate universal binary version of libjpeg.
#
# © 2006 Alan Staniforth
#
# Version 2.0
#
# Invoke thus:
#
# jpeg-build-univ [-h] | [-v] | [-i] [-p prefix] [-s sdk] [-n] [-k]
#
# where prefix is the install root for the libraries.
#
# Version 2.0:
# Source download incorporated.
# Reverted to using MacOSX10.3.9.sdk as the default SDK for PPC
# Targets 10.2 for ppc, 10.4 for i386.
### Set up.
# Set trap to allow abort on signal:
trap 'echo "Interrupted by signal" >&2; exit' 1 2 3 15
# Defaults
BUILD_UNIV_VERS=2.0
INSTALL_PREFIX="/usr/local"
SDK_PPC="MacOSX10.3.9.sdk"
DO_INSTALL=0
DO_DLOAD=1
NO_SUDO=0
### Handle optional parameters
if test $# -ne 0 ; then
### Options
while test $# -gt 0;
do
case "$1" in
-*) FLAG="$1"
case "$FLAG" in
-h)
### Usage information
echo "Usage: jpeg-build-univ [-h]"
echo "Usage: jpeg-build-univ [-v]"
echo "Usage: jpeg-build-univ [-i] [-p prefix] [-s sdk]"
echo ""
echo "Options:"
echo " -h : Print this usage summary."
echo " -v : Print tool version."
echo " -i : Install as well as build."
echo " -k : Skip download of source."
echo " -n : Don't use sudo when installing."
echo " -p prefix : install root for the built libraries and support"
echo " files. Default is /usr/local"
echo " -s sdk : the Mac OS X SDK you want GCC to use for PPC code. "
echo " Default is MacOSX10.3.9.sdk"
echo ""
exit
;;
-v)
### version
echo "$BUILD_UNIV_VERS"
;;
-p)
### install prefix specified
shift
if test "${1##*/}" = "" ; then
INSTALL_PREFIX="${1%*/}"
else
INSTALL_PREFIX="${1}"
fi
if !(test -d "${INSTALL_PREFIX}") ; then
echo "${INSTALL_PREFIX} does not exist or is not a directory"
exit
fi
;;
-s)
### ppc sdk specified
shift
SDK_PPC="${1}"
;;
-i)
### install the built libray and headers (make can't be used)
DO_INSTALL=1
;;
-n)
### No sudo
NO_SUDO=1
;;
-k)
### skip download
DO_DLOAD=0
;;
-*) echo "Usage: "$1" not understood!"
echo "Use jpeg-build-univ -h for usage information"
break
;;
esac
;;
esac
shift
done
fi
### Get the source:
if test $DO_DLOAD -ne 0 ; then
### Download source from uunet.
echo "jpeg-build-univ: Getting the libjpeg source..."
curl ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz -o "jpegsrc.v6b.tar.gz"
else
echo "jpeg-build-univ: Skipping source download..."
fi
### Extract the source:
echo "jpeg-build-univ: Expanding the source tarball..."
tar -zxpf jpegsrc.v6b.tar.gz
### Do set-up
echo "jpeg-build-univ: Setting up..."
# Change to the directory
cd jpeg-6b
cp /usr/share/libtool/config.sub .
cp /usr/share/libtool/config.guess .
# check if a relative install path was passed
FIRSTCHAR=${INSTALL_PREFIX:0:1}
if test $FIRSTCHAR != "/" ; then
INSTALL_PREFIX="../${INSTALL_PREFIX}"
fi
# Ensure the support dirs exits
mkdir -p build/ppc
mkdir -p build/i386
### Tidy up
echo "jpeg-build-univ: Cleaning..."
rm -f build/ppc/*
rm -f build/i386/*
if test -f Makefile ; then make distclean >/dev/null ; fi
if test -f Makefile.ppc ; then rm -f Makefile.ppc ; fi
if test -f Makefile.i386 ; then rm -f Makefile.i386 ; fi
### Configure
echo "jpeg-build-univ: Configuring..."
env CFLAGS="-O3 -g -isysroot /Developer/SDKs/$SDK_PPC -arch ppc" LDFLAGS="-Wl,-syslibroot,/Developer/SDKs/$SDK_PPC" ./configure --prefix="${INSTALL_PREFIX}" --enable-shared --disable-dependency-tracking >/dev/null
### Create the PPC Makefile
echo "jpeg-build-univ: Creating PPC Makefile..."
sed -e s/"CC= gcc"/"CC= \${ENVP} gcc"/ \
-e '21i\
ENVP= GCC_VERSION=3.3 MACOSX_DEPLOYMENT_TARGET=10.2
' \
Makefile > Makefile.ppc
### Create the i386 Makefile
echo "jpeg-build-univ: Creating i386 Makefile..."
sed -e s/"-arch ppc"/"-arch i386"/ \
-e s/"CC= gcc"/"CC= \${ENVP} gcc"/ \
-e s/"${SDK_PPC}"/"MacOSX10.4u.sdk"/ \
-e '21i\
ENVP= MACOSX_DEPLOYMENT_TARGET=10.4
' \
Makefile > Makefile.i386
rm ./Makefile
### Generate the i386 code
echo "jpeg-build-univ: Generating i386..."
cp Makefile.i386 Makefile
#make clean >/dev/null
#make libjpeg.la >/dev/null
make >/dev/null
mv .libs/*.a build/i386/
### Generate the PPC code
echo "jpeg-build-univ: Generating PPC..."
cp Makefile.ppc Makefile
make clean >/dev/null
#make libjpeg.la >/dev/null
make >/dev/null
mv .libs/*.a build/ppc/
### Build the universal libs
echo "jpeg-build-univ: Building universal library..."
### Build a list of actual libraries
cd ./build/ppc
FLIST=`ls *.a`
LIBLIST=""
for f in $FLIST ; do
if !(test -L $f) ; then
LIBLIST="$LIBLIST $f"
fi
done
cd ../..
for f in $LIBLIST ; do
if test -f ./build/i386/$f ; then
lipo -create ./build/*/$f -output .libs/$f
echo "jpeg-build-univ: `file $f`"
echo "jpeg-build-univ: $f is now universal."
else
echo "jpeg-build-univ: $f is missing from build/i386, no universal binary built."
fi
done
if test $DO_INSTALL -ne 0 ; then
echo "jpeg-build-univ: Installing..."
if test $NO_SUDO -ne 0 ; then
make install
else
sudo make install
fi
else
echo "jpeg-build-univ: type \"make install\" to install."
fi
### And exit...
exit
--
Alan Staniforth ** alan at apollonia.org
"Meum est propositum/In taberna mori,/Ut sint vina proxima/Morientis ori."
-- Anon.
More information about the MacOSX-dev
mailing list