bug-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: '... | Avoiding implicit rule recursion for rule '%/dir: %'. | ...'


From: WaitronCharm
Subject: Re: '... | Avoiding implicit rule recursion for rule '%/dir: %'. | ...'
Date: Fri, 15 Nov 2024 12:56:40 +0000

Thank you. It works nicely, with the basic test:

$ ./make -f -
.ALLOW_RECURSIVE_CHAINS:
%/dir: %; # mkdir $@
target/dir/dir/file: target/dir/dir; # touch $@
target:; # mkdir $@
# mkdir target
# mkdir target/dir
# mkdir target/dir/dir
# touch target/dir/dir/file

It does perfectly what the aim was. The original use case is rather unusual: 
Some of the build steps cannot be automated and instead of having text files 
with manual steps laying here and there I wanted to show the manual 
instructions to the user directly from make. Further, thought that steps like 
'1. ..., 2... etc.' are actually 'ordinal' targets in and each later step is 
dependent on the earlier one. (Also it would be easy to extend in the future, 
no worries about step re-numbering.) And to avoid potential name collisions 
(e.g. the user have to do more than once 'Next') and to accommodate sub-steps 
with arbitrary order ('Location' and 'Virtual machine name' in the attached 
example) let's use some 'growing path construct' as target naming convention.

(Maybe this is an overkill but I like it and I believe it will be easier to 
maintain these tasks as 'makefile'. It is not aimed to be used excessively, 
only for some tasks which are unfortunately manual.)

Thank you. I would be happy to see the new '.ALLOW_RECURSIVE_CHAINS' target in 
the next GNU 'make' release and / or committed to master before.

---

Here is the 'makefile' for the above mentioned user case. It waits for the 
'virtual_machine_name.vmx' file to be created manually, for this test it times 
out after 10 seconds, hence the 'Error 124':

$ ./make -s -f ~/makefile2 virtual_machine_name.vmx
vmware_workstation_16_player                                                    
                                                                                
                                                                                
                                                             VMware Workstation 
16 Player
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next/.../next/.../freebsd_version_10_and_earlier/version/other/guest_operating_system/next/.../i_will_install_the_operating_system_later./install_20_from_3a_/new_virtual_machine.../file/.../player
                                    Player
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next/.../next/.../freebsd_version_10_and_earlier/version/other/guest_operating_system/next/.../i_will_install_the_operating_system_later./install_20_from_3a_/new_virtual_machine.../file
                                               File
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next/.../next/.../freebsd_version_10_and_earlier/version/other/guest_operating_system/next/.../i_will_install_the_operating_system_later./install_20_from_3a_/new_virtual_machine...
                                                    [-New Virtual Machine...-] 
{+New virtual machine...+}
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next/.../next/.../freebsd_version_10_and_earlier/version/other/guest_operating_system/next/.../i_will_install_the_operating_system_later./install_20_from_3a_
                                                                           
Install from:
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next/.../next/.../freebsd_version_10_and_earlier/version/other/guest_operating_system/next/.../i_will_install_the_operating_system_later.
                                                                                
               I will install the operating system later.
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next/.../next/.../freebsd_version_10_and_earlier/version/other/guest_operating_system/next
                                                                                
                                                              [-Next >-] 
{+Next+}
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next/.../next/.../freebsd_version_10_and_earlier/version/other/guest_operating_system
                                                                                
                                                                   Guest 
operating system
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next/.../next/.../freebsd_version_10_and_earlier/version/other
                                                                                
                                                                                
          Other
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next/.../next/.../freebsd_version_10_and_earlier/version
                                                                                
                                                                                
                Version
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next/.../next/.../freebsd_version_10_and_earlier
                                                                                
                                                                                
                        FreeBSD version 10 and earlier
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next/.../next
                                                                                
                                                                                
                                                           [-Next >-] {+Next+}
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next/.../c_3a__5c_cygwin64_5c_home_5c_user_5c_/location_3a_
                                                                                
                                                                                
             Location:
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next/.../c_3a__5c_cygwin64_5c_home_5c_user_5c_
                                                                                
                                                                                
                          C:\cygwin64\home\User\
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next/.../virtual_machine_name/virtual_20_machine_20_name_3a_
                                                                                
                                                                                
            Virtual machine name:
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next/.../virtual_machine_name
                                                                                
                                                                                
                                           virtual_machine_name
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next       
                                                                                
                                                                                
                                                             [-Next >-] {+Next+}
virtual_machine_name.vmx/finish/close/customize_hardware.../next                
                                                                                
                                                                                
                                                             [-Next >-] {+Next+}
virtual_machine_name.vmx/finish/close/customize_hardware...                     
                                                                                
                                                                                
                                                             [-Customize 
Hardware...-] {+Customize hardware...+}
virtual_machine_name.vmx/finish/close/.../512_mib/memory_20_for_20_this_20_virtual_20_machine_3a_/memory
                                                                                
                                                                                
                                     Memory
virtual_machine_name.vmx/finish/close/.../512_mib/memory_20_for_20_this_20_virtual_20_machine_3a_
                                                                                
                                                                                
                                            Memory for this virtual machine:
virtual_machine_name.vmx/finish/close/.../512_mib                               
                                                                                
                                                                                
                                                             [-512 MB-] {+512 
MiB+}
virtual_machine_name.vmx/finish/close                                           
                                                                                
                                                                                
                                                             Close
virtual_machine_name.vmx/finish                                                 
                                                                                
                                                                                
                                                             Finish
virtual_machine_name.vmx
........make: *** [/home/User/makefile2:228: virtual_machine_name.vmx] Error 124

---

$ ./make -s -f ~/makefile virtual_machine_name.vmx > stdout; ./make -s -f 
~/makefile2 virtual_machine_name.vmx > stdout2; git diff --no-index --word-diff 
--word-diff-regex=. stdout stdout2; git diff --no-index --word-diff 
--word-diff-regex=. ~/makefile ~/makefile2
make: *** [/home/User/makefile:245: virtual_machine_name.vmx] Error 124
make: *** [/home/User/makefile2:228: virtual_machine_name.vmx] Error 124
diff --git a/stdout b/stdout2
index 06132d03..98acda3c 100644
--- a/stdout
+++ b/stdout2
@@ -1,20 +1,20 @@
vmware_workstation_16_player                                                    
                                                                                
                                                                                
                                                             VMware Workstation 
16 Player
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next[-2-]/.../next[-3-]/.../freebsd_version_10_and_earlier/version/other/guest_operating_system/next[-4-]/.../i_will_install_the_operating_system_later./install_20_from_3a_/new_virtual_machine.../file/.../player
                                 {+   +}Player
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next[-2-]/.../next[-3-]/.../freebsd_version_10_and_earlier/version/other/guest_operating_system/next[-4-]/.../i_will_install_the_operating_system_later./install_20_from_3a_/new_virtual_machine.../file
                                            {+   +}File
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next[-2-]/.../next[-3-]/.../freebsd_version_10_and_earlier/version/other/guest_operating_system/next[-4-]/.../i_will_install_the_operating_system_later./install_20_from_3a_/new_virtual_machine...
                                                 {+   +}[-New Virtual 
Machine...-] {+New virtual machine...+}
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next[-2-]/.../next[-3-]/.../freebsd_version_10_and_earlier/version/other/guest_operating_system/next[-4-]/.../i_will_install_the_operating_system_later./install_20_from_3a_
                                                                        {+   
+}Install from:
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next[-2-]/.../next[-3-]/.../freebsd_version_10_and_earlier/version/other/guest_operating_system/next[-4-]/.../i_will_install_the_operating_system_later.
                                                                                
            {+   +}I will install the operating system later.
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next[-2-]/.../next[-3-]/.../freebsd_version_10_and_earlier/version/other/guest_operating_system/next[-4-]{+
   +}                                                                           
                                                                [-Next >-] 
{+Next+}
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next[-2-]/.../next[-3-]/.../freebsd_version_10_and_earlier/version/other/guest_operating_system
                                                                                
                                                                 {+  +}Guest 
