This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: blackbox does not compile with latest cygwin


Igor Pechtchanski wrote:

I installed the exact blackbox version as last time which is the latest
official release. This latest official release has one file that calls
assert() but does not #include it. I checked its include tree and, as
far as I looked, have not found the #include <assert.h> anywhere on the
tree.



Yes, because it expects <assert.h> to be included from one of the system headers.

Ok. I see. Now I'm starting to see the big picture.

Other files that call assert have the header included in them. The
strangest thing is that the same version compiles under the current
linux that I have (Redhat 9.0), the former cygwin, but *not* the latest
cygwin.



That's because some Cygwin system headers got changed to not include <assert.h> where they previously did.

Bingo! Thanks for this info or I would not be able to sleep being bothered by why it behaves differently across different
platforms. Oh, I made the assumption that blackbox would compile under different platforms! That's it! I almost forgot that
different platforms have different characteristics and different issues!




It compiles with the latest cygwin if I #include <assert.h> on
the file in question.

Does this mean that there is a problem with gcc? or configure? I'm
confused now whether the problem resides in the packaging of blackbox,
in the way ./configure runs on the old cygwin, or on the way ./configure
runs on the new cygwin, or in Linux or even in gcc. Why doesn't gcc
complain in the old cygwin and in Linux?



The problem is with blackbox. Apparently, some of the Linux system headers[*] include <assert.h>, and so did some of the Cygwin ones. So this particular file in blackbox relied on a needed header (<assert.h>) to be inluded from elsewhere (another header). This is a bug. Cygwin's headers got changed, and <assert.h> is no longer in the include chain, so blackbox broke. The fix is to #include <assert.h> in the file that calls assert(). It may also be possible to do this through some configure magic if the project maintainers *really* want to avoid including <assert.h> twice in the project code, but why bother?

Absolutely. Thanks for this wonderful explanation. I really see the problem with blackbox now.

I could submit a patch to the blackbox maintainers but will have to tell
them that the reason for it is so that it will compile with the latest
cygwin.  Or could it be that ./configure needs to be patched?



The reason for the patch is portability.  Sure, it will compile on the
current Linux, but POSIX doesn't require any other header to include
<assert.h>, so blackbox should do it itself.  As I said above, I don't
think you should bother with patching configure.
	Igor
[*] If you want to find out which header includes <assert.h> on Linux,
simply preprocess the broken file on Linux using gcc -E and see where
"assert.h" got included from.


Ok. I will submit a patch to the blackbox maintainers and clarify this issue with its mailing list. Thank you
very much Igor for this entire clarification. You cygwin people are really the best :)


Best Regards,

Carlo
------
Carlo Florendo
Astra Philippipnes Inc.
www.astra.ph


-- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]