summaryrefslogtreecommitdiff
path: root/tests/defs.m4sh
blob: 4d66ceca303dab45419b0545db3b127717c600b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
AS_INIT[]m4_divert_push([HEADER-COPYRIGHT])
# defs -- Defines for Libtool testing environment.
#
#   Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software
#   Foundation, Inc.
#   Written by Gord Matzigkeit, 1996
#   Rewritten by Gary V. Vaughan, 2003
#
#   This file is part of GNU Libtool.
#
# GNU Libtool 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 of
# the License, or (at your option) any later version.
#
# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
# can be downloaded from  http://www.gnu.org/licenses/gpl.html,
# or obtained by writing to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
####

m4_divert_pop
m4_include([general.m4sh])

M4SH_VERBATIM([[
: ${AUTOCONF="autoconf"}
: ${AUTORECONF="autoreconf"}
: ${LIBTOOL="./libtool"}

# Sed that helps us avoid accidentally triggering echo(1) options like -n.
Xsed="$SED -e 1s/^X//"

# Disable usage of config.site for autoconf, unless DJGPP is present.
# The DJGPP port of autoconf requires config.site, to work correctly.
if test -z "$DJGPP"; then
    CONFIG_SITE=/nonexistent
fi

# How verbose should we be?  Default is test output in log file.
# Setting VERBOSE=debug puts the shell in debug mode.
debug_cmd=:
case $VERBOSE in
DEBUG | debug )
  debug_cmd='set -x'
  $debug_cmd
  ;;
esac

# func_msg arg...
# Echo message with prefix.
func_msg ()
{
    func_echo "=== " ${1+"$@"}
}

# func_skip arg...
# Echo message to standard error, and skip the rest of this test.
func_skip ()
{
    func_error ${1+"$@"}
    exit $EXIT_SKIP
}

# func_fail arg...
# Echo message to standard error, and fail this test.
func_fail ()
{
    func_fatal_error ${1+"$@"}
}

# func_get_config varname_list src [failp] [regex]
func_get_config ()
{
  $debug_cmd

  my_varname_list=$1
  my_src=$2
  my_failp=false;  test -z "$3" || my_failp=:
  my_regex=$4

  my_exitp=false
  if test -z "$my_regex"; then
    my_regex='^('
    my_build_regex=:
  else
    my_build_regex=false
  fi
  my_first=:

  for my_varname in $my_varname_list; do
    if $my_build_regex; then
      $my_first || my_regex="$my_regex|"
      my_first=false
      my_regex=$my_regex$my_varname
    fi
    eval $my_varname=NONE
  done
  $my_build_regex && my_regex="$my_regex)="
  eval `eval "$my_src" | eval "$EGREP \"$my_regex\""`

  for my_varname in $my_varname_list; do
    if eval test x\"\$$my_varname\" = xNONE; then
      func_error "$my_varname not set in \`$my_src'"
      $my_failp && my_exitp=:
    fi
  done

  $my_exitp && exit $EXIT_FAILURE
}


# Extract some variables from the libtool configuration.
func_get_config "objext
objdir
CC
host
host_os
host_alias
build
build_alias" "$LIBTOOL --config" ": fatal"


# func_mkprefixdir
func_mkprefixdir ()
{
    $debug_cmd

    # An absolute path to a test installation directory.
    func_mkdir_p "$prefix"
    prefix=`cd $prefix && pwd`
}

# func_rmprefixdir
func_rmprefixdir ()
{
    $debug_cmd

    test -d $prefix && rm -rf $prefix
    prefix=NONE
}

# func_cd dir
# Make sure a directory exists, and then change to it.
func_cd ()
{
    $debug_cmd

    my_dir=$1

    # Maybe we have a VPATH build, in which case, create a new subdir.
    func_mkdir_p "$my_dir"

    # Change to our build directory.
    cd "$my_dir" || func_fatal_error "couldn't cd to \`$my_dir'"
}


# func_require prereq file [...]
# If FILE does not exist, give a fatal error regarding running PREREQ first.
func_require ()
{
    $debug_cmd

    my_prereq=$1; shift
    my_files=${1+"$@"}

    for my_file in $my_files; do
      test -f "$my_file" \
        || func_skip "You must run ${my_prereq}.test before running $0"
    done
}

# func_configure_nofail [args ...]
# Configure the demonstration.
func_configure_nofail ()
{
    $debug_cmd

    my_args=${1+"$@"}
    func_dirname_and_basename "`pwd`"
    my_dir=$func_basename_result
    my_testdir=$abs_srcdir/tests/$my_dir
    conf_status=$EXIT_FAILURE

    test -n "$my_args" && my_args=" $my_args"
    my_args=--srcdir=\"$my_testdir\"" "--prefix=\"$prefix\"$my_args
    test -n "$host_alias" && my_args=$my_args" "--host=\"$host_alias\"
    test -n "$build_alias" && my_args=$my_args" "--build=\"$build_alias\"

    func_msg "Configuring in $my_dir"

    test -f "$my_testdir/configure" || ${AUTORECONF} --force --install $my_testdir
    if test -f "$my_testdir/configure"; then

      eval func_msg $SHELL "$my_testdir/configure" $my_args
      if eval $SHELL "$my_testdir/configure" $my_args; then
	conf_status=$EXIT_SUCCESS
      else
	func_msg "FAILED: Configuring in $my_testdir"
	ls -ltr $my_testdir
      fi
    fi
}

# func_configure [args ...]
# Configure the demonstration, fail on error.
func_configure ()
{
    func_configure_nofail ${1+"$@"}
    if test "$conf_status" -eq "$EXIT_FAILURE"; then
      exit $EXIT_FAILURE
    fi
}

# func_check_static_shared staticp sharedp
# Determine whether the generated libtool script is configured properly
# for the expected STATICP and SHAREDP library building
func_check_static_shared ()
{
    $debug_cmd

    my_staticp=$1
    my_sharedp=$2

    if func_grep "^build_old_libs=$staticp" libtool &&
       func_grep "^build_libtool_libs=$sharedp" libtool; then :
    else
      rm -f Makefile
      exit $EXIT_FAIL
    fi
}


# func_make [args ...]
# Do the actual build.
func_make ()
{
    $debug_cmd

    my_args=${1+"$@"}
    func_dirname_and_basename "`pwd`"
    func_msg "Running \`$MAKE $my_args' in $func_basename_result"

    eval $MAKE $my_args || exit $EXIT_FAIL
}


# func_distclean
# Possibly clean up the distribution.
func_make_distclean ()
{
    $debug_cmd

    if test -f Makefile; then
      func_make distclean
    fi
    rm -rf autom4te.cache config.cache
}


# func_make_uninstall
# See that there were no files leftover in $prefix.
# Ignore dotfiles, so that .nfsXXX files don't screw up the test.
func_make_uninstall ()
{
    $debug_cmd

    func_make uninstall

    leftovers=`find $prefix ! -type d ! -name '.*' -print`
    if test -n "$leftovers"; then
      func_msg "Leftover after make uninstall:"
      ls -l $leftovers
      exit 1
    fi
}


# func_exec_init mode
func_exec_init ()
{
    $debug_cmd

    func_dirname_and_basename "`pwd`"
    func_msg "Executing $1 programs in $func_basename_result"

    # Windows hosts search for dlls in the command path
    PATH=$prefix/lib:$PATH

    exec_status=$EXIT_SUCCESS
}

# func_exec_check program [msg ...]
# Check to see if PROGRAM was built. If not display MSG.
func_exec_check ()
{
    $debug_cmd

    my_program=$1

    if test -f "$my_program"; then :
    else
      shift
      func_error "$0: $my_program did not build ${1+$@}"
      exec_status=$EXIT_FAILURE
    fi
}

# func_exec program [exp_output] [msg ...]
# Check to see if PROGRAM really runs, and produces EXP_OUTPUT if given.
# If not display MSG.
func_exec ()
{
    $debug_cmd

    my_program=$1
    my_exp_output=$2
    func_dirname_and_basename "`pwd`"
    my_dir=$func_basename_result

    test -n "$my_exp_output" \
      && my_exp_output="| $EGREP -e "\"$my_exp_output\"

    if eval $my_program $my_exp_output; then :
    else
      shift
      test "x$1" = x || shift
      func_error "$0: cannot execute $my_program ${1+$@}"

      if test "$build" != "$host"; then
        func_msg "This may be ok since you seem to be cross-compiling."
	exec_status=$EXIT_SKIP
      else
	# Simple check to see if they are superuser.
	if test $exec_status = $EXIT_FAILURE || test -w /; then :
	else
	  func_msg "You may need to run $0 as the superuser."
	fi
	exec_status=$EXIT_FAILURE
      fi
    fi
}

# Shared global variables for test scripts
prefix=./_inst-`echo "$0" | sed 's,.*/,,; s,-.*,,'`
abs_srcdir=`cd '@srcdir@' && pwd`
abs_macro_dir=`cd '@srcdir@/@macro_dir@' && pwd`
abs_aux_dir=`cd '@srcdir@/@aux_dir@' && pwd`
scripts="$abs_aux_dir/ltmain.m4sh $abs_srcdir/libtoolize.m4sh"

# Unset some MAKE... variables that may cause $MAKE to act like a
# recursively invoked sub-make.  Any $MAKE invocation in a test is
# conceptually an independent invocation.
unset MFLAGS MAKEFLAGS MAKELEVEL __MKLVL__ MAKE_JOBS_FIFO

# On AIX, shared libraries remain loaded in memory after use if they
# are world-readable, until root issues slibclean.  On NFS, this causes
# a testsuite rerun to fail to clean up test group directories.  Avoid
# this with a suitable umask.  Do not do this on other systems, for
# example HP-UX suffers unless shared libraries are mode 555.
case $host_os in
aix*) umask o-rwx ;;
esac

func_msg "Running $progname"

# Local Variables:
# mode:shell-script
# sh-indentation:2
# End:
]])