| #!/bin/bash |
| # construct.sh |
| # example construction of JRE and JDK directories from the DLJ bundles |
| # |
| # Copyright © 2006 Sun Microsystems, Inc. |
| # |
| # Permission is hereby granted, free of charge, to any person obtaining |
| # a copy of this software and associated documentation files (the |
| # "Software"), to deal in the Software without restriction, including |
| # without limitation the rights to use, copy, modify, merge, publish, |
| # distribute, sublicense, and/or sell copies of the Software, and to |
| # permit persons to whom the Software is furnished to do so, subject to |
| # the following conditions: |
| # |
| # The above copyright notice and this permission notice shall be |
| # included in all copies or substantial portions of the Software. |
| # |
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |
| # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
| # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
| # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| # |
| # Sun, Sun Microsystems, the Sun logo and Java, Java HotSpot, |
| # and JVM trademarks or registered trademarks of Sun Microsystems, |
| # Inc. in the U.S. and other countries. |
| |
| |
| program=`basename $0` |
| |
| usage () { |
| echo "usage: ${program} path/to/unbundle-jdk path/to/linux-jdk path/to/linux-jre" |
| } |
| |
| getargs() { |
| undir=$1 |
| jdkdir=$2 |
| jredir=$3 |
| if [ ! -d $undir ]; then |
| echo "${program}: unbundle directory not found: $undir" |
| exit 2 |
| fi |
| # make sure javahome is the JDK |
| javahome=`echo $undir/*/demo` |
| if [ ! -d $javahome ]; then |
| echo "${program}: unbundle directory incorrect: $undir" |
| echo " expecting $undir/jdk1.5.0_xx" |
| exit 2 |
| else |
| javahome=`dirname $javahome` |
| fi |
| # verify JDK dir |
| jdkdirp=`dirname $jdkdir` |
| jdkbase=`basename $jdkdir` |
| if [ ! -d $jdkdirp ]; then |
| echo "${program}: parent directory for JDK does not exist: $jdkdirp" |
| exit 2 |
| fi |
| savedir=`pwd` |
| cd $jdkdirp |
| jdkdirp=`pwd` |
| cd $savedir |
| jdkdir=$jdkdirp/$jdkbase |
| # verify JRE dir |
| jredirp=`dirname $jredir` |
| jrebase=`basename $jredir` |
| if [ ! -d $jredirp ]; then |
| echo "${program}: parent directory for JRE does not exist: $jredirp" |
| exit 2 |
| fi |
| savedir=`pwd` |
| cd $jredirp |
| jredirp=`pwd` |
| cd $savedir |
| jredir=$jredirp/$jrebase |
| } |
| |
| checkfiles() { |
| if [ -r $jdkdir ]; then |
| echo "${program}: directory for JDK already exists: $jdkdir" |
| exit 2 |
| fi |
| if [ -r $jredir ]; then |
| echo "${program}: directory for JRE already exists: $jredir" |
| exit 2 |
| fi |
| } |
| |
| copytree() { |
| echo "copying over the JDK tree..." |
| cp -a $javahome $jdkdir |
| } |
| |
| linkrel() { |
| target=$1 |
| link=$2 |
| # make a softlink from the $link to the $target |
| # make this a relative link |
| targetb=(`echo $target | tr '/' ' '`) |
| linkb=(`echo $link | tr '/' ' '`) |
| (( n = ${#targetb[*]} )) |
| (( m = ${#linkb[*]} )) |
| c=$n # common length |
| if [ $m -lt $c ]; then |
| (( c = m )) |
| fi |
| for (( i = 0 ; i < c ; i++ )); do |
| if [ ${targetb[$i]} != ${linkb[$i]} ]; then |
| # echo components differ, stopping |
| break |
| fi |
| done |
| rel="" |
| for (( j = i + 1; j < m ; j++ )); do |
| if [ -z $rel ]; then |
| rel=".." |
| else |
| rel="$rel/.." |
| fi |
| done |
| for (( j = i; j < n ; j++ )); do |
| if [ -z $rel ]; then |
| rel=${targetb[$j]} |
| else |
| rel="$rel/${targetb[$j]}" |
| fi |
| done |
| ln -s $rel $link |
| } |
| |
| createjre() { |
| echo "creating JRE directory..." |
| # absolute link |
| # ln -s $jdkdir/jre $jredir |
| # relative link |
| linkrel $jdkdir/jre $jredir |
| } |
| |
| unpackjars() { |
| echo "unpacking jars..." |
| unpack200=$jdkdir/bin/unpack200 |
| if [ ! -x $unpack200 ]; then |
| echo "${program}: file missing $unpack200" |
| exit 1 |
| fi |
| cd $jdkdir |
| PACKED_JARS=`find . -name '*.pack'` |
| for i in $PACKED_JARS; do |
| # echo $i |
| jdir=`dirname $i` |
| jbase=`basename $i .pack` |
| if ! $unpack200 $jdkdir/$jdir/$jbase.pack $jdkdir/$jdir/$jbase.jar; then |
| echo "${program}: error unpacking $jdkdir/$jdir/$jbase.jar" |
| fi |
| if [ ! -r $jdkdir/$jdir/$jbase.jar ]; then |
| echo "${program}: missing $jdkdir/$jdir/$jbase.jar" |
| else |
| echo " $jdir/$jbase.jar" |
| # remove pack file |
| rm $jdkdir/$jdir/$jbase.pack |
| fi |
| done |
| } |
| |
| preparecds() { |
| # if this is a client installation... |
| compiler="`$jdkdir/bin/java -client -version 2>&1 | tail -n +3 | cut -d' ' -f1-4`" |
| if [ "X$compiler" = "XJava HotSpot(TM) Client VM" ]; then |
| # create the CDS archive |
| echo "creating the class data sharing archive..." |
| if ! $jdkdir/bin/java -client -Xshare:dump > /dev/null 2>&1; then |
| echo "returned error code $?" |
| fi |
| fi |
| } |
| |
| jreman () { |
| echo "setting up the JRE man pages..." |
| # note this list is slightly different for OpenSolaris bundles |
| jreman="${T}/jre.man.txt" |
| cat <<EOF > $jreman |
| man/ja_JP.eucJP/man1/java.1 |
| man/ja_JP.eucJP/man1/javaws.1 |
| man/ja_JP.eucJP/man1/keytool.1 |
| man/ja_JP.eucJP/man1/orbd.1 |
| man/ja_JP.eucJP/man1/pack200.1 |
| man/ja_JP.eucJP/man1/policytool.1 |
| man/ja_JP.eucJP/man1/rmid.1 |
| man/ja_JP.eucJP/man1/rmiregistry.1 |
| man/ja_JP.eucJP/man1/servertool.1 |
| man/ja_JP.eucJP/man1/tnameserv.1 |
| man/ja_JP.eucJP/man1/unpack200.1 |
| man/man1/java.1 |
| man/man1/javaws.1 |
| man/man1/keytool.1 |
| man/man1/orbd.1 |
| man/man1/pack200.1 |
| man/man1/policytool.1 |
| man/man1/rmid.1 |
| man/man1/rmiregistry.1 |
| man/man1/servertool.1 |
| man/man1/tnameserv.1 |
| man/man1/unpack200.1 |
| EOF |
| # create jre/man directory |
| # mkdir $jdkdir/jre/man |
| # move the real JRE man pages to jre/man |
| # link the JDK JRE man pages to jre/man |
| # real JDK man pages stay where they are |
| for m in `cat $jreman`; do |
| manpath=`dirname $jdkdir/jre/$m` |
| mkdir -p $manpath |
| mv $jdkdir/$m $jdkdir/jre/$m |
| linkrel $jdkdir/jre/$m $jdkdir/$m |
| done |
| # link in Japanese man pages |
| ln -s ja_JP.eucJP $jdkdir/jre/man/ja |
| rm $jreman |
| } |
| |
| elimdups() { |
| echo "eliminating duplication between the JDK and JDK/jre..." |
| jdkcomm="${T}/jdk.bin.comm.txt" |
| cat <<EOF > $jdkcomm |
| bin/ControlPanel |
| bin/java |
| bin/javaws |
| bin/keytool |
| bin/orbd |
| bin/pack200 |
| bin/policytool |
| bin/rmid |
| bin/rmiregistry |
| bin/servertool |
| bin/tnameserv |
| bin/unpack200 |
| EOF |
| # note there is little point in linking these common files |
| # COPYRIGHT |
| # LICENSE |
| # THIRDPARTYLICENSEREADME.txt |
| # And this file is unique to the JDK |
| # README.html |
| # And these files are unique to the JDK/jre/ |
| # CHANGES |
| # README |
| # Welcome.html |
| for p in `cat $jdkcomm`; do |
| rm $jdkdir/$p |
| # this is a relative link |
| ln -s ../jre/$p $jdkdir/$p |
| done |
| rm $jdkcomm |
| } |
| |
| if [ $# -eq 3 ] ; then |
| getargs $1 $2 $3 |
| checkfiles |
| copytree |
| createjre |
| unpackjars |
| #preparecds |
| jreman |
| elimdups |
| else |
| usage |
| exit 1 |
| fi |
| |
| exit 0 |
| |