aboutsummaryrefslogtreecommitdiff
path: root/libjava/scripts/makemake.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/scripts/makemake.tcl')
-rwxr-xr-xlibjava/scripts/makemake.tcl577
1 files changed, 0 insertions, 577 deletions
diff --git a/libjava/scripts/makemake.tcl b/libjava/scripts/makemake.tcl
deleted file mode 100755
index 6d1eea9..0000000
--- a/libjava/scripts/makemake.tcl
+++ /dev/null
@@ -1,577 +0,0 @@
-#!/usr/bin/tclsh
-
-# Helper to enforce array-ness.
-proc makearray {name} {
- upvar $name ary
- set ary(_) 1
- unset ary(_)
-}
-
-global is_verbose
-set is_verbose 0
-
-# Verbose printer.
-proc verbose {text} {
- global is_verbose
- if {$is_verbose} {
- puts stderr $text
- }
-}
-
-# This maps a name to its style:
-# * bc objects in this package and all its sub-packages
-# are to be compiled with the BC ABI. It is an error
-# for sub-packages to also appear in the map.
-# * bcheaders
-# as bc, but generate header files and compile with CNI.
-# * package
-# objects in this package (and possibly sub-packages,
-# if they do not appear in the map) will be compiled en masse
-# from source into a single object, using the C++ ABI.
-# * ordinary
-# objects in this package (and possibly sub-packages
-# if they do not appear in the map) will be compiled one at
-# a time into separate .o files.
-# * ignore
-# objects in this package are not used. Note however that
-# most ignored files are actually handled by listing them in
-# 'standard.omit'
-# * interpreter
-# objects in this package (and possibly sub-packages,
-# if they do not appear in the map) are only compiled if
-# the interpreter is enabled. They are compiled as with the
-# 'package' specifier.
-#
-# If a package does not appear in the map, the default is 'package'.
-global package_map
-set package_map(.) package
-
-# These are ignored in Classpath.
-set package_map(gnu/test) ignore
-set package_map(gnu/javax/swing/plaf/gtk) ignore
-set package_map(gnu/gcj/tools/gc_analyze) ignore
-
-set package_map(gnu/java/awt/peer/swing) bc
-
-set package_map(gnu/xml/aelfred2) bc
-set package_map(gnu/xml/dom) bc
-set package_map(gnu/xml/libxmlj) bc
-set package_map(gnu/xml/pipeline) bc
-set package_map(gnu/xml/stream) bc
-set package_map(gnu/xml/transform) bc
-set package_map(gnu/xml/util) bc
-set package_map(gnu/xml/validation) bc
-set package_map(gnu/xml/xpath) bc
-set package_map(javax/imageio) bc
-set package_map(javax/xml) bc
-set package_map(gnu/java/beans) bc
-set package_map(gnu/java/awt/dnd/peer/gtk) bc
-set package_map(gnu/java/util/prefs/gconf) bc
-set package_map(gnu/java/awt/peer/gtk) bc
-set package_map(gnu/java/awt/dnd/peer/gtk) bc
-set package_map(gnu/java/awt/peer/qt) bc
-set package_map(gnu/java/awt/peer/x) bc
-set package_map(gnu/java/util/prefs/gconf) bc
-set package_map(gnu/javax/sound/midi) bc
-set package_map(gnu/javax/sound/sampled/gstreamer) ignore
-set package_map(org/xml) bc
-set package_map(org/w3c) bc
-set package_map(org/relaxng) bc
-set package_map(javax/rmi) bc
-set package_map(org/omg/IOP) bc
-set package_map(org/omg/PortableServer) bc
-set package_map(org/omg/CosNaming) bc
-set package_map(org/omg/CORBA_2_3) bc
-set package_map(org/omg/Messaging) bc
-set package_map(org/omg/stub) bc
-set package_map(org/omg/CORBA) bc
-set package_map(org/omg/PortableInterceptor) bc
-set package_map(org/omg/DynamicAny) bc
-set package_map(org/omg/SendingContext) bc
-set package_map(org/omg/Dynamic) bc
-set package_map(gnu/CORBA) bc
-set package_map(gnu/javax/rmi) bc
-set package_map(gnu/java/lang/management) bcheaders
-set package_map(java/lang/management) bc
-set package_map(gnu/classpath/management) bc
-set package_map(gnu/javax/management) bc
-set package_map(gnu/java/math) bc
-
-# parser/HTML_401F.class is really big, and there have been complaints
-# about this package requiring too much memory to build. So, we
-# compile it as separate objects. But, we're careful to compile the
-# sub-packages as packages.
-set package_map(gnu/javax/swing/text/html/parser) ordinary
-set package_map(gnu/javax/swing/text/html/parser/models) package
-set package_map(gnu/javax/swing/text/html/parser/support) package
-
-# More special cases. These end up in their own library.
-# Note that if we BC-compile AWT we must update these as well.
-set package_map(gnu/gcj/xlib) package
-set package_map(gnu/awt/xlib) package
-
-# These packages should only be included if the interpreter is
-# enabled.
-set package_map(gnu/classpath/jdwp) interpreter
-set package_map(gnu/classpath/jdwp/event) interpreter
-set package_map(gnu/classpath/jdwp/event/filters) interpreter
-set package_map(gnu/classpath/jdwp/exception) interpreter
-set package_map(gnu/classpath/jdwp/id) interpreter
-set package_map(gnu/classpath/jdwp/processor) interpreter
-set package_map(gnu/classpath/jdwp/transport) interpreter
-set package_map(gnu/classpath/jdwp/util) interpreter
-set package_map(gnu/classpath/jdwp/value) interpreter
-set package_map(gnu/gcj/jvmti) interpreter
-
-# Some BC ABI packages have classes which must not be compiled BC.
-# This maps such packages to a grep expression for excluding such
-# classes.
-global exclusion_map
-makearray exclusion_map
-# set exclusion_map(java/awt) AWTPermission
-
-# This maps a package name to a list of corresponding .java file base
-# names. The package name will either appear as a key in package_map,
-# or it will be '.' for the default.
-global name_map
-makearray name_map
-
-# This maps a java file base name, like 'java/lang/Object.java', to
-# the source directory in which it resides. We keep a layer of
-# indirection here so that we can override sources in Classpath with
-# our own sources.
-global dir_map
-makearray dir_map
-
-# An entry in this map means that all .properties files in the
-# corresponding directory should be ignored.
-global properties_map
-makearray properties_map
-
-# logging.properties is installed and is editable.
-set properties_map(java/util/logging) _
-
-# We want to be able to load xerces if it is on the class path. So,
-# we have to avoid compiling in the XML-related service files.
-set properties_map(META-INF/services/javax.xml.parsers.DocumentBuilderFactory) _
-set properties_map(META-INF/services/javax.xml.parsers.SAXParserFactory) _
-set properties_map(META-INF/services/javax.xml.parsers.TransformerFactory) _
-set properties_map(META-INF/services/org.relaxng.datatype.DatatypeLibraryFactory) _
-set properties_map(META-INF/services/org.w3c.dom.DOMImplementationSourceList) _
-set properties_map(META-INF/services/org.xml.sax.driver) _
-set properties_map(META-INF/services/javax.sound.sampled.spi.AudioFileReader.in) ignore
-set properties_map(META-INF/services/javax.sound.sampled.spi.MixerProvider) ignore
-set properties_map(META-INF/services/javax.sound.sampled.spi.MixerProvider.in) ignore
-
-# List of all properties files.
-set properties_files {}
-
-# List of all '@' files that we are going to compile.
-set package_files {}
-
-# List of all '@' files that we are going to compile if the
-# interpreter is enabled.
-set interpreter_package_files {}
-
-# List of all header file variables.
-set header_vars {}
-
-# List of all header file variables for interpreter packages.
-set interpreter_header_vars {}
-
-# List of all BC object files.
-set bc_objects {}
-
-# List of regexps for matching ignored files.
-set ignore_rx_list {}
-
-
-# Return true if a given file should be ignored.
-# The argument is the path name including the package part.
-proc ignore_file_p {file} {
- global ignore_rx_list
- foreach rx $ignore_rx_list {
- if {[regexp -- $rx $file]} {
- verbose "ignoring $file for $rx"
- return 1
- }
- }
- return 0
-}
-
-# Read a '.omit' file and update the internal data structures.
-proc read_omit_file {name} {
- global ignore_rx_list
- set fd [open $name r]
- while {! [eof $fd]} {
- set line [gets $fd]
-
- # Classpath's entries bogusly start with "../".
- if {[string match ../* $line]} {
- set line [string range $line 3 end]
- }
-
- if {$line != ""} {
- lappend ignore_rx_list $line
- }
- }
- close $fd
-}
-
-# Classify a single source file.
-proc classify_source_file {basedir file} {
- global package_map name_map dir_map
-
- if {[ignore_file_p $file]} {
- return
- }
-
- set seen [info exists dir_map($file)]
- set dir_map($file) $basedir
- set pkg $file
- while {1} {
- if {[info exists package_map($pkg)]} {
- # If the entry is 'package', then set up a new entry for the
- # file's package.
- if {$package_map($pkg) == "package"} {
- set pkg [file dirname $file]
- set package_map($pkg) package
- }
- verbose "classify succeeded: $file -> $pkg"
- if {! $seen} {
- lappend name_map($pkg) $file
- }
- return
- }
- set pkg [file dirname $pkg]
- }
- error "can't happen"
-}
-
-# Scan a directory and its subdirectories for .java source files or
-# .properties files. Note that we keep basedir and subdir separate so
-# we can properly update our global data structures.
-proc scan_directory {basedir subdir} {
- global dir_map properties_map properties_files
-
- set subdirs {}
- set files {}
- set here [pwd]
- cd $basedir/$subdir
- foreach file [lsort [glob -nocomplain *]] {
- if {[string match *.java $file]} {
- lappend files $subdir/$file
- } elseif {[string match *.properties $file]} {
- if {! [info exists properties_map($subdir)]} {
- # We assume there aren't any overrides.
- lappend properties_files $basedir/$subdir/$file
- }
- } elseif {[string match *.css $file]} {
- # Special case for default.css needed by javax.swing.text.html.
- lappend properties_files $basedir/$subdir/$file
- } elseif {[file isdirectory $file]} {
- lappend subdirs $subdir/$file
- } elseif {$subdir == "META-INF/services"} {
- # Service files are generally included as properties.
- if {! [info exists properties_map($subdir/$file)]} {
- lappend properties_files $basedir/$subdir/$file
- }
- }
- }
- cd $here
-
- # Recurse first, so that we don't create new packages too eagerly.
- foreach dir $subdirs {
- scan_directory $basedir $dir
- }
-
- foreach file $files {
- classify_source_file $basedir $file
- }
-}
-
-# Scan known packages beneath the base directory for .java source
-# files.
-proc scan_packages {basedir} {
- foreach subdir {gnu java javax org sun com META-INF} {
- if {[file exists $basedir/$subdir]} {
- scan_directory $basedir $subdir
- }
- }
-}
-
-# Emit a rule for a 'bc' package.
-proc emit_bc_rule {package} {
- global package_map exclusion_map bc_objects
-
- if {$package == "."} {
- set pkgname ordinary
- } else {
- set pkgname $package
- }
- set varname [join [split $pkgname /] _]_source_files
- set loname [join [split $pkgname /] -].lo
- set tname [join [split $pkgname /] -].list
-
- puts "$loname: \$($varname)"
- # Create a temporary list file and then compile it. This works
- # around the libtool problem mentioned in PR 21058. classpath was
- # built first, so the class files are to be found there.
- set omit ""
- if {[info exists exclusion_map($package)]} {
- set omit "| grep -v $exclusion_map($package)"
- }
- puts "\t@find \$(srcdir)/classpath/lib/$package -name '*.class'${omit} > $tname"
- puts -nonewline "\t\$(LTGCJCOMPILE) -fsource-filename=\$(here)/classpath/lib/classes "
- if {$package_map($package) == "bc"} {
- puts -nonewline "-fjni "
- }
- # Unless bc is disabled with --disable-libgcj-bc, $(LIBGCJ_BC_FLAGS) is:
- # -findirect-dispatch -fno-indirect-classes
- puts "\$(LIBGCJ_BC_FLAGS) -c -o $loname @$tname"
- puts "\t@rm -f $tname"
- puts ""
-
- # We skip these because they are built into their own libraries and
- # are handled specially in Makefile.am.
- if {$loname != "gnu-java-awt-peer-qt.lo" && $loname != "gnu-java-awt-peer-x.lo"} {
- lappend bc_objects $loname
- }
-}
-
-# Emit a rule for a 'package' package.
-proc emit_package_rule_to_list {package package_files_list} {
- global package_map exclusion_map $package_files_list
-
- if {$package == "."} {
- set pkgname ordinary
- } else {
- set pkgname $package
- }
- set varname [join [split $pkgname /] _]_source_files
- set base $pkgname
- set lname $base.list
- set dname $base.deps
-
- if {$pkgname == "java/lang"} {
- # Object and Class are special cases due to an apparent compiler
- # bug. Process is a special case because we don't build all
- # concrete implementations of Process on all platforms.
- set omit "| tr ' ' '\\012' | fgrep -v Object.class | fgrep -v Class.class | egrep -v '\(Ecos\|Posix\|Win32\)Process' "
- } else {
- set omit ""
- }
-
- # A rule to make the phony file we are going to compile.
- puts "$lname: \$($varname)"
- puts "\t@\$(mkinstalldirs) \$(dir \$@)"
- puts "\techo \$(srcdir)/classpath/lib/$package/*.class $omit> $lname"
- puts ""
- puts "-include $dname"
- puts ""
- puts ""
-
- if {$pkgname != "gnu/gcj/xlib" && $pkgname != "gnu/awt/xlib"
- && $pkgname != "gnu/gcj/tools/gcj_dbtool"} {
- lappend $package_files_list $lname
- }
-}
-
-proc emit_package_rule {package} {
- global package_files
- emit_package_rule_to_list $package package_files
-}
-
-proc emit_interpreter_rule {package} {
- global interpreter_package_files
- emit_package_rule_to_list $package interpreter_package_files
-}
-
-# Emit a rule to build a package full of 'ordinary' files, that is,
-# one .o for each .java.
-proc emit_ordinary_rule {package} {
- global name_map package_files
-
- foreach file $name_map($package) {
- # Strip off the '.java'.
- set root [file rootname $file]
-
- # Look for all included .class files. Assumes that we don't have
- # multiple top-level classes in a .java file.
- set lname $root.list
- set dname $root.deps
-
- puts "$lname: classpath/$file"
- puts "\t@\$(mkinstalldirs) \$(dir \$@)"
- puts "\techo \$(srcdir)/classpath/lib/${root}*.class> $lname"
- puts ""
- puts "-include $dname"
- puts ""
- puts ""
-
- lappend package_files $lname
- }
-}
-
-# Emit a package-like rule for a platform-specific Process
-# implementation.
-proc emit_process_package_rule {platform} {
- set base "java/process-$platform"
- set lname $base.list
- set dname $base.deps
-
- puts "$lname: java/lang/${platform}Process.java"
- puts "\t@\$(mkinstalldirs) \$(dir \$@)"
- puts "\techo \$(srcdir)/classpath/lib/java/lang/${platform}Process*.class > $lname"
- puts ""
- puts "-include $dname"
- puts ""
- puts ""
-}
-
-# Emit a source file variable for a package, and corresponding header
-# file variable, if needed.
-proc emit_source_var {package} {
- global package_map name_map dir_map header_vars interpreter_header_vars
-
- if {$package == "."} {
- set pkgname ordinary
- } else {
- set pkgname $package
- }
- set uname [join [split $pkgname /] _]
- set varname ${uname}_source_files
- puts -nonewline "$varname ="
-
- makearray dirs
- foreach base [lsort $name_map($package)] {
- # Terminate previous line.
- puts " \\"
- # Having files start with './' is ugly and confuses the automake
- # "dirstamp" code; see automake PR 461.
- set ndir $dir_map($base)/
- if {$ndir == "./"} {
- set ndir ""
- }
- puts -nonewline "${ndir}${base}"
- set dirs($dir_map($base)) 1
- }
- puts ""
- puts ""
-
- if {$package_map($package) != "bc"} {
- # Ugly code to build up the appropriate patsubst.
- set result "\$(patsubst %.java,%.h,\$($varname))"
- # We use -decreasing so that classpath/external will be stripped
- # before classpath.
- foreach dir [lsort -decreasing [array names dirs]] {
- if {$dir != "."} {
- set result "\$(patsubst $dir/%,%,$result)"
- }
- }
-
- if {$package == "." || $package == "java/lang"} {
- # Ugly hack.
- set result "\$(filter-out java/lang/Object.h java/lang/Class.h,$result)"
- }
-
- puts "${uname}_header_files = $result"
- puts ""
- if {$pkgname != "gnu/gcj/xlib" && $pkgname != "gnu/awt/xlib"} {
- if {$package_map($package) == "interpreter"} {
- lappend interpreter_header_vars "${uname}_header_files"
- } else {
- lappend header_vars "${uname}_header_files"
- }
- }
- }
-}
-
-# Pretty-print a Makefile variable.
-proc pp_var {name valueList {pre ""} {post ""}} {
- puts ""
- puts -nonewline "$name ="
- foreach val $valueList {
- puts " \\"
- puts -nonewline " ${pre}${val}${post}"
- }
- puts ""
-}
-
-global argv
-if {[llength $argv] > 0 && [lindex $argv 0] == "-verbose"} {
- set is_verbose 1
-}
-
-# Read the proper .omit files.
-read_omit_file standard.omit.in
-read_omit_file classpath/lib/standard.omit.in
-
-# Scan classpath first.
-scan_packages classpath
-scan_packages classpath/external/sax
-scan_packages classpath/external/w3c_dom
-scan_packages classpath/external/relaxngDatatype
-scan_packages classpath/external/jsr166
-# Resource files.
-scan_packages classpath/resource
-# Now scan our own files; this will correctly override decisions made
-# when scanning classpath.
-scan_packages .
-# Files created by the build.
-classify_source_file classpath gnu/java/locale/LocaleData.java
-classify_source_file classpath gnu/java/security/Configuration.java
-classify_source_file classpath gnu/classpath/Configuration.java
-
-puts "## This file was automatically generated by scripts/makemake.tcl"
-puts "## Do not edit!"
-puts ""
-
-foreach package [lsort [array names package_map]] {
- if {$package_map($package) == "ignore"} {
- continue
- }
- if {! [info exists name_map($package)]} {
- continue
- }
-
- emit_source_var $package
-
- if {$package_map($package) == "bc"} {
- emit_bc_rule $package
- } elseif {$package_map($package) == "bcheaders"} {
- emit_bc_rule $package
- } elseif {$package_map($package) == "ordinary"} {
- emit_ordinary_rule $package
- } elseif {$package_map($package) == "package"} {
- emit_package_rule $package
- } elseif {$package_map($package) == "interpreter"} {
- emit_interpreter_rule $package
- } else {
- error "unrecognized type: $package_map($package)"
- }
-}
-
-emit_process_package_rule Ecos
-emit_process_package_rule Win32
-emit_process_package_rule Posix
-
-puts "if INTERPRETER"
-pp_var interpreter_packages_source_files $interpreter_package_files
-pp_var interpreter_header_files $interpreter_header_vars "\$(" ")"
-puts ""
-puts "else"
-puts ""
-puts "interpreter_packages_source_files="
-puts ""
-puts "interpreter_header_files="
-puts ""
-puts "endif"
-
-lappend package_files {$(interpreter_packages_source_files)}
-lappend header_vars interpreter_header_files
-
-pp_var all_packages_source_files $package_files
-pp_var ordinary_header_files $header_vars "\$(" ")"
-pp_var bc_objects $bc_objects
-pp_var property_files $properties_files