$NetBSD: patch-ak,v 1.4 2023/02/22 07:44:55 wiz Exp $

The standard says that failing () doesn't stop the shell, even when -e
is set, so () constructs need || exit $? on the end. (Which needs to be
$$? when it's coming from inside make.)

--- Imake.rules.orig	2023-02-22 02:28:43.000000000 +0000
+++ Imake.rules
@@ -534,9 +534,9 @@ clean cleantc::								@@\
 		set +x; \						@@\
 	else \								@@\
 		if [ -h dir ]; then \					@@\
-			(set -x; rm -f dir); \				@@\
+			(set -x; rm -f dir) || exit $$?; \		@@\
 		fi; \							@@\
-		(set -x; $(MKDIRHIER) dir); \				@@\
+		(set -x; $(MKDIRHIER) dir) || exit $$?; \		@@\
 	fi
 #endif /* MakeDir */
 
@@ -545,9 +545,9 @@ clean cleantc::								@@\
 		:; \							@@\
 	else \								@@\
 		if [ -h dir ]; then \					@@\
-			(set -x; rm -f dir); \				@@\
+			(set -x; rm -f dir) || exit $$?; \		@@\
 		fi; \							@@\
-		(set -x; $(MKDIRHIER) dir); \				@@\
+		(set -x; $(MKDIRHIER) dir) || exit $$?; \		@@\
 	fi
 #endif /* MakeDirInline */
 
@@ -571,7 +571,7 @@ includes:: srclist							@@\
 	@(set -x; cd $(BUILDINCDIR) && for i in srclist; do \		@@\
 		RemoveFile($$i); \					@@\
 		$(LN) $(BUILDINCTOP)/$(CURRENT_DIR)/$$i .; \		@@\
-	done)
+	done) || exit $$?
 #endif /* BuildIncludesTop */
 
 #ifndef BuildIncludes
@@ -581,7 +581,7 @@ includes:: srclist							@@\
 	@(set -x; cd $(BUILDINCDIR)/dstsubdir && for i in srclist; do \	@@\
 		RemoveFile($$i); \					@@\
 		$(LN) $(BUILDINCTOP)/dstupdir/$(CURRENT_DIR)/$$i .; \	@@\
-	done)
+	done) || exit $$?
 #endif /* BuildIncludes */
 
 /*
@@ -604,7 +604,7 @@ interfaces::								@@\
 	@(set -x; cd $(BUILDINCDIR)/dstsubdir && for i in srclist; do \	@@\
 		RemoveFile($$i); \					@@\
 		$(LN) $(BUILDINCTOP)/dstupdir/$(CURRENT_DIR)/$$i .; \	@@\
-	done)
+	done) || exit $$?
 #endif /* BuildInterfaces */
 
 /*
@@ -1280,20 +1280,18 @@ InstallTarget(install.ln,Concat(llib-l,l
  * (the limit for using source code control systems on files systems with
  * short file names).
  */
-#ifndef InstallManPageLong
+#undef InstallManPageLong
 #define	InstallManPageLong(file,destdir,dest)				@@\
 BuildInstallHtmlManPage(file,dest,$(MANSUFFIX))				@@\
 									@@\
 CppManTarget(file,$(EXTRAMANDEFS))					@@\
 									@@\
 InstallNamedTarget(install.man,file.$(MANNEWSUFFIX),$(INSTMANFLAGS),destdir,dest.$(MANSUFFIX))
-#endif /* InstallManPageLong */
-
 
 /*
  * InstallManPageAliases - generate rules to install manual page aliases.
  */
-#ifndef InstallManPageAliases
+#undef InstallManPageAliases
 #define	InstallManPageAliases(file,destdir,aliases)			@@\
 InstallHtmlManPageAliases(file,aliases,$(MANSUFFIX))			@@\
 									@@\
@@ -1302,17 +1300,15 @@ install.man::								@@\
 	RemoveFile($${TMP}); \						@@\
 	echo .so `basename destdir`/file.$(MANSUFFIX) > $${TMP}; \	@@\
 	for i in aliases; do (set -x; \					@@\
-	$(INSTALL) $(INSTALLFLAGS) $(INSTMANFLAGS) $${TMP} $(DESTDIR)destdir/$$i.$(MANSUFFIX)); \ @@\
+	$(INSTALL) $(INSTALLFLAGS) $(INSTMANFLAGS) $${TMP} $(DESTDIR)destdir/$$i.$(MANSUFFIX)) || exit $$?; \ @@\
 	done; \								@@\
 	RemoveFile($${TMP}))
