* automake.in (handle_cli_assembly_sources): Rename from handle_cli_assembly. (handle_cli_assembly_resources): New. Add support for handling resources. (handle_cli_assembly): Call both the previous methods. (cli_need_resgen): New. (handle_cli): Use it to emit RESGEN suffix rules, if necessary. * lib/am/cli.am (clean-%DIR%%PRIMARY%): Remove *.resources. * tests/cli3.test: New. * tests/Makefile.am (TESTS): Update. --- ChangeLog | 12 ++++++ automake.in | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++- lib/am/cli.am | 1 + tests/Makefile.am | 1 + tests/cli3.test | 46 +++++++++++++++++++++++++ 5 files changed, 155 insertions(+), 2 deletions(-) create mode 100755 tests/cli3.test
diff --git a/ChangeLog b/ChangeLog index ec49428..2e75139 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,17 @@ 2007-06-27 Raja R Harinath <[EMAIL PROTECTED]> + Add support for resources + * automake.in (handle_cli_assembly_sources): Rename from + handle_cli_assembly. + (handle_cli_assembly_resources): New. Add support for handling + resources. + (handle_cli_assembly): Call both the previous methods. + (cli_need_resgen): New. + (handle_cli): Use it to emit RESGEN suffix rules, if necessary. + * lib/am/cli.am (clean-%DIR%%PRIMARY%): Remove *.resources. + * tests/cli3.test: New. + * tests/Makefile.am (TESTS): Update. + Compute dependencies from assembly references * automake.in (handle_cli_assembly): Return true on success. (handle_cli_assembly_references): New. diff --git a/automake.in b/automake.in index 9bf8b43..c2ab593 100755 --- a/automake.in +++ b/automake.in @@ -4683,7 +4683,7 @@ sub handle_java push (@all, 'class' . $dir . '.stamp'); } -sub handle_cli_assembly ($$$%) +sub handle_cli_assembly_sources ($$$%) { my ($one_file, $unxformed, $where, %transform) = @_; my @cmdsrcs = (); @@ -4700,7 +4700,8 @@ sub handle_cli_assembly ($$$%) my $nodist = ($prefix =~ /^nodist_/); my $nodefine = ($prefix =~ /EXTRA_/); - push @cmdsrcs, "\$($outvarname)"; + push @cmdsrcs, "\$($outvarname)" + unless $nodefine; push @sources, "\$($varname)"; push @dist_sources, shadow_unconditionally ($varname, $where) @@ -4762,6 +4763,78 @@ sub handle_cli_assembly ($$$%) return 1; } +my $cli_need_resgen; + +sub handle_cli_assembly_resources ($$$%) +{ + my ($one_file, $unxformed, $where, %transform) = @_; + my @cmdrsrcs = (); + + foreach my $prefix ('', 'EXTRA_', 'dist_', 'nodist_', + 'dist_EXTRA_', 'nodist_EXTRA_') + { + my $varname = $prefix . $one_file . "_RESOURCES"; + my $var = var $varname; + next unless $var; + my $xpfx = ($prefix eq '') ? 'am_' : $prefix; + my $cmdrsrc = $xpfx . $one_file . "_CMDRSRCS"; + my $deprsrc = $xpfx . $one_file . "_DEPRSRCS"; + my $nodist = ($prefix =~ /^nodist_/); + my $nodefine = ($prefix =~ /EXTRA_/); + + my @distrsrcs = uniq sort map { s/^(.*),([^,]*)$/$1/; $_ } $var->value_as_list_recursive; + &push_dist_common (@distrsrcs) + unless (option ('no-dist') || $nodist); + + $var->transform_variable_recursively + ($deprsrc, 'am__cli', $nodefine, $where, + sub { + my ($subvar, $val, $cond, $full_cond) = @_; + $val =~ s/^(.*),([^,]*)$/$1/; + $val =~ s/\.(resx|txt|po)$/.resources/; + return $val; + }); + + $output_rules .= "$unxformed: \$($deprsrc)\n" + unless $nodefine; + + push @cmdrsrcs, "\$($cmdrsrc)"; + + $var->transform_variable_recursively + ($cmdrsrc, 'am__cli', $nodefine, $where, + sub { + my ($subvar, $val, $cond, $full_cond) = @_; + my $rsrc_name = (); + my $nosrcdir = $nodist; + if ($val =~ /^(.*),([^,]*)$/) + { + $val = $1; + $rsrc_name = $2; + } + if ($val =~ /\.(resx|txt|po)$/) + { + $val =~ s/\.(resx|txt|po)$/.resources/; + $nosrcdir = 1; + $cli_need_resgen = $where; + } + my $retval = "-resource:"; + $retval .= '$(srcdir)/' + unless $nosrcdir; + $retval .= $val; + $retval .= ",$rsrc_name" + if $rsrc_name; + return $retval; + }); + } + + return 1 + if scalar @cmdrsrcs == 0; + + define_pretty_variable ($one_file . '_CMDRSRCS', TRUE, $where, sort @cmdrsrcs); + + return 1; +} + sub handle_cli_assembly_references(\%) { my ($known_assemblies) = @_; @@ -4807,6 +4880,14 @@ sub handle_cli_assembly_references(\%) } } +sub handle_cli_assembly ($$$%) +{ + my ($one_file, $unxformed, $where, %transform) = @_; + my $sources_ok = handle_cli_assembly_sources $one_file, $unxformed, $where, %transform; + my $resources_ok = handle_cli_assembly_resources $one_file, $unxformed, $where, %transform; + return $sources_ok && $resources_ok; +} + # Handle Mono/.NET sub handle_cli { @@ -4815,6 +4896,8 @@ sub handle_cli my %known_assemblies = (); + $cli_need_resgen = (); + foreach my $target (keys %targets) { my @assemblies = &am_install_var ('cli', 'CLI' . $target . 'S', @@ -4845,6 +4928,16 @@ sub handle_cli } } + if ($cli_need_resgen) + { + define_variable ('RESGEN', 'resgen', INTERNAL); + for my $ext ('.resx','.txt','.po') + { + register_suffix_rule (INTERNAL, $ext, '.resources'); + $output_rules .= "$ext.resources:\n\t\$(RESGEN) \$< [EMAIL PROTECTED]"; + } + } + handle_cli_assembly_references %known_assemblies; } diff --git a/lib/am/cli.am b/lib/am/cli.am index 8ddbc4f..d3064b2 100644 --- a/lib/am/cli.am +++ b/lib/am/cli.am @@ -23,3 +23,4 @@ include data.am clean-%DIR%%PRIMARY%: -list='$(%DIR%_%PRIMARY%)'; for p in $$list; do \ rm -f $$p $$p.mdb $$p.pdb; done + -rm -f *.resources diff --git a/tests/Makefile.am b/tests/Makefile.am index 8708b10..e725d87 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -93,6 +93,7 @@ clean.test \ clean2.test \ cli1.test \ cli2.test \ +cli3.test \ colneq.test \ colneq2.test \ colon.test \ diff --git a/tests/cli3.test b/tests/cli3.test new file mode 100755 index 0000000..7f5ab4c --- /dev/null +++ b/tests/cli3.test @@ -0,0 +1,46 @@ +#! /bin/sh +# Copyright (C) 2002, 2003, 2006 Free Software Foundation, Inc. +# +# This file is part of GNU Automake. +# +# GNU Automake is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# GNU Automake is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Automake; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. + +# Test that basic CLI functionality works. + +. ./defs || exit 1 + +set -e + +cat >Makefile.am <<END +CSC = mcs +VBC = vbnc +noinst_CLIEXES = foo1.exe foo2.exe foo3.exe +foo1_exe_SOURCES = a.cs +foo2_exe_SOURCES = a.cs +foo3_exe_SOURCES = a.cs +foo1_exe_RESOURCES = b.txt,Some.other.name +foo2_exe_RESOURCES = c.resx +foo3_exe_RESOURCES = d.ico +END + +$ACLOCAL +$AUTOMAKE + +grep '^am_foo1_exe_CMDRSRCS =.*b.txt' Makefile.in && exit 1 +grep '^am_foo1_exe_CMDRSRCS =.*-resource:b.resources' Makefile.in +grep '^am_foo2_exe_CMDRSRCS =.*c.resx' Makefile.in && exit 1 +grep '^am_foo2_exe_CMDRSRCS =.*-resource:c.resources' Makefile.in +grep '^am_foo3_exe_CMDRSRCS =.*-resource:[^ ]*d.ico' Makefile.in -- 1.5.2.1.174.gcd03