test harness: improve catching of usage errors in script 'test-driver'
[platform/upstream/automake.git] / t / dist-auxdir-many-subdirs.sh
1 #! /bin/sh
2 # Copyright (C) 2011-2013 Free Software Foundation, Inc.
3 #
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 2, or (at your option)
7 # any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17 # It should be legitimate for many subdir Makefiles to require the
18 # same config-aux files.
19
20 am_create_testdir=empty
21 required=cc
22 . test-init.sh
23
24 count=0
25 ocwd=$(pwd) || fatal_ "cannot get current working directory"
26
27 # Usage: do_check [--add-missing] [CONFIG-AUXDIR-PATH=.]
28 do_check ()
29 {
30   case $1 in
31     -a|--add-missing) add_missing=yes; shift;;
32     *) add_missing=no;;
33   esac
34   auxdir=${1-.}
35
36   count=$(($count + 1))
37   mkdir T$count.d
38   cd T$count.d
39
40   distdir=$me-$count
41   unindent > configure.ac << END
42     AC_INIT([$me], [$count])
43     AC_CONFIG_AUX_DIR([$auxdir])
44     AM_INIT_AUTOMAKE
45     AC_PROG_CC
46     # We don't want to require python or emcas in this test, so
47     # the tricks below.
48     AM_PATH_PYTHON([2.2], [], [:])
49     EMACS=no; AM_PATH_LISPDIR
50     AC_CONFIG_FILES([Makefile])
51 END
52
53   unindent > Makefile.stub <<'END'
54     ## For depcomp.
55     bin_PROGRAMS = foo
56     foo_SOURCES = foo.c
57     ## For py-compile.
58     python_PYTHON = bar.py
59     ## For test-driver.
60     TESTS =
61 END
62
63   required_files='
64     install-sh
65     missing
66     compile
67     depcomp
68     py-compile
69     test-driver
70   '
71
72   echo "SUBDIRS =" > Makefile.am
73
74   suffixes='0 1 2 3 4 5 6 7 8 9'
75
76   for x in $suffixes; do
77     mkdir sub$x
78     echo "SUBDIRS += sub$x" >> Makefile.am
79     echo "AC_CONFIG_FILES([sub$x/Makefile])" >> configure.ac
80     cp Makefile.stub sub$x/Makefile.am
81     echo 'int main (void) { return 0; }' > sub$x/foo.c
82     touch sub$x/bar.py sub$x/baz.el
83   done
84   echo AC_OUTPUT >> configure.ac
85
86   $ACLOCAL
87   $AUTOCONF
88
89   "$am_scriptdir"/install-sh -d $auxdir \
90     || fatal_ "creating directory '$auxdir' with install-sh"
91   if test $add_missing = yes; then
92     $AUTOMAKE -a --copy
93     for f in $required_files; do
94       test -f $auxdir/$f
95       # To ensure that if a auxiliary file is required and distributed
96       # by many Makefiles, the "dist" rule won't try to copy it multiple
97       # times in $(distdir).
98       chmod a-w $auxdir/$f
99     done
100   else
101     for f in $required_files; do
102       cp "$am_scriptdir"/$f $auxdir/$f \
103         || fatal_ "faild to fetch auxiliary script '$f'"
104       # See comments above.
105       chmod a-w $auxdir/$f
106     done
107     $AUTOMAKE
108   fi
109
110   for vpath in : false; do
111     if $vpath; then
112       mkdir build
113       cd build
114       srcdir=..
115     else
116       srcdir=.
117     fi
118     $srcdir/configure
119     $MAKE distdir
120     find $distdir # For debugging.
121     for f in $required_files; do
122       test -f $distdir/$auxdir/$f
123     done
124     cd $srcdir
125   done
126
127   cd "$ocwd" || fatal_ "cannot chdir back to '$ocwd'"
128 }
129
130 do_check .
131 do_check --add-missing .
132 do_check build-aux
133 do_check --add-missing build-aux
134 do_check a/b/c
135 do_check --add-missing a/b/c
136
137 :