# This property file contains dependencies of classes, methods, and
# field on other methods or classes.
#
# Syntax: 
#
#   <used>: <needed 1> [... <needed N>]
#
# means that when <used> is included, <needed 1> (... <needed N>) must
# be included as well.
#
# <needed X> and <used> are of the form
#
#   <class.methodOrField(signature)>
#
# or just
#
#   <class>
#
# Within dependencies, variables can be used. A variable is defined as 
# follows: 
#
#   {variable}: value1 value2 ... value<n>
#
# variables can be used on the right side of dependencies as follows: 
#
#    <used>: com.bla.blu.{variable}.Class.m()V
#
# The use of the variable will expand to <n> dependencies of the form
#
#    <used>: com.bla.blu.value1.Class.m()V
#    <used>: com.bla.blu.value2.Class.m()V
#    ...
#    <used>: com.bla.blu.value<n>.Class.m()V
#
# Variables can be redefined when building a system to select the 
# required support for features like encodings, protocols, etc. 
#
# Hints:
#
#  - For methods and fields, the signature is mandatory. For
#    specification, please see the Java Virtual Machine Specification by
#    SUN. Unlike in the spec, field signatures (types) are in brackets.
#
#  - Package names must be separated by '/' (and not '.'). E.g.,
#    java/lang/Class (this is necessary, because the '.' is used to
#    separate method or field names from classes)
#
#  - In case <needed> refers to a class, only the class itself will be
#    included in the resulting binary, NOT necessarily all its methods
#    and fields. If you want to refer to all methods and fields, you can
#    write class.* as an abbreviation.
#
# -  Abbreviations for packages are also possible: my/package/* means all
#    methods and fields of all classes in my/package.
#
# -  A line with a trailing '\' continues in the next line.


# All calendars supported are loaded via java/util/Calendar.getBundle or
# java/util/GregorianCalendar.getBundle from class 
#  gnu/java/locale/Calendar_{locale_id}
#
# This introduces a dependency for the localized calendars. To allow an easy 
# selection and addition of locales, the library variable {calendar_locales} 
# can be set to the set of supported calendar locales.
#

{calendar_locales}: de en nl

java/util/Calendar.getBundle(Ljava/util/Locale;)Ljava/util/ResourceBundle;: \
        gnu/java/locale/Calendar.* \
	gnu/java/locale/Calendar_{calendar_locales}.*

java/util/GregorianCalendar.getBundle(Ljava/util/Locale;)Ljava/util/ResourceBundle;: \
        gnu/java/locale/Calendar.* \
	gnu/java/locale/Calendar_{calendar_locales}.* 

# end of file
