From f3cf43abe8012cd0a1fd9dd967e2071935cf4b4c Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Thu, 12 Apr 2001 16:31:54 +0000 Subject: [PATCH] * 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'. --- ChangeLog | 8 ++ automake.in | 260 +++++++++++++++++++++++++++++----------------------- 2 files changed, 152 insertions(+), 116 deletions(-) diff --git a/ChangeLog b/ChangeLog index 73e53d43..c8f23d1c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2001-04-12 Akim Demaille + + * 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'. + 2001-04-12 Akim Demaille * automake.in (Language): Add attribute `output_arg'. diff --git a/automake.in b/automake.in index 7a71cfe2..0c574b7e 100755 --- a/automake.in +++ b/automake.in @@ -34,6 +34,7 @@ struct ('ansi' => '$', 'compile' => '$', 'compiler' => '$', 'derived_autodep' => '$', + 'extensions' => '@', 'flags' => '$', 'linker' => '$', 'output_arg' => '$', @@ -728,71 +729,95 @@ sub initialize_per_input () ################################################################ # 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'])); ################################################################ @@ -1274,7 +1299,7 @@ sub finish_languages $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. @@ -5259,12 +5284,14 @@ sub saw_sources_p 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. @@ -5273,66 +5300,67 @@ sub register_language $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; } -- 2.43.5