This is the mail archive of the automake@gnu.org mailing list for the automake project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

83-lang-name.patch


Index: ChangeLog
from  Akim Demaille  <akim@epita.fr>

	* automake.in (Language): Add attribute `name.
	(&register_language): The name of the language is now given in the
	hash.
	No longer use `$lang' as the name of the language.
	Rename `$lang_obj' as `$lang'.

Index: automake.in
--- automake.in Sat, 24 Mar 2001 01:24:13 +0100 akim (am/f/39_automake.i 1.208 755)
+++ automake.in Sun, 25 Mar 2001 16:12:14 +0200 akim (am/f/39_automake.i 1.208 755)
@@ -37,6 +37,7 @@
         'extensions'      => '@',
         'flags' => '$',
         'linker' => '$',
+        'name'       => '$',
         'output_arg' => '$',
 	'pure'   => '$',
         '_finish' => '$');
@@ -740,110 +741,110 @@ sub initialize_per_input ()
 ################################################################

 # Initialize our list of languages that are internally supported.
-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'],
-		    '_finish' => \&lang_c_finish));
-register_language ('cxx',
-		   ('linker' => 'CXXLINK',
-		    'autodep' => 'CXX',
-		    'flags' => 'CXXFLAGS',
+register_language ('name' => 'c',
+		   'ansi' => '1',
+		   'autodep' => '',
+		   'flags' => 'CFLAGS',
+		   'compile' => '$(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)',
+		   'compiler' => 'COMPILE',
+		   'output-arg' => '-c',
+		   'extensions' => ['c'],
+		   '_finish' => \&lang_c_finish);
+register_language ('name' => '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'],
-		    '_finish' => \&lang_cxx_finish));
-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'],
-		    '_finish' => \&lang_objc_finish));
-register_language ('header',
-		   ('extensions' => ['h', 'H', 'hxx', 'h++', 'hh', 'hpp', 'inc'],
-		    # Nothing to do.
-		    '_finish' => sub { }));
+		   'compiler' => 'CXXCOMPILE',
+		   'output-arg' => '-c -o $@',
+		   'pure' => 'yes',
+		   'extensions' => ['c++', 'cc', 'cpp', 'cxx', 'C'],
+		   '_finish' => \&lang_cxx_finish);
+register_language ('name' => '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'],
+		   '_finish' => \&lang_objc_finish);
+register_language ('name' => 'header',
+		   'extensions' => ['h', 'H', 'hxx', 'h++', 'hh', 'hpp', 'inc'],
+		   # Nothing to do.
+		   '_finish' => sub { });
 # For now, yacc and lex can't be handled on a per-exe basis.
-register_language ('yacc',
-		   ('ansi' => '1',
-		    'derived-autodep' => 'yes',
-		    'extensions' => ['y'],
-		    '_finish' => \&lang_yacc_finish));
-register_language ('yaccxx',
-		   ('linker' => 'CXXLINK',
-		    'derived-autodep' => 'yes',
-		    'extensions' => ['y++', 'yy', 'yxx', 'ypp'],
-		    '_finish' => \&lang_yacc_finish));
-register_language ('lex',
-		   ('ansi' => '1',
-		    'derived-autodep' => 'yes',
-		    'extensions' => ['l'],
-		    '_finish' => \&lang_lex_finish));
-register_language ('lexxx',
-		   ('linker' => 'CXXLINK',
-		    'derived-autodep' => 'yes',
-		    'extensions' => ['l++', 'll', 'lxx', 'lpp'],
-		    '_finish' => \&lang_lex_finish));
-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'],
-		    # We need the C code for assembly.
-		    '_finish' => \&lang_c_finish));
-
-register_language ('f77',
-		   ('linker' => 'F77LINK',
-		    'flags' => 'FFLAGS',
-		    'compile' => '$(F77) $(AM_FFLAGS) $(FFLAGS)',
-		    'compiler' => 'F77COMPILE',
-		    'output-arg' => '-c -o $@',
-		    'pure' => 'yes',
-		    'extensions' => ['f', 'for', 'f90'],
-		    '_finish' => \&lang_f77_finish));
-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'],
-		    '_finish' => \&lang_ppf77_finish));
-register_language ('ratfor',
-		   ('linker' => 'F77LINK',
+register_language ('name' => 'yacc',
+		   'ansi' => '1',
+		   'derived-autodep' => 'yes',
+		   'extensions' => ['y'],
+		   '_finish' => \&lang_yacc_finish);
+register_language ('name' => 'yaccxx',
+		   'linker' => 'CXXLINK',
+		   'derived-autodep' => 'yes',
+		   'extensions' => ['y++', 'yy', 'yxx', 'ypp'],
+		    '_finish' => \&lang_yacc_finish);
+register_language ('name' => 'lex',
+		   'ansi' => '1',
+		   'derived-autodep' => 'yes',
+		   'extensions' => ['l'],
+		   '_finish' => \&lang_lex_finish);
+register_language ('name' => 'lexxx',
+		   'linker' => 'CXXLINK',
+		   'derived-autodep' => 'yes',
+		   'extensions' => ['l++', 'll', 'lxx', 'lpp'],
+		   '_finish' => \&lang_lex_finish);
+register_language ('name' => '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'],
+		   # We need the C code for assembly.
+		   '_finish' => \&lang_c_finish);
+
+register_language ('name' => 'f77',
+		   'linker' => 'F77LINK',
+		   'flags' => 'FFLAGS',
+		   'compile' => '$(F77) $(AM_FFLAGS) $(FFLAGS)',
+		   'compiler' => 'F77COMPILE',
+		   'output-arg' => '-c -o $@',
+		   'pure' => 'yes',
+		   'extensions' => ['f', 'for', 'f90'],
+		   '_finish' => \&lang_f77_finish);
+register_language ('name' => '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'],
+		    '_finish' => \&lang_ppf77_finish);
+register_language ('name' => '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'],
-		    '_finish' => \&lang_ratfor_finish));
+		   # FIXME also FFLAGS.
+		   'compile' => '$(F77) $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS)',
+		   'compiler' => 'RCOMPILE',
+		   'output-arg' => '-c -o $@',
+		   'pure' => 'yes',
+		   'extensions' => ['r'],
+		   '_finish' => \&lang_ratfor_finish);
 # 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' => 'GCJCOMPILE',
