1 |
#! /bin/sh |
#! /bin/sh |
2 |
|
|
3 |
# Split in multiple parts for gcj. This uses a somewhat hacky |
# This script is used when compiling Classpath with gcj. The idea is |
4 |
# procedure for finding the package of a given file. |
# to compile one package at a time, and only recompile packages when |
5 |
|
# actually required. |
6 |
|
|
7 |
|
# We build java->class by package so we need to know what .java files |
8 |
|
# correspond to what package. |
9 |
|
|
10 |
|
# We have a .stamp file for each package; this is the makefile target. |
11 |
|
# We also have a .list file for each package, which lists all the |
12 |
|
# input files in that package. |
13 |
|
|
14 |
|
# gen-classlist.sh makes a list of all the .java files we are going to compile. |
15 |
|
|
16 |
|
# This script generates Makefile.deps, which looks like this: |
17 |
|
# |
18 |
|
# java/awt/AWTUtilities.class: lists/java-awt.stamp |
19 |
|
# lists/java-awt.list: /home/aph/gcc/gcc/libjava/classpath/gnu/java/awt/AWTUtilities.java |
20 |
|
# java/awt/BitMaskExtent.class: lists/java-awt.stamp |
21 |
|
# lists/java-awt.list: /home/aph/gcc/gcc/libjava/classpath/gnu/java/awt/BitMaskExtent.java |
22 |
|
# java/awt/BitwiseXORComposite.class: lists/java-awt.stamp |
23 |
|
# lists/java-awt.list: /home/aph/gcc/gcc/libjava/classpath/gnu/java/awt/BitwiseXORComposite.java |
24 |
|
|
25 |
|
# This uses a somewhat hacky procedure for finding the package of a |
26 |
|
# given file. |
27 |
|
|
28 |
echo "Splitting for gcj" |
echo "Splitting for gcj" |
29 |
rm -f Makefile.deps > /dev/null 2>&1 |
rm -f Makefile.deps > /dev/null 2>&1 |
30 |
test -d lists || mkdir lists |
test -d lists || mkdir lists |
31 |
for dir in java javax gnu org; do |
for dir in java javax gnu org; do |
32 |
for file in `cat classes | fgrep /$dir/`; do |
fgrep /$dir/ classes | while read file; do |
33 |
pkg=`echo "$file " | sed -n -e "s,^.*/\($dir/.*\)/[^/]*$,\1,p"` |
pkg=`echo "$file " | sed -n -e "s,^.*/\($dir/.*\)/[^/]*$,\1,p"` |
34 |
list=lists/`echo $pkg | sed -e 's,/,-,g'` |
list=lists/`echo $pkg | sed -e 's,/,-,g'` |
35 |
echo "$file" >> ${list}.list.1 |
echo "$file" >> ${list}.list.1 |
36 |
f2=`echo "$file" | sed -n -e "s,^.*/\($dir/.*\)$,\1,p"` |
f2=`echo "$file" | sed -n -e "s,^.*/\($dir/.*\)$,\1,p"` |
37 |
f2=${f2%.java}.class |
f2=`echo "$f2" | sed -e 's/.java$//'`.class |
38 |
echo "$f2: ${list}.stamp" >> Makefile.deps |
echo "$f2: ${list}.stamp" >> Makefile.deps |
39 |
echo "${list}.list: $file" >> Makefile.deps |
echo "${list}.list: $file" >> Makefile.deps |
40 |
done |
done |
42 |
|
|
43 |
# Only update a .list file if it changed. |
# Only update a .list file if it changed. |
44 |
for file in lists/*.list.1; do |
for file in lists/*.list.1; do |
45 |
real=${file%.1} |
real=`echo "$file" | sed -e 's/.1$//'` |
46 |
if ! cmp -s $real $file; then |
if cmp -s $real $file; then |
|
mv $file $real |
|
|
else |
|
47 |
rm $file |
rm $file |
48 |
|
else |
49 |
|
mv $file $real |
50 |
fi |
fi |
51 |
done |
done |