Re: [RFU] vorbis-tools 1.4.0-1

2010-07-12 Thread Corinna Vinschen
On Jul  8 11:01, David Rothenberger wrote:
> Please leave 1.2.0-2 as previous.
> 
> wget -x -nH --cut-dirs=2 \
>   
> http://home.comcast.net/~david.rothenberger/cygwin/vorbis-tools/vorbis-tools-1.4.0-1-src.tar.bz2
>  \
>   
> http://home.comcast.net/~david.rothenberger/cygwin/vorbis-tools/vorbis-tools-1.4.0-1.tar.bz2
>  \
>   http://home.comcast.net/~david.rothenberger/cygwin/vorbis-tools/setup.hint

Uploaded.


Thanks,
Corinna

-- 
Corinna Vinschen  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader  cygwin AT cygwin DOT com
Red Hat


Re: RFU: cppcheck-1.44-1

2010-07-12 Thread Corinna Vinschen
On Jul 11 08:14, Chris Sutcliffe wrote:
> Please upload:
> 
> ---
> 
> wget -x -nH --cut-dirs=1 \
> http://emergedesktop.org/cygwin/cppcheck/cppcheck-1.44-1.tar.bz2 \
> http://emergedesktop.org/cygwin/cppcheck/cppcheck-1.44-1-src.tar.bz2
> 
> ---
> 
> Keep cppcheck-1.43-1 as previous and all others can be removed.

Uploaded and 1.42-1 removed.


Thanks,
Corinna

-- 
Corinna Vinschen  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader  cygwin AT cygwin DOT com
Red Hat


Re: RFU: nasm-2.08.02-1

2010-07-12 Thread Corinna Vinschen
On Jul 12 00:50, Dean Scarff wrote:
> Upstream release, please upload.
> 
> wget -x -nH --cut-dirs=2 \
> http://scarff.id.au/file/cygwin/nasm/nasm-2.08.02-1-src.tar.bz2 \
> http://scarff.id.au/file/cygwin/nasm/nasm-2.08.02-1.tar.bz2

Uploaded.


Thanks,
Corinna

-- 
Corinna Vinschen  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader  cygwin AT cygwin DOT com
Red Hat


Re: [ITP] libtheora - Xiph.Org's video codec

2010-07-12 Thread Corinna Vinschen
On Jul  6 16:40, David Rothenberger wrote:
> I'd like to package libtheora. It is part of Debian Stable[1].
> [...]
> download:
> --
> wget -x -nH --cut-dirs=2 \
>   http://home.comcast.net/~david.rothenberger/cygwin/libtheora/setup.hint \
>   
> http://home.comcast.net/~david.rothenberger/cygwin/libtheora/libtheoraenc1/setup.hint
>  \
>   
> http://home.comcast.net/~david.rothenberger/cygwin/libtheora/libtheoraenc1/libtheoraenc1-1.1.1-2.tar.bz2
>  \
>   
> http://home.comcast.net/~david.rothenberger/cygwin/libtheora/libtheoradec1/setup.hint
>  \
>   
> http://home.comcast.net/~david.rothenberger/cygwin/libtheora/libtheoradec1/libtheoradec1-1.1.1-2.tar.bz2
>  \
>   
> http://home.comcast.net/~david.rothenberger/cygwin/libtheora/libtheora0/setup.hint
>  \
>   
> http://home.comcast.net/~david.rothenberger/cygwin/libtheora/libtheora0/libtheora0-1.1.1-2.tar.bz2
>  \
>   
> http://home.comcast.net/~david.rothenberger/cygwin/libtheora/libtheora-devel/setup.hint
>  \
>   
> http://home.comcast.net/~david.rothenberger/cygwin/libtheora/libtheora-devel/libtheora-devel-1.1.1-2.tar.bz2
>  \
>   
> http://home.comcast.net/~david.rothenberger/cygwin/libtheora/libtheora-1.1.1-2.tar.bz2
>  \
>   
> http://home.comcast.net/~david.rothenberger/cygwin/libtheora/libtheora-1.1.1-2-src.tar.bz2

Looks good to me.  Uploaded.


Thanks,
Corinna

-- 
Corinna Vinschen  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader  cygwin AT cygwin DOT com
Red Hat


Re: gcc4: next release (Dave Korn we need you)

2010-07-12 Thread Corinna Vinschen
On Jul  8 08:25, Charles Wilson wrote:
> On 7/8/2010 3:22 AM, Corinna Vinschen wrote:
> > On Jul  7 18:24, Christopher Faylor wrote:
> >> [...]
> >> Whether we use w32api in the cygwin tree or from somewhere else really
> >> doesn't matter as long as Cygwin builds.
> > 
> > That's why I'd like to know if Cygwin builds with w32api from the
> > mingw64 project.
> 
> Have you checked with Red Hat's lawyers concerning the use of mingw64's
> w32api to build their cygwin-based products?

That's something I'll doo as soon as we really intend to switch the
Cygwin build to mingw64's w32api.  Right now, what I get from all the
gory details, it's not that easy to keep mingw64's w32api headers and
libs apart from the mingw headers and libs anyway.

