From 8856653ec87c826ec5f7f7c577e01afaa64c3ed5 Mon Sep 17 00:00:00 2001 From: Stefano Lattarini Date: Sun, 15 Jan 2012 23:08:21 +0100 Subject: build: improve silencing of automake build system In this change, we continue the silencing of the automake build system that has been started in commit v1.11-642-g17542c3, but which has been left incomplete there for an (absent-mindness) mistake. * Makefile.am (INSTALL): Silence the recipe. (automake, aclocal): Likewise, and improve them a little since we are at it. * lib/Automake/Makefile.am (Config.pm): Likewise. --- lib/Automake/Makefile.am | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'lib/Automake') diff --git a/lib/Automake/Makefile.am b/lib/Automake/Makefile.am index 0858b6875..cfc7272b8 100644 --- a/lib/Automake/Makefile.am +++ b/lib/Automake/Makefile.am @@ -64,10 +64,8 @@ do_subst = in=`echo $@ | sed 's/\.[^.]*$$//'`; sed \ ## $(datadir) or other do_subst'ituted variables change. ## Use chmod a-w to prevent people from editing the wrong file by accident. Config.pm: Config.in Makefile - rm -f Config.tmp Config.pm - $(do_subst) $(srcdir)/Config.in >Config.tmp - chmod +x Config.tmp - chmod a-w Config.tmp - mv -f Config.tmp Config.pm + $(AM_V_at)rm -f $@ $@-t + $(AM_V_GEN)$(do_subst) $(srcdir)/Config.in >$@-t + $(AM_V_at)chmod a+x,a-w $@-t && mv -f $@-t $@ EXTRA_DIST = Config.in -- cgit v1.2.1 From 27f1a1c967bc6af59cc940ba42114d795fb458d5 Mon Sep 17 00:00:00 2001 From: Stefano Lattarini Date: Mon, 16 Jan 2012 10:05:59 +0100 Subject: maintcheck: consistency of list of test scripts This is basically a backport of commit 'v1.11-358-g7b6ab07' and its follow-ups. The possibility of easily checking that the list of test scripts listed in a Makefile equals that of the tests on the filesystem has proved itself so useful that it's worth taking the annoyance of backporting it to maint. * CheckListOfTests.am: New file, backported from master (commit 'v1.11-1736-g083a75b') with minor adjustments. (maintainer-check-list-of-tests): New target, check for consistency between the list of tests defined in the including Makefile and the list of tests on the filesystem. (clean-maintcheck-testslist-tmp): New rule, to clean up temporary files that might be left around by the rules associated with the previous target. (clean-local): Depend on it. * lib/Automake/tests/Makefile.am: Include `CheckListOfTests.am'. * tests/Makefile.am: Likewise. * Makefile.am (maintainer-check-list-of-test): New target, calling recursively into `tests/' and `lib/Automake/tests/', using ... (TEST_SUBDIRS): ... this new variable. (maintainer-check): Added dependency from the new target `maintainer-check-list-of-tests'. --- lib/Automake/tests/Makefile.am | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'lib/Automake') diff --git a/lib/Automake/tests/Makefile.am b/lib/Automake/tests/Makefile.am index c5e53d2cf..a537fd1d7 100644 --- a/lib/Automake/tests/Makefile.am +++ b/lib/Automake/tests/Makefile.am @@ -1,6 +1,7 @@ ## Process this file with automake to create Makefile.in -# Copyright (C) 2002, 2003, 2008, 2009 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2008, 2009, 2012 Free Software Foundation, +# Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -28,3 +29,5 @@ Version.pl \ Wrap.pl EXTRA_DIST = $(TESTS) + +include $(top_srcdir)/CheckListOfTests.am -- cgit v1.2.1 From fbeda3da9d12736b3dcc6d1e11e9f2f09cf4ce96 Mon Sep 17 00:00:00 2001 From: Stefano Lattarini Date: Wed, 18 Jan 2012 12:17:11 +0100 Subject: tests: move all under the same hierarchy ('tests/' directory) This simplifies the organization of the Automake source tree and reduces the (lamentably high) number of Makefiles in the Automake build system by one. It also makes the maintainer check that verifies the consistency of list of tests more self-contained and simpler. Finally, it might be a first step forward the transition to a non-recursive build system for automake (if we ever decide to go down that road fully some day). * lib/Automake/tests: All the '*.pl' tests in here moved ... * tests/pm: ... into this new directory. * lib/Automake/tests/Makefile.am: Remove, its meaningful contents moved ... * tests/Makefile.am: ... here, with obvious adjustments. (test_subdirs): New variable, for the sake of the recipe of 'maintainer-check-list-of-tests'. * CheckListOfTests (maintainer-check-list-of-tests): Enhance its recipe to make it able to deal with test script residing in subdirectories. * Makefile.am (maintainer-check-list-of-tests): Simplified. (TEST_SUBDIRS): Remove, no more needed. * tests/list-of-tests.mk (perl_TESTS): New variable, lists the '.pl' tests just moved into 'tests/pm'. (handwritten_TESTS): Add the contents of '$(perl_TESTS)'. * lib/Automake/Makefile.am (SUBDIRS): Remove. * configure.ac (AC_CONFIG_FILES): Update. * .gitignore: Adjust. --- lib/Automake/Makefile.am | 7 +- lib/Automake/tests/Condition-t.pl | 301 ----------------------- lib/Automake/tests/Condition.pl | 260 -------------------- lib/Automake/tests/DisjConditions-t.pl | 436 --------------------------------- lib/Automake/tests/DisjConditions.pl | 383 ----------------------------- lib/Automake/tests/Makefile.am | 33 --- lib/Automake/tests/Version.pl | 99 -------- lib/Automake/tests/Wrap.pl | 80 ------ 8 files changed, 2 insertions(+), 1597 deletions(-) delete mode 100644 lib/Automake/tests/Condition-t.pl delete mode 100644 lib/Automake/tests/Condition.pl delete mode 100644 lib/Automake/tests/DisjConditions-t.pl delete mode 100644 lib/Automake/tests/DisjConditions.pl delete mode 100644 lib/Automake/tests/Makefile.am delete mode 100644 lib/Automake/tests/Version.pl delete mode 100644 lib/Automake/tests/Wrap.pl (limited to 'lib/Automake') diff --git a/lib/Automake/Makefile.am b/lib/Automake/Makefile.am index cfc7272b8..980502462 100644 --- a/lib/Automake/Makefile.am +++ b/lib/Automake/Makefile.am @@ -1,7 +1,7 @@ ## Process this file with automake to create Makefile.in -# Copyright (C) 2001, 2002, 2003, 2004, 2008, 2009, 2010 Free Software -# Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2004, 2008, 2009, 2010, 2012 Free +# Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,9 +16,6 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -# `make clean check' should build Config.pm first. -SUBDIRS = . tests - perllibdir = $(pkgvdatadir)/Automake dist_perllib_DATA = \ ChannelDefs.pm \ diff --git a/lib/Automake/tests/Condition-t.pl b/lib/Automake/tests/Condition-t.pl deleted file mode 100644 index 06eb34e92..000000000 --- a/lib/Automake/tests/Condition-t.pl +++ /dev/null @@ -1,301 +0,0 @@ -# Copyright (C) 2001, 2002, 2003, 2008 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 this program. If not, see . - -BEGIN { - use Config; - if (eval { require 5.007_002; } # for CLONE support - && $Config{useithreads}) - { - require threads; - import threads; - } - else - { - exit 77; - } -} -use Automake::Condition qw/TRUE FALSE/; - -sub test_basics () -{ - my @tests = (# [[Conditions], is_true?, is_false?, string, subst-string] - [[], 1, 0, 'TRUE', ''], - [['TRUE'], 1, 0, 'TRUE', ''], - [['FALSE'], 0, 1, 'FALSE', '#'], - [['A_TRUE'], 0, 0, 'A_TRUE', '@A_TRUE@'], - [['A_TRUE', 'B_FALSE'], - 0, 0, 'A_TRUE B_FALSE', '@A_TRUE@@B_FALSE@'], - [['B_TRUE', 'FALSE'], 0, 1, 'FALSE', '#'], - [['B_TRUE', 'B_FALSE'], 0, 1, 'FALSE', '#']); - - for (@tests) - { - my $a = new Automake::Condition @{$_->[0]}; - return 1 - if threads->new(sub { - return 1 if $_->[1] != $a->true; - return 1 if $_->[1] != ($a == TRUE); - return 1 if $_->[2] != $a->false; - return 1 if $_->[2] != ($a == FALSE); - return 1 if $_->[3] ne $a->string; - return 1 if $_->[4] ne $a->subst_string; - })->join; - } - return 0; -} - -sub test_true_when () -{ - my $failed = 0; - - my @tests = (# [When, - # [Implied-Conditions], - # [Not-Implied-Conditions]] - [['TRUE'], - [['TRUE']], - [['A_TRUE'], ['A_TRUE', 'B_FALSE'], ['FALSE']]], - [['A_TRUE'], - [['TRUE'], ['A_TRUE']], - [['A_TRUE', 'B_FALSE'], ['FALSE']]], - [['A_TRUE', 'B_FALSE'], - [['TRUE'], ['A_TRUE'], ['B_FALSE'], ['A_TRUE', 'B_FALSE']], - [['FALSE'], ['C_FALSE'], ['C_FALSE', 'A_TRUE']]]); - - for my $t (@tests) - { - my $a = new Automake::Condition @{$t->[0]}; - return 1 - if threads->new(sub { - for my $u (@{$t->[1]}) - { - my $b = new Automake::Condition @$u; - return threads->new(sub { - if (! $b->true_when ($a)) - { - print "`" . $b->string . - "' not implied by `" . $a->string . "'?\n"; - $failed = 1; - } - })->join; - } - for my $u (@{$t->[2]}) - { - my $b = new Automake::Condition @$u; - return threads->new(sub { - if ($b->true_when ($a)) - { - print "`" . $b->string . - "' implied by `" . $a->string . "'?\n"; - $failed = 1; - } - - return threads->new(sub { - return 1 if $b->true_when ($a); - })->join; - })->join; - } - })->join; - } - return $failed; -} - -sub test_reduce_and () -{ - my @tests = (# If no conditions are given, TRUE should be returned - [[], ["TRUE"]], - # An empty condition is TRUE - [[""], ["TRUE"]], - # A single condition should be passed through unchanged - [["FOO"], ["FOO"]], - [["FALSE"], ["FALSE"]], - [["TRUE"], ["TRUE"]], - # TRUE and false should be discarded and overwhelm - # the result, respectively - [["FOO", "TRUE"], ["FOO"]], - [["FOO", "FALSE"], ["FALSE"]], - # Repetitions should be removed - [["FOO", "FOO"], ["FOO"]], - [["TRUE", "FOO", "FOO"], ["FOO"]], - [["FOO", "TRUE", "FOO"], ["FOO"]], - [["FOO", "FOO", "TRUE"], ["FOO"]], - # Two different conditions should be preserved, - # but TRUEs should be removed - [["FOO", "BAR"], ["BAR,FOO"]], - [["TRUE", "FOO", "BAR"], ["BAR,FOO"]], - [["FOO", "TRUE", "BAR"], ["BAR,FOO"]], - [["FOO", "BAR", "TRUE"], ["BAR,FOO"]], - # A condition implied by another condition should be removed. - [["FOO BAR", "BAR"], ["FOO BAR"]], - [["BAR", "FOO BAR"], ["FOO BAR"]], - [["TRUE", "FOO BAR", "BAR"], ["FOO BAR"]], - [["FOO BAR", "TRUE", "BAR"], ["FOO BAR"]], - [["FOO BAR", "BAR", "TRUE"], ["FOO BAR"]], - - [["BAR FOO", "BAR"], ["BAR FOO"]], - [["BAR", "BAR FOO"], ["BAR FOO"]], - [["TRUE", "BAR FOO", "BAR"], ["BAR FOO"]], - [["BAR FOO", "TRUE", "BAR"], ["BAR FOO"]], - [["BAR FOO", "BAR", "TRUE"], ["BAR FOO"]], - - # Check that reduction happens even when there are - # two conditions to remove. - [["FOO", "FOO BAR", "BAR"], ["FOO BAR"]], - [["FOO", "FOO BAR", "BAZ", "FOO BAZ"], ["FOO BAR", "FOO BAZ"]], - [["FOO", "FOO BAR", "BAZ", "FOO BAZ", "FOO BAZ BAR"], - ["FOO BAZ BAR"]], - - # Duplicated conditionals should be removed. - [["FOO", "BAR", "BAR"], ["BAR,FOO"]], - - # Equivalent conditions in different forms should be - # reduced: which one is left is unfortunately order - # dependent. - [["BAR FOO", "FOO BAR"], ["FOO BAR"]], - [["FOO BAR", "BAR FOO"], ["BAR FOO"]]); - - my $failed = 0; - foreach (@tests) - { - my ($inref, $outref) = @$_; - my @inconds = map { new Automake::Condition $_ } @$inref; - return 1 - if threads->new(sub { - my @outconds = map { (new Automake::Condition $_)->string } @$outref; - return threads->new(sub { - my @res = - map { $_->string } (Automake::Condition::reduce_and (@inconds)); - return threads->new(sub { - my $result = join (",", sort @res); - my $exresult = join (",", @outconds); - - if ($result ne $exresult) - { - print '"' . join(",", @$inref) . '" => "' . - $result . '" expected "' . - $exresult . '"' . "\n"; - $failed = 1; - } - return $failed; - })->join; - })->join; - })->join; - } - return $failed; -} - -sub test_reduce_or () -{ - my @tests = (# If no conditions are given, FALSE should be returned - [[], ["FALSE"]], - # An empty condition is TRUE - [[""], ["TRUE"]], - # A single condition should be passed through unchanged - [["FOO"], ["FOO"]], - [["FALSE"], ["FALSE"]], - [["TRUE"], ["TRUE"]], - # FALSE and TRUE should be discarded and overwhelm - # the result, respectively - [["FOO", "TRUE"], ["TRUE"]], - [["FOO", "FALSE"], ["FOO"]], - # Repetitions should be removed - [["FOO", "FOO"], ["FOO"]], - [["FALSE", "FOO", "FOO"], ["FOO"]], - [["FOO", "FALSE", "FOO"], ["FOO"]], - [["FOO", "FOO", "FALSE"], ["FOO"]], - # Two different conditions should be preserved, - # but FALSEs should be removed - [["FOO", "BAR"], ["BAR,FOO"]], - [["FALSE", "FOO", "BAR"], ["BAR,FOO"]], - [["FOO", "FALSE", "BAR"], ["BAR,FOO"]], - [["FOO", "BAR", "FALSE"], ["BAR,FOO"]], - # A condition implying another condition should be removed. - [["FOO BAR", "BAR"], ["BAR"]], - [["BAR", "FOO BAR"], ["BAR"]], - [["FALSE", "FOO BAR", "BAR"], ["BAR"]], - [["FOO BAR", "FALSE", "BAR"], ["BAR"]], - [["FOO BAR", "BAR", "FALSE"], ["BAR"]], - - [["BAR FOO", "BAR"], ["BAR"]], - [["BAR", "BAR FOO"], ["BAR"]], - [["FALSE", "BAR FOO", "BAR"], ["BAR"]], - [["BAR FOO", "FALSE", "BAR"], ["BAR"]], - [["BAR FOO", "BAR", "FALSE"], ["BAR"]], - - # Check that reduction happens even when there are - # two conditions to remove. - [["FOO", "FOO BAR", "BAR"], ["BAR,FOO"]], - [["FOO", "FOO BAR", "BAZ", "FOO BAZ"], ["BAZ,FOO"]], - [["FOO", "FOO BAR", "BAZ", "FOO BAZ", "FOO BAZ BAR"], - ["BAZ,FOO"]], - - # Duplicated conditionals should be removed. - [["FOO", "BAR", "BAR"], ["BAR,FOO"]], - - # Equivalent conditions in different forms should be - # reduced: which one is left is unfortunately order - # dependent. - [["BAR FOO", "FOO BAR"], ["FOO BAR"]], - [["FOO BAR", "BAR FOO"], ["BAR FOO"]]); - - my $failed = 0; - foreach (@tests) - { - my ($inref, $outref) = @$_; - my @inconds = map { new Automake::Condition $_ } @$inref; - return 1 - if threads->new(sub { - my @outconds = map { (new Automake::Condition $_)->string } @$outref; - return threads->new(sub { - my @res = - map { $_->string } (Automake::Condition::reduce_or (@inconds)); - return threads->new(sub { - my $result = join (",", sort @res); - my $exresult = join (",", @outconds); - - if ($result ne $exresult) - { - print '"' . join(",", @$inref) . '" => "' . - $result . '" expected "' . - $exresult . '"' . "\n"; - $failed = 1; - } - return $failed; - })->join; - })->join; - })->join; - } - return $failed; -} - -exit (test_basics || test_true_when || test_reduce_and || test_reduce_or); - -### Setup "GNU" style for perl-mode and cperl-mode. -## Local Variables: -## perl-indent-level: 2 -## perl-continued-statement-offset: 2 -## perl-continued-brace-offset: 0 -## perl-brace-offset: 0 -## perl-brace-imaginary-offset: 0 -## perl-label-offset: -2 -## cperl-indent-level: 2 -## cperl-brace-offset: 0 -## cperl-continued-brace-offset: 0 -## cperl-label-offset: -2 -## cperl-extra-newline-before-brace: t -## cperl-merge-trailing-else: nil -## cperl-continued-statement-offset: 2 -## End: diff --git a/lib/Automake/tests/Condition.pl b/lib/Automake/tests/Condition.pl deleted file mode 100644 index 86f174564..000000000 --- a/lib/Automake/tests/Condition.pl +++ /dev/null @@ -1,260 +0,0 @@ -# Copyright (C) 2001, 2002, 2003 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 this program. If not, see . - -use Automake::Condition qw/TRUE FALSE/; - -sub test_basics () -{ - my @tests = (# [[Conditions], is_true?, is_false?, string, subst-string] - [[], 1, 0, 'TRUE', ''], - [['TRUE'], 1, 0, 'TRUE', ''], - [['FALSE'], 0, 1, 'FALSE', '#'], - [['A_TRUE'], 0, 0, 'A_TRUE', '@A_TRUE@'], - [['A_TRUE', 'B_FALSE'], - 0, 0, 'A_TRUE B_FALSE', '@A_TRUE@@B_FALSE@'], - [['B_TRUE', 'FALSE'], 0, 1, 'FALSE', '#'], - [['B_TRUE', 'B_FALSE'], 0, 1, 'FALSE', '#']); - - for (@tests) - { - my $a = new Automake::Condition @{$_->[0]}; - return 1 if $_->[1] != $a->true; - return 1 if $_->[1] != ($a == TRUE); - return 1 if $_->[2] != $a->false; - return 1 if $_->[2] != ($a == FALSE); - return 1 if $_->[3] ne $a->string; - return 1 if $_->[4] ne $a->subst_string; - } - return 0; -} - -sub test_true_when () -{ - my $failed = 0; - - my @tests = (# [When, - # [Implied-Conditions], - # [Not-Implied-Conditions]] - [['TRUE'], - [['TRUE']], - [['A_TRUE'], ['A_TRUE', 'B_FALSE'], ['FALSE']]], - [['A_TRUE'], - [['TRUE'], ['A_TRUE']], - [['A_TRUE', 'B_FALSE'], ['FALSE']]], - [['A_TRUE', 'B_FALSE'], - [['TRUE'], ['A_TRUE'], ['B_FALSE'], ['A_TRUE', 'B_FALSE']], - [['FALSE'], ['C_FALSE'], ['C_FALSE', 'A_TRUE']]]); - - for my $t (@tests) - { - my $a = new Automake::Condition @{$t->[0]}; - for my $u (@{$t->[1]}) - { - my $b = new Automake::Condition @$u; - if (! $b->true_when ($a)) - { - print "`" . $b->string . - "' not implied by `" . $a->string . "'?\n"; - $failed = 1; - } - } - for my $u (@{$t->[2]}) - { - my $b = new Automake::Condition @$u; - if ($b->true_when ($a)) - { - print "`" . $b->string . - "' implied by `" . $a->string . "'?\n"; - $failed = 1; - } - - return 1 if $b->true_when ($a); - } - } - return $failed; -} - -sub test_reduce_and () -{ - my @tests = (# If no conditions are given, TRUE should be returned - [[], ["TRUE"]], - # An empty condition is TRUE - [[""], ["TRUE"]], - # A single condition should be passed through unchanged - [["FOO"], ["FOO"]], - [["FALSE"], ["FALSE"]], - [["TRUE"], ["TRUE"]], - # TRUE and false should be discarded and overwhelm - # the result, respectively - [["FOO", "TRUE"], ["FOO"]], - [["FOO", "FALSE"], ["FALSE"]], - # Repetitions should be removed - [["FOO", "FOO"], ["FOO"]], - [["TRUE", "FOO", "FOO"], ["FOO"]], - [["FOO", "TRUE", "FOO"], ["FOO"]], - [["FOO", "FOO", "TRUE"], ["FOO"]], - # Two different conditions should be preserved, - # but TRUEs should be removed - [["FOO", "BAR"], ["BAR,FOO"]], - [["TRUE", "FOO", "BAR"], ["BAR,FOO"]], - [["FOO", "TRUE", "BAR"], ["BAR,FOO"]], - [["FOO", "BAR", "TRUE"], ["BAR,FOO"]], - # A condition implied by another condition should be removed. - [["FOO BAR", "BAR"], ["FOO BAR"]], - [["BAR", "FOO BAR"], ["FOO BAR"]], - [["TRUE", "FOO BAR", "BAR"], ["FOO BAR"]], - [["FOO BAR", "TRUE", "BAR"], ["FOO BAR"]], - [["FOO BAR", "BAR", "TRUE"], ["FOO BAR"]], - - [["BAR FOO", "BAR"], ["BAR FOO"]], - [["BAR", "BAR FOO"], ["BAR FOO"]], - [["TRUE", "BAR FOO", "BAR"], ["BAR FOO"]], - [["BAR FOO", "TRUE", "BAR"], ["BAR FOO"]], - [["BAR FOO", "BAR", "TRUE"], ["BAR FOO"]], - - # Check that reduction happens even when there are - # two conditions to remove. - [["FOO", "FOO BAR", "BAR"], ["FOO BAR"]], - [["FOO", "FOO BAR", "BAZ", "FOO BAZ"], ["FOO BAR", "FOO BAZ"]], - [["FOO", "FOO BAR", "BAZ", "FOO BAZ", "FOO BAZ BAR"], - ["FOO BAZ BAR"]], - - # Duplicated conditionals should be removed. - [["FOO", "BAR", "BAR"], ["BAR,FOO"]], - - # Equivalent conditions in different forms should be - # reduced: which one is left is unfortunately order - # dependent. - [["BAR FOO", "FOO BAR"], ["FOO BAR"]], - [["FOO BAR", "BAR FOO"], ["BAR FOO"]]); - - my $failed = 0; - foreach (@tests) - { - my ($inref, $outref) = @$_; - my @inconds = map { new Automake::Condition $_ } @$inref; - my @outconds = map { (new Automake::Condition $_)->string } @$outref; - my @res = - map { $_->string } (Automake::Condition::reduce_and (@inconds)); - my $result = join (",", sort @res); - my $exresult = join (",", @outconds); - - if ($result ne $exresult) - { - print '"' . join(",", @$inref) . '" => "' . - $result . '" expected "' . - $exresult . '"' . "\n"; - $failed = 1; - } - } - return $failed; -} - -sub test_reduce_or () -{ - my @tests = (# If no conditions are given, FALSE should be returned - [[], ["FALSE"]], - # An empty condition is TRUE - [[""], ["TRUE"]], - # A single condition should be passed through unchanged - [["FOO"], ["FOO"]], - [["FALSE"], ["FALSE"]], - [["TRUE"], ["TRUE"]], - # FALSE and TRUE should be discarded and overwhelm - # the result, respectively - [["FOO", "TRUE"], ["TRUE"]], - [["FOO", "FALSE"], ["FOO"]], - # Repetitions should be removed - [["FOO", "FOO"], ["FOO"]], - [["FALSE", "FOO", "FOO"], ["FOO"]], - [["FOO", "FALSE", "FOO"], ["FOO"]], - [["FOO", "FOO", "FALSE"], ["FOO"]], - # Two different conditions should be preserved, - # but FALSEs should be removed - [["FOO", "BAR"], ["BAR,FOO"]], - [["FALSE", "FOO", "BAR"], ["BAR,FOO"]], - [["FOO", "FALSE", "BAR"], ["BAR,FOO"]], - [["FOO", "BAR", "FALSE"], ["BAR,FOO"]], - # A condition implying another condition should be removed. - [["FOO BAR", "BAR"], ["BAR"]], - [["BAR", "FOO BAR"], ["BAR"]], - [["FALSE", "FOO BAR", "BAR"], ["BAR"]], - [["FOO BAR", "FALSE", "BAR"], ["BAR"]], - [["FOO BAR", "BAR", "FALSE"], ["BAR"]], - - [["BAR FOO", "BAR"], ["BAR"]], - [["BAR", "BAR FOO"], ["BAR"]], - [["FALSE", "BAR FOO", "BAR"], ["BAR"]], - [["BAR FOO", "FALSE", "BAR"], ["BAR"]], - [["BAR FOO", "BAR", "FALSE"], ["BAR"]], - - # Check that reduction happens even when there are - # two conditions to remove. - [["FOO", "FOO BAR", "BAR"], ["BAR,FOO"]], - [["FOO", "FOO BAR", "BAZ", "FOO BAZ"], ["BAZ,FOO"]], - [["FOO", "FOO BAR", "BAZ", "FOO BAZ", "FOO BAZ BAR"], - ["BAZ,FOO"]], - - # Duplicated conditionals should be removed. - [["FOO", "BAR", "BAR"], ["BAR,FOO"]], - - # Equivalent conditions in different forms should be - # reduced: which one is left is unfortunately order - # dependent. - [["BAR FOO", "FOO BAR"], ["FOO BAR"]], - [["FOO BAR", "BAR FOO"], ["BAR FOO"]]); - - my $failed = 0; - foreach (@tests) - { - my ($inref, $outref) = @$_; - my @inconds = map { new Automake::Condition $_ } @$inref; - my @outconds = map { (new Automake::Condition $_)->string } @$outref; - my @res = - map { $_->string } (Automake::Condition::reduce_or (@inconds)); - my $result = join (",", sort @res); - my $exresult = join (",", @outconds); - - if ($result ne $exresult) - { - print '"' . join(",", @$inref) . '" => "' . - $result . '" expected "' . - $exresult . '"' . "\n"; - $failed = 1; - } - } - return $failed; -} - -exit (test_basics || test_true_when || test_reduce_and || test_reduce_or); - -### Setup "GNU" style for perl-mode and cperl-mode. -## Local Variables: -## perl-indent-level: 2 -## perl-continued-statement-offset: 2 -## perl-continued-brace-offset: 0 -## perl-brace-offset: 0 -## perl-brace-imaginary-offset: 0 -## perl-label-offset: -2 -## cperl-indent-level: 2 -## cperl-brace-offset: 0 -## cperl-continued-brace-offset: 0 -## cperl-label-offset: -2 -## cperl-extra-newline-before-brace: t -## cperl-merge-trailing-else: nil -## cperl-continued-statement-offset: 2 -## End: diff --git a/lib/Automake/tests/DisjConditions-t.pl b/lib/Automake/tests/DisjConditions-t.pl deleted file mode 100644 index 2fe275beb..000000000 --- a/lib/Automake/tests/DisjConditions-t.pl +++ /dev/null @@ -1,436 +0,0 @@ -# Copyright (C) 2001, 2002, 2003, 2008 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 this program. If not, see . - -BEGIN { - use Config; - if (eval { require 5.007_002; } # for CLONE support - && $Config{useithreads}) - { - require threads; - import threads; - } - else - { - exit 77; - } -} -use Automake::Condition qw/TRUE FALSE/; -use Automake::DisjConditions; - -sub test_basics () -{ - my $cond = new Automake::Condition "COND1_TRUE", "COND2_FALSE"; - return threads->new (sub { - my $other = new Automake::Condition "COND3_FALSE"; - return threads->new (sub { - my $set1 = new Automake::DisjConditions $cond, $other; - return threads->new (sub { - my $set2 = new Automake::DisjConditions $other, $cond; - return 1 unless $set1 == $set2; - return 1 if $set1->false; - return 1 if $set1->true; - return 1 unless (new Automake::DisjConditions)->false; - return 1 if (new Automake::DisjConditions)->true; - })->join; - })->join; - })->join; -} - -sub build_set (@) -{ - my @conds = @_; - my @set = (); - for my $cond (@conds) - { - push @set, new Automake::Condition @$cond; - } - return new Automake::DisjConditions @set; -} - -sub test_invert () -{ - my @tests = ([[["FALSE"]], - [["TRUE"]]], - - [[["TRUE"]], - [["FALSE"]]], - - [[["COND1_TRUE", "COND2_TRUE"], - ["COND3_FALSE", "COND2_TRUE"]], - [["COND2_FALSE"], - ["COND1_FALSE", "COND3_TRUE"]]], - - [[["COND1_TRUE", "COND2_TRUE"], - ["TRUE"]], - [["FALSE"]]], - - [[["COND1_TRUE", "COND2_TRUE"], - ["FALSE"]], - [["COND1_FALSE"], - ["COND2_FALSE"]]], - - [[["COND1_TRUE"], - ["COND2_FALSE"]], - [["COND1_FALSE", "COND2_TRUE"]]] - ); - - for my $t (@tests) - { - my $set = build_set @{$t->[0]}; - return 1 - if threads->new(sub { - my $res = build_set @{$t->[1]}; - my $inv = $set->invert; - if ($inv != $res) - { - print " (I) " . $set->string . "\n\t" - . $inv->string . ' != ' . $res->string . "\n"; - return 1; - } - return 0 - })-> join; - } - return 0; -} - -sub test_simplify () -{ - my @tests = ([[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"]], - [["FOO_TRUE", "BAR_FALSE"]]], - - [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"], - ["FOO_TRUE", "BAR_TRUE"]], - [["FOO_TRUE"]]], - - [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"], - ["FOO_TRUE", "BAR_TRUE"], - ["FOO_FALSE"]], - [["TRUE"]]], - - [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"], - ["BAR_TRUE", "BAZ_TRUE"], - ["BAR_FALSE", "BAZ_TRUE"]], - [["BAZ_TRUE"], ["FOO_TRUE", "BAR_FALSE"]]], - - [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"], - ["BAR_TRUE", "BAZ_TRUE"], - ["BAR_FALSE", "BAZ_TRUE"], - ["FOO_FALSE"]], - [["FOO_FALSE"], ["BAZ_TRUE"], ["BAR_FALSE"]]], - - [[["B_TRUE"], - ["A_FALSE", "B_TRUE"]], - [["B_TRUE"]]], - - [[["B_TRUE"], - ["A_FALSE", "B_FALSE", "C_TRUE"], - ["A_FALSE", "B_FALSE", "C_FALSE"]], - [["A_FALSE"], ["B_TRUE"]]], - - [[["B_TRUE"], - ["A_FALSE", "B_FALSE", "C_TRUE"], - ["A_FALSE", "B_FALSE", "C_FALSE"], - ["A_TRUE", "B_FALSE"]], - [["TRUE"]]], - - [[["A_TRUE", "B_TRUE"], - ["A_TRUE", "B_FALSE"], - ["A_TRUE", "C_FALSE", "D_FALSE"]], - [["A_TRUE"]]], - - [[["A_FALSE", "B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"], - ["A_FALSE", "B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"], - ["A_FALSE", "B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"], - ["A_FALSE", "B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"], - ["A_TRUE", "B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"], - ["A_TRUE", "B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"], - ["A_TRUE", "B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"], - ["A_TRUE", "B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"]], - [ ["B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"], - ["B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"], - ["B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"], - ["B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"]]], - - [[["A_FALSE", "B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"], - ["A_FALSE", "B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"], - ["A_FALSE", "B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"], - ["A_FALSE", "B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"], - ["A_TRUE", "B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"], - ["A_TRUE", "B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"], - ["A_TRUE", "B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"], - ["A_TRUE", "B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"], - ["A_FALSE", "B_FALSE", "C_FALSE", "D_FALSE", "E_FALSE"], - ["A_FALSE", "B_FALSE", "C_TRUE", "D_FALSE", "E_TRUE"], - ["A_FALSE", "B_TRUE", "C_TRUE", "D_TRUE", "E_TRUE"], - ["A_FALSE", "B_TRUE", "C_FALSE", "D_TRUE", "E_FALSE"], - ["A_TRUE", "B_TRUE", "C_FALSE", "D_TRUE", "E_FALSE"], - ["A_TRUE", "B_TRUE", "C_TRUE", "D_TRUE", "E_TRUE"], - ["A_TRUE", "B_FALSE", "C_TRUE", "D_FALSE", "E_TRUE"], - ["A_TRUE", "B_FALSE", "C_FALSE", "D_FALSE", "E_FALSE"]], - [["C_FALSE", "E_FALSE"], - ["C_TRUE", "E_TRUE"]]], - - [[["A_FALSE"], - ["A_TRUE", "B_FALSE"], - ["A_TRUE", "B_TRUE", "C_FALSE"], - ["A_TRUE", "B_TRUE", "C_TRUE", "D_FALSE"], - ["A_TRUE", "B_TRUE", "C_TRUE", "D_TRUE", "E_FALSE"], - ["A_TRUE", "B_TRUE", "C_TRUE", "D_TRUE", "E_TRUE", "F_FALSE"], - ["A_TRUE", "B_TRUE", "C_TRUE", "D_TRUE", "E_TRUE"]], - [["TRUE"]]], - - # Simplify should work with up to 31 variables. - [[["V01_TRUE", "V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE", - "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE", - "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE", - "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE", - "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE", - "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE", - "V31_TRUE"], - ["V01_TRUE", "V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE", - "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE", - "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE", - "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE", - "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE", - "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE", - "V31_FALSE"], - ["V01_FALSE","V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE", - "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE", - "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE", - "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE", - "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE", - "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE", - "V31_TRUE"], - ["V01_FALSE","V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE", - "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE", - "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE", - "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE", - "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE", - "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE", - "V31_FALSE"]], - [[ "V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE", - "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE", - "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE", - "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE", - "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE", - "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE" - ]]]); - - for my $t (@tests) - { - my $set = build_set @{$t->[0]}; - return 1 - if threads->new(sub { - my $res = build_set @{$t->[1]}; - return threads->new(sub { - - # Make sure simplify() yields the expected result. - my $sim = $set->simplify; - return threads->new(sub { - if ($sim != $res) - { - print " (S1) " . $set->string . "\n\t" - . $sim->string . ' != ' . $res->string . "\n"; - return 1; - } - - # Make sure simplify() is idempotent. - my $sim2 = $sim->simplify; - return threads->new(sub { - if ($sim2 != $sim) - { - print " (S2) " . $sim->string . "\n\t" - . $sim2->string . ' != ' . $sim->string . "\n"; - return 1; - } - - # Also exercise invert() while we are at it. - - my $inv1 = $set->invert->simplify; - return threads->new(sub { - my $inv2 = $sim->invert->simplify; - return threads->new(sub { - if ($inv1 != $inv2) - { - print " (S3) " . $set->string . ", " . $sim->string . "\n\t" - . $inv1->string . ' -= ' . $inv2->string . "\n"; - return 1; - } - })->join; - })->join; - })->join; - })->join; - })->join; - })->join; - } - - return 0; -} - -sub test_sub_conditions () -{ - my @tests = ([[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"], - ["FOO_FALSE"]], - ["FOO_TRUE"], - [["BAR_FALSE", "BAZ_FALSE"], - ["BAR_FALSE", "BAZ_TRUE"]]], - - [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"], - ["FOO_FALSE"]], - ["FOO_TRUE", "BAR_FALSE"], - [["BAZ_FALSE"], - ["BAZ_TRUE"]]], - - [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"], - ["FOO_FALSE"]], - ["FOO_TRUE", "BAR_TRUE"], - [["FALSE"]]], - - [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAZ_TRUE"], - ["FOO_FALSE"]], - ["FOO_TRUE", "BAR_TRUE"], - [["BAZ_TRUE"]]], - - [[["FOO_TRUE", "BAR_FALSE"], - ["FOO_TRUE", "BAR_TRUE"]], - ["FOO_TRUE", "BAR_TRUE"], - [["TRUE"]]], - - [[["TRUE"]], - ["TRUE"], - [["TRUE"]]], - - [[["FALSE"]], - ["TRUE"], - [["FALSE"]]], - - [[["FALSE"]], - ["FALSE"], - [["FALSE"]]]); - - for my $t (@tests) - { - my $t1 = build_set @{$t->[0]}; - return 1 - if threads->new(sub { - my $t2 = new Automake::Condition @{$t->[1]}; - return threads->new(sub { - my $t3 = build_set @{$t->[2]}; - return threads->new(sub { - - # Make sure sub_conditions() yields the expected result. - my $s = $t1->sub_conditions ($t2); - threads->new(sub { - if ($s != $t3) - { - print " (SC) " . $t1->string . "\n\t" - . $s->string . ' != ' . $t3->string . "\n"; - return 1; - } - })->join; - })->join; - })->join; - })->join; - } -} - -sub test_ambig () -{ - my @tests = ([[["TRUE"]], - ["TRUE"], - "multiply defined"], - [[["C1_TRUE"]], - ["C1_TRUE"], - "multiply defined"], - [[["TRUE"]], - ["C1_FALSE"], - "which includes"], - [[["C1_TRUE"]], - ["C1_TRUE", "C2_TRUE"], - "which includes"], - [[["C1_TRUE", "C2_TRUE"]], - ["C2_TRUE"], - "which is included in"], - [[["C1_TRUE"]], - ["C2_TRUE"], - ''], - [[["C1_TRUE"], - ["C2_FALSE"]], - ["C1_FALSE", "C2_TRUE"], - '']); - - my $failed = 0; - for my $t (@tests) - { - my $t1 = build_set @{$t->[0]}; - $failed = 1 - if threads->new(sub { - my $t2 = new Automake::Condition @{$t->[1]}; - my $t3 = $t->[2]; - return threads->new(sub { - my ($ans, $cond) = $t1->ambiguous_p ("FOO", $t2); - return threads->new(sub { - if ($t3 && $ans !~ /FOO.*$t3/) - { - print " (A1) " . $t1->string . " vs. " . $t2->string . "\n\t" - . "Error message '$ans' does not match '$t3'\n"; - return 1; - } - if (!$t3 && $ans ne '') - { - print " (A2) " . $t1->string . " vs. " . $t2->string . "\n\t" - . "Unexpected error message: $ans\n"; - return 1; - } - })->join; - })->join; - })->join; - } - return $failed; -} - -exit (test_basics - || test_invert - || test_simplify - || test_sub_conditions - || test_ambig); - -### Setup "GNU" style for perl-mode and cperl-mode. -## Local Variables: -## perl-indent-level: 2 -## perl-continued-statement-offset: 2 -## perl-continued-brace-offset: 0 -## perl-brace-offset: 0 -## perl-brace-imaginary-offset: 0 -## perl-label-offset: -2 -## cperl-indent-level: 2 -## cperl-brace-offset: 0 -## cperl-continued-brace-offset: 0 -## cperl-label-offset: -2 -## cperl-extra-newline-before-brace: t -## cperl-merge-trailing-else: nil -## cperl-continued-statement-offset: 2 -## End: diff --git a/lib/Automake/tests/DisjConditions.pl b/lib/Automake/tests/DisjConditions.pl deleted file mode 100644 index 47dea8399..000000000 --- a/lib/Automake/tests/DisjConditions.pl +++ /dev/null @@ -1,383 +0,0 @@ -# Copyright (C) 2001, 2002, 2003, 2008 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 this program. If not, see . - -use Automake::Condition qw/TRUE FALSE/; -use Automake::DisjConditions; - -sub test_basics () -{ - my $cond = new Automake::Condition "COND1_TRUE", "COND2_FALSE"; - my $other = new Automake::Condition "COND3_FALSE"; - my $set1 = new Automake::DisjConditions $cond, $other; - my $set2 = new Automake::DisjConditions $other, $cond; - return 1 unless $set1 == $set2; - return 1 if $set1->false; - return 1 if $set1->true; - return 1 unless (new Automake::DisjConditions)->false; - return 1 if (new Automake::DisjConditions)->true; -} - -sub build_set (@) -{ - my @conds = @_; - my @set = (); - for my $cond (@conds) - { - push @set, new Automake::Condition @$cond; - } - return new Automake::DisjConditions @set; -} - -sub test_invert () -{ - my @tests = ([[["FALSE"]], - [["TRUE"]]], - - [[["TRUE"]], - [["FALSE"]]], - - [[["COND1_TRUE", "COND2_TRUE"], - ["COND3_FALSE", "COND2_TRUE"]], - [["COND2_FALSE"], - ["COND1_FALSE", "COND3_TRUE"]]], - - [[["COND1_TRUE", "COND2_TRUE"], - ["TRUE"]], - [["FALSE"]]], - - [[["COND1_TRUE", "COND2_TRUE"], - ["FALSE"]], - [["COND1_FALSE"], - ["COND2_FALSE"]]], - - [[["COND1_TRUE"], - ["COND2_FALSE"]], - [["COND1_FALSE", "COND2_TRUE"]]] - ); - - for my $t (@tests) - { - my $set = build_set @{$t->[0]}; - my $res = build_set @{$t->[1]}; - my $inv = $set->invert; - if ($inv != $res) - { - print " (I) " . $set->string . "\n\t" - . $inv->string . ' != ' . $res->string . "\n"; - return 1; - } - } - return 0; -} - -sub test_simplify () -{ - my @tests = ([[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"]], - [["FOO_TRUE", "BAR_FALSE"]]], - - [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"], - ["FOO_TRUE", "BAR_TRUE"]], - [["FOO_TRUE"]]], - - [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"], - ["FOO_TRUE", "BAR_TRUE"], - ["FOO_FALSE"]], - [["TRUE"]]], - - [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"], - ["BAR_TRUE", "BAZ_TRUE"], - ["BAR_FALSE", "BAZ_TRUE"]], - [["BAZ_TRUE"], ["FOO_TRUE", "BAR_FALSE"]]], - - [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"], - ["BAR_TRUE", "BAZ_TRUE"], - ["BAR_FALSE", "BAZ_TRUE"], - ["FOO_FALSE"]], - [["FOO_FALSE"], ["BAZ_TRUE"], ["BAR_FALSE"]]], - - [[["B_TRUE"], - ["A_FALSE", "B_TRUE"]], - [["B_TRUE"]]], - - [[["B_TRUE"], - ["A_FALSE", "B_FALSE", "C_TRUE"], - ["A_FALSE", "B_FALSE", "C_FALSE"]], - [["A_FALSE"], ["B_TRUE"]]], - - [[["B_TRUE"], - ["A_FALSE", "B_FALSE", "C_TRUE"], - ["A_FALSE", "B_FALSE", "C_FALSE"], - ["A_TRUE", "B_FALSE"]], - [["TRUE"]]], - - [[["A_TRUE", "B_TRUE"], - ["A_TRUE", "B_FALSE"], - ["A_TRUE", "C_FALSE", "D_FALSE"]], - [["A_TRUE"]]], - - [[["A_FALSE", "B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"], - ["A_FALSE", "B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"], - ["A_FALSE", "B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"], - ["A_FALSE", "B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"], - ["A_TRUE", "B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"], - ["A_TRUE", "B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"], - ["A_TRUE", "B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"], - ["A_TRUE", "B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"]], - [ ["B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"], - ["B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"], - ["B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"], - ["B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"]]], - - [[["A_FALSE", "B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"], - ["A_FALSE", "B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"], - ["A_FALSE", "B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"], - ["A_FALSE", "B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"], - ["A_TRUE", "B_TRUE", "C_FALSE", "D_FALSE", "E_FALSE"], - ["A_TRUE", "B_TRUE", "C_TRUE", "D_FALSE", "E_TRUE"], - ["A_TRUE", "B_FALSE", "C_TRUE", "D_TRUE", "E_TRUE"], - ["A_TRUE", "B_FALSE", "C_FALSE", "D_TRUE", "E_FALSE"], - ["A_FALSE", "B_FALSE", "C_FALSE", "D_FALSE", "E_FALSE"], - ["A_FALSE", "B_FALSE", "C_TRUE", "D_FALSE", "E_TRUE"], - ["A_FALSE", "B_TRUE", "C_TRUE", "D_TRUE", "E_TRUE"], - ["A_FALSE", "B_TRUE", "C_FALSE", "D_TRUE", "E_FALSE"], - ["A_TRUE", "B_TRUE", "C_FALSE", "D_TRUE", "E_FALSE"], - ["A_TRUE", "B_TRUE", "C_TRUE", "D_TRUE", "E_TRUE"], - ["A_TRUE", "B_FALSE", "C_TRUE", "D_FALSE", "E_TRUE"], - ["A_TRUE", "B_FALSE", "C_FALSE", "D_FALSE", "E_FALSE"]], - [["C_FALSE", "E_FALSE"], - ["C_TRUE", "E_TRUE"]]], - - [[["A_FALSE"], - ["A_TRUE", "B_FALSE"], - ["A_TRUE", "B_TRUE", "C_FALSE"], - ["A_TRUE", "B_TRUE", "C_TRUE", "D_FALSE"], - ["A_TRUE", "B_TRUE", "C_TRUE", "D_TRUE", "E_FALSE"], - ["A_TRUE", "B_TRUE", "C_TRUE", "D_TRUE", "E_TRUE", "F_FALSE"], - ["A_TRUE", "B_TRUE", "C_TRUE", "D_TRUE", "E_TRUE"]], - [["TRUE"]]], - - # Simplify should work with up to 31 variables. - [[["V01_TRUE", "V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE", - "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE", - "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE", - "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE", - "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE", - "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE", - "V31_TRUE"], - ["V01_TRUE", "V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE", - "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE", - "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE", - "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE", - "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE", - "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE", - "V31_FALSE"], - ["V01_FALSE","V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE", - "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE", - "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE", - "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE", - "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE", - "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE", - "V31_TRUE"], - ["V01_FALSE","V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE", - "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE", - "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE", - "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE", - "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE", - "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE", - "V31_FALSE"]], - [[ "V02_TRUE", "V03_TRUE", "V04_TRUE", "V05_TRUE", - "V06_TRUE", "V07_TRUE", "V08_TRUE", "V09_TRUE", "V10_TRUE", - "V11_TRUE", "V12_TRUE", "V13_TRUE", "V14_TRUE", "V15_TRUE", - "V16_TRUE", "V17_TRUE", "V18_TRUE", "V19_TRUE", "V20_TRUE", - "V21_TRUE", "V22_TRUE", "V23_TRUE", "V24_TRUE", "V25_TRUE", - "V26_TRUE", "V27_TRUE", "V28_TRUE", "V29_TRUE", "V30_TRUE" - ]]]); - - for my $t (@tests) - { - my $set = build_set @{$t->[0]}; - my $res = build_set @{$t->[1]}; - - # Make sure simplify() yields the expected result. - my $sim = $set->simplify; - if ($sim != $res) - { - print " (S1) " . $set->string . "\n\t" - . $sim->string . ' != ' . $res->string . "\n"; - return 1; - } - - # Make sure simplify() is idempotent. - my $sim2 = $sim->simplify; - if ($sim2 != $sim) - { - print " (S2) " . $sim->string . "\n\t" - . $sim2->string . ' != ' . $sim->string . "\n"; - return 1; - } - - # Also exercise invert() while we are at it. - - my $inv1 = $set->invert->simplify; - my $inv2 = $sim->invert->simplify; - if ($inv1 != $inv2) - { - print " (S3) " . $set->string . ", " . $sim->string . "\n\t" - . $inv1->string . ' != ' . $inv2->string . "\n"; - return 1; - } - } - - return 0; -} - -sub test_sub_conditions () -{ - my @tests = ([[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"], - ["FOO_FALSE"]], - ["FOO_TRUE"], - [["BAR_FALSE", "BAZ_FALSE"], - ["BAR_FALSE", "BAZ_TRUE"]]], - - [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"], - ["FOO_FALSE"]], - ["FOO_TRUE", "BAR_FALSE"], - [["BAZ_FALSE"], - ["BAZ_TRUE"]]], - - [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAR_FALSE", "BAZ_TRUE"], - ["FOO_FALSE"]], - ["FOO_TRUE", "BAR_TRUE"], - [["FALSE"]]], - - [[["FOO_TRUE", "BAR_FALSE", "BAZ_FALSE"], - ["FOO_TRUE", "BAZ_TRUE"], - ["FOO_FALSE"]], - ["FOO_TRUE", "BAR_TRUE"], - [["BAZ_TRUE"]]], - - [[["FOO_TRUE", "BAR_FALSE"], - ["FOO_TRUE", "BAR_TRUE"]], - ["FOO_TRUE", "BAR_TRUE"], - [["TRUE"]]], - - [[["TRUE"]], - ["TRUE"], - [["TRUE"]]], - - [[["FALSE"]], - ["TRUE"], - [["FALSE"]]], - - [[["FALSE"]], - ["FALSE"], - [["FALSE"]]]); - - for my $t (@tests) - { - my $t1 = build_set @{$t->[0]}; - my $t2 = new Automake::Condition @{$t->[1]}; - my $t3 = build_set @{$t->[2]}; - - # Make sure sub_conditions() yields the expected result. - my $s = $t1->sub_conditions ($t2); - if ($s != $t3) - { - print " (SC) " . $t1->string . "\n\t" - . $s->string . ' != ' . $t3->string . "\n"; - return 1; - } - } -} - -sub test_ambig () -{ - my @tests = ([[["TRUE"]], - ["TRUE"], - "multiply defined"], - [[["C1_TRUE"]], - ["C1_TRUE"], - "multiply defined"], - [[["TRUE"]], - ["C1_FALSE"], - "which includes"], - [[["C1_TRUE"]], - ["C1_TRUE", "C2_TRUE"], - "which includes"], - [[["C1_TRUE", "C2_TRUE"]], - ["C2_TRUE"], - "which is included in"], - [[["C1_TRUE"]], - ["C2_TRUE"], - ''], - [[["C1_TRUE"], - ["C2_FALSE"]], - ["C1_FALSE", "C2_TRUE"], - '']); - - for my $t (@tests) - { - my $t1 = build_set @{$t->[0]}; - my $t2 = new Automake::Condition @{$t->[1]}; - my $t3 = $t->[2]; - my ($ans, $cond) = $t1->ambiguous_p ("FOO", $t2); - if ($t3 && $ans !~ /FOO.*$t3/) - { - print " (A1) " . $t1->string . " vs. " . $t2->string . "\n\t" - . "Error message '$ans' does not match '$t3'\n"; - return 1; - } - if (!$t3 && $ans ne '') - { - print " (A2) " . $t1->string . " vs. " . $t2->string . "\n\t" - . "Unexpected error message: $ans\n"; - return 1; - } - } - return 0; -} - -exit (test_basics - || test_invert - || test_simplify - || test_sub_conditions - || test_ambig); - -### Setup "GNU" style for perl-mode and cperl-mode. -## Local Variables: -## perl-indent-level: 2 -## perl-continued-statement-offset: 2 -## perl-continued-brace-offset: 0 -## perl-brace-offset: 0 -## perl-brace-imaginary-offset: 0 -## perl-label-offset: -2 -## cperl-indent-level: 2 -## cperl-brace-offset: 0 -## cperl-continued-brace-offset: 0 -## cperl-label-offset: -2 -## cperl-extra-newline-before-brace: t -## cperl-merge-trailing-else: nil -## cperl-continued-statement-offset: 2 -## End: diff --git a/lib/Automake/tests/Makefile.am b/lib/Automake/tests/Makefile.am deleted file mode 100644 index a537fd1d7..000000000 --- a/lib/Automake/tests/Makefile.am +++ /dev/null @@ -1,33 +0,0 @@ -## Process this file with automake to create Makefile.in - -# Copyright (C) 2002, 2003, 2008, 2009, 2012 Free Software Foundation, -# Inc. - -# This program 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. - -# This program 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 this program. If not, see . - -PL_LOG_COMPILER = $(PERL) -AM_PL_LOG_FLAGS = -Mstrict -I ../.. -I $(top_srcdir)/lib -w -TEST_EXTENSIONS = .pl - -TESTS = \ -Condition.pl \ -Condition-t.pl \ -DisjConditions.pl \ -DisjConditions-t.pl \ -Version.pl \ -Wrap.pl - -EXTRA_DIST = $(TESTS) - -include $(top_srcdir)/CheckListOfTests.am diff --git a/lib/Automake/tests/Version.pl b/lib/Automake/tests/Version.pl deleted file mode 100644 index e49643519..000000000 --- a/lib/Automake/tests/Version.pl +++ /dev/null @@ -1,99 +0,0 @@ -# Copyright (C) 2002, 2003 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 this program. If not, see . - -use Automake::Version; - -my $failed = 0; - -sub test_version_compare -{ - my ($left, $right, $result) = @_; - my @leftver = Automake::Version::split ($left); - my @rightver = Automake::Version::split ($right); - if ($#leftver == -1) - { - print "can't grok \"$left\"\n"; - $failed = 1; - return; - } - if ($#rightver == -1) - { - print "can't grok \"$right\"\n"; - $failed = 1; - return; - } - my $res = Automake::Version::compare (@leftver, @rightver); - if ($res != $result) - { - print "compare (\"$left\", \"$right\") = $res! (not $result?)\n"; - $failed = 1; - } -} - -my @tests = ( -# basics - ['1.0', '2.0', -1], - ['2.0', '1.0', 1], - ['1.2', '1.2', 0], - ['1.1', '1.2', -1], - ['1.2', '1.1', 1], -# alphas - ['1.4', '1.4g', -1], - ['1.4g', '1.5', -1], - ['1.4g', '1.4', 1], - ['1.5', '1.4g', 1], - ['1.4a', '1.4g', -1], - ['1.5a', '1.3g', 1], - ['1.6a', '1.6a', 0], -# micros - ['1.5.1', '1.5', 1], - ['1.5.0', '1.5', 0], - ['1.5.4', '1.6.1', -1], -# micros and alphas - ['1.5a', '1.5.1', 1], - ['1.5a', '1.5.1a', 1], - ['1.5a', '1.5.1f', 1], - ['1.5', '1.5.1a', -1], - ['1.5.1a', '1.5.1f', -1], -# special exceptions - ['1.6-p5a', '1.6.5a', 0], - ['1.6', '1.6-p5a', -1], - ['1.6-p4b', '1.6-p5a', -1], - ['1.6-p4b', '1.6-foo', 1], - ['1.6-p4b', '1.6a-foo', -1] -); - -test_version_compare (@{$_}) foreach @tests; - -exit $failed; - -### Setup "GNU" style for perl-mode and cperl-mode. -## Local Variables: -## perl-indent-level: 2 -## perl-continued-statement-offset: 2 -## perl-continued-brace-offset: 0 -## perl-brace-offset: 0 -## perl-brace-imaginary-offset: 0 -## perl-label-offset: -2 -## cperl-indent-level: 2 -## cperl-brace-offset: 0 -## cperl-continued-brace-offset: 0 -## cperl-label-offset: -2 -## cperl-extra-newline-before-brace: t -## cperl-merge-trailing-else: nil -## cperl-continued-statement-offset: 2 -## End: diff --git a/lib/Automake/tests/Wrap.pl b/lib/Automake/tests/Wrap.pl deleted file mode 100644 index 8d840fc30..000000000 --- a/lib/Automake/tests/Wrap.pl +++ /dev/null @@ -1,80 +0,0 @@ -# Copyright (C) 2003 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 this program. If not, see . - -use Automake::Wrap 'wrap'; - -my $failed = 0; - -sub test_wrap -{ - my ($in, $exp_out) = @_; - - my $out = &wrap (@$in); - if ($out ne $exp_out) - { - print STDERR "For: @$in\nGot:\n$out\nInstead of:\n$exp_out\n---\n"; - ++$failed; - } -} - -my @tests = ( - [["HEAD:", "NEXT:", "CONT", 13, "v" ,"a", "l", "ue", "s", "values"], -"HEAD:v aCONT -NEXT:l ueCONT -NEXT:sCONT -NEXT:values -"], - [["rule: ", "\t", " \\", 20, "dep1" ,"dep2", "dep3", "dep4", "dep5", - "dep06", "dep07", "dep08"], -"rule: dep1 dep2 \\ -\tdep3 dep4 \\ -\tdep5 dep06 \\ -\tdep07 \\ -\tdep08 -"], - [["big header:", "big continuation:", " END", 5, "diag1", "diag2", "diag3"], -"big header:diag1 END -big continuation:diag2 END -big continuation:diag3 -"], - [["big header:", "cont: ", " END", 16, "word1", "word2"], -"big header: END -cont: word1 END -cont: word2 -"]); - - -test_wrap (@{$_}) foreach @tests; - -exit $failed; - -### Setup "GNU" style for perl-mode and cperl-mode. -## Local Variables: -## perl-indent-level: 2 -## perl-continued-statement-offset: 2 -## perl-continued-brace-offset: 0 -## perl-brace-offset: 0 -## perl-brace-imaginary-offset: 0 -## perl-label-offset: -2 -## cperl-indent-level: 2 -## cperl-brace-offset: 0 -## cperl-continued-brace-offset: 0 -## cperl-label-offset: -2 -## cperl-extra-newline-before-brace: t -## cperl-merge-trailing-else: nil -## cperl-continued-statement-offset: 2 -## End: -- cgit v1.2.1 From 52246cc7355cedbc9cb992095870572beb767ca1 Mon Sep 17 00:00:00 2001 From: Stefano Lattarini Date: Wed, 18 Jan 2012 17:55:40 +0100 Subject: cmdline parsing: move into a dedicated perl module With this change, we delegate most of the automake and aclocal code for command-line options parsing to a new module "Automake::Getopt". This allows better code sharing between automake and aclocal, and also with Autoconf, which will sync the new module from us. See also autoconf commit 'v2.68-120-gf4be358' (2012-01-17, "getopt: new Autom4te::Getopt module"), and this mailing list discussion: This change might interact with the behaviour described in automake bug#7434; for example, starting from now, "automake -Wfoo --version" will cause automake to emit diagnostic like "unknown warning category 'foo'" before actually printing the version number and exiting. This is not a big deal in practice, and the code sharing and simplifications introduced by this patch is certainly worth it. Still, we should revisited the issue in the future. * lib/Automake/Getopt.pm: New module, basically a slightly-edited copy of the 'lib/Autom4te/Getopt.pm' file from the autoconf devel repository (commit v2.68-120-gf4be358). It defines and exports ... (parse_options): ... this new function. * automake.in (parse_arguments): Use the new function. * aclocal.in (parse_arguments): Likewise. * lib/Automake/Makefile.am (dist_perllib_DATA): Add the new file. * tests/getopt.test: Remove. * tests/list-of-tests.mk: Update. --- lib/Automake/Getopt.pm | 115 +++++++++++++++++++++++++++++++++++++++++++++++ lib/Automake/Makefile.am | 1 + 2 files changed, 116 insertions(+) create mode 100644 lib/Automake/Getopt.pm (limited to 'lib/Automake') diff --git a/lib/Automake/Getopt.pm b/lib/Automake/Getopt.pm new file mode 100644 index 000000000..84cee5e4a --- /dev/null +++ b/lib/Automake/Getopt.pm @@ -0,0 +1,115 @@ +# Copyright (C) 2012 Free Software Foundation, Inc. + +# This program 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 3 of the License, or +# (at your option) any later version. + +# This program 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 this program. If not, see . + +package Automake::Getopt; + +=head1 NAME + +Automake::Getopt - GCS conforming parser for command line options + +=head1 SYNOPSIS + + use Automake::Getopt; + +=head1 DESCRIPTION + +Export a function C, performing parsing of command +line options in conformance to the GNU Coding standards. + +=cut + +use 5.006_002; +use strict; +use warnings FATAL => 'all'; +use Exporter (); +use Getopt::Long (); +use Automake::ChannelDefs qw/fatal/; +use Carp qw/croak confess/; + +use vars qw (@ISA @EXPORT); +@ISA = qw (Exporter); +@EXPORT= qw/getopt/; + +=item C + +Wrapper around C, trying to conform to the GNU +Coding Standards for error messages. + +=cut + +sub parse_options (%) +{ + my %option = @_; + + Getopt::Long::Configure ("bundling", "pass_through"); + # Unrecognized options are passed through, so GetOption can only fail + # due to internal errors or misuse of options specification. + Getopt::Long::GetOptions (%option) + or confess "error in options specification (likely)"; + + if (@ARGV && $ARGV[0] =~ /^-./) + { + my %argopts; + for my $k (keys %option) + { + if ($k =~ /(.*)=s$/) + { + map { $argopts{(length ($_) == 1) + ? "-$_" : "--$_" } = 1; } (split (/\|/, $1)); + } + } + if ($ARGV[0] eq '--') + { + shift @ARGV; + } + elsif (exists $argopts{$ARGV[0]}) + { + fatal ("option `$ARGV[0]' requires an argument\n" + . "Try `$0 --help' for more information."); + } + else + { + fatal ("unrecognized option `$ARGV[0]'.\n" + . "Try `$0 --help' for more information."); + } + } +} + +=back + +=head1 SEE ALSO + +L + +=cut + +1; # for require + +### Setup "GNU" style for perl-mode and cperl-mode. +## Local Variables: +## perl-indent-level: 2 +## perl-continued-statement-offset: 2 +## perl-continued-brace-offset: 0 +## perl-brace-offset: 0 +## perl-brace-imaginary-offset: 0 +## perl-label-offset: -2 +## cperl-indent-level: 2 +## cperl-brace-offset: 0 +## cperl-continued-brace-offset: 0 +## cperl-label-offset: -2 +## cperl-extra-newline-before-brace: t +## cperl-merge-trailing-else: nil +## cperl-continued-statement-offset: 2 +## End: diff --git a/lib/Automake/Makefile.am b/lib/Automake/Makefile.am index 980502462..ac9356a49 100644 --- a/lib/Automake/Makefile.am +++ b/lib/Automake/Makefile.am @@ -25,6 +25,7 @@ dist_perllib_DATA = \ DisjConditions.pm \ FileUtils.pm \ General.pm \ + Getopt.pm \ Item.pm \ ItemDef.pm \ Location.pm \ -- cgit v1.2.1 From 84fbf466f32d0e47291a91d620f7d4831bba34fe Mon Sep 17 00:00:00 2001 From: Stefano Lattarini Date: Fri, 20 Jan 2012 20:52:02 +0100 Subject: fixlet: flags for Fortran77 compiler are in FFLAGS, not F77FLAGS This change fixes automake bug#10555. Note that the bug was a minor one, since it didn't affect the compilation rules generated by automake, but only only the "hints" printed by automake in some error messages (e.g., "The usual way to define `FFLAGS' is to add AC_PROG_F77 to configure.ac"). * lib/Automake/Variable.pm (%_ac_macro_for_var): The code generated by AC_PROG_F77 uses FFLAGS, not F77FLAGS, as the variable where to look for switches for the Fortran 77 compiler: adjust accordingly. --- lib/Automake/Variable.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/Automake') diff --git a/lib/Automake/Variable.pm b/lib/Automake/Variable.pm index 686847d4f..8f712bd2c 100644 --- a/lib/Automake/Variable.pm +++ b/lib/Automake/Variable.pm @@ -181,7 +181,7 @@ my %_ac_macro_for_var = CXX => 'AC_PROG_CXX', CXXFLAGS => 'AC_PROG_CXX', F77 => 'AC_PROG_F77', - F77FLAGS => 'AC_PROG_F77', + FFLAGS => 'AC_PROG_F77', FC => 'AC_PROG_FC', FCFLAGS => 'AC_PROG_FC', OBJC => 'AC_PROG_OBJC', -- cgit v1.2.1