build_mac.py
#!/usr/bin/python
import os
import shutil
import subprocess
import sys
LOCAL_LIBS = [
"libxml2.2",
"libgio-2.0.0",
"libgobject-2.0.0",
"libglib-2.0.0",
"libintl.8",
"libcairo.2",
"libgdk_pixbuf-2.0.0",
"libwebkitgtk-1.0.0",
"libgtk-x11-2.0.0",
"libsoup-2.4.1",
"libjavascriptcoregtk-1.0.0",
"libgdk-x11-2.0.0",
"libatk-1.0.0",
"libpangocairo-1.0.0",
"libXrender.1",
"libXinerama.1",
"libXi.6",
"libXrandr.2",
"libXcursor.1",
"libXcomposite.1",
"libXdamage.1",
"libpangoft2-1.0.0",
"libXfixes.3",
"libX11.6",
"libXext.6",
"libpango-1.0.0",
"libfreetype.6",
"libfontconfig.1",
"liblzma.5",
"libGL.1", # GL
"libICE.6",
"libSM.6",
"libX11-xcb.1",
"libX11.6",
"libXau.6",
"libXcomposite.1",
"libXcursor.1",
"libXdamage.1",
"libXdmcp.6",
"libXext.6",
"libXfixes.3",
"libXi.6",
"libXinerama.1",
"libXrandr.2",
"libXrender.1",
"libXt.6",
"libatk-1.0.0",
"libbz2.1.0",
"libcairo.2",
"libdbus-1.3",
"libdbus-glib-1.2",
"libenchant.1",
"libexpat.1",
"libffi.6",
"libfontconfig.1",
"libfreetype.6",
"libgailutil.18",
"libgdk-x11-2.0.0",
"libgdk_pixbuf-2.0.0",
"libgeoclue.0",
"libgio-2.0.0",
"libglib-2.0.0",
"libgmodule-2.0.0",
"libgobject-2.0.0",
"libgstapp-0.10.0",
"libgstaudio-0.10.0",
"libgstbase-0.10.0",
"libgstfft-0.10.0",
"libgstinterfaces-0.10.0",
"libgstpbutils-0.10.0",
"libgstreamer-0.10.0",
"libgstvideo-0.10.0",
"libgthread-2.0.0",
"libgtk-x11-2.0.0",
"libiconv.2",
"libicudata.49",
"libicui18n.49",
"libicuuc.49",
"libintl.8",
"libjavascriptcoregtk-1.0.0",
"libjpeg.8",
"liblzma.5",
"liborc-0.4.0",
"libpango-1.0.0",
"libpangocairo-1.0.0",
"libpangoft2-1.0.0",
"libpixman-1.0",
"libpng15.15",
"libsoup-2.4.1",
"libsqlite3.0",
"libwebkitgtk-1.0.0",
"libxcb-render.0",
"libxcb-shm.0",
"libxcb.1",
"libxml2.2",
"libxslt.1",
"libz.1"
]
def run(cmd):
process = subprocess.Popen (cmd, shell=True)
process.communicate()[0]
if not process.returncode == 0:
print("Error: " + cmd)
exit(1)
def build():
# Compile birdfont on MacOSX 10.5 (Leopard)
#libbirdfont
run("rm -rf build/mac/*")
run("mkdir -p build/mac/libbirdfont")
run("mkdir -p build/mac/bin")
run("valac -C --basedir build/mac/libbirdfont/ --enable-experimental-non-null --enable-experimental --define=MAC --library libbirdfont -H build/mac/libbirdfont/birdfont.h libbirdfont/* --pkg libxml-2.0 --pkg gio-2.0 --pkg cairo --pkg libsoup-2.4 --pkg gdk-pixbuf-2.0 --pkg webkit-1.0")
run("cp libbirdfont/*.c build/mac/libbirdfont/")
run("""gcc -c build/mac/libbirdfont/*.c -shared -fno-common -fPIC -D 'GETTEXT_PACKAGE="birdfont"' $(pkg-config --cflags --libs libxml-2.0) $(pkg-config --cflags --libs gio-2.0) $(pkg-config --cflags --libs cairo) $(pkg-config --cflags --libs glib-2.0) $(pkg-config --cflags --libs gdk-pixbuf-2.0) $(pkg-config --cflags --libs webkit-1.0) -I ./build/mac/birdfont""")
run("mv ./*.o build/mac/libbirdfont/ ")
run("gcc -dynamiclib -Wl,-headerpad_max_install_names,-undefined,dynamic_lookup,-compatibility_version,1.0,-current_version,1.0,-install_name,/usr/local/lib/libbirdfont.dylib -shared build/mac/libbirdfont/*.o $(pkg-config --cflags --libs libxml-2.0) $(pkg-config --cflags --libs gio-2.0) $(pkg-config --cflags --libs cairo) $(pkg-config --cflags --libs glib-2.0) $(pkg-config --cflags --libs gdk-pixbuf-2.0) $(pkg-config --cflags --libs webkit-1.0) -shared -o libbirdfont.dylib")
run("mv libbirdfont.dylib build/mac/bin/")
# birdfont
run("mkdir -p build/mac/birdfont")
run("valac -C --enable-experimental-non-null --enable-experimental --define=MAC birdfont/* --vapidir=./ --pkg libxml-2.0 --pkg gio-2.0 --pkg cairo --pkg libsoup-2.4 --pkg gdk-pixbuf-2.0 --pkg webkit-1.0 --pkg gtk+-2.0 --pkg libbirdfont")
run("mv birdfont/*.c build/mac/birdfont/")
run("""gcc -c ./build/mac/libbirdfont/birdfont.h build/mac/birdfont/*.c -D 'GETTEXT_PACKAGE="birdfont"' $(pkg-config --cflags libxml-2.0) $(pkg-config --cflags gio-2.0) $(pkg-config --cflags cairo) $(pkg-config --cflags glib-2.0) $(pkg-config --cflags gdk-pixbuf-2.0) $(pkg-config --cflags webkit-1.0) -I ./build/mac/libbirdfont/""")
run("mv ./*.o build/mac/birdfont/")
run("gcc build/mac/birdfont/*.o ./build/mac/bin/libbirdfont.dylib $(pkg-config --cflags --libs libxml-2.0) $(pkg-config --cflags --libs gio-2.0) $(pkg-config --cflags --libs cairo) $(pkg-config --cflags --libs glib-2.0) $(pkg-config --cflags --libs gdk-pixbuf-2.0) $(pkg-config --cflags --libs webkit-1.0) $(pkg-config --cflags --libs gtk+-2.0) -o ./build/mac/bin/birdfont")
# birdfont-export
run("mkdir -p build/mac/birdfont-export")
run("valac -C --enable-experimental-non-null --enable-experimental --define=MAC birdfont-export/* --vapidir=./ --pkg libxml-2.0 --pkg gio-2.0 --pkg cairo --pkg libsoup-2.4 --pkg gdk-pixbuf-2.0 --pkg webkit-1.0 --pkg gtk+-2.0 --pkg libbirdfont")
run("mv birdfont-export/*.c build/mac/birdfont-export/")
run("""gcc -c ./build/mac/libbirdfont/birdfont.h build/mac/birdfont-export/*.c -D 'GETTEXT_PACKAGE="birdfont"' $(pkg-config --cflags libxml-2.0) $(pkg-config --cflags gio-2.0) $(pkg-config --cflags cairo) $(pkg-config --cflags glib-2.0) $(pkg-config --cflags gdk-pixbuf-2.0) $(pkg-config --cflags webkit-1.0) -I ./build/mac/libbirdfont/""")
run("mv ./*.o build/mac/birdfont-export/")
run("gcc build/mac/birdfont-export/*.o ./build/mac/bin/libbirdfont.dylib $(pkg-config --cflags --libs libxml-2.0) $(pkg-config --cflags --libs gio-2.0) $(pkg-config --cflags --libs cairo) $(pkg-config --cflags --libs glib-2.0) $(pkg-config --cflags --libs gdk-pixbuf-2.0) $(pkg-config --cflags --libs webkit-1.0) $(pkg-config --cflags --libs gtk+-2.0) -o ./build/mac/bin/birdfont-export")
def copy_libs ():
# clean
run("rm -rf build/mac/birdfont.app")
# copy files
run("mkdir -p build/mac/birdfont.app")
run("mkdir -p build/mac/birdfont.app/Contents")
run("mkdir -p build/mac/birdfont.app/Contents/MacOs")
run("mkdir -p build/mac/birdfont.app/Contents/Resources")
run("cp build/mac/bin/* build/mac/birdfont.app/Contents/MacOs")
run("cp mac/birdfont.sh build/mac/birdfont.app/Contents/MacOs")
run("cp mac/Info.plist build/mac/birdfont.app/Contents/")
run("cp -r layout build/mac/birdfont.app/Contents/MacOs")
run("cp -r icons build/mac/birdfont.app/Contents/MacOs")
run("cp mac/birdfont.icns build/mac/birdfont.app/Contents/Resources")
for lib in LOCAL_LIBS:
run("cp /opt/local/lib/" + lib + ".dylib mac/Info.plist build/mac/birdfont.app/Contents/MacOs")
run("cp /usr/lib/libgcc_s.1.dylib ./build/mac/birdfont.app/Contents/MacOs")
# library path for libbirdfont
for program in ['libbirdfont.dylib', 'birdfont', 'birdfont-export']:
for lib in LOCAL_LIBS:
run("install_name_tool -change /opt/local/lib/" + lib + ".dylib @executable_path/" + lib
+ ".dylib build/mac/birdfont.app/Contents/MacOs/" + program)
for program in LOCAL_LIBS:
for lib in LOCAL_LIBS:
run("install_name_tool -change /opt/local/lib/" + lib + ".dylib @executable_path/" + lib
+ ".dylib build/mac/birdfont.app/Contents/MacOs/" + program + ".dylib")
run("install_name_tool -change /usr/lib/libgcc_s.1.dylib @executable_path/libgcc_s.1.dylib "
+ "build/mac/birdfont.app/Contents/MacOs/libbirdfont.dylib")
run("install_name_tool -change /usr/local/lib/libbirdfont.dylib @executable_path/libbirdfont.dylib "
+ "build/mac/birdfont.app/Contents/MacOs/libbirdfont.dylib")
# library path for birdfont
for lib in LOCAL_LIBS:
run("install_name_tool -change /opt/local/lib/" + lib + ".dylib @executable_path/" + lib
+ ".dylib build/mac/birdfont.app/Contents/MacOs/birdfont")
run("install_name_tool -change /usr/lib/libgcc_s.1.dylib @executable_path/libgcc_s.1.dylib "
+ "build/mac/birdfont.app/Contents/MacOs/birdfont")
run("install_name_tool -change /usr/local/lib/libbirdfont.dylib @executable_path/libbirdfont.dylib "
+ "build/mac/birdfont.app/Contents/MacOs/birdfont")
run("install_name_tool -change /usr/local/lib/libbirdfont.dylib @executable_path/libbirdfont.dylib "
+ "build/mac/birdfont.app/Contents/MacOs/birdfont-export")
# pango
run("cp /opt/local/lib/pango/1.6.0/modules/pango-* ./build/mac/birdfont.app/Contents/MacOs")
# configuration
run("cp -r /opt/local/etc build/mac/birdfont.app/Contents/MacOs/")
run("pango-querymodules | sed -e 's:/opt/local/lib/pango/1.6.0/modules/::g'> etc/pango/pango.modules")
)
print ("Done.")
build()
copy_libs ()