operating system
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next[-2-]/.../next[-3-]/.../freebsd_version_10_and_earlier/version/other
                                                                                
                                                                                
        {+  +}Other
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next[-2-]/.../next[-3-]/.../freebsd_version_10_and_earlier/version
                                                                                
                                                                                
              {+  +}Version
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next[-2-]/.../next[-3-]/.../freebsd_version_10_and_earlier
                                                                                
                                                                                
                      {+  +}FreeBSD version 10 and earlier
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next[-2-]/.../next[-3-]{+
  +}                                                                            
                                                                                
                                                             [-Next >-] {+Next+}
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next[-2-]/.../c_3a__5c_cygwin64_5c_home_5c_user_5c_/location_3a_
                                                                                
                                                                                
            {+ +}Location:
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next[-2-]/.../c_3a__5c_cygwin64_5c_home_5c_user_5c_
                                                                                
                                                                                
                         {+ +}C:\cygwin64\home\User\
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next[-2-]/.../virtual_machine_name/virtual_20_machine_20_name_3a_
                                                                                
                                                                                
           {+ +}Virtual machine name:
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next[-2-]/.../virtual_machine_name
                                                                                
                                                                                
                                          {+ +}virtual_machine_name
virtual_machine_name.vmx/finish/close/customize_hardware.../next/.../next[-2-]{+
 +}                                                                             
                                                                                
                                                                      [-Next 
>-] {+Next+}
virtual_machine_name.vmx/finish/close/customize_hardware.../next                
                                                                                
                                                                                
                                                             [-Next >-] {+Next+}
virtual_machine_name.vmx/finish/close/customize_hardware...                     
                                                                                
                                                                                
                                                             [-Customize 
Hardware...-] {+Customize hardware...+}
virtual_machine_name.vmx/finish/close/.../512_mib/memory_20_for_20_this_20_virtual_20_machine_3a_/memory
                                                                                
                                                                                
                                     Memory
diff --git a/home/User/makefile b/home/User/makefile2
index 865b8470..dff93180 100755
--- a/home/User/makefile
+++ b/home/User/makefile2
@@ -1,3 +1,4 @@
{+.ALLOW_RECURSIVE_CHAINS:+}
.SECONDARY:

%/.../512_mib/memory_20_for_20_this_20_virtual_20_machine_3a_/memory/...: \
@@ -12,7 +13,7 @@
        printf '%.300s\t%s\n' $@ "$$(cat names/512_mib)" | expand -t 1,301

%/c_3a__5c_cygwin64_5c_home_5c_user_5c_/location_3a_: \
        %/next[-3-] \
        names/location_3a_ \

        printf '%.300s\t%s\n' $@ "$$(cat names/location_3a_)" | expand -t 1,301
@@ -29,19 +30,19 @@

        printf '%.300s\t%s\n' $@ "$$(cat names/close)" | expand -t 1,301

%/customize_hardware.../next/.../next[-2-]/...: \
        
%/customize_hardware.../next/.../next[-2-]/.../c_3a__5c_cygwin64_5c_home_5c_user_5c_
 \
        %/customize_hardware.../next/.../next[-2-]/.../virtual_machine_name \

        :

%/customize_hardware.../next/.../next[-2-]/.../next[-3-]/...: \
        
%/customize_hardware.../next/.../next[-2-]/.../next[-3-]/.../freebsd_version_10_and_earlier
 \

        :

%/customize_hardware.../next/...: \
        %/customize_hardware.../next/.../next[-2-] \

        :

@@ -69,13 +70,13 @@

        printf '%.300s\t%s\n' $@ "$$(cat names/freebsd_version_10_and_earlier)" 
| expand -t 1,301

%/guest_operating_system/next[-4-]/...: \
        
%/guest_operating_system/next[-4-]/.../i_will_install_the_operating_system_later.
 \

        :

%/guest_operating_system: \
        %/guest_operating_system/next[-4-] \
        names/guest_operating_system \

        printf '%.300s\t%s\n' $@ "$$(cat names/guest_operating_system)" | 
expand -t 1,301
@@ -115,24 +116,6 @@

        printf '%.300s\t%s\n' $@ "$$(cat names/new_virtual_machine...)" | 
expand -t 1,301

[-%/next2: \-]
[-      %/next2/... \-]
[-      names/next \-]

[-      printf '%.300s\t%s\n' $@ "$$(cat names/next)" | expand -t 1,301-]

[-%/next3: \-]
[-      %/next3/... \-]
[-      names/next \-]

[-      printf '%.300s\t%s\n' $@ "$$(cat names/next)" | expand -t 1,301-]

[-%/next4: \-]
[-      %/next4/... \-]
[-      names/next \-]

[-      printf '%.300s\t%s\n' $@ "$$(cat names/next)" | expand -t 1,301-]

%/next: \
        %/next/... \
        names/next \
@@ -158,7 +141,7 @@
        printf '%.300s\t%s\n' $@ "$$(cat names/version)" | expand -t 1,301

%/virtual_machine_name/virtual_20_machine_20_name_3a_: \
        %/next[-3-] \
        names/virtual_20_machine_20_name_3a_ \

        printf '%.300s\t%s\n' $@ "$$(cat names/virtual_20_machine_20_name_3a_)" 
| expand -t 1,301

---

