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/




Reply via email to