summaryrefslogtreecommitdiff
path: root/libjava/classpath/lib/split-for-gcj.sh
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/lib/split-for-gcj.sh')
-rwxr-xr-xlibjava/classpath/lib/split-for-gcj.sh38
1 files changed, 32 insertions, 6 deletions
diff --git a/libjava/classpath/lib/split-for-gcj.sh b/libjava/classpath/lib/split-for-gcj.sh
index 477e0a8c18a..0f5ffaff285 100755
--- a/libjava/classpath/lib/split-for-gcj.sh
+++ b/libjava/classpath/lib/split-for-gcj.sh
@@ -1,19 +1,42 @@
#! /bin/sh
-# Split in multiple parts for gcj. This uses a somewhat hacky
-# procedure for finding the package of a given file.
+# This script is used when compiling Classpath with gcj. The idea is
+# to compile one package at a time, and only recompile packages when
+# actually required.
+
+# We build java->class by package so we need to know what .java files
+# correspond to what package.
+
+# We have a .stamp file for each package; this is the makefile target.
+# We also have a .list file for each package, which lists all the
+# input files in that package.
+
+# gen-classlist.sh makes a list of all the .java files we are going to compile.
+
+# This script generates Makefile.deps, which looks like this:
+#
+# java/awt/AWTUtilities.class: lists/java-awt.stamp
+# lists/java-awt.list: /home/aph/gcc/gcc/libjava/classpath/gnu/java/awt/AWTUtilities.java
+# java/awt/BitMaskExtent.class: lists/java-awt.stamp
+# lists/java-awt.list: /home/aph/gcc/gcc/libjava/classpath/gnu/java/awt/BitMaskExtent.java
+# java/awt/BitwiseXORComposite.class: lists/java-awt.stamp
+# lists/java-awt.list: /home/aph/gcc/gcc/libjava/classpath/gnu/java/awt/BitwiseXORComposite.java
+
+# This uses a somewhat hacky procedure for finding the package of a
+# given file.
+
echo "Splitting for gcj"
-rm -f Makefile.deps > /dev/null 2>&1
+rm -f Makefile.dtmp > /dev/null 2>&1
test -d lists || mkdir lists
for dir in java javax gnu org; do
- for file in `cat classes | fgrep /$dir/`; do
+ fgrep /$dir/ classes | while read file; do
pkg=`echo "$file " | sed -n -e "s,^.*/\($dir/.*\)/[^/]*$,\1,p"`
list=lists/`echo $pkg | sed -e 's,/,-,g'`
echo "$file" >> ${list}.list.1
f2=`echo "$file" | sed -n -e "s,^.*/\($dir/.*\)$,\1,p"`
f2=`echo "$f2" | sed -e 's/.java$//'`.class
- echo "$f2: ${list}.stamp" >> Makefile.deps
- echo "${list}.list: $file" >> Makefile.deps
+ echo "$f2: ${list}.stamp" >> Makefile.dtmp
+ echo "${list}.list: $file" >> Makefile.dtmp
done
done
@@ -26,3 +49,6 @@ for file in lists/*.list.1; do
mv $file $real
fi
done
+
+# If we were run we must update Makefile.deps.
+mv Makefile.dtmp Makefile.deps