From 946186fb319bbdd3125597e1bc096a6fdf932c1a Mon Sep 17 00:00:00 2001
From: "Chao Li (HighGo Inc.)" <li.evan.chao@gmail.com>
Date: Wed, 6 Aug 2025 06:45:17 +0800
Subject: [PATCH v1] Enhance Makefiles to rebuild objects on map file changes

While working on the upgrade from GB18030 to GB18030-2022, I updated
two GB18030-related map files. However, rebuilding PostgreSQL did
not recompile anything, which led me to discover that the Makefiles
under src/backend/utils/mb/conversion_procs were missing dependency
rules between NAME.o and the corresponding map files.

This patch adds the necessary dependencies to ensure that when a map file
changes, the corresponding .o file is rebuilt accordingly.

Author: Chao Li <lic@highgo.com>
---
 src/backend/utils/mb/conversion_procs/proc.mk |  6 +++++
 .../conversion_procs/utf8_and_big5/Makefile   |  3 +++
 .../utf8_and_cyrillic/Makefile                |  5 ++++
 .../utf8_and_euc2004/Makefile                 |  3 +++
 .../conversion_procs/utf8_and_euc_cn/Makefile |  3 +++
 .../conversion_procs/utf8_and_euc_jp/Makefile |  3 +++
 .../conversion_procs/utf8_and_euc_kr/Makefile |  3 +++
 .../conversion_procs/utf8_and_euc_tw/Makefile |  3 +++
 .../utf8_and_gb18030/Makefile                 |  3 +++
 .../mb/conversion_procs/utf8_and_gbk/Makefile |  3 +++
 .../utf8_and_iso8859/Makefile                 | 27 +++++++++++++++++++
 .../conversion_procs/utf8_and_johab/Makefile  |  3 +++
 .../conversion_procs/utf8_and_sjis/Makefile   |  3 +++
 .../utf8_and_sjis2004/Makefile                |  3 +++
 .../mb/conversion_procs/utf8_and_uhc/Makefile |  3 +++
 .../mb/conversion_procs/utf8_and_win/Makefile | 23 ++++++++++++++++
 16 files changed, 97 insertions(+)

diff --git a/src/backend/utils/mb/conversion_procs/proc.mk b/src/backend/utils/mb/conversion_procs/proc.mk
index 2eeae282409..cc88d5ae79f 100644
--- a/src/backend/utils/mb/conversion_procs/proc.mk
+++ b/src/backend/utils/mb/conversion_procs/proc.mk
@@ -1,6 +1,12 @@
 SRCS		+= $(NAME).c
 OBJS		+= $(NAME).o $(WIN32RES)
 
+$(MAPFILES):
+	# The map files are generated by Perl scripts. We don't automatically
+	# regenerate them here.
+
+$(NAME).o: $(MAPFILES)
+
 rpath =
 
 all: all-shared-lib
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_big5/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_big5/Makefile
index 2c274f3d9cc..4e8aae35416 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_big5/Makefile
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_big5/Makefile
@@ -6,8 +6,11 @@
 subdir = src/backend/utils/mb/conversion_procs/utf8_and_big5
 top_builddir = ../../../../../..
 include $(top_builddir)/src/Makefile.global
+mapfiledir = $(top_builddir)/src/backend/utils/mb/Unicode
 
 NAME		= utf8_and_big5
 PGFILEDESC	= "utf8 <-> big5 text conversions"
+MAPFILES	= $(mapfiledir)/big5_to_utf8.map \
+			  $(mapfiledir)/utf8_to_big5.map
 
 include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/Makefile
index 725281ec967..f0742db6898 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/Makefile
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/Makefile
@@ -6,8 +6,13 @@
 subdir = src/backend/utils/mb/conversion_procs/utf8_and_cyrillic
 top_builddir = ../../../../../..
 include $(top_builddir)/src/Makefile.global
+mapfiledir = $(top_builddir)/src/backend/utils/mb/Unicode
 
 NAME		= utf8_and_cyrillic
 PGFILEDESC	= "utf8 <-> cyrillic text conversions"
+MAPFILES	= $(mapfiledir)/utf8_to_koi8r.map \
+			  $(mapfiledir)/koi8r_to_utf8.map \
+			  $(mapfiledir)/utf8_to_koi8u.map \
+			  $(mapfiledir)/koi8u_to_utf8.map
 
 include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_euc2004/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_euc2004/Makefile
