automake
[Top][All Lists]
Advanced

[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 `&register_language' instead of a
        list of pseudo assignments.
        (&register_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.
-&register_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');
-&register_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');
-&register_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');
-&register_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.
-&register_language ('yacc', 'ansi-p=1', 'derived-autodep=yes',
-                   'y');
-&register_language ('yaccxx', 'linker=CXXLINK', 'derived-autodep=yes',
-                   'y++', 'yy', 'yxx', 'ypp');
-&register_language ('lex', 'ansi-p=1', 'derived-autodep=yes',
-                   'l');
-&register_language ('lexxx', 'linker=CXXLINK', 'derived-autodep=yes',
-                   '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-name=COMPILE',
-                   'output-arg=-c',
-                   's', 'S');
-
-&register_language ('f77', 'linker=F77LINK', 'flags=FFLAGS',
-                   'compile=$(F77) $(AM_FFLAGS) $(FFLAGS)',
-                   'compiler-name=F77COMPILE',
-                   'output-arg=-c -o $@',
-                   'pure=yes',
-                   'f', 'for', 'f90');
-&register_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');
-&register_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
-&register_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;
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]