tech-pkg archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: pkgsrc and robotpkg
On Sunday, at 00:04, David Holland wrote:
| This is surprisingly difficult, IME.
Yup :) But still, I'm happy that users of robotpkg finally seem to have adopted
the concept. Now they tend to make a release at every single commit in their
software, but I guess this is a progress :)
| This is, however, exactly how pkgsrc builtin works --
Actually yes. I am not sure if this changed recently in pkgsrc. I remember that
when I checked this (back in 2006/2007) it was a lot less complete. E.g. I
don't remember than 'builtin' handled the version checks at the time?
I must admit that the syntax slightly frighten me, though :)
| Have you done this for every package, or have you set up an automated
| mechanism for finding builtin packages, and if the latter, how does it
| work?
No, this was/is done for every package.
Everything is controlled by two variables. For instance for a gtk 'builtin':
PREFER.gtk?= system
SYSTEM_SEARCH.gtk= \
'include/gtk-2.0/gtk/gtk.h' \
'lib/pkgconfig/gtk+-2.0.pc:/Version/s/[^.0-9]//gp'
PREFER.pkg is either 'robotpkg' or 'system' (in the exact case of gtk, there is
no 'robotpkg' version, though).
SYSTEM_SEARCH.pkg is a list of requirements of the form
'file[:sed[:pgm]]' (bits between brackets are optional)
. 'file' is a file that must be present,
. 'sed' is a sed program applied to the file (or pgm output if present, see
below) to extract the version,
. 'pgm' is a program that is run and passed to the sed program above to extract
the version. '%' in pgm replaced by the file name, so you can have somethig
like 'bin/gcc:/gcc version/s/[^0-9.]//gp:% -v' to get gcc version.
[ I admit that the syntax is unreadable :) ]
All the requirements in SYSTEM_SEARCH are searched in a list of path
prefixes (like /usr /usr/local /opt/ports etc.). Then the PREFIX.pkg is set to
what is found, or an error is reported. In addition, a hint as to what system
package to install (manually) is printed (e.g. gtk2-devel on fedora,
libgtk2.0-dev on debian, x11/gtk2 for pkgsrc etc.).
You can see the whole "depend.mk" (same as builtin.mk) gtk2 file here:
http://trac.laas.fr/git/robotpkg/tree/mk/sysdep/gtk.mk
| Arguably I do too; it doesn't make sense to have to build deps before
| you can untar something.
Yes, see my previous reply to the other David :)
Home |
Main Index |
Thread Index |
Old Index