Git development
 help / color / mirror / Atom feed
From: "Philip Oakley" <philipoakley@iee.org>
To: "Philip Oakley" <philipoakley@iee.org>,
	"Johannes Sixt" <j6t@kdbg.org>, "Git List" <git@vger.kernel.org>
Cc: "Eric Wong" <normalperson@yhbt.net>,
	"Junio C Hamano" <gitster@pobox.com>,
	"Git MsysGit" <msysgit@googlegroups.com>
Subject: Re: [msysGit] Missing inversion in Makefile (ee9be06)
Date: Tue, 10 Feb 2015 22:51:19 -0000	[thread overview]
Message-ID: <C928DF3E5D7D423588EF2C2BA09D8A73@PhilipOakley> (raw)
In-Reply-To: 4C7BB65E9EE445F08645582230EA9782@PhilipOakley

Another go at this XY-Problem...


From: "Philip Oakley" <philipoakley@iee.org>
Sent: Saturday, December 27, 2014 8:17 PM
> From: "Johannes Sixt" <j6t@kdbg.org>
>> Am 27.12.2014 um 19:49 schrieb Philip Oakley:
>>> Hi,
>>>
>>> In ee9be06 (perl: detect new files in MakeMaker builds, 2012-07-27)
>>> there is a step to detect if there has been an update to the PM.* 
>>> files,
>>> however it appears that the logic is inverted in the comparison.
>>>
>>> I need some extra eye's on this to be sure I have it right (I'm 
>>> trying
>>> to debug an old Windows breakage...).
>>>
>>> The resultant output of a make dry run included (on my m/c)..:
>>>
>>>  find perl -type f -name '*.pm' | sort >perl/PM.stamp+ && \
>>>   { cmp perl/PM.stamp+ perl/PM.stamp >/dev/null 2>/dev/null || mv
>>> perl/PM.stamp+ perl/PM.stamp; } && \
>>>   rm -f perl/PM.stamp+
>>>  make -C perl  PERL_PATH='/usr/bin/perl' prefix='/c/Documents and
>>> Settings/Philip' perl.mak
>>>
>>> Shouldn't it be `{ ! cmp ` so that when the files are not identical, 
>>> the
>>> move is performed?
>>>
>>> https://github.com/git/git/blob/ee9be06770223238c6a22430eb874754dd22dfb0/Makefile#L2097
>>
>> The existing code looks correct to me. cmp succeeds when the files 
>> are
>> identical and fails when they are different: When it succeeds (files 
>> are
>> equal), the mv is not executed. When it fails, either because a file
>> does not exist or they are different, the mv is executed.
>>
> Thanks. The inverse logic had me confused.
> It's like 7400's again, for those that remember;-)
>

Here's where the real problem starts...

> I was getting errors from
> `cd $git_dir && make -n MSVC=1 V=1 2>MakeDryErrs.txt 1>MakeDry.txt` 
> (borrowed from 'msvc-build') which reported the PM.stamp as a problem, 
> with the quoted code being the last part of the MakeDry.txt (and no 
> PM.stamp seen).
>
> Now that I've been poking and investigating the error's stopped! It's 
> all getting rather frustrating. Time to go again on a clean and 
> rebuild..

I'm trying to get the msysgit msvc-build script[1], which essentially 
implements the Git 'compat/vcbuild/README', to work again in terms of 
creating a Visual Studio [2008] project file (.sln).

If I run the code (find perl -type f -name '*.pm' ...) manually then the 
PM.stamp file is created allowing future dry-runs to succeed - hence 
some of my confusion.

The script uses git's 'contrib/buildsystems/engine.pl' to parse the 
output of:
 `make -n MSVC=1 V=1 2>\dev\null` [2]

This appears to no longer work because the -n (dry-run) option fails to 
run the required 'perl/PM.stamp' during the dry-run. At least that's now 
my understanding.

The 
https://www.gnu.org/software/make/manual/html_node/Instead-of-Execution.html 
page indicates that adding a + to the right rule would be needed to also 
run the PM.stamp process during dry-run.

At the moment I'm getting (on my old WinXP machine, using Msysgit 1.9.5 
as a basis)

$ make -n MSVC=1 V=1 1>makedry.txt
make[1]: *** No rule to make target `PM.stamp', needed by `perl.mak'. 
Stop.
make: *** [perl/perl.mak] Error 2

i.e. PM.stamp was not created so can't be the target of the dry-run make 
rule.

The makedry.txt file generated ends with the

find perl -type f -name '*.pm' | sort >perl/PM.stamp+ && \
 { cmp perl/PM.stamp+ perl/PM.stamp >/dev/null 2>/dev/null || mv 
perl/PM.stamp+ perl/PM.stamp; } && \
 rm -f perl/PM.stamp+
make -C perl  PERL_PATH='/usr/bin/perl' prefix='/c/Documents and 
Settings/Philip' perl.mak
make[1]: Entering directory `/c/msysgit195/git/perl'
make -C .. GIT-CFLAGS
make[2]: Entering directory `/c/msysgit195/git'
FLAGS='compat/vcbuild/scripts/clink.pl:  -Imsvcgit/32bits/include [...]
     if test x"$FLAGS" != x"`cat GIT-CFLAGS 2>/dev/null`" ; then \
  echo >&2 "    * new build flags"; \
  echo "$FLAGS" >GIT-CFLAGS; \
            fi
make[2]: Leaving directory `/c/msysgit195/git'
make[1]: Leaving directory `/c/msysgit195/git/perl'

i.e. the commands for the PM.stamp process are listed, rather than 
executed as may have been hoped.

I've tried hacking the plus(+) prefix onto the "perl/PM.stamp: FORCE" 
rule, but it gave the same error.


What would be the right way of making a dry-run produce a suitable 
complete output? Make files are not something I normally delve into.

--
Philip

[1] https://github.com/msysgit/msysgit/blob/master/bin/msvc-build
[2] 
https://github.com/git/git/blob/master/contrib/buildsystems/engine.pl#L75

      reply	other threads:[~2015-02-10 22:51 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-27 18:49 Missing inversion in Makefile (ee9be06) Philip Oakley
2014-12-27 19:07 ` Johannes Sixt
2014-12-27 20:17   ` Philip Oakley
2015-02-10 22:51     ` Philip Oakley [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=C928DF3E5D7D423588EF2C2BA09D8A73@PhilipOakley \
    --to=philipoakley@iee.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=j6t@kdbg.org \
    --cc=msysgit@googlegroups.com \
    --cc=normalperson@yhbt.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox