Opened 17 years ago
Last modified 15 years ago
#12504 closed enhancement
RFE: a possible build process for a universal libjpeg — at Initial Version
Reported by: | nmb@… | Owned by: | waqar@… |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | 1.5.2 |
Keywords: | universal | Cc: | waqar@… |
Port: |
Description
I found the following script which builds a universal version of libjpeg. It does this by building a PPC and a i386 version and lipo'ing them together. This came from http://www.omnigroup.com/mailman/archive/macosx-dev/2007-May.txt
#!/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