1#!/bin/sh
2#
3# Build Universal binaries on Mac OS X, thanks Ryan!
4#
5# Usage: ./configure CXX="sh g++-fat.sh" && make && rm -rf x86 x64
6
7DEVELOPER="`xcode-select -print-path`/Platforms/MacOSX.platform/Developer"
8
9# Intel 32-bit compiler flags (10.6 runtime compatibility)
10GCC_COMPILE_X86="g++ -arch i386 -mmacosx-version-min=10.6 \
11-I/usr/local/include"
12
13GCC_LINK_X86="-mmacosx-version-min=10.6"
14
15# Intel 64-bit compiler flags (10.6 runtime compatibility)
16GCC_COMPILE_X64="g++ -arch x86_64 -mmacosx-version-min=10.6 \
17-I/usr/local/include"
18
19GCC_LINK_X64="-mmacosx-version-min=10.6"
20
21# Output both PowerPC and Intel object files
22args="$*"
23compile=yes
24link=yes
25while test x$1 != x; do
26    case $1 in
27        --version) exec g++ $1;;
28        -v) exec g++ $1;;
29        -V) exec g++ $1;;
30        -print-prog-name=*) exec g++ $1;;
31        -print-search-dirs) exec g++ $1;;
32        -E) GCC_COMPILE_X86="$GCC_COMPILE_X86 -E"
33            GCC_COMPILE_X64="$GCC_COMPILE_X64 -E"
34            compile=no; link=no;;
35        -c) link=no;;
36        -o) output=$2;;
37        *.c|*.cc|*.cpp|*.S|*.m|*.mm) source=$1;;
38    esac
39    shift
40done
41if test x$link = xyes; then
42    GCC_COMPILE_X86="$GCC_COMPILE_X86 $GCC_LINK_X86"
43    GCC_COMPILE_X64="$GCC_COMPILE_X64 $GCC_LINK_X64"
44fi
45if test x"$output" = x; then
46    if test x$link = xyes; then
47        output=a.out
48    elif test x$compile = xyes; then
49        output=`echo $source | sed -e 's|.*/||' -e 's|\(.*\)\.[^\.]*|\1|'`.o
50    fi
51fi
52
53# Compile X86 32-bit
54if test x"$output" != x; then
55    dir=x86/`dirname $output`
56    if test -d $dir; then
57        :
58    else
59        mkdir -p $dir
60    fi
61fi
62set -- $args
63while test x$1 != x; do
64    if test -f "x86/$1" && test "$1" != "$output"; then
65        x86_args="$x86_args x86/$1"
66    else
67        x86_args="$x86_args $1"
68    fi
69    shift
70done
71$GCC_COMPILE_X86 $x86_args || exit $?
72if test x"$output" != x; then
73    cp $output x86/$output
74fi
75
76# Compile X86 32-bit
77if test x"$output" != x; then
78    dir=x64/`dirname $output`
79    if test -d $dir; then
80        :
81    else
82        mkdir -p $dir
83    fi
84fi
85set -- $args
86while test x$1 != x; do
87    if test -f "x64/$1" && test "$1" != "$output"; then
88        x64_args="$x64_args x64/$1"
89    else
90        x64_args="$x64_args $1"
91    fi
92    shift
93done
94$GCC_COMPILE_X64 $x64_args || exit $?
95if test x"$output" != x; then
96    cp $output x64/$output
97fi
98
99if test x"$output" != x; then
100    lipo -create -o $output x86/$output x64/$output
101fi
102