MPS issue job001084

TitleMPS does not build with "sh configure;make;make install"
Statusclosed
Priorityessential
Assigned userDavid Jones
OrganizationRavenbrook
DescriptionSpecifically the Standard Operating Procedure for Open
 Source stuff downloded from the 'net is:

 wget .../blah.tar.gz
 zcat blah.tar.gz | tar xvf -
 cd blah
 sh configure
 make
 make install

 And the MPS does not follow this model.

 This is bad because many people used to messing around with
 lots of open source software will try this first; probably
 without reading any instructions, readmes, or whatever.

 There are other things we don't do either: No sourceforge page.
Analysis2004-12-08 DRJ

We need to provide a 'configure' script.

I feel I ought to point out that this method of working, where
running the configure script produces a Makefile or something
siimilar, conflicts with building the product on multiple
architectures across NFS mounted partitions as they would be
unable to agree on what the Makefile should look like.

The configure script needs to:

- Select a platform. Sometimes there is a choice (EG lii3eg /
  lii4gc, o1alcc / o1algc).

- Select a product / products.

- Choose somewhere for "make install" to copy stuff into.

- Inform the invoker of the choices made.

- Create necessary records of choices so that next steps ('make'
  and 'make install') do something useful.

Issue: What platforms do we intend this to work on? Obviously
Linux/x86/gcc because that's going to be really common.
Obviously Darwin/PowerPC/gcc because that's what most project
staff have. Obviously FreeBSD/x86/gcc because that's what
Ravenbrook like. Consider Solaris/??/?? because we've had
actual e-mail from such people.

Where to get what platforms:
Darwin/PowerPC/gcc : DRJ, RB, RHSK each have one.
Linux/x86/gcc : swan.ravenbrook.com, but don't break it.
Tru64/ALPHA/?? : HP Testdrive program

Design

Selecting a platform is mostly a matter of working out which one
we are on. 'uname -s -r -p' or 'uname -s -r -m' is helpful.
Some table-like shell code which maps from the output of that to
an MPS platform identifier should be fairly straightforward.
Especially for a limited number of platforms.

configure script uses uname to determine platform.

configure script makes choices and informs user.

configure script writes a Makefile.


Estimate of Effort:

coding:

1H - Obtain sample uname output for The Big Three (Linux, FreeBSD,
  Darwin).

2H - Obtain pathnames for appropriate installation directories
for The Big Three. From documentation (man hier if available)
and inspection of actual installations.

1H - A shell function (to be used in the configure script)
 that maps from uname output to MPS platform.

1H - A shell function (to be used in the configure script) that
  maps from uname output to install locations. For now we only
  need two locations: 1 for header files, 1 for library files.
  Later we may need documentation and example scripts. Note
  that the shell function cannot map from MPS platform code as
  that isn't fine grained enough. EG Debian Linux and Red Hat
  Linux will want their libraries installed in different places,
  but we will be using the same platform code for each (is that
  correct BTW?). See also LSB.

2H - Complete configure script using the shell functions.
Writes a Makefile.

Same again for documentation and testing combined.

Total: 14H

Note that the "make install" feature can be separated and
removed. This brings down total cost to 8H.

Additional platforms would be more difficult, mostly due to the
increased difficulty in obtaining access.
How foundunknown
EvidenceI just know. Following the SOP doesn't work.
Observed in1.104.0
Created byDavid Jones
Created on2004-12-08 12:45:24
Last modified byRichard Brooksby
Last modified on2012-09-21 20:28:38
History2004-12-08 DRJ Created. Partial analysis.
2004-12-10 DRJ More analysis. Completed estimate.

Fixes

Change Effect Date User Description
179466 closed 2012-09-13 11:59:26 Richard Brooksby Merging "make install" implementation from Bruce Mitchener <https://github.com/datafueled/memory-pool-system/pull/8>.
curl -O "https://github.com/datafueled/memory-pool-system/pull/8.patch" | patch -g1