> > However, I won't object against having a version for the 64 bit gcc
> > hidden in the cross-compiler tree, if there's no way around it.
> > But *if* there's a way to keep just a single version, it should be
> > exploited.
> 
> I don't get this. There are three reasons to be concerned about multiple
> copies -- even if they are identical (which in this case they are not
> and can't be, esp. 64bit vs 32bit implibs).
>   1) disk space
>   2) things that should be identical (like headers for the
>  OS's API) out of sync, or keeping them deliberately different
>   3) end user confusion

You're missing number 4.  Cygwin and Mingw are targeting the same
underlying "real" target, which is Windows.  Both systems use different
approaches and both have their own set of libs and headers which only
make sense in their own environment.  But underneath they both run on
Windows.  For that reason my POV is that w32api is an intrinsic part of
the system and that's why it belongs into /usr/include and /usr/lib.
IMHO.

If there's no way around it, I don't mind if we have multiple w32api,
one for the system and one for each mingw cross compiler.  I don't
mind the disk space.  I don't know beforehand which solution will
result in more or less user confusion.  So just go ahead.

As for the path issue, I'd prefer to get a layout which closely
resembles the Fedora mingw filesystem layout as in
http://fedoraproject.org/wiki/Packaging/MinGW#Filesystem_layout.


Corinna

-- 
Corinna Vinschen  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader  cygwin AT cygwin DOT com
Red Hat


RFC: cygport cross-compiling APIs

2010-07-12 Thread Yaakov (Cygwin/X)
I think I'm getting close to nailing down cross-compiling support in
cygport.

