# Description: Initial Java bootstrap # URL: https://stygian.me/java-bootstrap/ # Maintainer: John Vogel, jvogel4 at stny dot rr dot com # Depends on: libffi unzip zip name=java-init version=20180530 ant_vers=1.8.4 cp1_vers=0.93 cp2_vers=0.99 ecj_vers=3.2.2-200702121330 fastjar_vers=0.98 jamvm1_vers=1.5.1 jamvm2_vers=2.0.0 jikes_vers=1.22 release=1 source=(https://ftp.gnu.org/gnu/classpath/classpath-$cp1_vers.tar.gz https://ftp.gnu.org/gnu/classpath/classpath-$cp2_vers.tar.gz http://sourceforge.net/projects/jamvm/files/jamvm/JamVM%20$jamvm1_vers/jamvm-$jamvm1_vers.tar.gz http://sourceforge.net/projects/jamvm/files/jamvm/JamVM%20$jamvm2_vers/jamvm-$jamvm2_vers.tar.gz http://archive.apache.org/dist/ant/source/apache-ant-$ant_vers-src.tar.bz2 http://archive.eclipse.org/eclipse/downloads/drops/R-$ecj_vers/ecjsrc.zip http://download.savannah.nongnu.org/releases/fastjar/fastjar-$fastjar_vers.tar.gz https://sourceforge.net/projects/jikes/files/Jikes/$jikes_vers/jikes-$jikes_vers.tar.bz2 fastjar-jartool.c_rev1.62.patch fix-update-mode.diff build.xml) unpack_source() { for file in ${source[@]}; do case ${file##*/} in apache-ant-$ant_vers-src.tar.bz2|\ classpath-$cp1_vers.tar.gz|\ classpath-$cp2_vers.tar.gz|\ fastjar-$fastjar_vers.tar.gz|\ jamvm-$jamvm1_vers.tar.gz|\ jamvm-$jamvm2_vers.tar.gz|\ jikes-$jikes_vers.tar.bz2) bsdtar -p -o -C $SRC -xf $(get_filename $file) ;; *) cp $(get_filename $file) $SRC ;; esac done } build() { find $SRC ! -type l -a \( -perm /go+w -o ! -perm /u+rw \) \ -exec chmod go-w,u+w,a+r {} \; mkdir -p $SRC/$name/{bin,lib,share/java} cd $SRC/fastjar-$fastjar_vers patch -i $SRC/fastjar-jartool.c_rev1.62.patch patch -i $SRC/fix-update-mode.diff ./configure --prefix=$SRC/$name make make install rm -r $SRC/$name/share/{info,man} # Shutting off fp-emulation stopped jikes from segfaulting. # We need the source15 to build new enough classpath and to build openjdk6 later. cd $SRC/jikes-$jikes_vers ./configure \ --prefix=$SRC/$name \ --disable-fp-emulation \ --enable-source15 make make install rm -r $SRC/$name/{man,share/doc} OLD_PATH=$PATH export JAVA_HOME=$SRC/$name export PATH=$JAVA_HOME/bin:$PATH mkdir -p $SRC/tmp export HOME=$SRC/tmp cd $SRC/classpath-$cp1_vers ./configure \ --prefix=$SRC/$name \ --disable-alsa \ --disable-dssi \ --disable-examples \ --disable-gtk-peer \ --disable-gconf-peer \ --disable-plugin \ --disable-Werror \ --without-gjdoc make make install ln -s ../share/classpath/glibj.zip $SRC/$name/lib/rt.jar ln -s ../share/classpath/tools.zip $SRC/$name/lib/tools.jar rm -r $SRC/$name/info cd $SRC/jamvm-$jamvm1_vers ./configure \ --prefix=$SRC/$name \ --enable-ffi \ --with-classpath-install-dir=$SRC/$name make make install # jamvm install replaces the rt.jar link with one that's invalid. rm $SRC/$name/lib/rt.jar ln -s ../share/classpath/glibj.zip $SRC/$name/lib/rt.jar mv $SRC/$name/bin/jamvm{,.bin} # jamvm seems to have issues with running mutli-threaded, this set of options # seems to do a good job of preventing that. cat > $SRC/$name/bin/jamvm << EOF #!/bin/sh exec $SRC/$name/bin/jamvm.bin -Xmx1024m -Xnocompact -Xnoinlining -Djdt.compiler.useSingleThread=true "\$@" EOF chmod 0755 $SRC/$name/bin/jamvm ln -s jamvm $SRC/$name/bin/java cd $SRC/apache-ant-$ant_vers sed -i -e 's|\(depends="jars\),test-jar\("\)|\1\2|' build.xml touch $HOME/.ant.properties JAVAC=jikes \ JAVACMD=$JAVA_HOME/bin/jamvm \ CLASSPATH=$JAVA_HOME/lib/rt.jar \ ANT_OPTS="-Dbuild.compiler=jikes" \ BOOTJAVAC_OPTS="-nowarn" \ /bin/bash ./build.sh -Ddist.dir=out dist rm -r out/manual rm out/{INSTALL,KEYS,LICENSE,NOTICE,README,WHATSNEW,lib/README} cp -a out $SRC/$name/lib/ant ln -s ../lib/ant/bin/ant $JAVA_HOME/bin/ant install -d -m 0755 $PKG/opt/$name/{bin,lib} cp -a out $PKG/opt/$name/lib/ant ln -s ../lib/ant/bin/ant $PKG/opt/$name/bin/ant mkdir -p $SRC/ecj-$ecj_vers/src mv $SRC/ecjsrc.zip $SRC/ecj-$ecj_vers/src/ecj.zip cd $SRC/ecj-$ecj_vers mv $SRC/build.xml . ant --usejikes -f build.xml install -D ecj.jar $SRC/$name/share/java/ecj.jar install -D ecj.jar $PKG/opt/$name/share/java/ecj.jar cat > $SRC/$name/bin/ecj << EOF #!/bin/sh exec $SRC/$name/bin/jamvm -cp $SRC/$name/share/java/ecj.jar \\ org.eclipse.jdt.internal.compiler.batch.Main "\$@" EOF chmod 0755 $SRC/$name/bin/ecj cat > $PKG/opt/$name/bin/ecj << EOF #!/bin/sh exec /opt/$name/bin/jamvm -cp /opt/$name/share/java/ecj.jar \ org.eclipse.jdt.internal.compiler.batch.Main "\$@" EOF chmod 0755 $PKG/opt/$name/bin/ecj cd $SRC/classpath-$cp2_vers JAVAC=$JAVA_HOME/bin/ecj \ JAVA=$JAVA_HOME/bin/jamvm \ GCJ_JAVAC_TRUE=no \ ./configure \ --prefix=/opt/$name \ --disable-alsa \ --disable-dssi \ --disable-examples \ --disable-gconf-peer \ --disable-gjdoc \ --disable-gtk-peer \ --disable-plugin \ --disable-Werror \ --with-ecj-jar=/opt/$name/share/java/ecj.jar \ ac_cv_prog_java_works=yes make make DESTDIR=$PKG install rm -f $PKG/opt/$name/lib/{rt,tools}.jar ln -s ../share/classpath/glibj.zip $PKG/opt/$name/lib/rt.jar ln -s ../share/classpath/tools.zip $PKG/opt/$name/lib/tools.jar rm -r $PKG/opt/$name/share/{info,man} # TODO: eventually try to fix this by patching the classpath buildfiles. for f in gappletviewer gjar gjarsigner gjavah gkeytool gnative2ascii \ gorbd grmic grmid grmiregistry gserialver gtnameserv; do sed -i -e "s,^\(exec\) .* \(-classpath .*\)$,\1 /opt/$name/bin/jamvm \2," \ $PKG/opt/$name/bin/$f done ln -s . $PKG/opt/$name/jre ln -s ecj $PKG/opt/$name/bin/javac ln -s gjar $PKG/opt/$name/bin/jar ln -s gjarsigner $PKG/opt/$name/bin/jarsigner ln -s gjavah $PKG/opt/$name/bin/javah ln -s gkeytool $PKG/opt/$name/bin/keytool ln -s gnative2ascii $PKG/opt/$name/bin/native2ascii ln -s gorbd $PKG/opt/$name/bin/orbd ln -s grmic $PKG/opt/$name/bin/rmic ln -s grmid $PKG/opt/$name/bin/rmid ln -s grmiregistry $PKG/opt/$name/bin/rmiregistry ln -s gserialver $PKG/opt/$name/bin/serialver ln -s gtnameserv $PKG/opt/$name/bin/tnameserv cd $SRC/jamvm-$jamvm2_vers ./configure \ --prefix=/opt/$name \ --enable-ffi \ --with-classpath-install-dir=/opt/$name make make DESTDIR=$PKG install # jamvm install replaces the rt.jar link with one that's invalid. rm $PKG/opt/$name/lib/rt.jar ln -s ../share/classpath/glibj.zip $PKG/opt/$name/lib/rt.jar mv $PKG/opt/$name/bin/jamvm{,.bin} # jamvm seems to have issues with running mutli-threaded, this set of options # seems to do a good job of preventing that. cat > $PKG/opt/$name/bin/jamvm << EOF #!/bin/sh exec /opt/$name/bin/jamvm.bin -Xmx1024m -Xnocompact -Xnoinlining -Djdt.compiler.useSingleThread=true "\$@" EOF chmod 0755 $PKG/opt/$name/bin/jamvm ln -s jamvm $PKG/opt/$name/bin/java mv $PKG/opt/$name/lib/libjvm.so{,.0.0.0} ln -s libjvm.so.0.0.0 $PKG/opt/$name/lib/libjvm.so ln -s libjvm.so.0.0.0 $PKG/opt/$name/lib/libjvm.so.0 find $PKG ! -type l -a \( -perm /go+w -o ! -perm /u+rw \) \ -exec chmod go-w,u+rw {} \; }