9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
From: Enrico Weigelt <weigelt@metux.de>
To: Fans of the OS Plan 9 from Bell Labs <9fans@cse.psu.edu>
Subject: Re: [9fans] plan9 httpd/pegasus on unix?
Date: Fri, 29 Feb 2008 19:16:17 +0100	[thread overview]
Message-ID: <20080229181617.GC29683@nibiru.local> (raw)
In-Reply-To: <140e7ec30802281626x188aa366s1182a0313bc80aaf@mail.gmail.com>

* sqweek <sqweek@gmail.com> wrote:

> >  Well, this *very* unobvious and complex (instead of just passing $CC and
> >  $LD to make), requires me to maintain additional logic, which woulnd't
> >  be necessary, if DJB could write his makefiles in more standard and sane
> >  ways ;-P
>
>  The docs are a bit light on custom compilers, granted (probably as
> they're irrelevant for 95% of users), but INSTALL does point you at
> conf-users/conf-groups/conf-qmail. Doesn't take a genius to notice
> conf-cc and conf-ld from there.

It's not the point that it is written somewhere, but that it's very
different of the vast majority of the packages I'm using/maintaining.

I've got to maintain a several hundred packages for our emedded target
platforms. All of them MUST fit into an 100% automatic build process.
So it really matters if I have to develop (and maintain for a long
time) individual build rules for each package.

I would accept this if these individualities would serve an noticable
purpose, but I don't see that here. Not that I want to tell DJB how
to write makefiles (in this issue), but he must accept that doing such
trivial things totally different than 99% of the world isn't quite
user/maintainer friendly.

>  DJB's makefiles have the dubious honour of probably being written
> before such conventions existed. There is a reason he does it that way
> - Makefile dependencies only work with the timestamps on files. If you
> do it the "sane" way, then make has no information about the freshness
> of the information in CC.

Right, but actually I never had problems with this in recent 15 years.
"make clean" after changing toolchain settings should be obvoius.
*If* you really want to catch this, you an store the settings in some
file and compare it on next make run (almost trivial):

* some check rule (dependency for the other targets) compares the
  current settings (eg coming from env) with the stored ones. If
  they've changed, force recreate of the settings file
* the stored-settings file is created from the current settings
* all targets depend on the settings file

>  This is the motivation for DJB putting the commands into files
> instead of using the environment or make variables. That way he can
> have all the compilation rules depend on conf-cc so that should you
> change it, everything gets rebuilt properly. Similarly with the other
> conf- files - you don't need a make clean or anything after changing
> them, just make and exactly what needs to get regenerated will get
> regenerated. We're talking pretty marginal gains, obviously -
> recompilation is not expensive. It's mainly an academic achievement -
> having a *correct* Makefile.

Well, this approach is nice (probably useful for really large trees,
which BTW shouldnt exist at all ;-P), but has the drawback that you
have to take great care not to forget an single dependency to some
settings. And good chance for bugs ;-P

> >  >  Granted, the -include is a bitch and took me awhile to work out.
> >
> >  Actually, this is crap. Probably he just forgets the #include's.
>
>  Yes. There is history here again. If you hunt around you'll find
> posts from DJB complaining about unix (libc?) developers breaking
> existing code by making errno not work without including errno.h.

Then he probably complains that people fixed libc ? ;-O
Isn't this obvious that you have to include errno.h if you're using
stuff from it ? Seems like he just relied on someone else to
inlude errno.h ;-O

> >  >  The sysroot requirement is a little harder to meet, but really just
> >  > requires a mount --bind /tmp/sysroot/var/qmail /var/qmail. Or, if
> >  > you're running qmail on the host and really can't afford to stop it
> >  > for a minute or two, a custom setup rule based on hier.c (or use a
> >  > chroot - oh if only lunix had private namespaces...).
> >
> >  chroot != sysroot.
>
>  I'm well aware. If you were paying attention you'd notice I was
> suggesting a chroot as a method of putting a directory from the
> sysroot in the standard location without affecting the host system,
> not suggesting you attempt to chroot into a cross-compiled root.
>  And again, if lunix had learnt anything from plan9 this would be *trivial*.

Still doesn't help in any ways. DJB's makefile *runs* compiled code
on the compiling machine. This DOES NOT work on crosscompiling.

Sometimes it *MAY* work if host and target are compatible, which may
happen on my site as I'm also crosscompiling to same platform+arch.
For me, crosscompiling isn't just a way for gettings something built
for another platform+arch, but a integral part of build and QM process.

To catch such mixups between host and target, even when host can
run target's binaries, I first build the package for an incompatible
target to let it intentionally break when such mixups happen.

BTW: you didn't response to the compilied-in UID issue.
Rember: DJB takes the numeric UIDs/GIDs from the building host
and statically compiles them in.
This is very bad even for purely native builds. So everytime you
change some of these IDs, you have to completely rebuild qmail.
First of all, you HAVE TO BE AWARE OF THAT (I'm really interested
in what percentage of (potential) qmail users really know this).
As an distro maintainer you have to *ENSURE* that every individual
target system has the matching IDs to your building system.
A very critical design flaw in the makefile.


cu
--
---------------------------------------------------------------------
 Enrico Weigelt    ==   metux IT service - http://www.metux.de/
---------------------------------------------------------------------
 Please visit the OpenSource QM Taskforce:
 	http://wiki.metux.de/public/OpenSource_QM_Taskforce
 Patches / Fixes for a lot dozens of packages in dozens of versions:
	http://patches.metux.de/
---------------------------------------------------------------------


  reply	other threads:[~2008-02-29 18:16 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-23 21:22 lejatorn
2008-02-23 21:34 ` erik quanstrom
2008-02-23 22:13 ` Skip Tavakkolian
2008-02-25 11:00 ` maht
2008-02-25 15:25   ` ron minnich
2008-02-25 16:26     ` John Barham
2008-02-27 15:52       ` Enrico Weigelt
2008-02-27 17:50         ` Steve Simon
2008-02-28  5:24         ` John Barham
2008-02-28  7:23         ` sqweek
2008-02-28 17:27           ` Enrico Weigelt
2008-02-28 19:23             ` Chad Dougherty
2008-02-29 14:43               ` Enrico Weigelt
2008-02-29  0:26             ` sqweek
2008-02-29 18:16               ` Enrico Weigelt [this message]
2008-02-29 18:18                 ` erik quanstrom
2008-02-29 18:37                 ` Uriel
2008-02-29 18:44                 ` Russ Cox
2008-02-25 16:30     ` lejatorn
2008-02-25 16:48       ` Kernel Panic
2008-02-25 19:03 ` Uriel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080229181617.GC29683@nibiru.local \
    --to=weigelt@metux.de \
    --cc=9fans@cse.psu.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).