#! /bin/sh
# mdemo-dryrun.test - check whether the --dry-run mode works properly
#
#   Copyright (C) 2003, 2004 Free Software Foundation, Inc.
#   Written 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.
####

. tests/defs || exit 1

func_require "mdemo-conf" "tests/mdemo/Makefile"

func_mkprefixdir
func_cd "tests/mdemo"
func_make "clean"

# create `before' and `after' in a directory deep within objdir,
# so that their creation and removal does not modify even a timestamp
# in the output of `ls -l . $objdir'
func_mkdir_p "$objdir/temp/temp"
before=$objdir/temp/temp/before
after=$objdir/temp/temp/after

# Create a new libtool script that will enter dry run if the environment
# variable force_dry_run is set
rm -f $objdir/libtool.new
sed 's/^opt_dry_run=.*$/opt_dry_run=${force_dry_run-false}/' < libtool > $objdir/libtool.new
chmod +x $objdir/libtool.new
mv libtool $objdir/libtool
mv $objdir/libtool.new libtool

# main.o is not compiled with libtool, but it depends on it, so make
# sure it is up-to-date.  libfoo2.la is linked with libsub.la, so make
# sure it exists, otherwise libtool will complain.
func_make main.$objext

func_msg "Making object files in mdemo (dry run)"
# ls -l in MSYS sometimes shows year, not time, for really fresh files.
sleep 1
ls -l . $objdir | grep -v total > $before
force_dry_run=: $MAKE foo1.lo foo2.lo sub.lo || exit $?
ls -l . $objdir | grep -v total > $after
cmp $before $after > /dev/null || exit 1
# Now really make them
func_make foo1.lo foo2.lo libsub.la

func_msg "Making libraries in mdemo (dry run)"
# ls -l in MSYS sometimes shows year, not time, for really fresh files.
sleep 1
ls -l . $objdir | grep -v total > $before
force_dry_run=: $MAKE foo1.la libfoo2.la || exit $?
ls -l . $objdir | grep -v total > $after
cmp $before $after > /dev/null || exit 1
# Now really make them
func_make foo1.la libfoo2.la

func_msg "Making programs in ../mdemo (dry run)"
# ls -l in MSYS sometimes shows year, not time, for really fresh files.
sleep 1
ls -l . $objdir | grep -v total > $before
force_dry_run=: $MAKE mdemo$EXEEXT mdemo_static$EXEEXT 1>&2 || exit $?
ls -l . $objdir | grep -v total > $after
cmp $before $after > /dev/null || exit 1
# Now really make them
func_make mdemo$EXEEXT mdemo_static$EXEEXT

func_msg "Running $MAKE install in ../mdemo (dry run)"
# Libtool does not create these directories
func_mkdir_p "$prefix/bin"
func_mkdir_p "$prefix/lib"
# ls -l in MSYS sometimes shows year, not time, for really fresh files.
sleep 1
ls -l . $objdir | grep -v total > $before
ls -lR $prefix | grep -v total >> $before
force_dry_run=: $MAKE install 1>&2 || exit 1
ls -l . $objdir | grep -v total > $after
ls -lR $prefix | grep -v total >> $after
cmp $before $after > /dev/null || exit 1
# Now really run it
func_make install

func_msg "Running $MAKE uninstall in ../mdemo (dry run)"
# Libtool does not uninstall the programs, remove them first
rm -f "$prefix/bin/mdemo$EXEEXT" "$prefix/bin/mdemo_static$EXEEXT"
ls -l . $objdir | grep -v total > $before
ls -lR $prefix | grep -v total >> $before
force_dry_run=: $MAKE uninstall 1>&2 || exit $?
ls -l . $objdir | grep -v total > $after
ls -lR $prefix | grep -v total >> $after
cmp $before $after > /dev/null || exit 1
# Now really run it
func_make uninstall

rm -f $before $after libtool
mv $objdir/libtool libtool

exit 0
