Re: [msysGit] Missing inversion in Makefile (ee9be06)

2015-02-10 Thread Philip Oakley

Another go at this XY-Problem...


From: Philip Oakley philipoak...@iee.org
Sent: Saturday, December 27, 2014 8:17 PM

From: Johannes Sixt j...@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 2MakeDryErrs.txt 1MakeDry.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 1makedry.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


--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [msysGit] Missing inversion in Makefile (ee9be06)

2014-12-27 Thread Johannes Sixt
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.

-- Hannes

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [msysGit] Missing inversion in Makefile (ee9be06)

2014-12-27 Thread Philip Oakley

From: Johannes Sixt j...@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;-)

I was getting errors from
`cd $git_dir  make -n MSVC=1 V=1 2MakeDryErrs.txt 1MakeDry.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..


Philip 


--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html