[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
81-lang-extensions.patch
From: |
Akim Demaille |
Subject: |
81-lang-extensions.patch |
Date: |
Fri, 23 Mar 2001 11:20:43 +0100 |
Index: ChangeLog
from Akim Demaille <address@hidden>
* automake.in: (Language): Add attribute `extensions'.
(Automake): Pass a hash to `®ister_language' instead of a
list of pseudo assignments.
(®ister_language): Adjust.
(&finish_languages): Initialize `$ltoutarg'.
Index: automake.in
--- automake.in Wed, 21 Mar 2001 02:46:05 +0100 akim (am/f/39_automake.i 1.204
755)
+++ 0.224(w)/automake.in Fri, 23 Mar 2001 01:26:58 +0100 akim
(am/f/39_automake.i 1.205 755)
@@ -34,6 +34,7 @@
'compile' => '$',
'compiler' => '$',
'derived_autodep' => '$',
+ 'extensions' => '@',
'flags' => '$',
'linker' => '$',
'output_arg' => '$',
@@ -731,71 +732,95 @@
################################################################
# Initialize our list of languages that are internally supported.
-®ister_language ('c', 'ansi-p=1', 'autodep=', 'flags=CFLAGS',
- 'compile=$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS)
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)',
- 'compiler-name=COMPILE',
- 'output-arg=-c',
- 'c');
-®ister_language ('cxx', 'linker=CXXLINK', 'autodep=CXX', 'flags=CXXFLAGS',
- 'compile=$(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS)
$(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)',
- 'compiler-name=CXXCOMPILE',
- 'output-arg=-c -o $@',
- 'pure=yes',
- 'c++', 'cc', 'cpp', 'cxx', 'C');
-®ister_language ('objc', 'linker=OBJCLINK', 'autodep=OBJC',
- 'flags=OBJCFLAGS',
- 'compile=$(OBJC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS)
$(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS)',
- 'compiler-name=OBJCCOMPILE',
- 'output-arg=-c -o $@',
- 'pure=yes',
- 'm');
-®ister_language ('header',
- 'h', 'H', 'hxx', 'h++', 'hh', 'hpp', 'inc');
-
+register_language ('c',
+ ('ansi' => '1',
+ 'autodep' => '',
+ 'flags' => 'CFLAGS',
+ 'compile' => '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS)
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)',
+ 'compiler' => 'COMPILE',
+ 'output-arg' => '-c',
+ 'extensions' => ['c']));
+register_language ('cxx',
+ ('linker' => 'CXXLINK',
+ 'autodep' => 'CXX',
+ 'flags' => 'CXXFLAGS',
+ 'compile' => '$(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS)
$(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)',
+ 'compiler' => 'CXXCOMPILE',
+ 'output-arg' => '-c -o $@',
+ 'pure' => 'yes',
+ 'extensions' => ['c++', 'cc', 'cpp', 'cxx', 'C']));
+register_language ('objc',
+ ('linker' => 'OBJCLINK',
+ 'autodep' => 'OBJC',
+ 'flags' => 'OBJCFLAGS',
+ 'compile' => '$(OBJC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS)
$(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS)',
+ 'compiler' => 'OBJCCOMPILE',
+ 'output-arg' => '-c -o $@',
+ 'pure' => 'yes',
+ 'extensions' => ['m']));
+register_language ('header',
+ ('extensions' => ['h', 'H', 'hxx', 'h++', 'hh', 'hpp',
'inc']));
# For now, yacc and lex can't be handled on a per-exe basis.
-®ister_language ('yacc', 'ansi-p=1', 'derived-autodep=yes',
- 'y');
-®ister_language ('yaccxx', 'linker=CXXLINK', 'derived-autodep=yes',
- 'y++', 'yy', 'yxx', 'ypp');
-®ister_language ('lex', 'ansi-p=1', 'derived-autodep=yes',
- 'l');
-®ister_language ('lexxx', 'linker=CXXLINK', 'derived-autodep=yes',
- 'l++', 'll', 'lxx', 'lpp');
-
-®ister_language ('asm',
- 'flags=CFLAGS', # FIXME: asmflags?
- 'compile=$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS)
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)', # FIXME: a different compiler?
- 'compiler-name=COMPILE',
- 'output-arg=-c',
- 's', 'S');
-
-®ister_language ('f77', 'linker=F77LINK', 'flags=FFLAGS',
- 'compile=$(F77) $(AM_FFLAGS) $(FFLAGS)',
- 'compiler-name=F77COMPILE',
- 'output-arg=-c -o $@',
- 'pure=yes',
- 'f', 'for', 'f90');
-®ister_language ('ppf77', 'linker=F77LINK', 'flags=FFLAGS',
- 'compile=$(F77) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS)
$(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS)',
- 'compiler-name=PPF77COMPILE',
- 'output-arg=-c -o $@',
- 'pure=yes',
- 'F');
-®ister_language ('ratfor', 'linker=F77LINK',
- 'flags=RFLAGS', # FIXME also FFLAGS.
- 'compile=$(F77) $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS)
$(RFLAGS)',
- 'compiler-name=RCOMPILE',
- 'output-arg=-c -o $@',
- 'pure=yes',
- 'r');
+register_language ('yacc',
+ ('ansi' => '1',
+ 'derived-autodep' => 'yes',
+ 'extensions' => ['y']));
+register_language ('yaccxx',
+ ('linker' => 'CXXLINK',
+ 'derived-autodep' => 'yes',
+ 'extensions' => ['y++', 'yy', 'yxx', 'ypp']));
+register_language ('lex',
+ ('ansi' => '1',
+ 'derived-autodep' => 'yes',
+ 'extensions' => ['l']));
+register_language ('lexxx',
+ ('linker' => 'CXXLINK',
+ 'derived-autodep' => 'yes',
+ 'extensions' => ['l++', 'll', 'lxx', 'lpp']));
+register_language ('asm',
+ ('flags' => 'CFLAGS',
+ # FIXME: asmflags?
+ 'compile' => '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS)
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)',
+ # FIXME: a different compiler?
+ 'compiler' => 'COMPILE',
+ 'output-arg' => '-c',
+ 'extensions' => ['s', 'S']));
+
+register_language ('f77',
+ ('linker' => 'F77LINK',
+ 'flags' => 'FFLAGS',
+ 'compile' => '$(F77) $(AM_FFLAGS) $(FFLAGS)',
+ 'compiler' => 'F77COMPILE',
+ 'output-arg' => '-c -o $@',
+ 'pure' => 'yes',
+ 'extensions' => ['f', 'for', 'f90']));
+register_language ('ppf77',
+ ('linker' => 'F77LINK',
+ 'flags' => 'FFLAGS',
+ 'compile' => '$(F77) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS)
$(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS)',
+ 'compiler' => 'PPF77COMPILE',
+ 'output-arg' => '-c -o $@',
+ 'pure' => 'yes',
+ 'extensions' => ['F']));
+register_language ('ratfor',
+ ('linker' => 'F77LINK',
+ 'flags' => 'RFLAGS',
+ # FIXME also FFLAGS.
+ 'compile' => '$(F77) $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS)
$(RFLAGS)',
+ 'compiler' => 'RCOMPILE',
+ 'output-arg' => '-c -o $@',
+ 'pure' => 'yes',
+ 'extensions' => ['r']));
# FIXME: for now we can't do dependency tracking for Java.
# autodep=GCJ
-®ister_language ('java', 'linker=GCJLINK', 'flags=GCJFLAGS',
- 'compile=$(GCJ) $(DEFS) $(INCLUDES) $(AM_GCJFLAGS)
$(GCJFLAGS)',
- 'compiler-name=GCJCOMPILE',
- 'output-arg=-c -o $@',
- 'pure=yes',
- 'java', 'class', 'zip', 'jar');
+register_language ('java',
+ ('linker' => 'GCJLINK',
+ 'flags' => 'GCJFLAGS',
+ 'compile' => '$(GCJ) $(DEFS) $(INCLUDES) $(AM_GCJFLAGS)
$(GCJFLAGS)',
+ 'compiler' => 'GCJCOMPILE',
+ 'output-arg' => '-c -o $@',
+ 'pure' => 'yes',
+ 'extensions' => ['java', 'class', 'zip', 'jar']));
################################################################
@@ -1277,7 +1302,7 @@
$comp = $lang_obj->compile;
my $outarg = $lang_obj->output_arg;
- my $ltoutarg;
+ my $ltoutarg = '';
if ($lang_obj->flags eq 'CFLAGS')
{
# C compilers don't always support -c -o.
@@ -5186,12 +5211,14 @@
return scalar keys %extension_seen > $headers;
}
+
+# register_language ($LANG, %OPTIONS)
+# -----------------------------------
# Register a single language. LANGUAGE is the name of the language.
-# Each OPTION is either of the form NAME=VALUE, or is a file extension
-# (sans `.').
-sub register_language
+# Each OPTION is either of the form ATTRIBUTE => VALUE.
+sub register_language ($%)
{
- my ($lang, @options) = @_;
+ my ($lang, %option) = @_;
my $lang_obj = new Language;
# Set the defaults.
@@ -5200,66 +5227,67 @@
$lang_obj->derived_autodep ('no');
$lang_obj->linker ('');
- # `-pure' is `yes' or `no'. A `pure' language is one where, if
- # all the files in a directory are of that language, then we do
- # not require the C compiler or any code to call it.
+ # `pure' is `yes' or `no'. A `pure' language is one where, if all
+ # the files in a directory are of that language, then we do not
+ # require the C compiler or any code to call it.
$lang_obj->pure ('no');
- foreach my $iter (@options)
+ while (my ($attr, $value) = each %option)
{
- if ($iter =~ /^(.*)=(.*)$/)
+ if ($attr eq 'ansi')
{
- if ($1 eq 'ansi-p')
- {
- $lang_obj->ansi ($2);
- }
- elsif ($1 eq 'autodep')
- {
- $lang_obj->autodep ($2);
- }
- elsif ($1 eq 'compile')
- {
- $lang_obj->compile ($2);
- }
- elsif ($1 eq 'compiler-name')
- {
- $lang_obj->compiler ($2);
- }
- elsif ($1 eq 'derived-autodep')
- {
- $lang_obj->derived_autodep ($2);
- }
- elsif ($1 eq 'flags')
- {
- $lang_obj->flags ($2);
- }
- elsif ($1 eq 'linker')
- {
- $lang_obj->linker ($2);
- }
- elsif ($1 eq 'output-arg')
- {
- $lang_obj->output_arg ($2);
- }
- elsif ($1 eq 'pure')
- {
- $lang_obj->pure ($2);
- }
- else
- {
- prog_error ("register_language: invalid attribute: $iter");
- }
+ $lang_obj->ansi ($value);
}
- elsif (defined $extension_map{$iter})
+ elsif ($attr eq 'autodep')
{
- &prog_error ("duplicate extension $iter");
+ $lang_obj->autodep ($value);
}
- else
+ elsif ($attr eq 'compile')
+ {
+ $lang_obj->compile ($value);
+ }
+ elsif ($attr eq 'compiler')
+ {
+ $lang_obj->compiler ($value);
+ }
+ elsif ($attr eq 'derived-autodep')
+ {
+ $lang_obj->derived_autodep ($value);
+ }
+ elsif ($attr eq 'flags')
+ {
+ $lang_obj->flags ($value);
+ }
+ elsif ($attr eq 'linker')
+ {
+ $lang_obj->linker ($value);
+ }
+ elsif ($attr eq 'output-arg')
+ {
+ $lang_obj->output_arg ($value);
+ }
+ elsif ($attr eq 'pure')
+ {
+ $lang_obj->pure ($value);
+ }
+ elsif ($attr eq 'extensions')
+ {
+ # This array accessor is stupid...
+ my $cnt = 0;
+ foreach (@{$value})
+ {
+ $lang_obj->extensions ($cnt, $_);
+ ++$cnt;
+ }
+ }
+ else
{
- $extension_map{$iter} = $lang;
+ prog_error ("register_language: invalid attribute: $attr");
}
}
+ # Fill indexes.
+ grep ($extension_map{$_} = $lang, @{$lang_obj->extensions});
$languages{$lang} = $lang_obj;
}
- 81-lang-extensions.patch,
Akim Demaille <=