Throughout, the prefix=/usr assumption has been removed; *-*-mingw*
hosts use /mingw, everything else is /usr for now.  (Anyone know any
specific systems where that's not the case?)  Cross-compiled packages
are properly strip(1)ed with the correct binutils.  Libtool fixup puts
non-native DLLs into $CROSS_HOST/prefix/bin if not already there, and
doesn't move non-PE libs but still removes static modules.  Also,
package dependencies for mingw* and linux* cross-compiles are supported.
While I was at it, some initial work was done to make adapting to a
possible future x86_64-pc-cygwin easier as well.

Here's what the API looks like so far:

toolchain.cygclass: for building binutils/gcc/gdb (cross-)compilers
* TOOLCHAIN_TARGET: the target triplet (defined in .cygport BEFORE
"inherit toolchain")
* toolchain_compile(): runs cygconf with --build/host/target and
--with-sysroot, followed by cygmake
* src_compile(): just toolchain_compile; no cygautoreconf (these
packages don't autoreconf easily)

cross.cygclass: for cross-compiling
* CROSS_HOST: the host triplet (defined in .cygport BEFORE "inherit
cross")
* CROSS_SYSROOT: the host sys-root (== /usr/${CROSS_HOST}/sys-root)
* CC/CXX/F77/FC are $host-prefixed
* PKG_CONFIG_LIBDIR and PKG_CONFIG_SYSROOT_DIR are set for pkg-config
* cygconf automatically adds --build/host/target

I implemented the cygconf hook instead of a separate cross_compile() so
that other cygconf-based cygclasses would benefit.  For example, a
mingw64-x86_64-glib2.0 would "inherit cross gnome2", where
gnome2_compile calls cygconf.

Right now my dilemma is with the cross.cygclass install functions.  I'm
not sure whether cyginstall/do*/new* should just flip personality to
install under $CROSS_SYSROOT (much like cygconf does), or whether to
implement separate docross{bin,include,lib,...} functions.  My reason
for considering the former is that it would reduce duplicate code and
avoid easy mistakes (e.g. installing cross-compiled stuff into native
directories).  It would also make it easier to take a native .cygport,
rename it, define CROSS_HOST and inherit cross, and build.  OTOH I'm not
sure whether the more manually-controlled dodir, exe/insinto, doexe/ins,
and newexe/ins should also imply $CROSS_SYSROOT or not: IOW, is there
any case where a cross-compiled package would legitimately install
anything outside of $CROSS_SYSROOT (besides the standard docs).  I also
wonder if that would itself be confusing.

As for the package naming scheme -- which is not being enforced by
cygport itself -- my thoughts are OS[-CPU]-PACKAGE, IOW:

mingw64-i686-binutils
mingw64-i686-gcc
mingw64-i686-pthreads
mingw64-i686-runtime
mingw64-i686-zlib

mingw64-x86_64-binutils
mingw64-x86_64-gcc
mingw64-x86_64-pthreads
mingw64-x86_64-runtime
mingw64-x86_64-zlib

linux-i686-binutils
linux-i686-gcc
linux-i686-glibc (not built yet; borrowed from Fedora for bootstrapping)
linux-i686-kernel-headers (ditto)
linux-i686-zlib

(none of these are built yet)
mingw-binutils
mingw-bzip2
mingw-gcc
mingw-runtime

And so on.  For simplicity, none of these are multilib, and the
conflicting binutils/gcc locales/info/etc. are removed, for reasons
stated in earlier discussions.

Note that I'm *not* breaking out separate lib/devel packages, because if
you think about the reasons for these splits with native packages,
within the context of cross-compiling they doesn't make sense.

Comments welcome, but let's not bikeshed this.  Hopefully this week or
next I can document this all, clean up the patches, and publish a beta
cygport and .cygport drafts.


Yaakov




Re: gcc4: next release (Dave Korn we need you)

2010-07-12 Thread Yaakov (Cygwin/X)
On Mon, 2010-07-12 at 10:41 +0200, Corinna Vinschen wrote:
> That's something I'll doo as soon as we really intend to switch the
> Cygwin build to mingw64's w32api.  Right now, what I get from all the
> gory details, it's not that easy to keep mingw64's w32api headers and
> libs apart from the mingw headers and libs anyway.

No, it's not.

> You're missing number 4.  Cygwin and Mingw are targeting the same
> underlying "real" target, which is Windows.  Both systems use different
> approaches and both have their own set of libs and headers which only
> make sense in their own environment.  But underneath they both run on
> Windows.  For that reason my POV is that w32api is an intrinsic part of
> the system and that's why it belongs into /usr/include and /usr/lib.
> IMHO.

OTOH there are a number of packages out there that see  in
the default include path and say, "Oh, this must be a Windows system!
Let's use winsock/GDI/etc."  which is often -- but not always --
incorrect on Cygwin.  w32api may not be limited to cross-compiling, but
having it in the default search path isn't always great either.

> If there's no way around it, I don't mind if we have multiple w32api,
> one for the system and one for each mingw cross compiler.  I don't
> mind the disk space.  I don't know beforehand which solution will
> result in more or less user confusion.  So just go ahead.

This will be much easier from the packaging perspective.

> As for the path issue, I'd prefer to get a layout which closely
> resembles the Fedora mingw filesystem layout as in
> http://fedoraproject.org/wiki/Packaging/MinGW#Filesystem_layout.

That is what I'm working with now.


Yaakov




Re: gcc4: next release (Dave Korn we need you)

2010-07-12 Thread Corinna Vinschen
On Jul 12 05:25, Yaakov S wrote:
> On Mon, 2010-07-12 at 10:41 +0200, Corinna Vinschen wrote:
> > You're missing number 4.  Cygwin and Mingw are targeting the same
> > underlying "real" target, which is Windows.  Both systems use different
> > approaches and both have their own set of libs and headers which only
> > make sense in their own environment.  But underneath they both run on
> > Windows.  For that reason my POV is that w32api is an intrinsic part of
> > the system and that's why it belongs into /usr/include and /usr/lib.
> > IMHO.
> 
> OTOH there are a number of packages out there that see  in
> the default include path and say, "Oh, this must be a Windows system!
> Let's use winsock/GDI/etc."  which is often -- but not always --
> incorrect on Cygwin.  w32api may not be limited to cross-compiling, but
> having it in the default search path isn't always great either.

Yeah, everything comes with a price tag.

> > As for the path issue, I'd prefer to get a layout which closely
> > resembles the Fedora mingw filesystem layout as in
> > http://fedoraproject.org/wiki/Packaging/MinGW#Filesystem_layout.
> 
> That is what I'm working with now.

Nice.


Corinna

-- 
Corinna Vinschen  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader  cygwin AT cygwin DOT com
Red Hat


Re: cygport cross compile(r) support [was: Re: cygport patch: suppress libtool fixup step]

2010-07-12 Thread Charles Wilson
On 7/12/2010 1:49 AM, Yaakov (Cygwin/X) wrote:
> On Sun, 2010-07-11 at 14:43 -0400, Charles Wilson wrote:
>> However, it's easier to walk before you run, so how about we get
>> everything nice and pretty with two (three, counting mingw.org) separate
>> non-multilib tool chains.  Each would be built with sysroots, and given
>> the way (I now discover) sysroots *must* work, we would thus end up with;
> 
> Since you keep mentioning mingw.org, AFAICS they still ship gcc-3.4.4,
> which we (sort of) have already.

No, their current release is 4.5.0, and the previous release was 4.4.0.
They have had 'testing' releases of 4.3.0 and 4.2.1, but those never
achieved sufficient stability to be promoted as (what we would call)
'curr:'.

>  Is that what you are referring to, or
> do you simply mean the latest binutils and gcc built for target
> i686-pc-mingw32?  If the latter, are any patches or specific configure
> options necessary (besides using dw2 exceptions instead of sjlj)?

Patches were required for 4.2.1 and 4.3.0.  However, I believe
mingw.org's 4.4.0 and 4.5.0 were based on upstream gcc sources without
modification, just configured for i686-pc-mingw32.  I'll d/l the -src
and check later.

And, of course, mingw.org's compilers are tied to the winsup/w32api
headers and libs, and to the winsup/mingw mingw-runtime.

>> [1] The official --prefix with which cross-compiled clients, built
>> using the mingw.org toolchain, should be configured.  Dunno whether
>> this should be the /mingw (which is what mingw.org uses for its
>> stuff, modulo dosify concerns), or something we decide on our own,
>> like --prefix=/mingw32 or --prefix=/mingw.org.
>>
>> [2] Whatever prefix we choose to assert that cross-compiled clients,
>> built using the 32bit-flavor mingw64 toolchain, should be
>> configured.  I think the mingw64 guys recommend using anything
>> EXCEPT /mingw -- because they don't want to conflict with stuff
>> from mingw.org (or, more accurately, they don't want to run the
>> risk that stuff from mingw.org would conflict with THEM)
>>
>> [3] Whatever prefix we choose to assert that cross-compiled clients,
>> built using the 64bit-flavor mingw64 toolchains, should be
>> configured.  I'm partial to --prefix=/mingw64.
> 
> Are you sure about this?  The /mingw prefix is hard-coded into all
> gcc/config/i386/t-mingw*.

And that's specifically why mingw64 doesn't want to use it, AND why
*mingw64* recommends that, if you install multiple versions of the
(non-cross) mingw and/or mingw64 compilers, that NONE of them go into
/mingw (C:\MinGW, D:\MinGW, etc) -- because then ALL of them will find
whatever lucky version happens to get installed there.  (IIRC, they
acknowledge that you'd then have to specify explicitly -L and -I options
even for native compilers, but that's not an issue for us, right? For
cross-compilers, our users would have to do that anyway, correct?)

Obviously, this conflicts with *mingw.org*'s recommendations.

I don't know if this disagreement would affect our decisions, because
(a) all three toolchains would have different sysroots, so toolchain A's
"/mingw" sysroot $prefix would be at /usr/$target-A/sys-root/mingw,
while toolchain B's sysroot $prefix "/mingw" would be at
/usr/$target-B/sys-root/mingw -- so there would be no conflict.

However, if compiled clients were to be (re)packaged and installed by
third party users without cygwin...then they'd all "want" to go in
/mingw if all of our toolchains used .../sys-root/mingw.  And then we
run headlong into that mingw64/mingw.org disagreement.

So...my "compromise" was to follow mingw.org's recs for the mingw.org
toolchain, and mingw64's recs for theirs. (But I held out the
possibility, for mingw.org, of specifically choosing a different sysroot
$prefix, such as /mingw32, instead -- just to avoid "privileging" one
toolchain over the others.)

Honestly, I think we just have to experiment to see which way works best
-- including *using* the toolchains to compile clients, and then install
the results on a virgin machine in various locations.

>> And maybe JonY doesn't even care much about multilib.
> 
> From the POV of building other packages, trying to build any package
> simultaneously for a multilib setup is a lot of work, and cygport is
> certainly not up to that right now.  I think it should suffice if we
> provide both i686 and x86_64 mingw64 compilers.

I was thinking of client packages that might not be fully 64bit ready;
e.g. some utility apps need to be compiled using -m32, but most of the
package is -m64-ready.

In this case, you'd want to configure using the 64bit toolchain, but set
a per-app CFLAGS that include -m32 for the few apps that aren't 64bit
ready. AFAIK, autotooled packages don't let you specify a per-target CC,
so you can't easily use a different (e.g. i686-*) compiler.

Now, I don't KNOW that any projects like this exist, but that was my
thinking in "favor" of a multilib 64bit toolchain.

But t

Re: gcc4: next release (Dave Korn we need you)

2010-07-12 Thread Charles Wilson
On 7/12/2010 8:02 AM, Corinna Vinschen wrote:
> On Jul 12 05:25, Yaakov S wrote:
>> On Mon, 2010-07-12 at 10:41 +0200, Corinna Vinschen wrote:
>>> You're missing number 4.  Cygwin and Mingw are targeting the same
>>> underlying "real" target, which is Windows. 

I wasn't actually "missing" it; I just considered this part of #2, but
didn't fully express it: "things that should be identical...out of
sync".  E.g. if it's all one OS, then all compilers should use identical
headers.  And, if they are (or should be) identical, then why not have a
single common location?

I understand that argument, but we're not sure they all really CAN be
identical (e.g. the 64bit libs vs. the 32bit ones; the possible issue
with mingw64 headers' provenance, etc).  So, if there might be SOME
differences, then...

It makes sense to me, then, that each toolchain should provide, in a
private area (e.g. sysroot), that version of the w32api libs and headers
with which it has been tested.  Rather than a hodge-podge where "these
two cross toolchains have their own custom w32api headers that they
share between them but separate copies of the w32api libs; /that/ one
has a custom w32api that isn't shared with anybody, but /this/ one
shares w32api with cygwin's gcc..." Ick.)

>>> Both systems use different
>>> approaches and both have their own set of libs and headers which only
>>> make sense in their own environment.  But underneath they both run on
>>> Windows.  For that reason my POV is that w32api is an intrinsic part of
>>> the system and that's why it belongs into /usr/include and /usr/lib.
>>> IMHO.

I assume that you were not proposing to move the w32api headers from
/usr/include/w32api/ into /usr/include/ proper, nor the libs from
/usr/lib/w32api into /usr/lib proper, were you?

If the cross toolchains provide their own w32api (and mingw-runtime)
[or, for 64bit, "mingw64-crt-headers" and "mingw64-crt-lib"], then...the
only remaining user of our current w32api api package is cygwin's own
gcc (all versions).

And the only remaining user of our current mingw-runtime packages is
cygwin's gcc3 (and anything that might require /usr/bin/mingwm10.dll).

So, after all of the cross compilers are deployed, we might think about
what optimizations we could make with regards to how the
non-toolchain-sysroot-specific w32api and mingw-runtime packages
are...packaged.  (The answer may be: make no changes.)  But I don't want
to start that discussion too early, so let's table it for now.

>> OTOH there are a number of packages out there that see  in
>> the default include path and say, "Oh, this must be a Windows system!
>> Let's use winsock/GDI/etc."  which is often -- but not always --
>> incorrect on Cygwin.  w32api may not be limited to cross-compiling, but
>> having it in the default search path isn't always great either.
> 
> Yeah, everything comes with a price tag.

Yep.  I have to keep reminding people that #including  will
cause _WIN32 to be defined, and that #ifdef _WIN32 does not, actually,
mean !CYGWIN...

--
Chuck


Re: RFC: cygport cross-compiling APIs

2010-07-12 Thread Charles Wilson

On 7/12/2010 6:19 AM, Yaakov (Cygwin/X) wrote:

I think I'm getting close to nailing down cross-compiling support in
cygport.


Great! (Is your current state checked in to git master or some other 
branch?)



Throughout, the prefix=/usr assumption has been removed; *-*-mingw*
hosts use /mingw, everything else is /usr for now.


Are we sure about this, given mingw64's express desire to avoid this 
$prefix -- specifically because "the other mingw" has historically used 
it, and "the other mingw" has had its preferences enshrined in the 
upstream gcc source code?


Do the guys at #mingw64 have any comment on the "proper" prefix that 
cross compilers should use underneath a sysroot?



(Anyone know any
specific systems where that's not the case?)  Cross-compiled packages
are properly strip(1)ed with the correct binutils.  Libtool fixup puts
non-native DLLs into $CROSS_HOST/prefix/bin


I ask the following question for clarification only:

So by DLL you mean, explicitly, PE/COFF Dynamic Libraries for win32, and 
NOT the generic "dynamically loaded library" category that can, loosely 
speaking, include also ELF .so's.


I assume so, because that's the only interpretation that doesn't 
conflict with this statement:



if not already there, and
doesn't move non-PE libs


Now, for the next bit:


but still removes static modules.


You mean that if a (shared) library -- whether ".dll" or ".so" -- is 
built using libtool's -module flag (e.g. shouldnotlink=yes in the .la 
file), then the .a's (and .dll.a's) are removed?


I suppose the "linktime symbolic links" often used with ELF shared 
libraries aren't even created by 'libtool --mode=install' for modules, 
so that's a non-issue.


I ask the preceding question for clarification only.


Also,
package dependencies for mingw* and linux* cross-compiles are supported.
While I was at it, some initial work was done to make adapting to a
possible future x86_64-pc-cygwin easier as well.


Neato.


Here's what the API looks like so far:

toolchain.cygclass: for building binutils/gcc/gdb (cross-)compilers
* TOOLCHAIN_TARGET: the target triplet (defined in .cygport BEFORE
"inherit toolchain")
* toolchain_compile(): runs cygconf with --build/host/target and
--with-sysroot, followed by cygmake
* src_compile(): just toolchain_compile; no cygautoreconf (these
packages don't autoreconf easily)


Sounds good.


cross.cygclass: for cross-compiling
* CROSS_HOST: the host triplet (defined in .cygport BEFORE "inherit
cross")
* CROSS_SYSROOT: the host sys-root (== /usr/${CROSS_HOST}/sys-root)
* CC/CXX/F77/FC are $host-prefixed
* PKG_CONFIG_LIBDIR and PKG_CONFIG_SYSROOT_DIR are set for pkg-config
* cygconf automatically adds --build/host/target


What about $prefix?  Is this handled automatically by cygport (e.g. 
always /usr, unless $host=mingw* then /mingw?) and can't be overridden?


I'd really like to be able to override $prefix in general, because it 
would make the gcc-tools-* packages a lot easier.


Also, particularly with respect to the mingw* cross compilers, I'm 
unsure that all three should all use sys-root/mingw/.  Again, what do 
the #mingw64 folks recommend in this situation?



I implemented the cygconf hook instead of a separate cross_compile() so
that other cygconf-based cygclasses would benefit.  For example, a
mingw64-x86_64-glib2.0 would "inherit cross gnome2", where
gnome2_compile calls cygconf.


I see.


Right now my dilemma is with the cross.cygclass install functions.  I'm
not sure whether cyginstall/do*/new* should just flip personality to
install under $CROSS_SYSROOT (much like cygconf does), or whether to
implement separate docross{bin,include,lib,...} functions.  My reason
for considering the former is that it would reduce duplicate code and
avoid easy mistakes (e.g. installing cross-compiled stuff into native
directories).  It would also make it easier to take a native .cygport,
rename it, define CROSS_HOST and inherit cross, and build.


Another argument is similar to the one above: what about other 
.cygclasses that use these functions?  If I'm required to use 
docrossbin, I can easily do that in my own .cygport -- but not if I 
inherit another .cygclass in addition to 'cross', and THAT .cygclass 
uses the (original) dobin.


As far as the package .cygport calling dodoc...I think we'll have to 
take that as it goes. The NOCROSS idea below might help here.



OTOH I'm not
sure whether the more manually-controlled dodir, exe/insinto, doexe/ins,
and newexe/ins should also imply $CROSS_SYSROOT or not:


Well, you know me: I'm always in favor of giving the end user of cygport 
more power, and less authoritarian control by cygport itself. 
Boat-on-water with channel markers, rather than car-on-road with 
concrete guardrails.


However, in THIS case...see below.


IOW, is there
any case where a cross-compiled package would legitimately install
anything outside of $CROSS_SYSROOT (besides the standard docs).  I also
wonder if that would itself be confusing.


Wel

Re: RFC: cygport cross-compiling APIs

2010-07-12 Thread Yaakov (Cygwin/X)
On Mon, 2010-07-12 at 14:41 -0400, Charles Wilson wrote:
> Are we sure about this, given mingw64's express desire to avoid this 
> $prefix -- specifically because "the other mingw" has historically used 
> it, and "the other mingw" has had its preferences enshrined in the 
> upstream gcc source code?

The (proposed?) Fedora mingw64 packages use /mingw as well.

> So by DLL you mean, explicitly, PE/COFF Dynamic Libraries for win32, and 
> NOT the generic "dynamically loaded library" category that can, loosely 
> speaking, include also ELF .so's.

Yes, I mean DLL literally, as in PE/COFF; I use "library" to refer to
the generic, cross-platform concept.

> You mean that if a (shared) library -- whether ".dll" or ".so" -- is 
> built using libtool's -module flag (e.g. shouldnotlink=yes in the .la 
> file), then the .a's (and .dll.a's) are removed?
> 
> I suppose the "linktime symbolic links" often used with ELF shared 
> libraries aren't even created by 'libtool --mode=install' for modules, 
> so that's a non-issue.

If -avoid-version is used -- which it generally should be with -module
-- then libfoo.la produces only a libfoo.so file and no symlinks are
created.  If not, then you still get the .so.X.Y.Z file and .so.X
and .so symlinks, but the latter is usually what is actually dlopen()ed
at runtime.  Either way, the .so must stay, the .a can go, and of course
there is no .dll.a.

> Neato.

No, I have no plans on cross-compiling graphviz.  But there is a native
package in Ports. :-)

> What about $prefix?  Is this handled automatically by cygport (e.g. 
> always /usr, unless $host=mingw* then /mingw?) and can't be overridden?

Correct.

> I'd really like to be able to override $prefix in general, because it 
> would make the gcc-tools-* packages a lot easier.

Are those still needed, with gcc now supporting recent autotools?

> Another argument is similar to the one above: what about other 
> .cygclasses that use these functions?  If I'm required to use 
> docrossbin, I can easily do that in my own .cygport -- but not if I 
> inherit another .cygclass in addition to 'cross', and THAT .cygclass 
> uses the (original) dobin.
> 
> As far as the package .cygport calling dodoc...I think we'll have to 
> take that as it goes. The NOCROSS idea below might help here.

Right now I'm thinking that dodoc should ignore CROSS_HOST.

> Well, there's the mingw-runtime stuff, which is still used/needed by 
> gcc3's -mno-cygwin.

IIUC Corinna correctly, w32api would stay and we would add a
mingw-w32api.

> Plus there's the particular version of w32api that 
> is used by cygwin's own gcc (and gcc3's -mno-cygwin) and is installed 
> into /usr/include/w32api + /usr/lib/w32api.

