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.