-#endif /* InstallManPageAliases */
-
 
 /*
  * InstallGenManPageLong - More general rules for installing manual pages --
  * doesn't assume MANSUFFIX.
  */
-#ifndef InstallGenManPageLong
+#undef InstallGenManPageLong
 #define	InstallGenManPageLong(file,destdir,dest,suffix)			@@\
 BuildInstallHtmlManPage(file,dest,suffix)				@@\
 									@@\
@@ -1322,13 +1318,11 @@ install.man:: file.$(MANNEWSUFFIX)					@
 	MakeDir($(DESTDIR)destdir)					@@\
 	$(INSTALL) -c $(INSTMANFLAGS) file.$(MANNEWSUFFIX) \		@@\
 		$(DESTDIR)destdir/dest.suffix
-#endif /* InstallGenManPageLong */
-
 
 /*
  * InstallGenManPageAliases - general equivalent of InstallManPageAliases
  */
-#ifndef InstallGenManPageAliases
+#undef InstallGenManPageAliases
 #define	InstallGenManPageAliases(file,destdir,suffix,aliases)		@@\
 InstallHtmlManPageAliases(file,aliases,suffix)				@@\
 									@@\
@@ -1337,14 +1331,13 @@ install.man::								@@\
 	RemoveFile($${TMP}); \						@@\
 	echo .so `basename destdir`/file.suffix > $${TMP}; \		@@\
 	for i in aliases; do (set -x; \					@@\
-	$(INSTALL) $(INSTALLFLAGS) $(INSTMANFLAGS) $${TMP} $(DESTDIR)destdir/$$i.suffix); \ @@\
+	$(INSTALL) $(INSTALLFLAGS) $(INSTMANFLAGS) $${TMP} $(DESTDIR)destdir/$$i.suffix) || exit $$?; \ @@\
 	done; \								@@\
 	RemoveFile($${TMP}))
-#endif /* InstallGenManPageAliases */
 
 #else /* CompressManPages */
 
-#ifndef InstallManPageLong
+#undef InstallManPageLong
 #define InstallManPageLong(file,destdir,dest)				@@\
 BuildInstallHtmlManPage(file,dest,$(MANSUFFIX))				@@\
 									@@\
@@ -1356,9 +1349,8 @@ install.man:: file.$(MANNEWSUFFIX)					@
 	$(INSTALL) -c $(INSTMANFLAGS) file.$(MANNEWSUFFIX) \		@@\
 	  $(DESTDIR)destdir/dest.$(MANSUFFIX)				@@\
 	-$(COMPRESSMANCMD) $(DESTDIR)destdir/dest.$(MANSUFFIX)
-#endif
 
-#ifndef InstallGenManPageLong
+#undef InstallGenManPageLong
 #define InstallGenManPageLong(file,destdir,dest,suffix)			@@\
 BuildInstallHtmlManPage(file,dest,suffix)				@@\
 									@@\
@@ -1370,9 +1362,8 @@ install.man:: file.$(MANNEWSUFFIX)					@
 	$(INSTALL) -c $(INSTMANFLAGS) file.$(MANNEWSUFFIX) \		@@\
 	  $(DESTDIR)destdir/dest.suffix					@@\
 	-$(COMPRESSMANCMD) $(DESTDIR)destdir/dest.suffix
-#endif
 
-#ifndef InstallMultipleMan
+#undef InstallMultipleMan
 #define InstallMultipleMan(list,dest)					@@\
 install.man:: list							@@\
 	MakeDir($(DESTDIR)dest)						@@\
@@ -1385,39 +1376,35 @@ install.man:: list							@@\
 		  $(DESTDIR)dest/$${MNAME}.$(MANSUFFIX); \		@@\
 		$(COMPRESSMANCMD) $(DESTDIR)dest/$${MNAME}.$(MANSUFFIX)); \ @@\
 	done
-#endif
 
 /*
  * InstallManPageAliases - install soft links for aliases.
  */
-#ifndef InstallManPageAliasesBase
+#undef InstallManPageAliasesBase
 #define InstallManPageAliasesBase(file,destdir,aliases)			@@\
 install.man::								@@\
 	@(SUFFIX=`echo $(DESTDIR)destdir/file.* | sed -e 's,.*/[^\.]*.,,'`; \ @@\
 	for i in aliases; do (set -x; \					@@\
 	$(RM) $(DESTDIR)destdir/$$i.*; \				@@\
 	(cd $(DESTDIR)destdir; $(LN) file.$${SUFFIX} \			@@\
-	$$i.$${SUFFIX})); \						@@\
-	done)
-#endif
+	$$i.$${SUFFIX}) || exit $$?) || exit $$?; \			@@\
+	done) || exit $$?
 
