Annotation of /trunk/sun-jdk/construct-rev148.sh
Parent Directory | Revision Log
Revision 153 -
(hide annotations)
(download)
(as text)
Tue May 8 20:52:56 2007 UTC (17 years, 4 months ago) by niro
File MIME type: application/x-sh
File size: 6959 byte(s)
Tue May 8 20:52:56 2007 UTC (17 years, 4 months 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 |