-		    'output-arg' => '-c -o $@',
-		    'pure' => 'yes',
-		    'extensions' => ['java', 'class', 'zip', 'jar'],
-		    '_finish' => \&lang_java_finish));
+register_language ('name' => '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'],
+		   '_finish' => \&lang_java_finish);

 ################################################################

@@ -1345,8 +1346,8 @@ sub finish_languages
 	}

 	# The rest of the loop is done once per language.
-	next if defined $done{$lang};
-	$done{$lang} = 1;
+	next if defined $done{$lang_obj->name};
+	$done{$lang_obj} = 1;

 	# If the source to a program consists entirely of code from a
 	# `pure' language, for instance C++ for Fortran 77, then we
@@ -1510,7 +1511,7 @@ sub handle_single_transform_list ($$$@)
         {
             &saw_extension ($extension);
             # Found the language, so see what it says.
-            my $subr = 'lang_' . $lang . '_rewrite';
+            my $subr = 'lang_' . $lang_obj->name . '_rewrite';
             # Note: computed subr call.
             my $r = & $subr ($directory, $base, $extension);
             # Skip this entry if we were asked not to process it.
@@ -1559,9 +1560,9 @@ sub handle_single_transform_list ($$$@)
                 $object = $dname . '-' . $object;

                 &require_file ($FOREIGN, 'compile')
-                    if $lang eq 'c';
+                    if $lang_obj->name eq 'c';

-                &prog_error ("$lang flags defined without compiler")
+                &prog_error ("$lang_obj->name flags defined without compiler")
   		    if ! defined $lang_obj->compile;

                 # Compute the rule to compile this object.
@@ -1601,7 +1602,7 @@ sub handle_single_transform_list ($$$@)
                 $rule = '';
                 my $obj_sans_ext = substr ($object, 0,
 					   - length ($this_obj_ext));
-                push (@{$lang_specific_files{$lang}},
+                push (@{$lang_specific_files{$lang_obj->name}},
 		      "$derived $full $obj_sans_ext");
             }
         }
@@ -1708,7 +1709,7 @@ sub handle_single_transform_list ($$$@)

         # Transform .o or $o file into .P file (for automatic
         # dependency code).