$ base64 ~/makefile
LlNFQ09OREFSWToKCiUvLi4uLzUxMl9taWIvbWVtb3J5XzIwX2Zvcl8yMF90aGlzXzIwX3ZpcnR1
YWxfMjBfbWFjaGluZV8zYV8vbWVtb3J5Ly4uLjogXAoJJS9jdXN0b21pemVfaGFyZHdhcmUuLi4g
XAoKCToKCiUvNTEyX21pYjogXAoJJS81MTJfbWliL21lbW9yeV8yMF9mb3JfMjBfdGhpc18yMF92
aXJ0dWFsXzIwX21hY2hpbmVfM2FfIFwKCW5hbWVzLzUxMl9taWIgXAoKCXByaW50ZiAnJS4zMDBz
XHQlc1xuJyAkQCAiJCQoY2F0IG5hbWVzLzUxMl9taWIpIiB8IGV4cGFuZCAtdCAxLDMwMQoKJS9j
XzNhX181Y19jeWd3aW42NF81Y19ob21lXzVjX3VzZXJfNWNfL2xvY2F0aW9uXzNhXzogXAoJJS9u
ZXh0MyBcCgluYW1lcy9sb2NhdGlvbl8zYV8gXAoKCXByaW50ZiAnJS4zMDBzXHQlc1xuJyAkQCAi
JCQoY2F0IG5hbWVzL2xvY2F0aW9uXzNhXykiIHwgZXhwYW5kIC10IDEsMzAxCgolL2NfM2FfXzVj
X2N5Z3dpbjY0XzVjX2hvbWVfNWNfdXNlcl81Y186IFwKCSUvY18zYV9fNWNfY3lnd2luNjRfNWNf
aG9tZV81Y191c2VyXzVjXy9sb2NhdGlvbl8zYV8gXAoJbmFtZXMvY18zYV9fNWNfY3lnd2luNjRf
NWNfaG9tZV81Y191c2VyXzVjXyBcCgoJcHJpbnRmICclLjMwMHNcdCVzXG4nICRAICIkJChjYXQg
bmFtZXMvY18zYV9fNWNfY3lnd2luNjRfNWNfaG9tZV81Y191c2VyXzVjXykiIHwgZXhwYW5kIC10
IDEsMzAxCgolL2Nsb3NlOiBcCgklL2Nsb3NlLy4uLiBcCgluYW1lcy9jbG9zZSBcCgoJcHJpbnRm
ICclLjMwMHNcdCVzXG4nICRAICIkJChjYXQgbmFtZXMvY2xvc2UpIiB8IGV4cGFuZCAtdCAxLDMw
MQoKJS9jdXN0b21pemVfaGFyZHdhcmUuLi4vbmV4dC8uLi4vbmV4dDIvLi4uOiBcCgklL2N1c3Rv
bWl6ZV9oYXJkd2FyZS4uLi9uZXh0Ly4uLi9uZXh0Mi8uLi4vY18zYV9fNWNfY3lnd2luNjRfNWNf
aG9tZV81Y191c2VyXzVjXyBcCgklL2N1c3RvbWl6ZV9oYXJkd2FyZS4uLi9uZXh0Ly4uLi9uZXh0
Mi8uLi4vdmlydHVhbF9tYWNoaW5lX25hbWUgXAoKCToKCiUvY3VzdG9taXplX2hhcmR3YXJlLi4u
L25leHQvLi4uL25leHQyLy4uLi9uZXh0My8uLi46IFwKCSUvY3VzdG9taXplX2hhcmR3YXJlLi4u
L25leHQvLi4uL25leHQyLy4uLi9uZXh0My8uLi4vZnJlZWJzZF92ZXJzaW9uXzEwX2FuZF9lYXJs
aWVyIFwKCgk6CgolL2N1c3RvbWl6ZV9oYXJkd2FyZS4uLi9uZXh0Ly4uLjogXAoJJS9jdXN0b21p
emVfaGFyZHdhcmUuLi4vbmV4dC8uLi4vbmV4dDIgXAoKCToKCiUvY3VzdG9taXplX2hhcmR3YXJl
Li4uOiBcCgklL2N1c3RvbWl6ZV9oYXJkd2FyZS4uLi9uZXh0IFwKCW5hbWVzL2N1c3RvbWl6ZV9o
YXJkd2FyZS4uLiBcCgoJcHJpbnRmICclLjMwMHNcdCVzXG4nICRAICIkJChjYXQgbmFtZXMvY3Vz
dG9taXplX2hhcmR3YXJlLi4uKSIgfCBleHBhbmQgLXQgMSwzMDEKCiUvZmlsZTogXAoJJS9maWxl
Ly4uLiBcCgluYW1lcy9maWxlIFwKCglwcmludGYgJyUuMzAwc1x0JXNcbicgJEAgIiQkKGNhdCBu
YW1lcy9maWxlKSIgfCBleHBhbmQgLXQgMSwzMDEKCiUvZmluaXNoOiBcCgklL2ZpbmlzaC9jbG9z
ZSBcCgluYW1lcy9maW5pc2ggXAoKCXByaW50ZiAnJS4zMDBzXHQlc1xuJyAkQCAiJCQoY2F0IG5h
bWVzL2ZpbmlzaCkiIHwgZXhwYW5kIC10IDEsMzAxCgolL2ZyZWVic2RfdmVyc2lvbl8xMF9hbmRf
ZWFybGllcjogXAoJJS9mcmVlYnNkX3ZlcnNpb25fMTBfYW5kX2VhcmxpZXIvdmVyc2lvbiBcCglu
YW1lcy9mcmVlYnNkX3ZlcnNpb25fMTBfYW5kX2VhcmxpZXIgXAoKCXByaW50ZiAnJS4zMDBzXHQl
c1xuJyAkQCAiJCQoY2F0IG5hbWVzL2ZyZWVic2RfdmVyc2lvbl8xMF9hbmRfZWFybGllcikiIHwg
ZXhwYW5kIC10IDEsMzAxCgolL2d1ZXN0X29wZXJhdGluZ19zeXN0ZW0vbmV4dDQvLi4uOiBcCgkl
L2d1ZXN0X29wZXJhdGluZ19zeXN0ZW0vbmV4dDQvLi4uL2lfd2lsbF9pbnN0YWxsX3RoZV9vcGVy
YXRpbmdfc3lzdGVtX2xhdGVyLiBcCgoJOgoKJS9ndWVzdF9vcGVyYXRpbmdfc3lzdGVtOiBcCgkl
L2d1ZXN0X29wZXJhdGluZ19zeXN0ZW0vbmV4dDQgXAoJbmFtZXMvZ3Vlc3Rfb3BlcmF0aW5nX3N5
c3RlbSBcCgoJcHJpbnRmICclLjMwMHNcdCVzXG4nICRAICIkJChjYXQgbmFtZXMvZ3Vlc3Rfb3Bl
cmF0aW5nX3N5c3RlbSkiIHwgZXhwYW5kIC10IDEsMzAxCgolL2lfd2lsbF9pbnN0YWxsX3RoZV9v
cGVyYXRpbmdfc3lzdGVtX2xhdGVyLjogXAoJJS9pX3dpbGxfaW5zdGFsbF90aGVfb3BlcmF0aW5n
X3N5c3RlbV9sYXRlci4vaW5zdGFsbF8yMF9mcm9tXzNhXyBcCgluYW1lcy9pX3dpbGxfaW5zdGFs
bF90aGVfb3BlcmF0aW5nX3N5c3RlbV9sYXRlci4gXAoKCXByaW50ZiAnJS4zMDBzXHQlc1xuJyAk
QCAiJCQoY2F0IG5hbWVzL2lfd2lsbF9pbnN0YWxsX3RoZV9vcGVyYXRpbmdfc3lzdGVtX2xhdGVy
LikiIHwgZXhwYW5kIC10IDEsMzAxCgolL2luc3RhbGxfMjBfZnJvbV8zYV86IFwKCSUvaW5zdGFs
bF8yMF9mcm9tXzNhXy9uZXdfdmlydHVhbF9tYWNoaW5lLi4uIFwKCW5hbWVzL2luc3RhbGxfMjBf
ZnJvbV8zYV8gXAoKCXByaW50ZiAnJS4zMDBzXHQlc1xuJyAkQCAiJCQoY2F0IG5hbWVzL2luc3Rh
bGxfMjBfZnJvbV8zYV8pIiB8IGV4cGFuZCAtdCAxLDMwMQoKJS9tZW1vcnk6IFwKCSUvbWVtb3J5
Ly4uLiBcCgluYW1lcy9tZW1vcnkgXAoKCXByaW50ZiAnJS4zMDBzXHQlc1xuJyAkQCAiJCQoY2F0
IG5hbWVzL21lbW9yeSkiIHwgZXhwYW5kIC10IDEsMzAxCgolL21lbW9yeV8yMF9mb3JfMjBfdGhp
c18yMF92aXJ0dWFsXzIwX21hY2hpbmVfM2FfOiBcCgklL21lbW9yeV8yMF9mb3JfMjBfdGhpc18y
MF92aXJ0dWFsXzIwX21hY2hpbmVfM2FfL21lbW9yeSBcCgluYW1lcy9tZW1vcnlfMjBfZm9yXzIw
X3RoaXNfMjBfdmlydHVhbF8yMF9tYWNoaW5lXzNhXyBcCgoJcHJpbnRmICclLjMwMHNcdCVzXG4n
ICRAICIkJChjYXQgbmFtZXMvbWVtb3J5XzIwX2Zvcl8yMF90aGlzXzIwX3ZpcnR1YWxfMjBfbWFj
aGluZV8zYV8pIiB8IGV4cGFuZCAtdCAxLDMwMQoKJS9uZXdfdmlydHVhbF9tYWNoaW5lLi4uL2Zp
bGUvLi4uOiBcCgklL25ld192aXJ0dWFsX21hY2hpbmUuLi4vZmlsZS8uLi4vcGxheWVyIFwKCgk6
CgolL25ld192aXJ0dWFsX21hY2hpbmUuLi46IFwKCSUvbmV3X3ZpcnR1YWxfbWFjaGluZS4uLi9m
aWxlIFwKCW5hbWVzL25ld192aXJ0dWFsX21hY2hpbmUuLi4gXAoKCXByaW50ZiAnJS4zMDBzXHQl
c1xuJyAkQCAiJCQoY2F0IG5hbWVzL25ld192aXJ0dWFsX21hY2hpbmUuLi4pIiB8IGV4cGFuZCAt
dCAxLDMwMQoKJS9uZXh0MjogXAoJJS9uZXh0Mi8uLi4gXAoJbmFtZXMvbmV4dCBcCgoJcHJpbnRm
ICclLjMwMHNcdCVzXG4nICRAICIkJChjYXQgbmFtZXMvbmV4dCkiIHwgZXhwYW5kIC10IDEsMzAx
CgolL25leHQzOiBcCgklL25leHQzLy4uLiBcCgluYW1lcy9uZXh0IFwKCglwcmludGYgJyUuMzAw
c1x0JXNcbicgJEAgIiQkKGNhdCBuYW1lcy9uZXh0KSIgfCBleHBhbmQgLXQgMSwzMDEKCiUvbmV4
dDQ6IFwKCSUvbmV4dDQvLi4uIFwKCW5hbWVzL25leHQgXAoKCXByaW50ZiAnJS4zMDBzXHQlc1xu
JyAkQCAiJCQoY2F0IG5hbWVzL25leHQpIiB8IGV4cGFuZCAtdCAxLDMwMQoKJS9uZXh0OiBcCgkl
L25leHQvLi4uIFwKCW5hbWVzL25leHQgXAoKCXByaW50ZiAnJS4zMDBzXHQlc1xuJyAkQCAiJCQo
Y2F0IG5hbWVzL25leHQpIiB8IGV4cGFuZCAtdCAxLDMwMQoKJS9vdGhlcjogXAoJJS9vdGhlci9n
dWVzdF9vcGVyYXRpbmdfc3lzdGVtIFwKCW5hbWVzL290aGVyIFwKCglwcmludGYgJyUuMzAwc1x0
JXNcbicgJEAgIiQkKGNhdCBuYW1lcy9vdGhlcikiIHwgZXhwYW5kIC10IDEsMzAxCgolL3BsYXll
cjogXAoJbmFtZXMvcGxheWVyIFwKCXZtd2FyZV93b3Jrc3RhdGlvbl8xNl9wbGF5ZXIgXAoKCXBy
aW50ZiAnJS4zMDBzXHQlc1xuJyAkQCAiJCQoY2F0IG5hbWVzL3BsYXllcikiIHwgZXhwYW5kIC10
IDEsMzAxCgolL3ZlcnNpb246IFwKCSUvdmVyc2lvbi9vdGhlciBcCgluYW1lcy92ZXJzaW9uIFwK
CglwcmludGYgJyUuMzAwc1x0JXNcbicgJEAgIiQkKGNhdCBuYW1lcy92ZXJzaW9uKSIgfCBleHBh
bmQgLXQgMSwzMDEKCiUvdmlydHVhbF9tYWNoaW5lX25hbWUvdmlydHVhbF8yMF9tYWNoaW5lXzIw
X25hbWVfM2FfOiBcCgklL25leHQzIFwKCW5hbWVzL3ZpcnR1YWxfMjBfbWFjaGluZV8yMF9uYW1l
XzNhXyBcCgoJcHJpbnRmICclLjMwMHNcdCVzXG4nICRAICIkJChjYXQgbmFtZXMvdmlydHVhbF8y
MF9tYWNoaW5lXzIwX25hbWVfM2FfKSIgfCBleHBhbmQgLXQgMSwzMDEKCiUvdmlydHVhbF9tYWNo
aW5lX25hbWU6IFwKCSUvdmlydHVhbF9tYWNoaW5lX25hbWUvdmlydHVhbF8yMF9tYWNoaW5lXzIw
X25hbWVfM2FfIFwKCW5hbWVzL3ZpcnR1YWxfbWFjaGluZV9uYW1lIFwKCglwcmludGYgJyUuMzAw
c1x0JXNcbicgJEAgIiQkKGNhdCBuYW1lcy92aXJ0dWFsX21hY2hpbmVfbmFtZSkiIHwgZXhwYW5k
IC10IDEsMzAxCgpuYW1lcy81MTJfbWliOiB8IG5hbWVzCglwcmludGYgJXMgJ1stNTEyIE1CLV0g
eys1MTIgTWlCK30nID4gJEAKCm5hbWVzL2NfM2FfXzVjX2N5Z3dpbjY0XzVjX2hvbWVfNWNfdXNl
cl81Y186IHwgbmFtZXMKCXByaW50ZiAlcyAnQzpcY3lnd2luNjRcaG9tZVxVc2VyXCcgPiAkQAoK
bmFtZXMvY2xvc2U6IHwgbmFtZXMKCXByaW50ZiAlcyBDbG9zZSA+ICRACgpuYW1lcy9jdXN0b21p
emVfaGFyZHdhcmUuLi46IHwgbmFtZXMKCXByaW50ZiAlcyAnWy1DdXN0b21pemUgSGFyZHdhcmUu
Li4tXSB7K0N1c3RvbWl6ZSBoYXJkd2FyZS4uLit9JyA+ICRACgpuYW1lcy9maWxlOiB8IG5hbWVz
CglwcmludGYgJXMgRmlsZSA+ICRACgpuYW1lcy9maW5pc2g6IHwgbmFtZXMKCXByaW50ZiAlcyBG
aW5pc2ggPiAkQAoKbmFtZXMvZnJlZWJzZF92ZXJzaW9uXzEwX2FuZF9lYXJsaWVyOiB8IG5hbWVz
CglwcmludGYgJXMgJ0ZyZWVCU0QgdmVyc2lvbiAxMCBhbmQgZWFybGllcicgPiAkQAoKbmFtZXMv
Z3Vlc3Rfb3BlcmF0aW5nX3N5c3RlbTogfCBuYW1lcwoJcHJpbnRmICVzICdHdWVzdCBvcGVyYXRp
bmcgc3lzdGVtJyA+ICRACgpuYW1lcy9pX3dpbGxfaW5zdGFsbF90aGVfb3BlcmF0aW5nX3N5c3Rl
bV9sYXRlci46IHwgbmFtZXMKCXByaW50ZiAlcyAnSSB3aWxsIGluc3RhbGwgdGhlIG9wZXJhdGlu
ZyBzeXN0ZW0gbGF0ZXIuJyA+ICRACgpuYW1lcy9pbnN0YWxsXzIwX2Zyb21fM2FfOiB8IG5hbWVz
CglwcmludGYgJXMgJ0luc3RhbGwgZnJvbTonID4gJEAKCm5hbWVzL2xvY2F0aW9uXzNhXzogfCBu
YW1lcwoJcHJpbnRmICVzIExvY2F0aW9uOiA+ICRACgpuYW1lcy9tZW1vcnk6IHwgbmFtZXMKCXBy
aW50ZiAlcyBNZW1vcnkgPiAkQAoKbmFtZXMvbWVtb3J5XzIwX2Zvcl8yMF90aGlzXzIwX3ZpcnR1
YWxfMjBfbWFjaGluZV8zYV86IHwgbmFtZXMKCXByaW50ZiAlcyAnTWVtb3J5IGZvciB0aGlzIHZp
cnR1YWwgbWFjaGluZTonID4gJEAKCm5hbWVzL25leHQ6IHwgbmFtZXMKCXByaW50ZiAlcyAnWy1O
ZXh0ID4tXSB7K05leHQrfScgPiAkQAoKbmFtZXMvbmV3X3ZpcnR1YWxfbWFjaGluZS4uLjogfCBu
YW1lcwoJcHJpbnRmICVzICdbLU5ldyBWaXJ0dWFsIE1hY2hpbmUuLi4tXSB7K05ldyB2aXJ0dWFs
IG1hY2hpbmUuLi4rfScgPiAkQAoKbmFtZXMvb3RoZXI6IHwgbmFtZXMKCXByaW50ZiAlcyBPdGhl
ciA+ICRACgpuYW1lcy9wbGF5ZXI6IHwgbmFtZXMKCXByaW50ZiAlcyBQbGF5ZXIgPiAkQAoKbmFt
ZXMvdmVyc2lvbjogfCBuYW1lcwoJcHJpbnRmICVzIFZlcnNpb24gPiAkQAoKbmFtZXMvdmlydHVh
bF8yMF9tYWNoaW5lXzIwX25hbWVfM2FfOiB8IG5hbWVzCglwcmludGYgJXMgJ1ZpcnR1YWwgbWFj
aGluZSBuYW1lOicgPiAkQAoKbmFtZXMvdmlydHVhbF9tYWNoaW5lX25hbWU6IHwgbmFtZXMKCXBy
aW50ZiAlcyB2aXJ0dWFsX21hY2hpbmVfbmFtZSA+ICRACgpuYW1lcy92bXdhcmVfd29ya3N0YXRp
b25fMTZfcGxheWVyOiB8IG5hbWVzCglwcmludGYgJXMgJ1ZNd2FyZSBXb3Jrc3RhdGlvbiAxNiBQ
bGF5ZXInID4gJEAKCm5hbWVzOgoJbWtkaXIgJEAKCnZpcnR1YWxfbWFjaGluZV9uYW1lLnZteC9m
aW5pc2gvY2xvc2UvLi4uOiBcCgl2aXJ0dWFsX21hY2hpbmVfbmFtZS52bXgvZmluaXNoL2Nsb3Nl
Ly4uLi81MTJfbWliCgp2aXJ0dWFsX21hY2hpbmVfbmFtZS52bXg6IFwKCXZpcnR1YWxfbWFjaGlu
ZV9uYW1lLnZteC9maW5pc2ggXAoKCWVjaG8gJEAKCXRpbWVvdXQgMTAgc2ggLWMgJ3RvdWNoIC1j
ICRAOyB2YXI9JCQobWt0ZW1wKTsgd2hpbGUgdGVzdCAkJHZhciAtbnQgJEA7IGRvIHNsZWVwIDE7
IHByaW50ZiAuOyBkb25lOyBybSAkJHZhcjsgcHJpbnRmICdcJydcbidcJycnCgp2bXdhcmVfd29y
a3N0YXRpb25fMTZfcGxheWVyOiBcCgluYW1lcy92bXdhcmVfd29ya3N0YXRpb25fMTZfcGxheWVy
IFwKCglwcmludGYgJyUuMzAwc1x0JXNcbicgJEAgIiQkKGNhdCBuYW1lcy92bXdhcmVfd29ya3N0
YXRpb25fMTZfcGxheWVyKSIgfCBleHBhbmQgLXQgMSwzMDEK

