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

Change History (0)

Note: See TracTickets for help on using tickets.