-        if ($lang
+        if ($lang_obj->name
             && ($lang_obj->autodep ne 'no'
                 || $lang_obj->derived_autodep eq 'yes'))
         {
@@ -3063,7 +3064,7 @@ sub add_depend2
 			 'COMPILE'   => $compile,
 			 'LTCOMPILE' => $ltcompile);

-	foreach my $ext (&lang_extensions ($lang))
+	foreach my $ext (&lang_extensions ($lang_obj->name))
 	{
 	    $output_rules .= (&file_contents ('depend2',
 					      (%transform,
@@ -3075,7 +3076,7 @@ sub add_depend2
     # Now include code for each specially handled object with this
     # language.
     my %seen_files = ();
-    foreach my $file (@{$lang_specific_files{$lang}})
+    foreach my $file (@{$lang_specific_files{$lang_obj->name}})
     {
         my ($derived, $source, $obj) = split (' ', $file);

@@ -4701,14 +4702,16 @@ sub check_gnits_standards
 #
 # Functions to handle files of each language.

-# Each `lang_X_rewrite' function follows a simple formula:
-# * Args are the directory, base name and extension of the file.
-# * Return value is 1 if file is to be dealt with, 0 otherwise.
-# Much of the actual processing is handled in handle_single_transform_list.
-# These functions exist so that auxiliary information can be recorded
-# for a later cleanup pass.  Note that the calls to these functions
-# are computed, so don't bother searching for their precise names
-# in the source.
+# Each `lang_X_rewrite($DIRECTORY, $BASE, $EXT)' function follows a
+# simple formula: Return value is $LANG_SUBDIR if the resulting object
+# file should be in a subdir if the source file is, $LANG_PROCESS if
+# file is to be dealt with, $LANG_IGNORE otherwise.
+
+# Much of the actual processing is handled in
+# handle_single_transform_list.  These functions exist so that
+# auxiliary information can be recorded for a later cleanup pass.
+# Note that the calls to these functions are computed, so don't bother
+# searching for their precise names in the source.

 # This is just a convenience function that can be used to determine
 # when a subdir object should be used.
@@ -5217,47 +5220,47 @@ sub saw_sources_p
 }


-# register_language ($LANG, %OPTIONS)
-# -----------------------------------
+# register_language (%ATTRIBUTE)
+# ------------------------------
 # Register a single language.  LANGUAGE is the name of the language.
-# Each OPTION is either of the form ATTRIBUTE => VALUE.
+# Each %ATTRIBUTE is of the form ATTRIBUTE => VALUE.
 sub register_language ($%)
 {
-    my ($lang, %option) = @_;
-    my $lang_obj = new Language;
+    my (%option) = @_;
+    my $lang = new Language;

     # Set the defaults.
-    $lang_obj->ansi (0);
-    $lang_obj->autodep ('no');
-    $lang_obj->derived_autodep ('no');
-    $lang_obj->linker ('');
+    $lang->ansi (0);
+    $lang->autodep ('no');
+    $lang->derived_autodep ('no');
+    $lang->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.
-    $lang_obj->pure ('no');
+    $lang->pure ('no');

     while (my ($attr, $value) = each %option)
     {
       if ($attr eq 'ansi')
 	{
-	  $lang_obj->ansi ($value);
+	  $lang->ansi ($value);
 	}
       elsif ($attr eq 'autodep')
 	{
-	  $lang_obj->autodep ($value);
+	  $lang->autodep ($value);
 	}
       elsif ($attr eq 'compile')
 	{
-	  $lang_obj->compile ($value);
+	  $lang->compile ($value);
 	}
       elsif ($attr eq 'compiler')
 	{
-	  $lang_obj->compiler ($value);
+	  $lang->compiler ($value);
 	}
       elsif ($attr eq 'derived-autodep')
 	{
-	  $lang_obj->derived_autodep ($value);
+	  $lang->derived_autodep ($value);
 	}
       elsif ($attr eq 'extensions')
 	{
@@ -5265,39 +5268,45 @@ sub register_language ($%)
 	  my $cnt = 0;
 	  foreach (@{$value})
 	    {
-	      $lang_obj->extensions ($cnt, $_);
+	      $lang->extensions ($cnt, $_);
 	      ++$cnt;
 	    }
 	}
       elsif ($attr eq 'flags')
 	{
-	  $lang_obj->flags ($value);
+	  $lang->flags ($value);
 	}
       elsif ($attr eq 'linker')
 	{
-	  $lang_obj->linker ($value);
+	  $lang->linker ($value);
+	}
+      elsif ($attr eq 'name')
+	{
+	  $lang->name ($value);
 	}
       elsif ($attr eq 'output-arg')
 	{
-	  $lang_obj->output_arg ($value);
+	  $lang->output_arg ($value);
 	}
       elsif ($attr eq 'pure')
 	{
-	  $lang_obj->pure ($value);
+	  $lang->pure ($value);
 	}
       elsif ($attr eq '_finish')
 	{
-	  $lang_obj->_finish ($value);
+	  $lang->_finish ($value);
 	}
       else
 	{
-	  prog_error ("register_language: $lang: invalid attribute: $attr");
+	  prog_error ("register_language: "
+		      . $lang->name
+		      . ": invalid attribute: $attr");
 	}
     }

     # Fill indexes.
-    grep ($extension_map{$_} = $lang, @{$lang_obj->extensions});
-    $languages{$lang} = $lang_obj;
+    grep ($extension_map{$_} = $lang->name, @{$lang->extensions});
+    $languages{$lang->name} = $lang;
 }

 # This function is used to find a path from a user-specified suffix to


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]