D pkgs/development/interpreters/jre Obsolete. jdk and jre are now build by the same expression. D pkgs/development/compilers/blackdown Obsolete. jdk is now downloadable. D pkgs/development/compilers/jdk/jdk5-sun-linux.nix Obsolete A pkgs/development/compilers/jdk/dlj-bundle-builder.sh Build for DLJ bundles. M pkgs/top-level/all-packages.nix Dropped blackdown and ant based on blackdown. A pkgs/development/compilers/jdk/jdk6-construct.sh Copy of DLJ construct script to fix problem with jdk6 bundles. A pkgs/development/compilers/jdk/jdk6-linux.nix New main Nix expression for jdk and jre. Supports mozillaPlugin. A pkgs/development/compilers/jdk/dlj-bundle-builder.sh Include path to libjli in rpath. svn path=/nixpkgs/trunk/; revision=8186
		
			
				
	
	
		
			274 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			274 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/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=/tmp/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=/tmp/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
 | 
						|
 |