1#! /bin/sh 2 3# This script is used when compiling Classpath with gcj. The idea is 4# 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 25echo "Splitting for gcj" 26rm -f Makefile.dtmp > /dev/null 2>&1 27test -d lists || mkdir lists 28# Much more efficient to do processing outside the loop... 29# The first expression computes the .class file name. 30# We only want the first three package components, and 31# we want them separated by '-'; this is the remaining expressions. 32sed -e 's, \(.*\)[.]java$, \1.java \1.class,' \ 33 -e 's,^\([^/ ]*\)/\([^/ ]*\) ,\1-\2 ,' \ 34 -e 's,^\([^/ ]*\)/\([^/ ]*\)/\([^/ ]*\) ,\1-\2-\3 ,' \ 35 -e 's,^\([^/ ]*\)/\([^/ ]*\)/\([^/ ]*\)/[^ ]* ,\1-\2-\3 ,' \ 36 classes.2 | 37while read pkg dir file f2; do 38 list=lists/$pkg 39 echo "$dir/$file" >> ${list}.list.1 40 41 echo "$f2: ${list}.stamp" >> Makefile.dtmp 42 echo "${list}.list: $dir/$file" >> Makefile.dtmp 43done 44 45# Only update a .list file if it changed. 46for file in lists/*.list.1; do 47 real=`echo "$file" | sed -e 's/.1$//'` 48 if cmp -s $real $file; then 49 rm $file 50 else 51 mv $file $real 52 fi 53done 54 55# If we were run we must update Makefile.deps. 56mv Makefile.dtmp Makefile.deps 57