Hi John, Let me explain the Makefile patch in this separate thread, as this is generic to all maps.
Let’s not use gb18030 as an example, instead, using utf8_and_win. When any of the win-related map file changes, it suppose to automatically rebuild utf8_and_win.o. WITHOUT this patch, after I touch a map file, it doesn’t rebuild the object file: ``` # Now it’s in master branch chaol@ChaodeMacBook-Air utf8_and_win % pwd /Users/chaol/Documents/code/postgresql/src/backend/utils/mb/conversion_procs/utf8_and_win # touch a map file to simulate a change chaol@ChaodeMacBook-Air utf8_and_win % touch ../../Unicode/win874_to_utf8.map # make only rebuild header files, without rebuild object files. chaol@ChaodeMacBook-Air utf8_and_win % make /Library/Developer/CommandLineTools/usr/bin/make -C ../../../../../../src/backend generated-headers /Library/Developer/CommandLineTools/usr/bin/make -C ../include/catalog generated-headers '/usr/bin/perl' ../../../src/backend/catalog/genbki.pl --include-path=../../../src/include/ \ --set-version=19 ../../../src/include/catalog/pg_proc.h ../../../src/include/catalog/pg_type.h ../../../src/include/catalog/pg_attribute.h ../../../src/include/catalog/pg_class.h ../../../src/include/catalog/pg_attrdef.h ../../../src/include/catalog/pg_constraint.h ../../../src/include/catalog/pg_inherits.h ../../../src/include/catalog/pg_index.h ../../../src/include/catalog/pg_operator.h ../../../src/include/catalog/pg_opfamily.h ../../../src/include/catalog/pg_opclass.h ../../../src/include/catalog/pg_am.h ../../../src/include/catalog/pg_amop.h ../../../src/include/catalog/pg_amproc.h ../../../src/include/catalog/pg_language.h ../../../src/include/catalog/pg_largeobject_metadata.h ../../../src/include/catalog/pg_largeobject.h ../../../src/include/catalog/pg_aggregate.h ../../../src/include/catalog/pg_statistic.h ../../../src/include/catalog/pg_statistic_ext.h ../../../src/include/catalog/pg_statistic_ext_data.h ../../../src/include/catalog/pg_rewrite.h ../../../src/include/catalog/pg_trigger.h ../../../src/include/catalog/pg_event_trigger.h ../../../src/include/catalog/pg_description.h ../../../src/include/catalog/pg_cast.h ../../../src/include/catalog/pg_enum.h ../../../src/include/catalog/pg_namespace.h ../../../src/include/catalog/pg_conversion.h ../../../src/include/catalog/pg_depend.h ../../../src/include/catalog/pg_database.h ../../../src/include/catalog/pg_db_role_setting.h ../../../src/include/catalog/pg_tablespace.h ../../../src/include/catalog/pg_authid.h ../../../src/include/catalog/pg_auth_members.h ../../../src/include/catalog/pg_shdepend.h ../../../src/include/catalog/pg_shdescription.h ../../../src/include/catalog/pg_ts_config.h ../../../src/include/catalog/pg_ts_config_map.h ../../../src/include/catalog/pg_ts_dict.h ../../../src/include/catalog/pg_ts_parser.h ../../../src/include/catalog/pg_ts_template.h ../../../src/include/catalog/pg_extension.h ../../../src/include/catalog/pg_foreign_data_wrapper.h ../../../src/include/catalog/pg_foreign_server.h ../../../src/include/catalog/pg_user_mapping.h ../../../src/include/catalog/pg_foreign_table.h ../../../src/include/catalog/pg_policy.h ../../../src/include/catalog/pg_replication_origin.h ../../../src/include/catalog/pg_default_acl.h ../../../src/include/catalog/pg_init_privs.h ../../../src/include/catalog/pg_seclabel.h ../../../src/include/catalog/pg_shseclabel.h ../../../src/include/catalog/pg_collation.h ../../../src/include/catalog/pg_parameter_acl.h ../../../src/include/catalog/pg_partitioned_table.h ../../../src/include/catalog/pg_range.h ../../../src/include/catalog/pg_transform.h ../../../src/include/catalog/pg_sequence.h ../../../src/include/catalog/pg_publication.h ../../../src/include/catalog/pg_publication_namespace.h ../../../src/include/catalog/pg_publication_rel.h ../../../src/include/catalog/pg_subscription.h ../../../src/include/catalog/pg_subscription_rel.h touch bki-stamp /Library/Developer/CommandLineTools/usr/bin/make -C nodes generated-header-symlinks '/usr/bin/perl' gen_node_support.pl ../../../src/include/nodes/nodes.h ../../../src/include/nodes/primnodes.h ../../../src/include/nodes/parsenodes.h ../../../src/include/nodes/pathnodes.h ../../../src/include/nodes/plannodes.h ../../../src/include/nodes/execnodes.h ../../../src/include/access/amapi.h ../../../src/include/access/cmptype.h ../../../src/include/access/sdir.h ../../../src/include/access/tableam.h ../../../src/include/access/tsmapi.h ../../../src/include/commands/event_trigger.h ../../../src/include/commands/trigger.h ../../../src/include/executor/tuptable.h ../../../src/include/foreign/fdwapi.h ../../../src/include/nodes/bitmapset.h ../../../src/include/nodes/extensible.h ../../../src/include/nodes/lockoptions.h ../../../src/include/nodes/miscnodes.h ../../../src/include/nodes/replnodes.h ../../../src/include/nodes/supportnodes.h ../../../src/include/nodes/value.h ../../../src/include/utils/rel.h touch node-support-stamp cd '../../../src/include/nodes/' && for file in nodetags.h; do \ rm -f $file && ln -s "../../../src/backend/nodes/$file" . ; \ done touch ../../../src/include/nodes/header-stamp /Library/Developer/CommandLineTools/usr/bin/make -C utils generated-header-symlinks /Library/Developer/CommandLineTools/usr/bin/make -C adt jsonpath_gram.h make[3]: `jsonpath_gram.h' is up to date. # make again, it does nothing chaol@ChaodeMacBook-Air utf8_and_win % make /Library/Developer/CommandLineTools/usr/bin/make -C ../../../../../../src/backend generated-headers /Library/Developer/CommandLineTools/usr/bin/make -C ../include/catalog generated-headers make[2]: Nothing to be done for `generated-headers'. /Library/Developer/CommandLineTools/usr/bin/make -C nodes generated-header-symlinks make[2]: Nothing to be done for `generated-header-symlinks'. /Library/Developer/CommandLineTools/usr/bin/make -C utils generated-header-symlinks /Library/Developer/CommandLineTools/usr/bin/make -C adt jsonpath_gram.h make[3]: `jsonpath_gram.h' is up to date. ``` WITH this patch, it will automatically rebuild object files: ``` # switch to the patch branch chaol@ChaodeMacBook-Air utf8_and_win % git co topic/chaol/mb-makefiles Switched to branch 'topic/chaol/mb-makefiles’ # After switching branch, make rebuilt header files and object files. chaol@ChaodeMacBook-Air utf8_and_win % make /Library/Developer/CommandLineTools/usr/bin/make -C ../../../../../../src/backend generated-headers /Library/Developer/CommandLineTools/usr/bin/make -C ../include/catalog generated-headers '/usr/bin/perl' ../../../src/backend/catalog/genbki.pl --include-path=../../../src/include/ \ --set-version=19 ../../../src/include/catalog/pg_proc.h ../../../src/include/catalog/pg_type.h ../../../src/include/catalog/pg_attribute.h ../../../src/include/catalog/pg_class.h ../../../src/include/catalog/pg_attrdef.h ../../../src/include/catalog/pg_constraint.h ../../../src/include/catalog/pg_inherits.h ../../../src/include/catalog/pg_index.h ../../../src/include/catalog/pg_operator.h ../../../src/include/catalog/pg_opfamily.h ../../../src/include/catalog/pg_opclass.h ../../../src/include/catalog/pg_am.h ../../../src/include/catalog/pg_amop.h ../../../src/include/catalog/pg_amproc.h ../../../src/include/catalog/pg_language.h ../../../src/include/catalog/pg_largeobject_metadata.h ../../../src/include/catalog/pg_largeobject.h ../../../src/include/catalog/pg_aggregate.h ../../../src/include/catalog/pg_statistic.h ../../../src/include/catalog/pg_statistic_ext.h ../../../src/include/catalog/pg_statistic_ext_data.h ../../../src/include/catalog/pg_rewrite.h ../../../src/include/catalog/pg_trigger.h ../../../src/include/catalog/pg_event_trigger.h ../../../src/include/catalog/pg_description.h ../../../src/include/catalog/pg_cast.h ../../../src/include/catalog/pg_enum.h ../../../src/include/catalog/pg_namespace.h ../../../src/include/catalog/pg_conversion.h ../../../src/include/catalog/pg_depend.h ../../../src/include/catalog/pg_database.h ../../../src/include/catalog/pg_db_role_setting.h ../../../src/include/catalog/pg_tablespace.h ../../../src/include/catalog/pg_authid.h ../../../src/include/catalog/pg_auth_members.h ../../../src/include/catalog/pg_shdepend.h ../../../src/include/catalog/pg_shdescription.h ../../../src/include/catalog/pg_ts_config.h ../../../src/include/catalog/pg_ts_config_map.h ../../../src/include/catalog/pg_ts_dict.h ../../../src/include/catalog/pg_ts_parser.h ../../../src/include/catalog/pg_ts_template.h ../../../src/include/catalog/pg_extension.h ../../../src/include/catalog/pg_foreign_data_wrapper.h ../../../src/include/catalog/pg_foreign_server.h ../../../src/include/catalog/pg_user_mapping.h ../../../src/include/catalog/pg_foreign_table.h ../../../src/include/catalog/pg_policy.h ../../../src/include/catalog/pg_replication_origin.h ../../../src/include/catalog/pg_default_acl.h ../../../src/include/catalog/pg_init_privs.h ../../../src/include/catalog/pg_seclabel.h ../../../src/include/catalog/pg_shseclabel.h ../../../src/include/catalog/pg_collation.h ../../../src/include/catalog/pg_parameter_acl.h ../../../src/include/catalog/pg_partitioned_table.h ../../../src/include/catalog/pg_range.h ../../../src/include/catalog/pg_transform.h ../../../src/include/catalog/pg_sequence.h ../../../src/include/catalog/pg_publication.h ../../../src/include/catalog/pg_publication_namespace.h ../../../src/include/catalog/pg_publication_rel.h ../../../src/include/catalog/pg_subscription.h ../../../src/include/catalog/pg_subscription_rel.h touch bki-stamp /Library/Developer/CommandLineTools/usr/bin/make -C nodes generated-header-symlinks '/usr/bin/perl' gen_node_support.pl ../../../src/include/nodes/nodes.h ../../../src/include/nodes/primnodes.h ../../../src/include/nodes/parsenodes.h ../../../src/include/nodes/pathnodes.h ../../../src/include/nodes/plannodes.h ../../../src/include/nodes/execnodes.h ../../../src/include/access/amapi.h ../../../src/include/access/cmptype.h ../../../src/include/access/sdir.h ../../../src/include/access/tableam.h ../../../src/include/access/tsmapi.h ../../../src/include/commands/event_trigger.h ../../../src/include/commands/trigger.h ../../../src/include/executor/tuptable.h ../../../src/include/foreign/fdwapi.h ../../../src/include/nodes/bitmapset.h ../../../src/include/nodes/extensible.h ../../../src/include/nodes/lockoptions.h ../../../src/include/nodes/miscnodes.h ../../../src/include/nodes/replnodes.h ../../../src/include/nodes/supportnodes.h ../../../src/include/nodes/value.h ../../../src/include/utils/rel.h touch node-support-stamp cd '../../../src/include/nodes/' && for file in nodetags.h; do \ rm -f $file && ln -s "../../../src/backend/nodes/$file" . ; \ done touch ../../../src/include/nodes/header-stamp /Library/Developer/CommandLineTools/usr/bin/make -C utils generated-header-symlinks /Library/Developer/CommandLineTools/usr/bin/make -C adt jsonpath_gram.h make[3]: `jsonpath_gram.h' is up to date. gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Werror=unguarded-availability-new -Wendif-labels -Wmissing-format-attribute -Wcast-function-type -Wformat-security -Wmissing-variable-declarations -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-unused-command-line-argument -Wno-compound-token-split-by-macro -Wno-format-truncation -Wno-cast-function-type-strict -g -O2 -fvisibility=hidden -I../../../../../../src/include -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk -I/opt/homebrew/Cellar/icu4c@77/77.1/include -c -o utf8_and_win.o utf8_and_win.c gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Werror=unguarded-availability-new -Wendif-labels -Wmissing-format-attribute -Wcast-function-type -Wformat-security -Wmissing-variable-declarations -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-unused-command-line-argument -Wno-compound-token-split-by-macro -Wno-format-truncation -Wno-cast-function-type-strict -g -O2 -fvisibility=hidden -bundle -o utf8_and_win.dylib utf8_and_win.o -L../../../../../../src/port -L../../../../../../src/common -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk -Wl,-dead_strip_dylibs -fvisibility=hidden -bundle_loader ../../../../../../src/backend/postgres # touch a map file to simulate map file change chaol@ChaodeMacBook-Air utf8_and_win % touch ../../Unicode/win874_to_utf8.map # make rebuilt object files chaol@ChaodeMacBook-Air utf8_and_win % make /Library/Developer/CommandLineTools/usr/bin/make -C ../../../../../../src/backend generated-headers /Library/Developer/CommandLineTools/usr/bin/make -C ../include/catalog generated-headers make[2]: Nothing to be done for `generated-headers'. /Library/Developer/CommandLineTools/usr/bin/make -C nodes generated-header-symlinks make[2]: Nothing to be done for `generated-header-symlinks'. /Library/Developer/CommandLineTools/usr/bin/make -C utils generated-header-symlinks /Library/Developer/CommandLineTools/usr/bin/make -C adt jsonpath_gram.h make[3]: `jsonpath_gram.h' is up to date. gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Werror=unguarded-availability-new -Wendif-labels -Wmissing-format-attribute -Wcast-function-type -Wformat-security -Wmissing-variable-declarations -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-unused-command-line-argument -Wno-compound-token-split-by-macro -Wno-format-truncation -Wno-cast-function-type-strict -g -O2 -fvisibility=hidden -I../../../../../../src/include -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk -I/opt/homebrew/Cellar/icu4c@77/77.1/include -c -o utf8_and_win.o utf8_and_win.c gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Werror=unguarded-availability-new -Wendif-labels -Wmissing-format-attribute -Wcast-function-type -Wformat-security -Wmissing-variable-declarations -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-unused-command-line-argument -Wno-compound-token-split-by-macro -Wno-format-truncation -Wno-cast-function-type-strict -g -O2 -fvisibility=hidden -bundle -o utf8_and_win.dylib utf8_and_win.o -L../../../../../../src/port -L../../../../../../src/common -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk -Wl,-dead_strip_dylibs -fvisibility=hidden -bundle_loader ../../../../../../src/backend/postgres chaol@ChaodeMacBook-Air utf8_and_win % # make again did nothing chaol@ChaodeMacBook-Air utf8_and_win % make /Library/Developer/CommandLineTools/usr/bin/make -C ../../../../../../src/backend generated-headers /Library/Developer/CommandLineTools/usr/bin/make -C ../include/catalog generated-headers make[2]: Nothing to be done for `generated-headers'. /Library/Developer/CommandLineTools/usr/bin/make -C nodes generated-header-symlinks make[2]: Nothing to be done for `generated-header-symlinks'. /Library/Developer/CommandLineTools/usr/bin/make -C utils generated-header-symlinks /Library/Developer/CommandLineTools/usr/bin/make -C adt jsonpath_gram.h make[3]: `jsonpath_gram.h' is up to date. # change map file again chaol@ChaodeMacBook-Air utf8_and_win % touch ../../Unicode/win874_to_utf8.map # make automatically rebuilt object files. chaol@ChaodeMacBook-Air utf8_and_win % make /Library/Developer/CommandLineTools/usr/bin/make -C ../../../../../../src/backend generated-headers /Library/Developer/CommandLineTools/usr/bin/make -C ../include/catalog generated-headers make[2]: Nothing to be done for `generated-headers'. /Library/Developer/CommandLineTools/usr/bin/make -C nodes generated-header-symlinks make[2]: Nothing to be done for `generated-header-symlinks'. /Library/Developer/CommandLineTools/usr/bin/make -C utils generated-header-symlinks /Library/Developer/CommandLineTools/usr/bin/make -C adt jsonpath_gram.h make[3]: `jsonpath_gram.h' is up to date. gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Werror=unguarded-availability-new -Wendif-labels -Wmissing-format-attribute -Wcast-function-type -Wformat-security -Wmissing-variable-declarations -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-unused-command-line-argument -Wno-compound-token-split-by-macro -Wno-format-truncation -Wno-cast-function-type-strict -g -O2 -fvisibility=hidden -I../../../../../../src/include -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk -I/opt/homebrew/Cellar/icu4c@77/77.1/include -c -o utf8_and_win.o utf8_and_win.c gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Werror=unguarded-availability-new -Wendif-labels -Wmissing-format-attribute -Wcast-function-type -Wformat-security -Wmissing-variable-declarations -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-unused-command-line-argument -Wno-compound-token-split-by-macro -Wno-format-truncation -Wno-cast-function-type-strict -g -O2 -fvisibility=hidden -bundle -o utf8_and_win.dylib utf8_and_win.o -L../../../../../../src/port -L../../../../../../src/common -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk -Wl,-dead_strip_dylibs -fvisibility=hidden -bundle_loader ../../../../../../src/backend/postgres # make again did nothing chaol@ChaodeMacBook-Air utf8_and_win % make /Library/Developer/CommandLineTools/usr/bin/make -C ../../../../../../src/backend generated-headers /Library/Developer/CommandLineTools/usr/bin/make -C ../include/catalog generated-headers make[2]: Nothing to be done for `generated-headers'. /Library/Developer/CommandLineTools/usr/bin/make -C nodes generated-header-symlinks make[2]: Nothing to be done for `generated-header-symlinks'. /Library/Developer/CommandLineTools/usr/bin/make -C utils generated-header-symlinks /Library/Developer/CommandLineTools/usr/bin/make -C adt jsonpath_gram.h make[3]: `jsonpath_gram.h' is up to date. ``` -- Chao Li (Evan) HighGo Software Co., Ltd. https://www.highgo.com/