gcl-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Gcl-devel] Re: [Axiom-developer] New design for Axiom web site


From: Mark Murray
Subject: Re: [Gcl-devel] Re: [Axiom-developer] New design for Axiom web site
Date: Wed, 01 Oct 2003 15:29:26 +0100

Tim Daly writes:

> Dynamically adding extensions will mean that the lisp loader will have
> to automatically find and link new system libraries.  That's quite a
> large task.

Not really. If you add functionality to a C program by using dlopen(3),
the ELF loader takes charge of loading any shared libs required by that
shared object. Can lisp not handle this?

> > The above will need to find a saved_gcl, no? (I'll fix the FreeBSD
> > port to add this to the installed bits if so).
>
> The above essentially copies saved_gcl to obj/linux/bin/lisp.  In some
> hopeful future you should just be able to find the lisp on the path.

Right. Usually, saved_gcl is not installed, so for the time being, I'll
make sure that FreeBSD has one.

> > The FreeBSD port infrastructure takes care of the details, like
> > installing GCL if its not already there.
>
> Can you point me to the docs on this? How does this magic happen?

Docs. Hmm :-). There is rather a lot.

Paraphrasing - there is a makefile wrapper, and a collection of diffs.
Building a port can be broken down into a set of steps:

1) "make fetch" - fetch(1) (like wget(1)) the port distfile(s) from the
nominated master site/mirrors. Cache this in /usr/ports/distfiles.

2) "make checksum" - use md5(1) to make sure you have the right
distribution file(s).

3) "make extract" - unpack the distribution files into a dir called
work/. This may depend on installing required archival software if
the dist file is in an unusual format. The dependancy is handled
automatically. The dependancy requirements are supplied in the wrapper
makefile.

4) "make patch" - apply any patches (local or distributor supplied) to
the unpacked distro.

5) "make configure" - run any necessary configure commands. This may
depend on installing required configuration software (such as automake
or autoconf). The dependancy is handled automatically. The dependancy
requirements are supplied in the wrapper makefile.

6) "make build" - actually build/compile the software. This may
depend on installing required software (libraries, specialised
compilers, etc). The dependancy is handled automatically. The dependancy
requirements are supplied in the wrapper makefile.

7) "make install" - install the software into ${PREFIX} (usually
/usr/local), and register it into /var/db/pkg/<portname>. This may
depend on installing run-time software (data files etc). The dependancy
is handled automatically. The dependancy requirements are supplied in
the wrapper makefile.

8) "make package" - make a binary distribution "package". This is
similar to a .rpm file or a .deb file, and contains meta-information on
what packages this package depends on. The binary package (a compressed
tarball with extra stuff) can be installed on another system with
pkg_add(1). Stash the package in /usr/ports/packages/.

9) "make clean" - rm -rf the work/ subdir created in 1).

Each recursive dependancy install does 1-7, if needed. Sophisicated
tools are available to maintain ports, packages and dependancies.

If the port creator did his job properly, then for anyone to build
the package is a no-brainer.

The usual short-circuit of the above is

$ cd /usr/ports/math/axiom      # or whatever port you want
$ make install                  # $ does 1-7 automagically
$ make clean                    # we don't need to make a package if
                                #   we are a single-user site

... or pkg_add the package of your distribution CD.

> > Did you get his long email
>
> Yes, this morning. (Last night was my anniversary so I was kinda lame
> about reading email). I'll study it in more detail.

Anniversary? Congratulations!! :-) All the best!

M
--
Mark Murray
iumop ap!sdn w,I idlaH




reply via email to

[Prev in Thread] Current Thread [Next in Thread]