URL:
  <https://savannah.gnu.org/bugs/?56301>

                 Summary: Mandatory/Optional include files and pattern rule
with multi-targets
                 Project: make
            Submitted by: masahiroy
            Submitted on: Fri 10 May 2019 04:33:49 PM UTC
                Severity: 3 - Normal
              Item Group: None
                  Status: None
                 Privacy: Public
             Assigned to: None
             Open/Closed: Open
         Discussion Lock: Any
       Component Version: None
        Operating System: None
           Fixed Release: None
           Triage Status: None

    _______________________________________________________

Details:

I see a problem when
a pattern rule with multiple targets
are responsible for creating included files,
some of which are mandatory, and the
others are optional.

I attached two test cases.

Both of them include two files, inc_a.mk and inc_b.mk

The difference between the two is:

For Makefile1, inc_a.mk is optional, inc_b.mk is mandatory.
For Makefile2, inc_a.mk is mandatory, inc_b.mk is optional.

inc_a.mk and inc_b.mk are supposed to be
simultaneously created by a pattern rule
(but it always fails).


The behavior is completely different
between Makefile1 and Makefile2.


$ make -f Makefile1
Makefile1:1: starting
target in question: inc_b.mk
false
Makefile1:8: inc_b.mk: No such file or directory
make: *** [Makefile1;12: inc_b.mk] Error 1


Make was terminated immediately when
it failed to create inc_b.mk



$ make -f Makefile2
Makefile2:1: starting
target in question: inc_b.mk
false
make: Failed to remake makefile 'inc_a.mk'.
hello


This also failed to create included files,
and showed "Failed to remake" message,
but continued running, then executed the 'all' target.

I think the reason is the target in question
in the pattern rule is inc_b.mk, which is
an optional include file.

As far as I examined, the last included file
becomes the target in question of the pattern rule.

So, I see some sort of sense in this behavior.

However, Makefile2 failed to create the mandatory
include file, inc_a.mk, so Make cannot (should not)
continue parsing the Makefile.

One way to fix this is,
the target in question should be chosen
from mandatory include files over optional ones.




    _______________________________________________________

File Attachments:


-------------------------------------------------------
Date: Fri 10 May 2019 04:33:49 PM UTC  Name: Makefile1  Size: 163B   By:
masahiroy

<http://savannah.gnu.org/bugs/download.php?file_id=46891>
-------------------------------------------------------
Date: Fri 10 May 2019 04:33:49 PM UTC  Name: Makefile2  Size: 163B   By:
masahiroy

<http://savannah.gnu.org/bugs/download.php?file_id=46892>

    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?56301>

_______________________________________________
  Message sent via Savannah
  https://savannah.gnu.org/


_______________________________________________
Bug-make mailing list
Bug-make@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-make

Reply via email to