index c6c537cffc8..e3830de005c 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_euc2004/Makefile
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_euc2004/Makefile
@@ -6,8 +6,11 @@
 subdir = src/backend/utils/mb/conversion_procs/utf8_and_euc2004
 top_builddir = ../../../../../..
 include $(top_builddir)/src/Makefile.global
+mapfiledir = $(top_srcdir)/src/backend/utils/mb/Unicode
 
 NAME		= utf8_and_euc2004
 PGFILEDESC	= "utf8 <-> euc2004 text conversions"
+MAPFILES	= $(mapfiledir)/euc_jis_2004_to_utf8.map \
+			  $(mapfiledir)/utf8_to_euc_jis_2004.map
 
 include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/Makefile
index 9d0e157a758..d31499a5da8 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/Makefile
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/Makefile
@@ -6,8 +6,11 @@
 subdir = src/backend/utils/mb/conversion_procs/utf8_and_euc_cn
 top_builddir = ../../../../../..
 include $(top_builddir)/src/Makefile.global
+mapfiledir = $(top_builddir)/src/backend/utils/mb/Unicode
 
 NAME		= utf8_and_euc_cn
 PGFILEDESC	= "utf8 <-> euc_cn text conversions"
+MAPFILES	= $(mapfiledir)/euc_cn_to_utf8.map \
+			  $(mapfiledir)/utf8_to_euc_cn.map
 
 include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/Makefile
index c5f55784363..5f15ae40867 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/Makefile
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/Makefile
@@ -6,8 +6,11 @@
 subdir = src/backend/utils/mb/conversion_procs/utf8_and_euc_jp
 top_builddir = ../../../../../..
 include $(top_builddir)/src/Makefile.global
+mapfiledir = $(top_builddir)/src/backend/utils/mb/Unicode
 
 NAME		= utf8_and_euc_jp
 PGFILEDESC	= "utf8 <-> euc_jp text conversions"
+MAPFILES	= $(mapfiledir)/euc_jp_to_utf8.map \
+			  $(mapfiledir)/utf8_to_euc_jp.map
 
 include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/Makefile
index a7eff9e9e17..71d1a322012 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/Makefile
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/Makefile
@@ -6,8 +6,11 @@
 subdir = src/backend/utils/mb/conversion_procs/utf8_and_euc_kr
 top_builddir = ../../../../../..
 include $(top_builddir)/src/Makefile.global
+mapfiledir = $(top_builddir)/src/backend/utils/mb/Unicode
 
 NAME		= utf8_and_euc_kr
 PGFILEDESC	= "utf8 <-> euc_kr text conversions"
+MAPFILES	= $(mapfiledir)/euc_kr_to_utf8.map \
+			  $(mapfiledir)/utf8_to_euc_kr.map
 
 include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/Makefile
index 59f42dc2b7d..23e88503444 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/Makefile
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/Makefile
@@ -6,8 +6,11 @@
 subdir = src/backend/utils/mb/conversion_procs/utf8_and_euc_tw
 top_builddir = ../../../../../..
 include $(top_builddir)/src/Makefile.global
+mapfiledir = $(top_srcdir)/src/backend/utils/mb/Unicode
 
 NAME		= utf8_and_euc_tw
 PGFILEDESC	= "utf8 <-> euc_tw text conversions"
+MAPFILES	= $(mapfiledir)/euc_tw_to_utf8.map \
+			  $(mapfiledir)/utf8_to_euc_tw.map
 
 include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_gb18030/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_gb18030/Makefile
index 17bc18c373b..0b2d37b2995 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_gb18030/Makefile
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_gb18030/Makefile
@@ -6,8 +6,11 @@
 subdir = src/backend/utils/mb/conversion_procs/utf8_and_gb18030
 top_builddir = ../../../../../..
 include $(top_builddir)/src/Makefile.global
+mapfiledir = $(top_builddir)/src/backend/utils/mb/Unicode
 
 NAME		= utf8_and_gb18030
 PGFILEDESC	= "utf8 <-> gb18030 text conversions"
+MAPFILES	= $(mapfiledir)/gb18030_to_utf8.map \
+			  $(mapfiledir)/utf8_to_gb18030.map
 
 include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_gbk/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_gbk/Makefile
index eb20638440f..ca28f103bf1 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_gbk/Makefile
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_gbk/Makefile
@@ -6,8 +6,11 @@
 subdir = src/backend/utils/mb/conversion_procs/utf8_and_gbk
 top_builddir = ../../../../../..
 include $(top_builddir)/src/Makefile.global
+mapfiledir = $(top_builddir)/src/backend/utils/mb/Unicode
 
 NAME		= utf8_and_gbk
 PGFILEDESC	= "utf8 <-> gbk text conversions"
+MAPFILES	= $(mapfiledir)/gbk_to_utf8.map \
+			  $(mapfiledir)/utf8_to_gbk.map
 
 include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_iso8859/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_iso8859/Makefile
index 6fd0dd27bf5..7914dff2b47 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_iso8859/Makefile
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_iso8859/Makefile
@@ -6,8 +6,35 @@
 subdir = src/backend/utils/mb/conversion_procs/utf8_and_iso8859
 top_builddir = ../../../../../..
 include $(top_builddir)/src/Makefile.global
+mapfiledir = $(top_builddir)/src/backend/utils/mb/Unicode
 
 NAME		= utf8_and_iso8859
 PGFILEDESC	= "utf8 <-> iso8859 text conversions"
+MAPFILES	= $(mapfiledir)/iso8859_10_to_utf8.map \
+			  $(mapfiledir)/iso8859_13_to_utf8.map \
+			  $(mapfiledir)/iso8859_14_to_utf8.map \
+			  $(mapfiledir)/iso8859_15_to_utf8.map \
+			  $(mapfiledir)/iso8859_16_to_utf8.map \
+			  $(mapfiledir)/iso8859_2_to_utf8.map \
+			  $(mapfiledir)/iso8859_3_to_utf8.map \
+			  $(mapfiledir)/iso8859_4_to_utf8.map \
+			  $(mapfiledir)/iso8859_5_to_utf8.map \
+			  $(mapfiledir)/iso8859_6_to_utf8.map \
+			  $(mapfiledir)/iso8859_7_to_utf8.map \
+			  $(mapfiledir)/iso8859_8_to_utf8.map \
+			  $(mapfiledir)/iso8859_9_to_utf8.map \
+			  $(mapfiledir)/utf8_to_iso8859_10.map \
+			  $(mapfiledir)/utf8_to_iso8859_13.map \
+			  $(mapfiledir)/utf8_to_iso8859_14.map \
+			  $(mapfiledir)/utf8_to_iso8859_15.map \
+			  $(mapfiledir)/utf8_to_iso8859_16.map \
+			  $(mapfiledir)/utf8_to_iso8859_2.map \
+			  $(mapfiledir)/utf8_to_iso8859_3.map \
+			  $(mapfiledir)/utf8_to_iso8859_4.map \
+			  $(mapfiledir)/utf8_to_iso8859_5.map \
+			  $(mapfiledir)/utf8_to_iso8859_6.map \
+			  $(mapfiledir)/utf8_to_iso8859_7.map \
+			  $(mapfiledir)/utf8_to_iso8859_8.map \
+			  $(mapfiledir)/utf8_to_iso8859_9.map
 
 include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_johab/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_johab/Makefile
index e48ef3e3ea7..c4709c93976 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_johab/Makefile
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_johab/Makefile
@@ -6,8 +6,11 @@
 subdir = src/backend/utils/mb/conversion_procs/utf8_and_johab
 top_builddir = ../../../../../..
 include $(top_builddir)/src/Makefile.global
+mapfiledir = $(top_builddir)/src/backend/utils/mb/Unicode
 
 NAME		= utf8_and_johab
 PGFILEDESC	= "utf8 <-> johab text conversions"
+MAPFILES	= $(mapfiledir)/johab_to_utf8.map \
+			  $(mapfiledir)/utf8_to_johab.map
 
 include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_sjis/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_sjis/Makefile
index 448c5d4b64a..b5c2f0125a9 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_sjis/Makefile
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_sjis/Makefile
@@ -6,8 +6,11 @@
 subdir = src/backend/utils/mb/conversion_procs/utf8_and_sjis
 top_builddir = ../../../../../..
 include $(top_builddir)/src/Makefile.global
