Date: Tue, 27 Jan 1998 06:44:25 -0600 From: Richard Wackerbarth <rkw@dataplex.net> To: dg@root.com Cc: Terry Lambert <tlambert@primenet.com>, current@FreeBSD.ORG Subject: Re: PATCH: if_de.c #ifdef based version encoding Message-ID: <l03130300b0f382e50312@[208.2.87.4]> In-Reply-To: <199801271101.DAA25275@implode.root.com> References: Your message of "Tue, 27 Jan 1998 10:08:45 GMT." <199801271008.DAA04483@usr09.primenet.com>
next in thread | previous in thread | raw e-mail | index | archive | help
In response to Terry Lambert, At 5:01 AM -0600 1/27/98, David Greenman wrote: >>The value of the manifest constant __FreeBSD__ is derived from the >>compiler tools and not from the kernel being built. >> >>In other words, the value of __FreeBSD__ comes from the version of the >>OS the tools were built on, not from the OS that's running or the one >>that is being targeted. >> >>This means that if I build a v3 kernel using a v2 system's tools, the >>"#if __FreeBSD__ >= 3" and "#if defined(__FreeBSD__) && __FreeBSD__ >= 3" >>will not test true, even though that is, in fact, what I am building. >> >> >>Version information should not be encoded in #ifdef's; that is what >>branch tags are for. If I can check this code out, implicitly, I am >>building a 3+ system. The "#if" tests are bogus. [...] > In theory, the de driver is maintained by Matt Thomas and he supports >multiple OS's and OS versions in the code. You'll notice that there are >#ifdef's for NetBSD and BSD/OS in there as well. If we were going to do >as you suggest, then it would only make sense if all of the OS #ifdef's >were removed. This will only make it more difficult for Matt to support >FreeBSD, so I think it's a bad idea. In a sense, you are both right. The code SHOULD contain #if tests to allow the unification of multiple branches into a single vendor file. At the same time, Terry is correct that the test is being derived from a bogus source. The only definition that should be derived from the compiler is that which relates to the compiler itself. For example, "Is this a 'C' compiler or a 'C++' compiler?" might be such a distinction. The OS Target should be defined in the SOURCE tree of the system. This is what .../include/machine and .../include/sys should define. Now, unless you are using the default case of compiling for "this OS on this machine", those values are NOT in /usr/include/sys/ but rather some $TARGET/include/sys/. Richard Wackerbarth
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?l03130300b0f382e50312>