mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-20 14:19:18 +02:00
They can be close()d explicitly with close-file-descriptor, and will close() on gc, but only explicitly closing the last port on them will close the fileno. Notably needed for network sockets where we open separate input and output ports on the same socket.
110 lines
3.5 KiB
Text
110 lines
3.5 KiB
Text
Using the Makefile.libs File To Build and Install Libraries
|
|
-----------------------------------------------------------
|
|
|
|
The Makefile.libs file distributed with the Chibi Scheme sources
|
|
can facilitate building and installing Chibi Scheme libraries written
|
|
in C or Scheme. To use it, follow these instructions:
|
|
|
|
1. Copy the Makefile.libs and Makefile.detect files from the Chibi
|
|
Scheme source directory to the library source top-level directory.
|
|
|
|
2. Place the library source in the subdirectory "lib" of the library
|
|
source top-level directory. For example,
|
|
|
|
lib/foo/bar.c
|
|
lib/foo/bar.h
|
|
lib/foo/bar.sld
|
|
lib/foo/bar.scm
|
|
|
|
3. In the Makefile in the library source top-level directory, define
|
|
the following targets:
|
|
|
|
all
|
|
doc
|
|
install
|
|
uninstall
|
|
clean
|
|
dist-clean
|
|
|
|
These should depend on the corresponding "-libs" target, but
|
|
can include additional commands. For example:
|
|
|
|
all: all-libs
|
|
install: install-libs
|
|
cp -r doc $(PREFIX)/share/chibi/
|
|
uninstall: uninstall-libs
|
|
doc: doc-libs
|
|
clean: clean-libs
|
|
dist-clean: dist-clean-libs
|
|
|
|
The all target should be the first target in the Makefile.
|
|
|
|
The all-libs target makes the shared libraries in the library.
|
|
The doc-libs target generates HTML files for the library. The
|
|
install-libs and uninstall-libs targets install and uninstall
|
|
the library under the prefix. The clean-libs target removes the
|
|
shared libraries and generated HTML files. The dist-clean-libs
|
|
removes any .c files generated from .stub files and also performs
|
|
a clean-libs.
|
|
|
|
4. In the Makefile in the library source top-level directory, define
|
|
the following variables:
|
|
|
|
COMPILED_LIBS: Any shared libraries that should be built and
|
|
installed. The shared library is build from the corresponding
|
|
.c or .stub file. The $(SO) variable should be used for the
|
|
shared-library suffix; in order for this to work COMPILED_LIBS
|
|
should be defined as a recursively-expanded variable (with
|
|
=) rather than a simply-expanded variable (with :=).
|
|
|
|
INCLUDES: Any other files on which the shared libraries depend.
|
|
|
|
SCM_LIBS: Any Scheme source files that should be installed.
|
|
|
|
HTML_LIBS: Any HTML files that should be generated. The HTML
|
|
files are generated from the corresponding .sld files using
|
|
chibi-doc.
|
|
|
|
For example,
|
|
|
|
COMPILED_LIBS = lib/foo/bar$(SO)
|
|
INCLUDES = lib/foo/bar.h
|
|
SCM_LIBS = lib/foo/bar.sld lib/foo/bar.scm
|
|
HTML_LIBS = doc/lib/foo/bar.html
|
|
|
|
5. Add additional flags as necessary to XCPPFLAGS, XCFLAGS, and XLIBS.
|
|
These flags are passed to the compiler and linker when they
|
|
generate the shared library. These should probably be defined at
|
|
minimum as:
|
|
|
|
XCPPFLAGS += -I$(PREFIX)/include
|
|
XCFLAGS += -L$(PREFIX)/lib
|
|
XLIBS +=
|
|
|
|
These additions will ensure that the compiler and linker can
|
|
find the Chibi Scheme include and library files, even if they
|
|
are installed under a non-standard prefix.
|
|
|
|
6. Include the common Makefile using:
|
|
|
|
include Makefile.libs
|
|
|
|
A complete example is:
|
|
|
|
all: all-libs
|
|
install: install-libs
|
|
uninstall: uninstall-libs
|
|
doc: doc-libs
|
|
clean: clean-libs
|
|
dist-clean: dist-clean-libs
|
|
|
|
COMPILED_LIBS = lib/foo/bar$(SO)
|
|
INCLUDES = lib/foo/bar.h
|
|
SCM_LIBS = lib/foo/bar.sld lib/foo/bar.scm
|
|
HTML_LIBS = doc/lib/foo/bar.html
|
|
|
|
XCPPFLAGS += -I$(PREFIX)/include
|
|
XCFLAGS += -L$(PREFIX)/lib
|
|
XLIBS += -lpthread
|
|
|
|
include Makefile.libs
|