More importantly, mingw-runtime would move from /usr/{include,lib}/mingw
to /usr/i686-pc-cygwin/sysroot/mingw/{include,lib}, which would break
gcc3 -mno-cygwin, unless we provide symlinks.  If we build a
i686-pc-mingw32-gcc-4.5, can we just get rid of gcc3 -mno-cygwin?
Plase?

> I assume this version would NOT be compiled using the i686-pc-mingw32 
> toolchain, but instead by the cygwin one (e.g. its cygport -- if it is 
> actually built USING cygport -- wouldn't inherit cross), so that's 
> probably not an issue.

Right, the w32api going into /usr/{include,lib}/w32api would be built
native.

>the mingw-{zlib,bzip2,xz,libgcrypt,libgpg-error} stuff
>   -- should be handled by the new cross cygclass with no problems

Is compiling setup.exe with mingw64-i686 an option?  If so, we'll need
mingw64-i686 ports of those as well.  Either way, those should all be
cygport-able.

>the tools in the cygwin package, like strace.exe and cygcheck.exe
>   -- no changes; handled by cygwin gcc with -nostdlib? and not
>  built using cygport anyway.
> 
> So...there aren't that many cross-compiled packages that are part of the 
> cygwin distribution -- and few would use any additional cygclasses, 

No, I don't think we should be accepting every library *in the distro*
compiled for every toolchain on the planet.  But by covering the basics
properly, cygport should still be usable for that purpose by individual
users.

> I think, on balance, it'd be better to have the existing do* scripts 
> change their behavior when 'cross' has been inherited, rather than 
> requiring the use of a separate set of functions.

Ack.

> The best of all worlds would be to have a local override, that can be 
> set per-command:

I have already thought of a couple of cases where it might make sense to
install outside of sysroot, although that should still be a fringe case.
If we agree that do* should work under the sysroot, then whatever we
decide for handling these can come later w/o breaking API.

> This scheme can't address the issues related to OTHER inherited 
> cygclasses which use the do* commands.  But then, we probably don't care 
> about that very much.  .cygclasses are supposed to be black boxes that 
> 'just work'(tm); their internal operation shouldn't be second

Re: RFC: cygport cross-compiling APIs

2010-07-12 Thread Charles Wilson
On 7/12/2010 6:06 PM, Yaakov (Cygwin/X) wrote:
> On Mon, 2010-07-12 at 14:41 -0400, Charles Wilson wrote:
>> Are we sure about this, given mingw64's express desire to avoid this 
>> $prefix -- specifically because "the other mingw" has historically used 
>> it, and "the other mingw" has had its preferences enshrined in the 
>> upstream gcc source code?
> 
> The (proposed?) Fedora mingw64 packages use /mingw as well.

Proposed by whom? Some member of the mingw64 project, or outsiders like
us?  Again, what do the actual #mingw64 folks say about this?

>> What about $prefix?  Is this handled automatically by cygport (e.g. 
>> always /usr, unless $host=mingw* then /mingw?) and can't be overridden?
> 
> Correct.
> 
>> I'd really like to be able to override $prefix in general, because it 
>> would make the gcc-tools-* packages a lot easier.
> 
> Are those still needed, with gcc now supporting recent autotools?

JonY just mentioned that he thought a specific *libtool* epoch might be
required -- but I think that's because he was trying to use autoreconf,
which IMO isn't (yet) appropriate for gcc/binutils...heck, it's not
appropriate for anything in the sourceware src/ repository.

gcc-4.6 development apparently still requires autoconf-2.64, while the
"normal" cygwin autoconf is at 2.65 (and should soon be moving to 2.66).
 gcc requires automake-1.11.1, and our "regular" automake1.11 is 1.11.1
so at least that matches.

But the autoconf difference means we still need gcc-tools-epoch2. And
gcc-tools-epoch1 will never go away, but since it's frozen anyway we
never need to rebuild IT.

>> As far as the package .cygport calling dodoc...I think we'll have to 
>> take that as it goes. The NOCROSS idea below might help here.
> 
> Right now I'm thinking that dodoc should ignore CROSS_HOST.

I don't really care either way about that one.  What about things
associated with $sysconfdir and $localstatedir?  (e.g. /etc and /var are
usually "outside" of $prefix).  For cross (clients), suppress
prep_etc_defaults, and assume $sysconfdir and $localstatedir are
underneath $prefix?

>> Well, there's the mingw-runtime stuff, which is still used/needed by 
>> gcc3's -mno-cygwin.
> 
> IIUC Corinna correctly, w32api would stay and we would add a
> mingw-w32api.
>
>> Plus there's the particular version of w32api that 
>> is used by cygwin's own gcc (and gcc3's -mno-cygwin) and is installed 
>> into /usr/include/w32api + /usr/lib/w32api.
> 
> More importantly, mingw-runtime would move from /usr/{include,lib}/mingw
> to /usr/i686-pc-cygwin/sysroot/mingw/{include,lib}, 