-#ifndef InstallManPageAliases
+#undef InstallManPageAliases
 #define InstallManPageAliases(file,destdir,aliases)			@@\
 InstallHtmlManPageAliases(file,aliases,$(MANSUFFIX))			@@\
 									@@\
 InstallManPageAliasesBase(file,destdir,aliases)
-#endif
 
 
 /*
  * InstallGenManPageAliases - install soft links for aliases.
  */
-#ifndef InstallGenManPageAliases
+#undef InstallGenManPageAliases
 #define InstallGenManPageAliases(file,destdir,suffix,aliases)		@@\
 InstallHtmlManPageAliases(file,aliases,suffix)				@@\
 									@@\
 InstallManPageAliasesBase(file,destdir,aliases)
-#endif
 
 #endif /* CompressManPages */
 
@@ -1425,19 +1412,17 @@ InstallManPageAliasesBase(file,destdir,a
 /*
  * InstallManPage - generate rules to install the indicated manual page.
  */
-#ifndef InstallManPage
+#undef InstallManPage
 #define	InstallManPage(file,destdir)					@@\
 InstallManPageLong(file,destdir,file)
-#endif /* InstallManPage */
 
 
 /*
  * InstallGenManPage - general equivalent of InstallManPage
  */
-#ifndef InstallGenManPage
+#undef InstallGenManPage
 #define	InstallGenManPage(file,destdir,suffix)				@@\
 InstallGenManPageLong(file,destdir,file,suffix)
-#endif /* InstallGenManPage */
 
 
 /*
@@ -1499,7 +1484,8 @@ install.man:: file.suffix.html						@@\
 	for i in aliases; do (set -x; \					@@\
 	  RemoveFile($(DESTDIR)$(DOCHTMLDIR)/$$i.$$SUF.html); \		@@\
 	  (cd $(DESTDIR)$(DOCHTMLDIR); \				@@\
-	    $(LN) file.$$SUF.html $$i.$$SUF.html)); \			@@\
+	    $(LN) file.$$SUF.html $$i.$$SUF.html) || exit $$? \		@@\
+	) || exit $$?; \						@@\
 	done
 #else
 #define InstallHtmlManPageAliases(file,aliases,suffix) /**/
@@ -1681,7 +1667,7 @@ InstallNamedTargetNoClobber(install,srcn
 #ifndef MakeNamedTargetSubdir
 #define MakeNamedTargetSubdir(dir,flags,subname)\
 		(cd dir && $(MAKE) $(MFLAGS) $(PARALLELMFLAGS) \	@@\
-			flags subname)
+			flags subname) || exit $$?
 #endif
 
 /*
@@ -1692,7 +1678,7 @@ InstallNamedTargetNoClobber(install,srcn
 step::									@@\
 	@MakeFlagsToShellFlags(i,set +e); \				@@\
 	echo "	cd" dir; cd dir && \					@@\
-	for i in list; do (set -x; $(LN) -f sub/$$i .); done
+	for i in list; do (set -x; $(LN) -f sub/$$i .) || exit $$?; done
 #endif
 
 
@@ -1809,7 +1795,7 @@ step:: list								@@\
 	MakeDir($(DESTDIR)dest)						@@\
 	@MakeFlagsToShellFlags(i,set +e); \				@@\
 	for i in list; do \						@@\
-		(set -x; $(INSTALL) $(INSTALLFLAGS) flags $$i $(DESTDIR)dest); \	@@\
+		(set -x; $(INSTALL) $(INSTALLFLAGS) flags $$i $(DESTDIR)dest) || exit $$?; \	@@\
 	done
 #endif /* InstallMultipleDestFlags */
 
@@ -1876,7 +1862,7 @@ install.man::								@@\
 	MakeDir($(DESTDIR)dest)						@@\
 	@MakeFlagsToShellFlags(i,set +e); \				@@\
 	for i in list; do \						@@\
-	  (set -x; $(INSTALL) $(INSTALLFLAGS) $(INSTMANFLAGS) $$i.suffix $(DESTDIR)dest/$$i.$(MANSUFFIX)); \	@@\
+	  (set -x; $(INSTALL) $(INSTALLFLAGS) $(INSTMANFLAGS) $$i.suffix $(DESTDIR)dest/$$i.$(MANSUFFIX)) || exit $$?; \	@@\
 	done
 #endif /* InstallMultipleManSuffix */
 
@@ -2601,7 +2587,8 @@ clean::									@@\
 #define LinkBuildLibraryMaybe(lib,doit) MakeDir($(BUILDLIBDIR))		@@\
 	@if doit; then (set -x; \					@@\
 	  RemoveFile($(BUILDLIBDIR)/lib); \				@@\
-	  cd $(BUILDLIBDIR) && $(LN) $(BUILDLIBTOP)/$(CURRENT_DIR)/lib .); fi
+	  cd $(BUILDLIBDIR) && \					@@\
+	    $(LN) $(BUILDLIBTOP)/$(CURRENT_DIR)/lib .) || exit $$?; fi
 #endif
 #endif /* LinkBuildLibraryMaybe */
 
