#! /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 :