#! /bin/sh # Copyright (C) 2012-2015 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 . # Due to how the handling of $(BUILT_SOURCES) is implemented in Automake-NG, # a recursive make call in the recipe of any $(BUILT_SOURCES) (or of any of # its prerequisites) might cause an infinite recursion (complete with fork # bomb, yuck) if not handled correctly. Verify that this doesn't happen. # For more background, see: # # # Backported to improve coverage of mainline Automake. required=GNUmake . test-init.sh echo AC_OUTPUT >> configure.ac cat > Makefile.am << 'END' BUILT_SOURCES = foo .PHONY: build-foo build-foo: echo OK > foo foo: $(MAKE) build-foo # If the bug is still present, we want this test to fail, not to actually # go fork bomb and potentially crash the user machine. Take care of that. is_too_deep := $(shell test $(MAKELEVEL) -lt 10 && echo no) ## Extra indentation here required to avoid confusing Automake. ifeq ($(is_too_deep),no) # All is ok. else $(error ::OOPS:: Recursion too deep, $(MAKELEVEL) levels) endif END $ACLOCAL $AUTOMAKE -Wno-portability $AUTOCONF ./configure run_make -M -- -n foo test ! -f foo # Guard against possible infinite recursion. $FGREP '::OOPS::' output && exit 1 run_make -M -- foo # Guard against possible infinite recursion. $FGREP '::OOPS::' output && exit 1 :