@@ -2615,7 +2602,9 @@ clean::									@@\
 #else
 #define LinkBuildSonameLibrary(lib) MakeDirInline($(BUILDLIBDIR));\	@@\
 	(set -x; RemoveFile($(BUILDLIBDIR)/lib);\			@@\
-	(cd $(BUILDLIBDIR) && $(LN) $(BUILDLIBTOP)/$(CURRENT_DIR)/lib .))
+	  (cd $(BUILDLIBDIR) && \					@@\
+	    $(LN) $(BUILDLIBTOP)/$(CURRENT_DIR)/lib .) || exit $$? \	@@\
+	) || exit $$?
 #endif
 #endif /* LinkBuildSonameLibrary */
 
@@ -2713,9 +2702,9 @@ AllTarget(LibraryTargetName(libname))			
 									@@\
 LibraryTargetName(libname): objlist1 objlist2 objlist3 $(EXTRALIBRARYDEPS)	@@\
 	RemoveFile($@)							@@\
-	(cd down && MakeLibrary(up/$@,objlist1))			@@\
-	(cd down && MakeLibrary(up/$@,objlist2))			@@\
-	(cd down && MakeLibrary(up/$@,objlist3))			@@\
+	(cd down && MakeLibrary(up/$@,objlist1)) || exit $$?		@@\
+	(cd down && MakeLibrary(up/$@,objlist2)) || exit $$?		@@\
+	(cd down && MakeLibrary(up/$@,objlist3)) || exit $$?		@@\
 	RanLibrary($@)							@@\
 	_LinkBuildLibrary($@)
 #endif /* UnsharedLibraryTarget3 */
@@ -2952,7 +2941,7 @@ step::  dir srclist							@@\
 	@-(list=`echo srclist | sed -e 's/[^ ]*\///g'`; \		@@\
 		set -x; cd dir && RemoveFiles($$list))			@@\
 	@for i in srclist; do \						@@\
-		(set -x; cd dir && $(LN) ../$$i .); \			@@\
+		(set -x; cd dir && $(LN) ../$$i .) || exit $$?; \	@@\
 	done								@@\
 									@@\
 dir::									@@\
@@ -2974,8 +2963,9 @@ name::									@@\
 	@MakeFlagsToShellFlags(ik,set +e); \				@@\
 	for i in dirs ;\						@@\
 	do \								@@\
-		echo verb "in $(CURRENT_DIR)/$$i..."; \			@@\
-		(cd $$i && LANG=lang $(MAKE) $(MFLAGS) flags subname);\ @@\
+	    echo verb "in $(CURRENT_DIR)/$$i..."; \			@@\
+	    (cd $$i && \						@@\
+	       LANG=lang $(MAKE) $(MFLAGS) flags subname) || exit $$?; \ @@\
 	done
 #endif
 
@@ -3384,7 +3374,7 @@ clean::									@@\
 step::									@@\
 	DirFailPrefix@MakeFlagsToShellFlags(i,set +e); \		@@\
 	for i in dirs; do if [ -d $(DESTDIR)$$i ]; then \		@@\
-		set +x; else (set -x; $(MKDIRHIER) $(DESTDIR)$$i); fi; \ @@\
+		set +x; else (set -x; $(MKDIRHIER) $(DESTDIR)$$i) || exit $$?; fi; \ @@\
 	done
 #endif /* MakeDirectories */
 
@@ -3610,7 +3600,7 @@ objname.Osuf: Concat3(libpath,/lib,libna
 	@$(CP) Concat3(libpath,/lib,libname.a) tmp			@@\
 	@(cd tmp; set -x; ArExtCmd Concat(lib,libname.a); \		@@\
 	  $(LD) $(LDCOMBINEFLAGS) *.Osuf -o ../$@; \			@@\
-	  RemoveFiles(*.Osuf))						@@\
+	  RemoveFiles(*.Osuf)) || exit $$?				@@\
 	@$(RM) -r tmp							@@\
 									@@\
 clean::									@@\