All of this agrees with my understanding.

> which would break
> gcc3 -mno-cygwin, unless we provide symlinks.  If we build a
> i686-pc-mingw32-gcc-4.5, can we just get rid of gcc3 -mno-cygwin?
> Plase?

No argument from me.  There will be weeping, wailing, and gnashing of
teeth on the list, tho.

>> I assume this version would NOT be compiled using the i686-pc-mingw32 
>> toolchain, but instead by the cygwin one (e.g. its cygport -- if it is 
>> actually built USING cygport -- wouldn't inherit cross), so that's 
>> probably not an issue.
> 
> Right, the w32api going into /usr/{include,lib}/w32api would be built
> native.

Ack.

>>the mingw-{zlib,bzip2,xz,libgcrypt,libgpg-error} stuff
>>   -- should be handled by the new cross cygclass with no problems
> 
> Is compiling setup.exe with mingw64-i686 an option?  If so, we'll need
> mingw64-i686 ports of those as well.  Either way, those should all be
> cygport-able.

Hm. A 64bit version of setup.exe; interesting. I don't mind providing
the additional packages for that; the list of setup's dependencies isn't
THAT long.

>>the tools in the cygwin package, like strace.exe and cygcheck.exe
>>   -- no changes; handled by cygwin gcc with -nostdlib? and not
>>  built using cygport anyway.
>>
>> So...there aren't that many cross-compiled packages that are part of the 
>> cygwin distribution -- and few would use any additional cygclasses, 
> 
> No, I don't think we should be accepting every library *in the distro*
> compiled for every toolchain on the planet.  But by covering the basics
> properly, cygport should still be usable for that purpose by individual
> users.

Right.  Setup's dependencies, IMO, serve as a sufficient "proof of
concept" that the cross compiler toolchains work.

>> The best of all worlds would be to have a local override, that can be 
>> set per-command:
> 
> I have already thought of a couple of cases where it might make sense to
> install outside of sysroot, although that should still be a fringe case.

True. This is not the sort of thing you'd want to do automatically, but
the ability to override might be important in some cases. None spring to
mind right now, but I'm sure they exist.

> If we agree that do* should work under the sysroot, then whatever we
> decide for handling these can come later w/o breaking API.

OK.

>> This scheme can't address the issues related to OTHER inheri

Re: RFC: cygport cross-compiling APIs

2010-07-12 Thread Yaakov (Cygwin/X)
On Mon, 2010-07-12 at 22:45 -0400, Charles Wilson wrote:
> I don't really care either way about that one.  What about things
> associated with $sysconfdir and $localstatedir?  (e.g. /etc and /var are
> usually "outside" of $prefix).  For cross (clients), suppress
> prep_etc_defaults, and assume $sysconfdir and $localstatedir are
> underneath $prefix?

IIUC /etc and /var only belong outside of $prefix when $prefix == /usr.
Any other $prefix and they go back underneath, so that's what I'm doing.

> No argument from me.  There will be weeping, wailing, and gnashing of
> teeth on the list, tho.

What else is new?

> Hm. A 64bit version of setup.exe; interesting. I don't mind providing
> the additional packages for that; the list of setup's dependencies isn't
> THAT long.

No, I said i686-mingw64.  I easily cross-built setup's deps for that
toolchain then tried to build setup, but the mingw64 DDK headers are
clearly not up to the task; they #include headers which do not exist and
apparently some headers are missing.  setup.exe needed some adjustments
as well even as far as I did get.  To be continued.

> > BTW, weren't you going to check mingw.org gcc for patches and options so
> > I could cook up .cygport drafts for those as well?
> 
> See attached.  Short version: no patches to the source code, but some
> odd build techniques.
> 
> One thing we probably don't care about: mingw.org uses a "forward.c" app
> to emulate hardlinks (and to avoid MSYS's fallback of "make a separate
> copy" for symlinks) of very large .exe's.
> 
> configure options:
> 
>   cd $builddir &&
>   $srcdir/configure \
> --enable-languages=c,c++,ada,fortran,objc,obj-c++  \
> --disable-sjlj-exceptions\
> --with-dwarf2\
> --enable-shared  \
> --enable-libgomp \
> --disable-win32-registry \
> --enable-libstdcxx-debug \
> --enable-version-specific-runtime-libs \
> --disable-werror \
> --build=mingw32  \
> --prefix=/mingw
> 
> Java is not yet ready, but is promised for later. Werror is disabled
> because there are some unaviodable warnings in the Ada build.

Does anyone actually *use* Ada?  (/me promptly ducks.)

> Technically, the mingw.org folks say the only cross compilers they
> support are ones built using this tool:
> 
> http://sourceforge.net/projects/mingw/files/Cross-Hosted%20MinGW%20Build%20Tool/x86-mingw32-build-1.0.1-rc1/x86-mingw32-build-1.0.1-sh.tar.bz2/download
> 
> but...we probably would provide support for "our" cross compiler right
> here, anyway. And we can probably coordinate "our" build closely enough
> with the mingw.org folks that they would likely "bless" our version, too.

We should definitely be coordinating patches and configure options so
that our compiler is actually compatible to theirs.  Whether or not they
"bless" is up to them.

> E.g. I want to have a package:
> 
> chucks-tools-VER-REL that has
> requires: mingw64-i686-libstdc++6
> 
> Why is this verboten, when all it takes is a little cygport magic no
> different that any of our other 500 native cygwin packages, or your
> other 2000 cygwin ports packages?

IOW you want to make a mingw mini-distro driven by setup.exe.  That's
IMO not within the realm of the *Cygwin* distribution, nor should it be.

> Again, this boils right back down to the fact that here, our Host
> platform can simultaneously execute applications (and libraries) from
> both the $host and the $target.

So therefore we should change the distro into some Cygwin/MinGW hybrid
where anything goes as long as it's PE?  So why not put the DLLs
in /usr/bin?  Hey, throw in DJGPP while you're at it.  You could even
convince GCC to treat them all like a m32/m64 multilib...

... Wait, sound familiar?  It was called "-mno-cygwin".  Yes, we used to
do just that, and IT DIDN'T WORK.  And even worse, people got confused.
So now we're moving *away* from that, and for good reason.

Sorry, but no thanks.  MinGW's place within the distro should be for
cross-compiling.

> Well, it does appear that we are at loggerheads.  You insist that
> cygwin/mingw is EXACTLY the same as linux/mingw or solaris/irix or any
> other combination; I say there is a significant difference between
> cygwin/mingw and any other host/target combination, and that difference
> makes it wise for use to make certain, minor, accommodations.
> 
> Like, for instance, simply splitting runtime DLLs -- even i686-mingw32
> or x86_64-mingw32 ones -- into separate installable packages JUST LIKE
> we do for native cygwin DLLs.  I simply can't believe you're digging
> your heels in over two lines of cygport(5) code and an extra .hint file
> -- simply for the sake of treating a cygwin-hosted mingw compiler
> EXACTLY like a linux-hosted one.
> 
> cygwin != linux -- *especially* when it comes to runtime interactions
> with win32.

>From the website: "Cygwin is a Linux-like environment for Windows."

The point is that Cygwin should strive to be like Linux wherever