#! /bin/sh
# Copyright (C) 2015-2021 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 .
# Expose part of automake bug#13928, also for non-C languages: if the
# subdir-objects option is in use and a source file is listed in a
# _SOURCES variable with a leading $(srcdir) component, Automake will
# generate a Makefile that tries to create the corresponding object
# file in $(srcdir) as well.
required='cc c++ fortran77 fortran'
. test-init.sh
cat >> configure.ac <<'END'
AC_PROG_CC
AC_PROG_CXX
AC_PROG_F77
AC_PROG_FC
AM_CONDITIONAL([OBVIOUS], [:])
AC_CONFIG_FILES([sub/Makefile])
AC_OUTPUT
END
cat > Makefile.am <<'END'
AUTOMAKE_OPTIONS = subdir-objects
SUBDIRS = sub
LESS = m/o/r/e
noinst_PROGRAMS = test test2
test_SOURCES = $(srcdir)/test.f90
test2_SOURCES = $(indir)
indir = ${indir2} $(empty)
indir2 =
if OBVIOUS
indir2 += ${srcdir}/$(LESS)///test.f
else
endif
test-objs:
ls -la @srcdir@ .
:
test ! -f @srcdir@/test.$(OBJEXT)
test -f test.$(OBJEXT)
test ! -f @srcdir@/m/o/r/e/test.$(OBJEXT)
test -f m/o/r/e/test.$(OBJEXT)
:
test ! -f @srcdir@/bar.$(OBJEXT)
test -f bar.$(OBJEXT)
test ! -f @srcdir@/baz.$(OBJEXT)
test -f baz.$(OBJEXT)
:
test ! -d @srcdir@/$(DEPDIR)
test ! -d @srcdir@/m/o/r/e/$(DEPDIR)
test -d $(DEPDIR)
test -d m/o/r/e/$(DEPDIR)
check-local: test-objs
END
mkdir sub
cat > sub/Makefile.am <<'END'
AUTOMAKE_OPTIONS = subdir-objects
bin_PROGRAMS = foo
foo = baz
foo_SOURCES = foo.h \
$(top_srcdir)/bar.cc \
${top_srcdir}/$(foo).c
END
$ACLOCAL
$AUTOCONF
$AUTOMAKE -a
mkfiles='Makefile.in sub/Makefile.in'
$EGREP '(test|ba[rz])\.|DEPDIR|dirstamp|srcdir' $mkfiles # For debugging.
$EGREP '\$.(top_)?srcdir./(test|ba[rz]|\$.foo.)\.[o$]' $mkfiles && exit 1
$FGREP '\$.(top_)?srcdir./.*$(am__dirstamp)' $mkfiles && exit 1
$FGREP '\$.(top_)?srcdir./.*$(DEPDIR)' $mkfiles && exit 1
cat > test.f90 <<'EOF'
program foo
stop
end
EOF
mkdir -p m/o/r/e
cp test.f90 m/o/r/e/test.f
cat > sub/foo.h <<'END'
#ifdef __cplusplus
extern "C"
#endif
int foo (void);
END
cat > bar.cc <<'END'
#include "foo.h"
#include
int main (void)
{
std::cout << "OK!" << "\n";
return foo ();
}
END
cat > baz.c <<'END'
#include "foo.h"
int foo (void)
{
return 0;
}
END
mkdir build
cd build
../configure
$MAKE
$MAKE test-objs
$MAKE distcheck
: