From 9e30b7342f5a6fc2db222d86e6a7e59211cd189a Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Wed, 8 Jul 2020 08:05:43 +0200 Subject: [PATCH 1/2] build,tools: fix cmd_regen_makefile Currently, after having configured and built node and then updating a dependent target the following error is produced when trying to rebuild the project: $ ./configure && make -j8 $ touch node.gypi $ make -j8 configure: error: no such option: -f make[1]: *** [Makefile:685: Makefile] Error 2 The reason for this is that the target 'cmd_regen_makefile' is using the command 'configure' instead of 'gyp_node.py' in out/Makefile: cmd_regen_makefile = cd $(srcdir); /work/nodejs/node/configure -fmake As far as I can tell gyp is using sys.argv[0] as the 'gyp_binary' in __init__.py: params = {'options': options, ... 'gyp_binary': sys.argv[0], But when called via 'configure' sys.argv[0] is 'configure' instead of gyp_node.py leading to the above error. This commit suggests setting the program name explicitly in gyp_node.py. Alternatively perhaps this could be done in configure.py instead but I was not sure what would be best. --- tools/gyp_node.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/gyp_node.py b/tools/gyp_node.py index 831d2ef1550cdb..2b3333a0d8c7df 100755 --- a/tools/gyp_node.py +++ b/tools/gyp_node.py @@ -51,6 +51,12 @@ def run_gyp(args): args.append('-Dlinux_use_bundled_gold=0') args.append('-Dlinux_use_gold_flags=0') + # Set the current program to this module. This is done because gyp + # will the program path in targets it generates. If this script was called + # by another script the program name will not be gyp_node.py but whatever + # the name of the script that called it is, leading to incorrect commands + # in generated targets (for example cmd_regen_makefile). + sys.argv[0] = os.path.abspath(__file__) rc = gyp.main(args) if rc != 0: print('Error running GYP') From 2a3b3cf815593a6a05641e9c35184041c17f5bfd Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Wed, 8 Jul 2020 12:53:08 +0200 Subject: [PATCH 2/2] squash!: correct comment --- tools/gyp_node.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/gyp_node.py b/tools/gyp_node.py index 2b3333a0d8c7df..333c89f5ae9f5a 100755 --- a/tools/gyp_node.py +++ b/tools/gyp_node.py @@ -52,7 +52,7 @@ def run_gyp(args): args.append('-Dlinux_use_gold_flags=0') # Set the current program to this module. This is done because gyp - # will the program path in targets it generates. If this script was called + # will use the program path in targets it generates. If this script was called # by another script the program name will not be gyp_node.py but whatever # the name of the script that called it is, leading to incorrect commands # in generated targets (for example cmd_regen_makefile).