+mapfiledir = $(top_srcdir)/src/backend/utils/mb/Unicode
 
 NAME		= utf8_and_sjis
 PGFILEDESC	= "utf8 <-> sjis text conversions"
+MAPFILES	= $(mapfiledir)/sjis_to_utf8.map \
+			  $(mapfiledir)/utf8_to_sjis.map
 
 include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_sjis2004/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_sjis2004/Makefile
index f7072a4dc5f..c201074677d 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_sjis2004/Makefile
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_sjis2004/Makefile
@@ -6,8 +6,11 @@
 subdir = src/backend/utils/mb/conversion_procs/utf8_and_sjis2004
 top_builddir = ../../../../../..
 include $(top_builddir)/src/Makefile.global
+mapfiledir = $(top_srcdir)/src/backend/utils/mb/Unicode
 
 NAME		= utf8_and_sjis2004
 PGFILEDESC	= "utf8 <-> sjis2004 text conversions"
+MAPFILES	= $(mapfiledir)/shift_jis_2004_to_utf8.map \
+			  $(mapfiledir)/utf8_to_shift_jis_2004.map
 
 include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_uhc/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_uhc/Makefile
index cc6e0a9c971..85db2cf5686 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_uhc/Makefile
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_uhc/Makefile
@@ -6,8 +6,11 @@
 subdir = src/backend/utils/mb/conversion_procs/utf8_and_uhc
 top_builddir = ../../../../../..
 include $(top_builddir)/src/Makefile.global
+mapfiledir = $(top_srcdir)/src/backend/utils/mb/Unicode
 
 NAME		= utf8_and_uhc
 PGFILEDESC	= "utf8 <-> uhc text conversions"
+MAPFILES	= $(mapfiledir)/uhc_to_utf8.map \
+			  $(mapfiledir)/utf8_to_uhc.map
 
 include $(srcdir)/../proc.mk
diff --git a/src/backend/utils/mb/conversion_procs/utf8_and_win/Makefile b/src/backend/utils/mb/conversion_procs/utf8_and_win/Makefile
index d8b18fbf334..107d8002beb 100644
--- a/src/backend/utils/mb/conversion_procs/utf8_and_win/Makefile
+++ b/src/backend/utils/mb/conversion_procs/utf8_and_win/Makefile
@@ -6,8 +6,31 @@
 subdir = src/backend/utils/mb/conversion_procs/utf8_and_win
 top_builddir = ../../../../../..
 include $(top_builddir)/src/Makefile.global
+mapfiledir = $(top_srcdir)/src/backend/utils/mb/Unicode
 
 NAME		= utf8_and_win
 PGFILEDESC	= "utf8 <-> win text conversions"
+MAPFILES	= $(mapfiledir)/utf8_to_win1250.map \
+			  $(mapfiledir)/utf8_to_win1251.map \
+			  $(mapfiledir)/utf8_to_win1252.map \
+			  $(mapfiledir)/utf8_to_win1253.map \
+			  $(mapfiledir)/utf8_to_win1254.map \
+			  $(mapfiledir)/utf8_to_win1255.map \
+			  $(mapfiledir)/utf8_to_win1256.map \
+			  $(mapfiledir)/utf8_to_win1257.map \
+			  $(mapfiledir)/utf8_to_win1258.map \
+			  $(mapfiledir)/utf8_to_win866.map \
+			  $(mapfiledir)/utf8_to_win874.map \
+			  $(mapfiledir)/win1250_to_utf8.map \
+			  $(mapfiledir)/win1251_to_utf8.map \
+			  $(mapfiledir)/win1252_to_utf8.map \
+			  $(mapfiledir)/win1253_to_utf8.map \
+			  $(mapfiledir)/win1254_to_utf8.map \
+			  $(mapfiledir)/win1255_to_utf8.map \
+			  $(mapfiledir)/win1256_to_utf8.map \
+			  $(mapfiledir)/win1257_to_utf8.map \
+			  $(mapfiledir)/win866_to_utf8.map \
+			  $(mapfiledir)/win874_to_utf8.map \
+			  $(mapfiledir)/win1258_to_utf8.map
 
 include $(srcdir)/../proc.mk
-- 
2.39.5 (Apple Git-154)

