Date: Sat, 9 Sep 2000 02:07:03 +0200 From: Neil Blakey-Milner <nbm@mithrandr.moria.org> To: Satoshi - Ports Wraith - Asami <asami@FreeBSD.org> Cc: Will Andrews <will@physics.purdue.edu>, FreeBSD Ports <ports@FreeBSD.org> Subject: Re: Ports Options Paper Message-ID: <20000909020702.A64259@mithrandr.moria.org> In-Reply-To: <200009082243.e88Mh9V05579@silvia.hip.berkeley.edu>; from asami@FreeBSD.org on Fri, Sep 08, 2000 at 03:43:09PM -0700 References: <20000903052226.E1205@radon.gryphonsoft.com> <200009082243.e88Mh9V05579@silvia.hip.berkeley.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri 2000-09-08 (15:43), Satoshi - Ports Wraith - Asami wrote: > (1) The support infrastructure for something like you propose is not > there yet. For one thing, we need to move from ${PKG_DBDIR}/${PKGNAME} > to ${PKG_DBDIR}/${PORTNAME}/ver${PORTVERSION} (or some such) That doesn't make a difference at all (unless I'm missing something). ${PORTNAME}-${PORTVERSION} gives the same information as ${PORTNAME}/${PORTVERSION}. I've seen this suggested many times, and every time I say this, and then noone sends me a reply. I'm not against the change, but I don't see what it gives us. I'd much rather see some sort of commitment to support multiple versions of software that have to co-exist. Debian uses ssh-1.2.13 and ssh2-2.1.0, libqt1-1.45 and libqt2-2.0.2, and similar package identities, and concepts like "upgrades", "conflicts", and such. We need a subtle context of "streams" of programs so we know that qt-1.45 and qt-2.0.2 can co-exist, and that qt-1.44 upgrades to qt-1.45 and not qt-2.0.2, &c. I'd suggest a (hopefully the final?) "stream" number in the version number, if we're not willing to muddy the package name with it. (I'm not too taken with muddying the package names, truth be told) > (2) Speaking of updates, we first need to implement updates. There > are lots of sticky problems, such as what to do when a port in the > middle of the dependency chain is updated (do we update all ports > that depend on this one as well as all ports that this ports > depend on?), etc. To implement updates, we need (roughly, I think I've forgotten one): (forgive me if this sounds familiar, I've sent this two or three times before) 1) relative dependencies This is so we don't have to have a _perfectly_ up to date package system constantly. Who cares if we have bash 2.1.3 or bash 2.1.4, unless we know there's a problem in bash 2.1.3? (for packages, mostly, but I wouldn't mind seeing it in ports too.) 2) virtual packages (for ports and packages) We don't really care if we have apache-1.3.12 or apache-modssl-1.3.12+1.0.3, so long as we have apache. apache ports can export virtual package 'virtapache-1.3.12', and something simple like 'static-webserver-1.0.0' and 'cgi-webserver-1.0.2'. Does it really matter if we have nawk or gawk or one-true-awk, so long as one responds as 'awk' and is awk-compatible. Also, some applications may be affected by a library bug, and others may not - so while gview needs gtk-1.2.5 with libgtk12.so.3, gftp will still work fine when you upgrade from it's initial gtk-1.2.3 to gtk-1.2.5, since it uses standard libgtk12.so.3 functions, and doesn't need recompiling. 3) port-epoch and port-revision (which we should have soon, after kkenn took my cause over.) (for ports and packages) These are necessary for external views of internal version numbers. I prefer externalising them, since I think people who take the time to understand them can gain a huge deal from a quick glance. It also helps making decisions on whether we're up-to-date reasonably easy. It will let us determine almost mostly from the filename whether we need look into upgrading. (not that I'd rely on this, but rather the next:) 4) synchronized INDEXs from (possibly) multiple sources (for packages) This is necessary mostly for people who subsist on packages. We must know that if we upgrade to sawfish-0.38, we must upgrade to rep-gtk-1.3, &c. We also need to know if something that relies on rep-gtk-1.2 will need to be upgraded if rep-gtk-1.3 is installed. (This is hard, and is why virtual packages denoting shared libraries may be necessary.) Then we have to do it all backwards if they try use a CDROM, and then forwards again if they move to a closer mirror that is slightly out of date, &c. 5) a concept of streams (very limited number, but incredibly useful) Explained above. Not totally related, but we may need to explore NetBSD(?)'s piecemeal packages (build port once, make multiple packages from the collected bits). Debian does something like this, and provides libgtk12 with just the shared library and run-time stuff, and libgtk12-dev, with the static library and include files and developer stuff. > Next, specific comments. > > * The reasons for putting such things in a separate file is to > * simplify parsing for GUI-style programs like gportconf (which > * nbm proposed using with his XML format) or dialog(1), which > * would be the default user-friendly interface. It would also > * reduce clutter in port Makefiles somewhat. > > That is a good idea. I wouldn't have minded this feedback 18 months ago when I suggested and implemented it and got no response whatsoever. Using only base system tools, with examples, and an overview. And with example gtk programs that used a shared library that sysinstall could use too. With multiple reminders of what I was doing over a few months period. Actually, the only feeback I got (at the time, before Will started talking to me about it) was from old guru sysadmin types who didn't understand what we'd possibly need any of this fancy stuff when you can just look in the Makefile and figure it out. > * The *_DEPENDS can also be moved to ${FILESDIR}/options: > * > * LIB_DEPENDS= kdecore.4:${PORTSDIR}/x11/kdelibs2 > * RUN_DEPENDS= konqueror:${PORTSDIR}/x11/kdebase2 \ > * kjumpingcube:${PORTSDIR}/games/kdegames2 \ > * kdf:${PORTSDIR}/misc/kdeutils2 \ > * kword:${PORTSDIR}/editors/koffice \ > * kppp:${PORTSDIR}/net/kdenetwork2 > > I'm not sure about this. I'd like to keep enough information in the > Makefile so people working on ports don't have to check many files to > figure out just what the port does. I agree, but porters are going to have to get used to looking for options files. But we should probably write tools that will remind them and ease it for them. (By the way, do we have any cases where we don't have _${PORTSDIR}_/x11/kdelibs? It seems a bit redundant if it isn't used. > * Another issue that I've stumbled across over time has been the inability > * of a single port to create multiple packages. Hence, I'd like to reintroduce > > This is not a good idea. We've tried it before, and it was a > disaster. The current MASTERDIR has come out of the smoldering ashes > of failed attempts to create a framework to build multiple packages > from the same directory. > > "One package per port" is the First Principle of the Ports Collection > for a good reason. :) I warned Will that this would be the answer *grin*. I remember I got this answer too when I asked it 18 or so months ago. I dislike the idea of extra directories simply to hold a Makefile that sets one or two variables, but if we must do it this way, we should use your multi-level ports magick to "hide" it from the users: mail/mutt mail/mutt/ssl lang/python-doc/html lang/python-doc/pdf-a4 lang/python-doc/pdf-letter lang/python-doc/postscript-a4 lang/python-doc/postscript-letter It's an equal waste of inodes, but at least it doesn't crowd things. Of course, given sufficient effort by people on the libh project, we could use the system that has been designed there (which, from what I've seen, handles everything I've listed above). The code is a bit hard to understand at times, but reading the sysinstall2.txt file a few times gives you an idea on why it is done the way it is. People can sign-up by subscribing to, and posting a "how can I help?" message to freebsd-libh@FreeBSD.org. Beware, tcl and C++ dragons abound. Neil -- Neil Blakey-Milner Sunesi Clinical Systems nbm@mithrandr.moria.org To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-ports" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000909020702.A64259>