Building Java 7 on Mac OS X

For those unfamiliar with the situation, Apple hate Java developers. Well, one suspects they do. Apple being Apple, one never knows. We could get Java 1.6.0_12 with 32bit support tomorrow, or it could never come. You’ll never know until it appears.

 

Luckily, Landon Fuller loves us. Which Apple play with their iPhones, he beat the OpenJDK into submission on OS X. Only drawback – Swing is X11 based. But still, it’s JDK6 for 10.4, 10.5 and in both 32 and 64bit, and available as SoyLatte.

 

This work has all found its way back into the trunk, and so JDK7 is buildable on the Mac (usually). The only catch: the instructions are scattered, and often vary slightly. So I’m documenting them here for tonight’s build, mostly for my reference.

 

Thanks go to Landon Fuller and Stephen Bannasch for putting these together.

 

1. Download SoyLatte. I found the JDK7 build Landon released in 2008 did not work as a bootstrap.

 

2. Get Mercurial

 

sudo port install mercurial +bash_completion

3. Install the Forest extension

 

hg clone http://bitbucket.org/pmezard/hgforest-crew

You’ll need to point Mercurial at the hgforest-crew directory, by adding the following to ~/.hgrc:

 

[extensions]

hgext.forest=/opt/hgforest-crew/forest.py

4. Grab Kurt Miller’s BSD binary plugs:

 

wget http://www.intricatesoftware.com/distfiles/jdk-7-icedtea-plugs-1.6b.tar.gz

5. Check out the OpenJDK:

 

hg fclone http://hg.openjdk.java.net/bsd-port/bsd-port

6. Place the following in build.sh in the bsd-port directory:

 

LC_ALL=C

LANG=C

unset CLASSPATH

unset JAVA_HOME

make \

  ALT_BOOTDIR=/opt/soylatte16-i386-1.0.3/ \

  ALT_BINARY_PLUGS_PATH=/opt/jdk-7-icedtea-plugs \

  ALT_FREETYPE_HEADERS_PATH=/usr/X11R6/include \

  ALT_FREETYPE_LIB_PATH=/usr/X11R6/lib \

  ALT_CUPS_HEADERS_PATH=/usr/include \

  ANT_HOME=/usr/share/ant \

  NO_DOCS=true \

  HOTSPOT_BUILD_JOBS=2

7. Run, and cross your fingers!

 

READ  Parallel Operations in Java 8

8. I ran into a ld error (archive has no table of contents). Should you hit this, try:

 

ranlib build/bsd-i586/tmp/java/fdlibm/obj/*.a

9. Copy bsd-port/build/bsd-i586/j2sdk-image somewhere useful – and you’re done!