ikarus.boot should not be in /usr/local/bin

Bug #160100 reported by Michael D. Adams on 2007-11-05
2
Affects Status Importance Assigned to Milestone
Ikarus Scheme
Low
Abdulaziz Ghuloum

Bug Description

Per the Linux Filesystem Hierarchy Standard, /usr/local/bin should contain only executable commands [1] which ikarus.boot is not. The /usr/local/lib/ikarus directory would be the proper place to put architecture-dependent data exclusively used by Ikarus such as ikarus.boot [2]. (One could also make an argument for putting it directly in /usr/local/lib.)

NOTE: The path to look for ikarus.boot should be relative to the libdir that is passed to ./configure. By default libdir=EPREFIX/lib , EPREFIX=PREFIX and PREFIX=/usr/local.

[1] http://www.pathname.com/fhs/pub/fhs-2.3.html#USRBINMOSTUSERCOMMANDS
[2] http://www.pathname.com/fhs/pub/fhs-2.3.html#USRLIBLIBRARIESFORPROGRAMMINGANDPA

Abdulaziz Ghuloum (aghuloum) wrote :

Agreed. I think it will end up in libdir/ikarus/ikarus.boot (to account for a possibility of having other boot files in the future).
Thanks.

Changed in ikarus:
assignee: nobody → aghuloum
importance: Undecided → Low
status: New → Confirmed
Changed in ikarus:
status: Confirmed → In Progress
Abdulaziz Ghuloum (aghuloum) wrote :

Fixed in revision 1016.
    - ikarus.boot now goes to $prefix/lib/ikarus/ikarus.boot
    - location of bootfile is now hard-coded in the ikarus executable
    - pdf/README/COPYING/GPL-3 files go to $prefix/doc/ikarus/
    - Added a 1-line "scheme-script" script to bin.

Changed in ikarus:
status: In Progress → Fix Committed
Michael D. Adams (mdmkolbe) wrote :

The fix you committed puts ikarus.boot in $prefix/share/ikarus/ (where arch-independent data goes) instead of $prefix/lib/ikarus (where arch-dependent data goes). I am attaching a patch that should fix this. The patch also makes the location of the documentation files configurable with the --docdir flag to configure. After applying the patch you will of course have to autoreconf.

The patch may require a recent version of autoconf/automake. I have versions 2.61 and 1.10 respectively and it works on those.

Changed in ikarus:
status: Fix Committed → Confirmed
Abdulaziz Ghuloum (aghuloum) wrote :

But the boot file *is* an architecture-independent file for all supported architectures.
Need to study the link you sent a little more.

Michael D. Adams (mdmkolbe) wrote :

I was under the impression that the boot file contained (among other things) pre-compiled x86 instruction streams. In my mind that makes it a lot like "object files, libraries, and internal binaries."

On Nov 10, 2007, at 10:27 PM, Michael D. Adams wrote:

> I was under the impression that the boot file contained (among other
> things) pre-compiled x86 instruction streams. In my mind that
> makes it
> a lot like "object files, libraries, and internal binaries."

Right. Looking forward, Ikarus will be distributed with a set of
libraries (srfis, match, etc.) and these will have to go somewhere.
Where do you think these files would go? prefix/lib/ikarus or
prefix/share/ikarus? And if these files get pre-compiled to object
code, where would the object codes end?

I'll be looking at perl/python to see what they do.

Aziz,,,

Abdulaziz Ghuloum (aghuloum) wrote :

The problem that I keep getting is from automake not liking me putting a .boot file in libdir:

scheme/Makefile.am:2: library used but `RANLIB' is undefined
scheme/Makefile.am:2: The usual way to define `RANLIB' is to add `AC_PROG_RANLIB'
scheme/Makefile.am:2: to `configure.ac' and run `autoconf' again.
scheme/Makefile.am:2: `ikarus.boot' is not a standard library name
scheme/Makefile.am:2: did you mean `libikarus.a'?

Your patch does not show what you did with scheme/Makefile.am.

Michael D. Adams (mdmkolbe) wrote :

Hmm, I seems I got sidetracked with looking at the docdir stuff and forgot that scheme/Makefile.am would need to be changed. Anyhow, simply changing "nodist_pkgdata_DATA=ikarus.boot" to "nodist_pkglib_DATA=ikarus.boot" seems to work for me.

Michael D. Adams (mdmkolbe) wrote :

Regarding, scheme libraries, srfis, match, etc., I would say that if they are source files then they would belong in prefix/share/ikarus, but if they are pre-compiled they would belong in prefix/lib/ikarus.

If both forms get distributed together, then things are more complicated. For example, with python they want to keep the .py and .pyc files together, so even thought the .py files could be considered platform independant they get put in /usr/lib. The other way (putting the pyc files in /usr/share) wouldn't work because /usr/share *must* be able to be commonly mounted read-only by multiple machines that might have different architectures.

Other approaches could be to distribute the pre-compiled libraries separate from the source libraries. GHC does this, the source files are for documentation only thus rationalizing why they are in a separate folder. Or you could do what Perl seems to do and put libraries that have no architecture dependence in /usr/share while putting other libraries that have an architecture dependence in /usr/lib (Perl has no notion of pre-compiled).

Abdulaziz Ghuloum (aghuloum) wrote :

Fixed in revision 1029.
    ikarus.boot now goes to $pkglibdir/ikarus.boot which translates
    to /usr/local/lib/ikarus/ikarus.boot by default.
Thanks Michael for all the help.

Changed in ikarus:
status: Confirmed → Fix Committed
Michael D. Adams (mdmkolbe) wrote :

Looks good. :-)

Abdulaziz Ghuloum (aghuloum) wrote :

This bug report is about to be closed as the fix comitted previously
will be incorporated in the next 0.0.2 release of Ikarus Scheme,
scheduled for November 28, 2007.
A release candidate tarball is available for download from:
  http://www.cs.indiana.edu/~aghuloum/ikarus/ikarus-0.0.2-rc1.tar.gz
Please do test it if you have the time and report any issues you
might encounter. Thank you very much for your support. Aziz,,,
(Sorry for the duplicates; I'm updating every open bug.)

Changed in ikarus:
milestone: none → 0.0.2
Changed in ikarus:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers