Date: Thu, 2 Jul 1998 13:52:28 +0300 (IDT) From: Eli Zaretskii To: Nate Eldredge cc: djgpp-workers AT delorie DOT com, dj AT delorie DOT com Subject: Re: Cross-compiling djlsr In-Reply-To: <359B2300.2387E7DA@cartsys.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Precedence: bulk On Wed, 1 Jul 1998, Nate Eldredge wrote: > 1. If none of the macros __STRICT_ANSI__, _POSIX_SOURCE, etc. were > defined by the source, the system headers take it upon themselves to > define _POSIX_SOURCE. This leads to problems when compiling things like > djasm, since DJGPP's coff.h only defines the important stuff ifndef > _POSIX_SOURCE. I know nothing about DJGPP cross-compile setup, but why do you need to mix DJGPP and local headers to compile djasm? It is IMHO a very bad idea, and the problem you've described might as well be the tip of an iceberg. Doesn't Linux have coff.h? > It seems that Linux's headers think of these macros > inclusively. For instance, _GNU_SOURCE allows all GNU extensions but > also defines _POSIX_SOURCE, which they consider a subset. DJGPP, OTOH, > uses them *ex*clusively-- _POSIX_SOURCE turns off everything not allowed > by POSIX. I wonder who is right? I think both are right. You just shouldn't mix headers from different libraries, that's all. > 2. When cross-compiling, everything uses misc.exe. That's fine, but it > caused the following gotcha. After failing in my attempt to > cross-compile, I loaded dosemu, and thought I'd try compiling that way. > So I did a `make clean' to get rid of all the Linux stuff. Oops! It > uses `misc rm', and misc.exe is a Linux ELF binary! dosemu crashes, and > I spend several minutes thinking it's a bug in it. "make clean" should be done in the same environment where the files-to-be-cleaned were built. > I guess there's not really any way around this, other than to have > separate makefiles for DOS and Unix, or to require that fileutils be > installed. That's too extreme, IMHO. Since the only problem is with DOSEmu (and other DOSsish environment)--Unix will refuse to run something whose format is not recognized--you could make misc depend on a small program which tests whether it is a v2-style executable. There's a function in v2.02 library to test that (_check_v2_prog).