From f7044509cbb1d3b4aa31e5b553cf46ef2a60ec3d Mon Sep 17 00:00:00 2001
From: Jilles Tjoelker <jilles@FreeBSD.org>
Date: Tue, 17 Sep 2013 20:09:25 +0000
Subject: [PATCH] share/i18n: Fix installworld with read-only obj.

Since iconv was enabled (r254273, August 13), it has been impossible to
installworld using a read-only obj tree. This is common with NFS. Parts of
share/i18n unconditionally rebuild files like mapper.dir during
installation.

This patch ensures the files like mapper.dir are not rewritten with the same
contents.

Tested by:	joel
Approved by:	re (hrs)
---
 share/i18n/csmapper/Makefile | 18 ++++++++++--------
 share/i18n/esdb/Makefile     | 18 ++++++++++--------
 2 files changed, 20 insertions(+), 16 deletions(-)

diff --git a/share/i18n/csmapper/Makefile b/share/i18n/csmapper/Makefile
index 54746f97006e..7bca3ab36494 100644
--- a/share/i18n/csmapper/Makefile
+++ b/share/i18n/csmapper/Makefile
@@ -7,10 +7,11 @@ SUBDIR=	APPLE AST BIG5 CNS CP EBCDIC GB GEORGIAN ISO646 ISO-8859 JIS \
 	KAZAKH KOI KS MISC TCVN
 
 mapper.dir: ${SUBDIR}
-	> ${.TARGET}
-.for i in ${SUBDIR}
-	cat ${i}/mapper.dir.${i} >> ${.TARGET}
-.endfor
+	newfile=$$(for i in ${SUBDIR}; do \
+		cat $$i/mapper.dir.$$i; \
+	done); \
+	[ "$$newfile" = "$$(cat ${.TARGET} 2>/dev/null)" ] || \
+		printf '%s\n' "$$newfile" >${.TARGET}
 mapper.dir.db: mapper.dir
 	${MKCSMAPPER} -m -o ${.TARGET} ${.ALLSRC}
 
@@ -18,10 +19,11 @@ FILES+=	mapper.dir mapper.dir.db
 CLEANFILES+= mapper.dir mapper.dir.db
 
 charset.pivot: ${SUBDIR}
-	> ${.TARGET}
-.for i in ${SUBDIR}
-	cat ${i}/charset.pivot.${i} >> ${.TARGET}
-.endfor
+	newfile=$$(for i in ${SUBDIR}; do \
+		cat $$i/charset.pivot.$$i; \
+	done); \
+	[ "$$newfile" = "$$(cat ${.TARGET} 2>/dev/null)" ] || \
+		printf '%s\n' "$$newfile" >${.TARGET}
 charset.pivot.pvdb: charset.pivot
 	${MKCSMAPPER} -p -o ${.TARGET} ${.ALLSRC}
 
diff --git a/share/i18n/esdb/Makefile b/share/i18n/esdb/Makefile
index 3cd372ca6842..2b16d90288ab 100644
--- a/share/i18n/esdb/Makefile
+++ b/share/i18n/esdb/Makefile
@@ -10,18 +10,20 @@ FILES+=	esdb.dir esdb.dir.db esdb.alias esdb.alias.db
 CLEANFILES= ${FILES}
 
 esdb.dir: ${SUBDIR}
-	> $@
-.for i in ${SUBDIR}
-	cat ${i}/esdb.dir.${i} >>${.TARGET}
-.endfor
+	newfile=$$(for i in ${SUBDIR}; do \
+		cat $$i/esdb.dir.$$i; \
+	done); \
+	[ "$$newfile" = "$$(cat ${.TARGET} 2>/dev/null)" ] || \
+		printf '%s\n' "$$newfile" >${.TARGET}
 esdb.dir.db: esdb.dir
 	${MKESDB} -m -o ${.TARGET} ${.ALLSRC}
 
 esdb.alias: ${SUBDIR}
-	> $@
-.for i in ${SUBDIR}
-	cat ${i}/esdb.alias.${i} >>${.TARGET}
-.endfor
+	newfile=$$(for i in ${SUBDIR}; do \
+		cat $$i/esdb.alias.$$i; \
+	done); \
+	[ "$$newfile" = "$$(cat ${.TARGET} 2>/dev/null)" ] || \
+		printf '%s\n' "$$newfile" >${.TARGET}
 esdb.alias.db: esdb.alias
 	${MKESDB} -m -o ${.TARGET} ${.ALLSRC}