summaryrefslogtreecommitdiff
path: root/libjava/classpath/lib/gen-classlist.sh.in
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/lib/gen-classlist.sh.in')
-rwxr-xr-xlibjava/classpath/lib/gen-classlist.sh.in151
1 files changed, 151 insertions, 0 deletions
diff --git a/libjava/classpath/lib/gen-classlist.sh.in b/libjava/classpath/lib/gen-classlist.sh.in
new file mode 100755
index 000000000..a0971ff63
--- /dev/null
+++ b/libjava/classpath/lib/gen-classlist.sh.in
@@ -0,0 +1,151 @@
+#! @SHELL@
+# @configure_input@
+
+# Make sure sorting is done the same on all configurations
+# Note the use of sort -r below. This is done explicitly to work around
+# a gcj bug (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21418)
+LC_ALL=C; export LC_ALL
+LANG=C; export LANG
+
+abs_top_builddir=`cd "${top_builddir}"; pwd`
+abs_top_srcdir=`cd "@top_srcdir@"; pwd`
+
+echo "Adding java source files from srcdir '${abs_top_srcdir}'."
+
+# We construct 'classes.1' as a series of lines. Each line
+# has three fields, which are separated by spaces. The first
+# field is the package of this class (separated by "/"s).
+# The second field is the absolute pathname of the top-level directory
+# for this file. E.g., it might look like
+# "/home/jezebel/classpath/vm/reference".
+# The third field is the file name, like "java/lang/Object.java".
+# We do this because it makes splitting for the gcj build much
+# cheaper.
+(cd @top_srcdir@
+ @FIND@ java javax gnu org sun -follow -name '*.java' -print |
+ sort -r | sed -e 's,/\([^/]*\)$, \1,' |
+ while read pkg file; do
+ echo $pkg ${abs_top_srcdir} $pkg/$file
+ done) > ${top_builddir}/lib/classes.1
+
+# The same, but for the external code.
+for dir in \
+ ${abs_top_srcdir}/external/w3c_dom \
+ ${abs_top_srcdir}/external/sax \
+ ${abs_top_srcdir}/external/relaxngDatatype \
+ ${abs_top_srcdir}/external/jsr166 \
+ ; do
+ (cd $dir
+ for subdir in java javax gnu org sun; do
+ if test -d $subdir; then
+ @FIND@ $subdir -follow -name '*.java' -print |
+ sort -r | sed -e 's,/\([^/]*\)$, \1,' |
+ while read pkg file; do
+ echo $pkg $dir $pkg/$file
+ done
+ fi
+ done)
+done >> ${top_builddir}/lib/classes.1
+
+# Generate files for the VM classes.
+: > vm.omit
+: > vm.add
+vm_dirlist=`echo "@vm_classes@" | sed -e 's/:/ /g'`
+for dir in $vm_dirlist; do
+ echo "Adding java source files from VM directory $dir"
+ (cd $dir
+ for subdir in java javax gnu org com sun; do
+ if test -d $subdir; then
+ @FIND@ $subdir -name '*.java' -print
+ fi
+ done) | sed -e 's,/\([^/]*\)$, \1,' |
+ while read pkg file; do
+ echo $pkg $dir $pkg/$file >> vm.add
+ echo $pkg/$file >> vm.omit
+ done
+done
+
+# Only include generated files once.
+if test "$abs_top_builddir" != "$abs_top_srcdir"; then
+ echo "Adding generated files in builddir '${top_builddir}'."
+ # Currently the only generated files are in gnu.*.
+ (cd ${top_builddir}; @FIND@ gnu -follow -name '*.java' -print) |
+ sort | sed -e 's,/\([^/]*\)$, \1,' |
+ while read pkg file; do
+ echo $pkg $top_builddir $pkg/$file
+ done >> ${top_builddir}/lib/classes.1
+fi
+
+
+cat $1.omit vm.omit > tmp.omit
+for dir in $vm_dirlist; do
+ if test -f $dir/$1.omit; then
+ cat $dir/$1.omit >> tmp.omit
+ fi
+done
+
+# Mangle the omit expressions into a script suitable for old awk.
+# Exploit the fact that many omissions are not regular expressions:
+# assume a single file is listed if it does not contain '*', '$',
+# and ends in '.java'.
+sed_omit_hash='
+1i\
+ BEGIN {\
+ omit[""] = 1
+$a\
+ }
+/[*$]/d
+/\.java$/!d
+s|^| omit["|
+s|$|"] = 1|'
+sed_omit_main_loop='
+1i\
+ {\
+ if (omit[$3]) next
+$a\
+ print\
+ }
+/^[^*$]*\.java$/d
+s|/|\\/|g
+s|^| if ($3 ~ /|
+s|$|/) next|'
+
+sed "$sed_omit_hash" <tmp.omit >tmp.awk
+sed "$sed_omit_main_loop" <tmp.omit >>tmp.awk
+@AWK@ -f tmp.awk < ${top_builddir}/lib/classes.1 > ${top_builddir}/lib/classes.tmp
+mv ${top_builddir}/lib/classes.tmp ${top_builddir}/lib/classes.1
+
+vm_omitlist=
+for dir in $vm_dirlist; do
+ if test -f $dir/$1.omit; then
+ vm_omitlist="$vm_omitlist $dir/$1.omit"
+ fi
+done
+cat $vm_omitlist | sed "$sed_omit_hash" > tmp.awk
+cat $vm_omitlist | sed "$sed_omit_main_loop" >> tmp.awk
+@AWK@ -f tmp.awk < vm.add >>${top_builddir}/lib/classes.1
+
+rm -f vm.omit vm.add tmp.omit tmp.awk
+
+new=
+if test -f ${top_builddir}/lib/classes.2; then
+ p=`diff ${top_builddir}/lib/classes.2 ${top_builddir}/lib/classes.1`
+ if test "$p" != ""; then
+ new="true"
+ fi
+else
+ new="true"
+fi
+
+if test "$new" = "true"; then
+ cp ${top_builddir}/lib/classes.1 ${top_builddir}/lib/classes.2
+ # Strip the package part.
+ sed -e 's/^[^ ]* //' -e 's, ,/,' < ${top_builddir}/lib/classes.1 \
+ > ${top_builddir}/lib/classes
+ echo "JAVA_SRCS = \\" > ${top_builddir}/lib/java.dep
+ for i in `cat ${top_builddir}/lib/classes` ; do
+ echo $i "\\" >> ${top_builddir}/lib/java.dep
+ done
+fi
+
+exit 0