---

$ base64 ~/makefile2
LkFMTE9XX1JFQ1VSU0lWRV9DSEFJTlM6Ci5TRUNPTkRBUlk6CgolLy4uLi81MTJfbWliL21lbW9y
eV8yMF9mb3JfMjBfdGhpc18yMF92aXJ0dWFsXzIwX21hY2hpbmVfM2FfL21lbW9yeS8uLi46IFwK
CSUvY3VzdG9taXplX2hhcmR3YXJlLi4uIFwKCgk6CgolLzUxMl9taWI6IFwKCSUvNTEyX21pYi9t
ZW1vcnlfMjBfZm9yXzIwX3RoaXNfMjBfdmlydHVhbF8yMF9tYWNoaW5lXzNhXyBcCgluYW1lcy81
MTJfbWliIFwKCglwcmludGYgJyUuMzAwc1x0JXNcbicgJEAgIiQkKGNhdCBuYW1lcy81MTJfbWli
KSIgfCBleHBhbmQgLXQgMSwzMDEKCiUvY18zYV9fNWNfY3lnd2luNjRfNWNfaG9tZV81Y191c2Vy
XzVjXy9sb2NhdGlvbl8zYV86IFwKCSUvbmV4dCBcCgluYW1lcy9sb2NhdGlvbl8zYV8gXAoKCXBy
aW50ZiAnJS4zMDBzXHQlc1xuJyAkQCAiJCQoY2F0IG5hbWVzL2xvY2F0aW9uXzNhXykiIHwgZXhw
YW5kIC10IDEsMzAxCgolL2NfM2FfXzVjX2N5Z3dpbjY0XzVjX2hvbWVfNWNfdXNlcl81Y186IFwK
CSUvY18zYV9fNWNfY3lnd2luNjRfNWNfaG9tZV81Y191c2VyXzVjXy9sb2NhdGlvbl8zYV8gXAoJ
bmFtZXMvY18zYV9fNWNfY3lnd2luNjRfNWNfaG9tZV81Y191c2VyXzVjXyBcCgoJcHJpbnRmICcl
LjMwMHNcdCVzXG4nICRAICIkJChjYXQgbmFtZXMvY18zYV9fNWNfY3lnd2luNjRfNWNfaG9tZV81
Y191c2VyXzVjXykiIHwgZXhwYW5kIC10IDEsMzAxCgolL2Nsb3NlOiBcCgklL2Nsb3NlLy4uLiBc
CgluYW1lcy9jbG9zZSBcCgoJcHJpbnRmICclLjMwMHNcdCVzXG4nICRAICIkJChjYXQgbmFtZXMv
Y2xvc2UpIiB8IGV4cGFuZCAtdCAxLDMwMQoKJS9jdXN0b21pemVfaGFyZHdhcmUuLi4vbmV4dC8u
Li4vbmV4dC8uLi46IFwKCSUvY3VzdG9taXplX2hhcmR3YXJlLi4uL25leHQvLi4uL25leHQvLi4u
L2NfM2FfXzVjX2N5Z3dpbjY0XzVjX2hvbWVfNWNfdXNlcl81Y18gXAoJJS9jdXN0b21pemVfaGFy
ZHdhcmUuLi4vbmV4dC8uLi4vbmV4dC8uLi4vdmlydHVhbF9tYWNoaW5lX25hbWUgXAoKCToKCiUv
Y3VzdG9taXplX2hhcmR3YXJlLi4uL25leHQvLi4uL25leHQvLi4uL25leHQvLi4uOiBcCgklL2N1
c3RvbWl6ZV9oYXJkd2FyZS4uLi9uZXh0Ly4uLi9uZXh0Ly4uLi9uZXh0Ly4uLi9mcmVlYnNkX3Zl
cnNpb25fMTBfYW5kX2VhcmxpZXIgXAoKCToKCiUvY3VzdG9taXplX2hhcmR3YXJlLi4uL25leHQv
Li4uOiBcCgklL2N1c3RvbWl6ZV9oYXJkd2FyZS4uLi9uZXh0Ly4uLi9uZXh0IFwKCgk6CgolL2N1
c3RvbWl6ZV9oYXJkd2FyZS4uLjogXAoJJS9jdXN0b21pemVfaGFyZHdhcmUuLi4vbmV4dCBcCglu
YW1lcy9jdXN0b21pemVfaGFyZHdhcmUuLi4gXAoKCXByaW50ZiAnJS4zMDBzXHQlc1xuJyAkQCAi
JCQoY2F0IG5hbWVzL2N1c3RvbWl6ZV9oYXJkd2FyZS4uLikiIHwgZXhwYW5kIC10IDEsMzAxCgol
L2ZpbGU6IFwKCSUvZmlsZS8uLi4gXAoJbmFtZXMvZmlsZSBcCgoJcHJpbnRmICclLjMwMHNcdCVz
XG4nICRAICIkJChjYXQgbmFtZXMvZmlsZSkiIHwgZXhwYW5kIC10IDEsMzAxCgolL2ZpbmlzaDog
XAoJJS9maW5pc2gvY2xvc2UgXAoJbmFtZXMvZmluaXNoIFwKCglwcmludGYgJyUuMzAwc1x0JXNc
bicgJEAgIiQkKGNhdCBuYW1lcy9maW5pc2gpIiB8IGV4cGFuZCAtdCAxLDMwMQoKJS9mcmVlYnNk
X3ZlcnNpb25fMTBfYW5kX2VhcmxpZXI6IFwKCSUvZnJlZWJzZF92ZXJzaW9uXzEwX2FuZF9lYXJs
aWVyL3ZlcnNpb24gXAoJbmFtZXMvZnJlZWJzZF92ZXJzaW9uXzEwX2FuZF9lYXJsaWVyIFwKCglw
cmludGYgJyUuMzAwc1x0JXNcbicgJEAgIiQkKGNhdCBuYW1lcy9mcmVlYnNkX3ZlcnNpb25fMTBf
YW5kX2VhcmxpZXIpIiB8IGV4cGFuZCAtdCAxLDMwMQoKJS9ndWVzdF9vcGVyYXRpbmdfc3lzdGVt
L25leHQvLi4uOiBcCgklL2d1ZXN0X29wZXJhdGluZ19zeXN0ZW0vbmV4dC8uLi4vaV93aWxsX2lu
c3RhbGxfdGhlX29wZXJhdGluZ19zeXN0ZW1fbGF0ZXIuIFwKCgk6CgolL2d1ZXN0X29wZXJhdGlu
Z19zeXN0ZW06IFwKCSUvZ3Vlc3Rfb3BlcmF0aW5nX3N5c3RlbS9uZXh0IFwKCW5hbWVzL2d1ZXN0
X29wZXJhdGluZ19zeXN0ZW0gXAoKCXByaW50ZiAnJS4zMDBzXHQlc1xuJyAkQCAiJCQoY2F0IG5h
bWVzL2d1ZXN0X29wZXJhdGluZ19zeXN0ZW0pIiB8IGV4cGFuZCAtdCAxLDMwMQoKJS9pX3dpbGxf
aW5zdGFsbF90aGVfb3BlcmF0aW5nX3N5c3RlbV9sYXRlci46IFwKCSUvaV93aWxsX2luc3RhbGxf
dGhlX29wZXJhdGluZ19zeXN0ZW1fbGF0ZXIuL2luc3RhbGxfMjBfZnJvbV8zYV8gXAoJbmFtZXMv
aV93aWxsX2luc3RhbGxfdGhlX29wZXJhdGluZ19zeXN0ZW1fbGF0ZXIuIFwKCglwcmludGYgJyUu
MzAwc1x0JXNcbicgJEAgIiQkKGNhdCBuYW1lcy9pX3dpbGxfaW5zdGFsbF90aGVfb3BlcmF0aW5n
X3N5c3RlbV9sYXRlci4pIiB8IGV4cGFuZCAtdCAxLDMwMQoKJS9pbnN0YWxsXzIwX2Zyb21fM2Ff
OiBcCgklL2luc3RhbGxfMjBfZnJvbV8zYV8vbmV3X3ZpcnR1YWxfbWFjaGluZS4uLiBcCgluYW1l
cy9pbnN0YWxsXzIwX2Zyb21fM2FfIFwKCglwcmludGYgJyUuMzAwc1x0JXNcbicgJEAgIiQkKGNh
dCBuYW1lcy9pbnN0YWxsXzIwX2Zyb21fM2FfKSIgfCBleHBhbmQgLXQgMSwzMDEKCiUvbWVtb3J5
OiBcCgklL21lbW9yeS8uLi4gXAoJbmFtZXMvbWVtb3J5IFwKCglwcmludGYgJyUuMzAwc1x0JXNc
bicgJEAgIiQkKGNhdCBuYW1lcy9tZW1vcnkpIiB8IGV4cGFuZCAtdCAxLDMwMQoKJS9tZW1vcnlf
MjBfZm9yXzIwX3RoaXNfMjBfdmlydHVhbF8yMF9tYWNoaW5lXzNhXzogXAoJJS9tZW1vcnlfMjBf
Zm9yXzIwX3RoaXNfMjBfdmlydHVhbF8yMF9tYWNoaW5lXzNhXy9tZW1vcnkgXAoJbmFtZXMvbWVt
b3J5XzIwX2Zvcl8yMF90aGlzXzIwX3ZpcnR1YWxfMjBfbWFjaGluZV8zYV8gXAoKCXByaW50ZiAn
JS4zMDBzXHQlc1xuJyAkQCAiJCQoY2F0IG5hbWVzL21lbW9yeV8yMF9mb3JfMjBfdGhpc18yMF92
aXJ0dWFsXzIwX21hY2hpbmVfM2FfKSIgfCBleHBhbmQgLXQgMSwzMDEKCiUvbmV3X3ZpcnR1YWxf
bWFjaGluZS4uLi9maWxlLy4uLjogXAoJJS9uZXdfdmlydHVhbF9tYWNoaW5lLi4uL2ZpbGUvLi4u
L3BsYXllciBcCgoJOgoKJS9uZXdfdmlydHVhbF9tYWNoaW5lLi4uOiBcCgklL25ld192aXJ0dWFs
X21hY2hpbmUuLi4vZmlsZSBcCgluYW1lcy9uZXdfdmlydHVhbF9tYWNoaW5lLi4uIFwKCglwcmlu
dGYgJyUuMzAwc1x0JXNcbicgJEAgIiQkKGNhdCBuYW1lcy9uZXdfdmlydHVhbF9tYWNoaW5lLi4u
KSIgfCBleHBhbmQgLXQgMSwzMDEKCiUvbmV4dDogXAoJJS9uZXh0Ly4uLiBcCgluYW1lcy9uZXh0
IFwKCglwcmludGYgJyUuMzAwc1x0JXNcbicgJEAgIiQkKGNhdCBuYW1lcy9uZXh0KSIgfCBleHBh
bmQgLXQgMSwzMDEKCiUvb3RoZXI6IFwKCSUvb3RoZXIvZ3Vlc3Rfb3BlcmF0aW5nX3N5c3RlbSBc
CgluYW1lcy9vdGhlciBcCgoJcHJpbnRmICclLjMwMHNcdCVzXG4nICRAICIkJChjYXQgbmFtZXMv
b3RoZXIpIiB8IGV4cGFuZCAtdCAxLDMwMQoKJS9wbGF5ZXI6IFwKCW5hbWVzL3BsYXllciBcCgl2
bXdhcmVfd29ya3N0YXRpb25fMTZfcGxheWVyIFwKCglwcmludGYgJyUuMzAwc1x0JXNcbicgJEAg
IiQkKGNhdCBuYW1lcy9wbGF5ZXIpIiB8IGV4cGFuZCAtdCAxLDMwMQoKJS92ZXJzaW9uOiBcCgkl
L3ZlcnNpb24vb3RoZXIgXAoJbmFtZXMvdmVyc2lvbiBcCgoJcHJpbnRmICclLjMwMHNcdCVzXG4n
ICRAICIkJChjYXQgbmFtZXMvdmVyc2lvbikiIHwgZXhwYW5kIC10IDEsMzAxCgolL3ZpcnR1YWxf
bWFjaGluZV9uYW1lL3ZpcnR1YWxfMjBfbWFjaGluZV8yMF9uYW1lXzNhXzogXAoJJS9uZXh0IFwK
CW5hbWVzL3ZpcnR1YWxfMjBfbWFjaGluZV8yMF9uYW1lXzNhXyBcCgoJcHJpbnRmICclLjMwMHNc
dCVzXG4nICRAICIkJChjYXQgbmFtZXMvdmlydHVhbF8yMF9tYWNoaW5lXzIwX25hbWVfM2FfKSIg
fCBleHBhbmQgLXQgMSwzMDEKCiUvdmlydHVhbF9tYWNoaW5lX25hbWU6IFwKCSUvdmlydHVhbF9t
YWNoaW5lX25hbWUvdmlydHVhbF8yMF9tYWNoaW5lXzIwX25hbWVfM2FfIFwKCW5hbWVzL3ZpcnR1
YWxfbWFjaGluZV9uYW1lIFwKCglwcmludGYgJyUuMzAwc1x0JXNcbicgJEAgIiQkKGNhdCBuYW1l
cy92aXJ0dWFsX21hY2hpbmVfbmFtZSkiIHwgZXhwYW5kIC10IDEsMzAxCgpuYW1lcy81MTJfbWli
OiB8IG5hbWVzCglwcmludGYgJXMgJ1stNTEyIE1CLV0geys1MTIgTWlCK30nID4gJEAKCm5hbWVz
L2NfM2FfXzVjX2N5Z3dpbjY0XzVjX2hvbWVfNWNfdXNlcl81Y186IHwgbmFtZXMKCXByaW50ZiAl
cyAnQzpcY3lnd2luNjRcaG9tZVxVc2VyXCcgPiAkQAoKbmFtZXMvY2xvc2U6IHwgbmFtZXMKCXBy
aW50ZiAlcyBDbG9zZSA+ICRACgpuYW1lcy9jdXN0b21pemVfaGFyZHdhcmUuLi46IHwgbmFtZXMK
CXByaW50ZiAlcyAnWy1DdXN0b21pemUgSGFyZHdhcmUuLi4tXSB7K0N1c3RvbWl6ZSBoYXJkd2Fy
ZS4uLit9JyA+ICRACgpuYW1lcy9maWxlOiB8IG5hbWVzCglwcmludGYgJXMgRmlsZSA+ICRACgpu
YW1lcy9maW5pc2g6IHwgbmFtZXMKCXByaW50ZiAlcyBGaW5pc2ggPiAkQAoKbmFtZXMvZnJlZWJz
ZF92ZXJzaW9uXzEwX2FuZF9lYXJsaWVyOiB8IG5hbWVzCglwcmludGYgJXMgJ0ZyZWVCU0QgdmVy
c2lvbiAxMCBhbmQgZWFybGllcicgPiAkQAoKbmFtZXMvZ3Vlc3Rfb3BlcmF0aW5nX3N5c3RlbTog
fCBuYW1lcwoJcHJpbnRmICVzICdHdWVzdCBvcGVyYXRpbmcgc3lzdGVtJyA+ICRACgpuYW1lcy9p
X3dpbGxfaW5zdGFsbF90aGVfb3BlcmF0aW5nX3N5c3RlbV9sYXRlci46IHwgbmFtZXMKCXByaW50
ZiAlcyAnSSB3aWxsIGluc3RhbGwgdGhlIG9wZXJhdGluZyBzeXN0ZW0gbGF0ZXIuJyA+ICRACgpu
YW1lcy9pbnN0YWxsXzIwX2Zyb21fM2FfOiB8IG5hbWVzCglwcmludGYgJXMgJ0luc3RhbGwgZnJv
bTonID4gJEAKCm5hbWVzL2xvY2F0aW9uXzNhXzogfCBuYW1lcwoJcHJpbnRmICVzIExvY2F0aW9u
OiA+ICRACgpuYW1lcy9tZW1vcnk6IHwgbmFtZXMKCXByaW50ZiAlcyBNZW1vcnkgPiAkQAoKbmFt
ZXMvbWVtb3J5XzIwX2Zvcl8yMF90aGlzXzIwX3ZpcnR1YWxfMjBfbWFjaGluZV8zYV86IHwgbmFt
ZXMKCXByaW50ZiAlcyAnTWVtb3J5IGZvciB0aGlzIHZpcnR1YWwgbWFjaGluZTonID4gJEAKCm5h
bWVzL25leHQ6IHwgbmFtZXMKCXByaW50ZiAlcyAnWy1OZXh0ID4tXSB7K05leHQrfScgPiAkQAoK
bmFtZXMvbmV3X3ZpcnR1YWxfbWFjaGluZS4uLjogfCBuYW1lcwoJcHJpbnRmICVzICdbLU5ldyBW
aXJ0dWFsIE1hY2hpbmUuLi4tXSB7K05ldyB2aXJ0dWFsIG1hY2hpbmUuLi4rfScgPiAkQAoKbmFt
ZXMvb3RoZXI6IHwgbmFtZXMKCXByaW50ZiAlcyBPdGhlciA+ICRACgpuYW1lcy9wbGF5ZXI6IHwg
bmFtZXMKCXByaW50ZiAlcyBQbGF5ZXIgPiAkQAoKbmFtZXMvdmVyc2lvbjogfCBuYW1lcwoJcHJp
bnRmICVzIFZlcnNpb24gPiAkQAoKbmFtZXMvdmlydHVhbF8yMF9tYWNoaW5lXzIwX25hbWVfM2Ff
OiB8IG5hbWVzCglwcmludGYgJXMgJ1ZpcnR1YWwgbWFjaGluZSBuYW1lOicgPiAkQAoKbmFtZXMv
dmlydHVhbF9tYWNoaW5lX25hbWU6IHwgbmFtZXMKCXByaW50ZiAlcyB2aXJ0dWFsX21hY2hpbmVf
bmFtZSA+ICRACgpuYW1lcy92bXdhcmVfd29ya3N0YXRpb25fMTZfcGxheWVyOiB8IG5hbWVzCglw
cmludGYgJXMgJ1ZNd2FyZSBXb3Jrc3RhdGlvbiAxNiBQbGF5ZXInID4gJEAKCm5hbWVzOgoJbWtk
aXIgJEAKCnZpcnR1YWxfbWFjaGluZV9uYW1lLnZteC9maW5pc2gvY2xvc2UvLi4uOiBcCgl2aXJ0
dWFsX21hY2hpbmVfbmFtZS52bXgvZmluaXNoL2Nsb3NlLy4uLi81MTJfbWliCgp2aXJ0dWFsX21h
Y2hpbmVfbmFtZS52bXg6IFwKCXZpcnR1YWxfbWFjaGluZV9uYW1lLnZteC9maW5pc2ggXAoKCWVj
aG8gJEAKCXRpbWVvdXQgMTAgc2ggLWMgJ3RvdWNoIC1jICRAOyB2YXI9JCQobWt0ZW1wKTsgd2hp
bGUgdGVzdCAkJHZhciAtbnQgJEA7IGRvIHNsZWVwIDE7IHByaW50ZiAuOyBkb25lOyBybSAkJHZh
cjsgcHJpbnRmICdcJydcbidcJycnCgp2bXdhcmVfd29ya3N0YXRpb25fMTZfcGxheWVyOiBcCglu
YW1lcy92bXdhcmVfd29ya3N0YXRpb25fMTZfcGxheWVyIFwKCglwcmludGYgJyUuMzAwc1x0JXNc
bicgJEAgIiQkKGNhdCBuYW1lcy92bXdhcmVfd29ya3N0YXRpb25fMTZfcGxheWVyKSIgfCBleHBh
bmQgLXQgMSwzMDEK

