#!/bin/bash

# This script performs all of the steps needed to build a
# universal binary libcurl.framework for Mac OS X 10.5 or greater.
#
# Based on original MACOSX-Framework
# Christophe DELANNOY, 12-08-17
#
# changes : both "./configure [params]" replaced with, respectively :
#    CFLAGS="-arch i386" ./configure
#    ./configure
# changes : curlbuild.h
#
# - PPC excluded
# - tested on MacOS X.6.8, Intel, 64bits
# 
# HOWTO
# > cd to the curl-7.27.0 directory
# > ./MACOSX-Framework
#


VERSION=`/usr/bin/sed -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' include/curl/curlver.h`
FRAMEWORK_VERSION=Versions/Release-$VERSION
echo "libcurl framework version: $FRAMEWORK_VERSION"


echo "----Configuring libcurl for 32 bit universal framework (make clean)..."
make clean
echo "----Configuring libcurl for 32 bit universal framework (./configure)..."
CFLAGS="-arch i386" ./configure

echo "----Building 32 bit libcurl..."
make

echo "----Creating 32 bit framework..."
rm -r libcurl.framework
mkdir -p libcurl.framework/${FRAMEWORK_VERSION}/Resources
cp lib/.libs/libcurl.dylib libcurl.framework/${FRAMEWORK_VERSION}/libcurl
install_name_tool -id @executable_path/../Frameworks/libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl
/usr/bin/sed -e "s/7\.12\.3/$VERSION/" lib/libcurl.plist >libcurl.framework/${FRAMEWORK_VERSION}/Resources/Info.plist
mkdir -p libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl
cp include/curl/*.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl
pushd libcurl.framework
ln -fs ${FRAMEWORK_VERSION}/libcurl libcurl
ln -fs ${FRAMEWORK_VERSION}/Resources Resources
ln -fs ${FRAMEWORK_VERSION}/Headers Headers
cd Versions
ln -fs ${FRAMEWORK_VERSION} Current


popd
make clean
echo "----Configuring libcurl for 64 bit universal framework (./configure)..."
./configure
echo "----Building 64 bit libcurl (make)"
make
echo "----Appending 64 bit framework to 32 bit framework..."
cp lib/.libs/libcurl.dylib libcurl.framework/${FRAMEWORK_VERSION}/libcurl64
install_name_tool -id @executable_path/../Frameworks/libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl64
cp libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl32
echo "Working directory: $PWD"
lipo libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 -create -output libcurl.framework/${FRAMEWORK_VERSION}/libcurl
rm libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64
cp libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild32.h
cp include/curl/curlbuild.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild64.h
cat >libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild.h <<EOF
#ifdef __LP64__
#include "curlbuild64.h" // not "curl/curlbuild64.h"
#else
#include "curlbuild32.h" // not "curl/curlbuild32.h"
#endif
EOF

echo "Working directory: $PWD"
lipo -info libcurl.framework/${FRAMEWORK_VERSION}/libcurl
# must display : "Architectures in the fat file: libcurl.framework/Versions/Release-7.27.0/libcurl are: i386 x86_64"
echo "libcurl.framework is built and can now be included in other projects."
echo "Copy libcurl.framework to your bundle's Contents/Frameworks folder, ~/Library/Frameworks or /Library/Frameworks."

# You can cheek the build with :
# > nm -arch all libcurl.framework/Versions/Release-7.27.0/libcurl | grep architecture
#  -> libcurl.framework/Versions/Release-7.27.0/libcurl (for architecture i386):
#     libcurl.framework/Versions/Release-7.27.0/libcurl (for architecture x86_64):
