Magellan Linux

Annotation of /trunk/sun-jdk/construct-rev148.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 153 - (hide annotations) (download) (as text)
Tue May 8 20:52:56 2007 UTC (17 years ago) by niro
File MIME type: application/x-sh
File size: 6959 byte(s)
-import

1 niro 153 #!/bin/bash
2     # construct.sh
3     # example construction of JRE and JDK directories from the DLJ bundles
4     #
5     # Copyright © 2006 Sun Microsystems, Inc.
6     #
7     # Permission is hereby granted, free of charge, to any person obtaining
8     # a copy of this software and associated documentation files (the
9     # "Software"), to deal in the Software without restriction, including
10     # without limitation the rights to use, copy, modify, merge, publish,
11     # distribute, sublicense, and/or sell copies of the Software, and to
12     # permit persons to whom the Software is furnished to do so, subject to
13     # the following conditions:
14     #
15     # The above copyright notice and this permission notice shall be
16     # included in all copies or substantial portions of the Software.
17     #
18     # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19     # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20     # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21     # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22     # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23     # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24     # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25     #
26     # Sun, Sun Microsystems, the Sun logo and Java, Java HotSpot,
27     # and JVM trademarks or registered trademarks of Sun Microsystems,
28     # Inc. in the U.S. and other countries.
29    
30    
31     program=`basename $0`
32    
33     usage () {
34     echo "usage: ${program} path/to/unbundle-jdk path/to/linux-jdk path/to/linux-jre"
35     }
36    
37     getargs() {
38     undir=$1
39     jdkdir=$2
40     jredir=$3
41     if [ ! -d $undir ]; then
42     echo "${program}: unbundle directory not found: $undir"
43     exit 2
44     fi
45     # make sure javahome is the JDK
46     javahome=`echo $undir/*/demo`
47     if [ ! -d $javahome ]; then
48     echo "${program}: unbundle directory incorrect: $undir"
49     echo " expecting $undir/jdk1.5.0_xx"
50     exit 2
51     else
52     javahome=`dirname $javahome`
53     fi
54     # verify JDK dir
55     jdkdirp=`dirname $jdkdir`
56     jdkbase=`basename $jdkdir`
57     if [ ! -d $jdkdirp ]; then
58     echo "${program}: parent directory for JDK does not exist: $jdkdirp"
59     exit 2
60     fi
61     savedir=`pwd`
62     cd $jdkdirp
63     jdkdirp=`pwd`
64     cd $savedir
65     jdkdir=$jdkdirp/$jdkbase
66     # verify JRE dir
67     jredirp=`dirname $jredir`
68     jrebase=`basename $jredir`
69     if [ ! -d $jredirp ]; then
70     echo "${program}: parent directory for JRE does not exist: $jredirp"
71     exit 2
72     fi
73     savedir=`pwd`
74     cd $jredirp
75     jredirp=`pwd`
76     cd $savedir
77     jredir=$jredirp/$jrebase
78     }
79    
80     checkfiles() {
81     if [ -r $jdkdir ]; then
82     echo "${program}: directory for JDK already exists: $jdkdir"
83     exit 2
84     fi
85     if [ -r $jredir ]; then
86     echo "${program}: directory for JRE already exists: $jredir"
87     exit 2
88     fi
89     }
90    
91     copytree() {
92     echo "copying over the JDK tree..."
93     cp -a $javahome $jdkdir
94     }
95    
96     linkrel() {
97     target=$1
98     link=$2
99     # make a softlink from the $link to the $target
100     # make this a relative link
101     targetb=(`echo $target | tr '/' ' '`)
102     linkb=(`echo $link | tr '/' ' '`)
103     (( n = ${#targetb[*]} ))
104     (( m = ${#linkb[*]} ))
105     c=$n # common length
106     if [ $m -lt $c ]; then
107     (( c = m ))
108     fi
109     for (( i = 0 ; i < c ; i++ )); do
110     if [ ${targetb[$i]} != ${linkb[$i]} ]; then
111     # echo components differ, stopping
112     break
113     fi
114     done
115     rel=""
116     for (( j = i + 1; j < m ; j++ )); do
117     if [ -z $rel ]; then
118     rel=".."
119     else
120     rel="$rel/.."
121     fi
122     done
123     for (( j = i; j < n ; j++ )); do
124     if [ -z $rel ]; then
125     rel=${targetb[$j]}
126     else
127     rel="$rel/${targetb[$j]}"
128     fi
129     done
130     ln -s $rel $link
131     }
132    
133     createjre() {
134     echo "creating JRE directory..."
135     # absolute link
136     # ln -s $jdkdir/jre $jredir
137     # relative link
138     linkrel $jdkdir/jre $jredir
139     }
140    
141     unpackjars() {
142     echo "unpacking jars..."
143     unpack200=$jdkdir/bin/unpack200
144     if [ ! -x $unpack200 ]; then
145     echo "${program}: file missing $unpack200"
146     exit 1
147     fi
148     cd $jdkdir
149     PACKED_JARS=`find . -name '*.pack'`
150     for i in $PACKED_JARS; do
151     # echo $i
152     jdir=`dirname $i`
153     jbase=`basename $i .pack`
154     if ! $unpack200 $jdkdir/$jdir/$jbase.pack $jdkdir/$jdir/$jbase.jar; then
155     echo "${program}: error unpacking $jdkdir/$jdir/$jbase.jar"
156     fi
157     if [ ! -r $jdkdir/$jdir/$jbase.jar ]; then
158     echo "${program}: missing $jdkdir/$jdir/$jbase.jar"
159     else
160     echo " $jdir/$jbase.jar"
161     # remove pack file
162     rm $jdkdir/$jdir/$jbase.pack
163     fi
164     done
165     }
166    
167     preparecds() {
168     # if this is a client installation...
169     compiler="`$jdkdir/bin/java -client -version 2>&1 | tail -n +3 | cut -d' ' -f1-4`"
170     if [ "X$compiler" = "XJava HotSpot(TM) Client VM" ]; then
171     # create the CDS archive
172     echo "creating the class data sharing archive..."
173     if ! $jdkdir/bin/java -client -Xshare:dump > /dev/null 2>&1; then
174     echo "returned error code $?"
175     fi
176     fi
177     }
178    
179     jreman () {
180     echo "setting up the JRE man pages..."
181     # note this list is slightly different for OpenSolaris bundles
182     jreman=/tmp/jre.man.txt
183     cat <<EOF > $jreman
184     man/ja_JP.eucJP/man1/java.1
185     man/ja_JP.eucJP/man1/javaws.1
186     man/ja_JP.eucJP/man1/keytool.1
187     man/ja_JP.eucJP/man1/kinit.1
188     man/ja_JP.eucJP/man1/klist.1
189     man/ja_JP.eucJP/man1/ktab.1
190     man/ja_JP.eucJP/man1/orbd.1
191     man/ja_JP.eucJP/man1/pack200.1
192     man/ja_JP.eucJP/man1/policytool.1
193     man/ja_JP.eucJP/man1/rmid.1
194     man/ja_JP.eucJP/man1/rmiregistry.1
195     man/ja_JP.eucJP/man1/servertool.1
196     man/ja_JP.eucJP/man1/tnameserv.1
197     man/ja_JP.eucJP/man1/unpack200.1
198     man/man1/java.1
199     man/man1/javaws.1
200     man/man1/keytool.1
201     man/man1/kinit.1
202     man/man1/klist.1
203     man/man1/ktab.1
204     man/man1/orbd.1
205     man/man1/pack200.1
206     man/man1/policytool.1
207     man/man1/rmid.1
208     man/man1/rmiregistry.1
209     man/man1/servertool.1
210     man/man1/tnameserv.1
211     man/man1/unpack200.1
212     EOF
213     # create jre/man directory
214     # mkdir $jdkdir/jre/man
215     # move the real JRE man pages to jre/man
216     # link the JDK JRE man pages to jre/man
217     # real JDK man pages stay where they are
218     for m in `cat $jreman`; do
219     manpath=`dirname $jdkdir/jre/$m`
220     mkdir -p $manpath
221     mv $jdkdir/$m $jdkdir/jre/$m
222     linkrel $jdkdir/jre/$m $jdkdir/$m
223     done
224     # link in Japanese man pages
225     ln -s ja_JP.eucJP $jdkdir/jre/man/ja
226     rm $jreman
227     }
228    
229     elimdups() {
230     echo "eliminating duplication between the JDK and JDK/jre..."
231     jdkcomm=/tmp/jdk.bin.comm.txt
232     cat <<EOF > $jdkcomm
233     bin/ControlPanel
234     bin/java
235     bin/javaws
236     bin/keytool
237     bin/kinit
238     bin/klist
239     bin/ktab
240     bin/orbd
241     bin/pack200
242     bin/policytool
243     bin/rmid
244     bin/rmiregistry
245     bin/servertool
246     bin/tnameserv
247     bin/unpack200
248     EOF
249     # note there is little point in linking these common files
250     # COPYRIGHT
251     # LICENSE
252     # THIRDPARTYLICENSEREADME.txt
253     # And this file is unique to the JDK
254     # README.html
255     # And these files are unique to the JDK/jre/
256     # CHANGES
257     # README
258     # Welcome.html
259     for p in `cat $jdkcomm`; do
260     rm $jdkdir/$p
261     # this is a relative link
262     ln -s ../jre/$p $jdkdir/$p
263     done
264     rm $jdkcomm
265     }
266    
267     if [ $# -eq 3 ] ; then
268     getargs $1 $2 $3
269     checkfiles
270     copytree
271     createjre
272     unpackjars
273     preparecds
274     jreman
275     elimdups
276     else
277     usage
278     exit 1
279     fi
280    
281     exit 0
282