On Friday, November 8th, 2024 at 5:41 AM, Dmitry Goncharov 
<dgoncharov@users.sf.net> wrote:

> On Thu, Nov 7, 2024 at 3:49 AM WaitronCharm via Bug reports and
> discussion for GNU make bug-make@gnu.org wrote:
> 
> > > all: hello.tsk
> > > %.tsk: %.o; $(info hello.tsk)
> > > %.o: %.c %.tsk; $(info hello.c)
> > > Wouldn't this result anyway in a cyclic graph due to '%.tsk'?
> 
> 
> This is a legal makefile. Make drops the circular dependency and
> successfully builds hello.tsk.
> 
> > What I meant in my earlier email is that protecting from infinite recursion 
> > should not happen by forbidding recursion completely.
> 
> 
> As i said earlier, the authors probably had other reasons.
> Given that we mostly deal with files like hello.o, rather than
> hello.o.o, one obvious question is why do you even want to do this?
> 
> > Would this be then (1) check out the code, (2) add a new special target, 
> > (3) instead of 'break' simply continue around line 'Avoiding implicit rule 
> > recursion for rule', (4) compile and see the result?
> 
> 
> (5) add tests, (6) update the manual.
> 
> > What I meant by complications is whether the implementation uses the 
> > pattern rule name as some 'identifier' in any structures and multiples of 
> > the same pattern rule name (per target) would cause mess. (New 'identifier' 
> > could change to the combination of pattern rule name and instance no. of 
> > applying that rule).
> 
> 
> No.
> 
> > I am not familiar with the 'make' code and did not look into it yet. Want 
> > to just estimate how much work would this be.
> 
> 
> i posted a diff below that you can use. This diff achieves the
> behavior you desire. You can see, the change is small. The hard part
> here, is not the size of the changeset. The hard part is to convince
> yourself that, with this change, make still does the minimal necessary
> amount of implicit searches.
> 
> regards, Dmitry
> 
> diff --git a/src/file.c b/src/file.c index 6f816c8a..c8017e34 100644
> --- a/src/file.c +++ b/src/file.c @@ -911,6 +911,10 @@ snap_deps
> (void) d2->wait_here = 1; } + f = lookup_file
> 
> (".ALLOW_RECURSIVE_CHAINS"); + if (f != 0 && f->is_target) +
> 
> allow_recursive_chains = 1; + { struct dep *prereqs =
> expand_extra_prereqs (lookup_variable
> (STRING_SIZE_TUPLE(".EXTRA_PREREQS"))); diff --git a/src/implicit.c
> b/src/implicit.c index 134e3fef..2bd2b90e 100644 --- a/src/implicit.c
> +++ b/src/implicit.c @@ -297,7 +297,7 @@ pattern_search (struct file
> file, int archive, / If this rule is in use by a parent
> pattern_search, don't use it here. */ - if (rule->in_use) + if
> 
> (rule->in_use && !allow_recursive_chains) { DBS (DB_IMPLICIT,
> 
> (_("Avoiding implicit rule recursion for rule '%s'.\n"), diff --git
> a/src/main.c b/src/main.c index 78084d09..5333df5f 100644 ---
> a/src/main.c +++ b/src/main.c @@ -193,6 +193,10 @@ static int
> old_builtin_variables_flag; int export_all_variables = 0; +/* Nonzero
> means a chain of implicit rules can have a rule multiple times. / +
> +int allow_recursive_chains; + / Nonzero means keep going even if
> remaking some file fails (-k). */ int keep_going_flag; diff --git
> a/src/makeint.h b/src/makeint.h index 61c78229..27a269ed 100644 ---
> a/src/makeint.h +++ b/src/makeint.h @@ -736,6 +736,7 @@ extern int
> print_version_flag, check_symlink_flag, posix_pedantic; extern int
> not_parallel, second_expansion, clock_skew_detected; extern int
> rebuilding_makefiles, one_shell, output_sync, verify_flag; extern int
> export_all_variables; +extern int allow_recursive_chains; extern
> unsigned long command_count; extern const char *default_shell;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]