[ITP] mingw-w64

Charles Wilson cygwin@cwilson.fastmail.fm
Tue Jul 6 15:36:00 GMT 2010


On 7/6/2010 1:10 AM, JonY wrote:
>> I had a thinko, thanks for the patch. Yeah, cygport moves the libtool
>> dlls around.
>>
>> I will recheck on the README file and libobjc-2, I thought I patched up
>> the configure file.

You did, but...

> Alright, I repackaged binutils to add the /etc/profile.d scripts

I'll look at mingw64-binutils again later. But right now I'm looking 
only at mingw64-gcc:

> and
> repackaged gcc to get rid of the wrongly installed objc dll.
>
> With the new libtool restrict, no more moving needed. I can also confirm
> that libobjc-2.dll goes into bin32 and bin64 on cygport install.

I found the problem: configure.ac is patched, but there's no mechanism 
to ensure that the corresponding change to configure is included in the 
patch (by default, cygport *assumes* you will run autoreconf, and so 
explicitly excludes configure, Makefile.in (for automake projects), etc 
from the diff.)

Now, in this case you do NOT want to run autoreconf.  The gcc codebase 
requires "careful handling" if you want to update the auto* generated 
files; autoreconf is not smart enough.

So, there are a couple of ways around this. All are pretty ugly.


Perhaps the simplest is an extra command in src_build:
	(cd ${S}/libobjc && autoconf)
to just force the end user to "fixup" THAT configure script only, 
without mucking with any other auto* generated files.


Another option (one that I've had to use on occasion) is to give up on 
letting cygport handle the patch generation for .src.patch.  What you 
do, is you just don't HAVE a .src.patch.  Instead, you make your OWN 
patch, ensure it contains all the files you want to include, like 
libobjc/configure, and name that patch ANYTHING but ${P}.src.patch. 
Then, add this to your cygport:

PATCH_URI="the-name-of-my-custom-patch"


But...this cygportism has bugged me for a while.  So, I tried to create 
a generic facility where you could, for instance, do:

DIFF_NO_EXCLUDES="configure Makefile.in *.m4"

and then cygport would ensure that, even if it ordinarily would exclude 
a file from the diff, if that file name (or pattern) appears in 
$DIFF_NO_EXCLUDES then it would avoid doing so.  But that got to be 
really hard, what with all the word expansion and shell metacharacter 
worries. (Plus, it would have slowed down ALL cygports in a pretty big 
way during __pkg_diff, for the benefit of only a few.)

So, instead, I whipped up a different patch to cygport which only tells 
cygport to avoid automatically adding the autoconf, automake, and 
aclocal-generated files to the diff excludes list.  To use it, add this 
to your cygport:

RESTRICT+=" autoreconf-diff-excludes"

However, before you modify your .cygport recipe to rely on un-official 
cygport patches, let's make sure Yaakov actually accepts the patch. (I 
know from long painful experience that you do NOT want to get ahead of 
Yaakov's patch-acceptance process).


Given all that, this remaining issue where libobjc/configure is not kept 
in sync with libobjc/configure.ac is the only remaining problem with 
rebuilding the mingw64-gcc packages.  With that corrected, it rebuilds 
fine from source.


--
Chuck



More information about the Cygwin-apps mailing list