369 lines
14 KiB
Text
369 lines
14 KiB
Text
Building Chez Scheme Version 9.5.9
|
|
Copyright 1984-2022 Cisco Systems, Inc.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
|
|
----------------------------------------------------------------------------
|
|
|
|
This directory contains the sources for Chez Scheme, plus boot and header
|
|
files for various supported machine types.
|
|
|
|
BASICS
|
|
|
|
Building and installing Chez Scheme on a recent version of Linux or OS X
|
|
is typically as simple as installing the prerequisites listed below and
|
|
running (Windows build instructions appear under the heading WINDOWS
|
|
later in this file):
|
|
|
|
./configure
|
|
sudo make install
|
|
|
|
This should not take more than a minute or so, after which the commands
|
|
'scheme' and 'petite' can be used to run Chez Scheme and Petite Chez
|
|
Scheme, while 'man scheme' and 'man petite' can be used to view the
|
|
manual pages. Chez Scheme and Petite Chez Scheme are terminal-based
|
|
programs, not GUIs. They both incorporate sophisticated command-line
|
|
editing reminiscent of tcsh but with support for expressions that span
|
|
multiple lines.
|
|
|
|
Prerequisites:
|
|
|
|
* GNU Make
|
|
* gcc
|
|
* Header files and libraries for ncurses [unless --disable-curses]
|
|
* Header files and libraries for X windows [unless --disable-x11]
|
|
* Header files and libraries for uuid
|
|
|
|
Uninstalling on Unix-like systems is as simple as running:
|
|
|
|
sudo make uninstall
|
|
|
|
BUILDING VERSION 9.5 AND EARLIER
|
|
|
|
If the environment variable CHEZSCHEMELIBDIRS is set, please unset
|
|
it before running make. Depending on the variable's value, it can
|
|
cause the build process to fail.
|
|
|
|
DETAILS
|
|
|
|
The sources for Chez Scheme come in two parts:
|
|
|
|
* A set of Scheme source files found in the subdirectory s. Compiling
|
|
these produces the boot files petite.boot and scheme.boot, along with
|
|
two header files, equates.h and scheme.h.
|
|
|
|
* A set of C source files found in the subdirectory c. Compiling and
|
|
linking these files produces the executable scheme (scheme.exe under
|
|
Windows). Compiling the C sources requires the two header files
|
|
produced by compiling the Scheme sources.
|
|
|
|
Since the Scheme sources can be compiled only by a working version of
|
|
Chez Scheme, it's not actually possible to build Chez Scheme from source.
|
|
That's why the boot and header files are packaged with the sources.
|
|
|
|
'./configure' attempts to determine what type of machine it's on and,
|
|
if successful, creates several files and directories:
|
|
|
|
* The directory nanopass containing the Nanopass Infrastructure,
|
|
retrieved from GitHub.
|
|
|
|
* A make file, Makefile, in the root (top level) directory.
|
|
|
|
* A "workarea", or subdirectory named for the machine type (e.g.,
|
|
a6le for nonthreaded 64-bit linux). The workarea is a mirror of
|
|
the root directory, with subdirectories named c, s, and so on.
|
|
Compilation takes place in the workarea.
|
|
|
|
* Within the workarea, the files Makefile, Mf-install, and Mf-boot.
|
|
|
|
'./configure' recognizes various options for controlling the type
|
|
of build and the installation location. For example, '--threads'
|
|
requests a build with support for native threads, '--32' requests
|
|
a 32-bit build, and '--installprefix <pathname>' specifies the
|
|
installation root. './configure --help' prints the supported
|
|
options.
|
|
|
|
The make file supports several targets:
|
|
|
|
'make' or 'make build'
|
|
compiles and links the C sources to produce the executable, then
|
|
bootstraps the Scheme sources. Bootstrapping involves using the
|
|
freshly built scheme executable along with the distributed boot files
|
|
to compile the Scheme sources. If the new boot files are equivalent
|
|
to the old boot files, the system is bootstrapped. Otherwise, the new
|
|
boot files are used to create a newer set, and those are compared.
|
|
If this succeeds, the system is bootstrapped. Otherwise, the make
|
|
fails. This should not fail unless the distributed boot files are
|
|
out of sync with the sources.
|
|
|
|
When you make a modification to the system that causes the C side to
|
|
get out of sync with the Scheme side so that the build fails, try
|
|
the following from $W if you have a recent version of Chez Scheme
|
|
installed in your path:
|
|
|
|
make -C s clean all patchfile=patch Scheme=scheme SCHEMEHEAPDIRS={see below}
|
|
make build
|
|
|
|
Set SCHEMEHEAPDIRS to /usr/lib/csv%v/%m:/usr/local/lib/csv%v/%m on
|
|
Unix-like systems and to %x/../../boot/%m on Windows systems.
|
|
|
|
Alternatively, if you have a build before the changes at full path
|
|
<orig>, use
|
|
|
|
make from-orig ORIG=<orig>
|
|
|
|
To run Chez Scheme without installing, you need to tell the
|
|
executable where to find the boot files. The run target of the
|
|
makefile will do that
|
|
|
|
make run
|
|
|
|
or this can be done manually via command-line arguments, e.g.:
|
|
|
|
$W/bin/$M/scheme -b $W/boot/$M/petite.boot -b $W/boot/$M/scheme.boot
|
|
|
|
or by setting the SCHEMEHEAPDIRS variable to point to the directory
|
|
containing the boot files. For example, in bash:
|
|
|
|
SCHEMEHEAPDIRS=$W/boot/$M $W/bin/$M/scheme
|
|
|
|
and in tcsh:
|
|
|
|
setenv SCHEMEHEAPDIRS "$W/boot/$M"
|
|
$W/bin/$M/scheme
|
|
|
|
In all cases, $W should be replaced with the name of the workarea,
|
|
and $M should be replaced with the machine type. (Unless the default
|
|
is overridden via an argument to ./configure, $W is the same as $M.)
|
|
|
|
'sudo make install'
|
|
runs the build plus installs the resulting executables, boot files,
|
|
example files, and manual pages. If the installprefix used with
|
|
'./configure' is writable by the current user, then 'sudo' is not
|
|
necessary.
|
|
|
|
'sudo make uninstall'
|
|
uninstalls the executables, boot files, example files, and manual pages.
|
|
As with 'make install', if the installprefix used with './configure' is
|
|
writable by the current user, then 'sudo' is not necessary.
|
|
|
|
'make test'
|
|
runs the build plus runs a set of test programs in various different
|
|
ways, e.g., with different compiler options. It can take 20 minutes
|
|
to more than an hour, depending on the speed of the machine and number
|
|
of parallel targets executed by make (as configured, e.g., by the -j
|
|
flag).
|
|
|
|
NB: A complete run does not imply no errors occurred. To check for
|
|
errors, look at the file $W/mats/summary, where $W is the name of the
|
|
workarea created by ./configure. $W/mats/summary should contain one
|
|
line per test run, something like this:
|
|
|
|
-------- o=0 --------
|
|
-------- o=3 --------
|
|
-------- o=0 cp0=t --------
|
|
-------- o=3 cp0=t --------
|
|
-------- o=0 spi=t p=t --------
|
|
-------- o=3 spi=t p=t --------
|
|
-------- o=0 eval=interpret --------
|
|
-------- o=3 eval=interpret --------
|
|
-------- o=0 cp0=t eval=interpret --------
|
|
-------- o=3 cp0=t eval=interpret --------
|
|
-------- o=0 ehc=t eoc=f --------
|
|
-------- o=3 ehc=t eval=interpret --------
|
|
|
|
If there is anything else in $W/mats/summary, something unexpected
|
|
occurred.
|
|
|
|
'make bootfiles'
|
|
runs the build plus uses the locally built system to recreate the
|
|
distributed boot and header files for each supported machine type.
|
|
It should be run whenever modifications made to the Scheme sources
|
|
are to be committed to the source-code repository so that up-to-date
|
|
boot and header files can be committed as well. 'make bootfiles'
|
|
can take 5 minutes or more.
|
|
|
|
'make bootfiles' builds boot files for each machine type for which
|
|
a subdirectory exists in the top-level boot directory. To build
|
|
for a supported machine type that isn't built by default, simply
|
|
add the appropriate subdirectory, i.e., 'mkdir boot/$M', where M
|
|
is the machine type, before running 'make bootfiles'. You can
|
|
also run '(cd $W ; make -f Mf-boot $M.boot)', where W is the name
|
|
of a built work area for the host machine type, to build just the
|
|
boot files for machine-type M.
|
|
|
|
'make docs'
|
|
runs the build plus generates HTML and PDF versions of the Chez Scheme
|
|
Users Guide and the release notes. Unlike the other build targets,
|
|
the documentation is not built in the workarea, but rather in the
|
|
'csug' and 'release_notes' directories.
|
|
|
|
Building the documentation requires a few prerequisites not required
|
|
to build the rest of Chez Scheme. The following must be available
|
|
in your PATH:
|
|
* A TeX distribution (including latex, pdflatex, dvips, and gs)
|
|
* ppmtogif and pnmcrop (from Netpbm)
|
|
An X11 installation is not required, but ppmtogif does require an
|
|
'rgb.txt' file, which it will automatically locate in the common
|
|
X11 installation locations. If ppmtogif fails because it cannot find
|
|
an rgb.txt file, you can use the RGBDEF environment variable to
|
|
specify the path to a file. If your system has an emacs installation,
|
|
then you can find an rgb.txt file in the 'etc' directory of the emacs
|
|
installation. If your system has a vim installation, then it might
|
|
contain an rgb.txt in $VIMRUNTIME.
|
|
|
|
'sudo make install-docs'
|
|
builds the documentation as with 'make docs' and installs it. If the installcsug and
|
|
installreleasenotes directories used with './configure' are writable by the current
|
|
user, then 'sudo' is not necessary.
|
|
|
|
'make clean'
|
|
removes binaries from the workarea.
|
|
|
|
'make distclean'
|
|
removes nanopass, Makefile, built documentation, and all workareas.
|
|
|
|
OTHER UNIX VARIANTS
|
|
|
|
To build on Unix variants other than Linux and OS X, you will first
|
|
need to build boot files on a Linux or OS X machine. On that machine,
|
|
after building Chez Scheme, create boot files for the target machine
|
|
<machine> with:
|
|
|
|
make boot XM=<machine>
|
|
|
|
Copy the generated boot/<machine> directory to the target machine,
|
|
adding to or replacing the boot directory with pre-built boot files
|
|
there, and then build as on Linux.
|
|
|
|
Remember to use gmake if make is not GNU make. If you run into linker
|
|
trouble, try running configure with --libkernel so that the build
|
|
avoids running ld directly.
|
|
|
|
On OpenBSD, Chez Scheme must be built and installed on a filesystem
|
|
that is mounted with wxallowed.
|
|
|
|
On NetBSD, note that the makefiles run "paxctl +m" to enable WX pages
|
|
(i.e., pages that have both write and execute enabled).
|
|
|
|
WINDOWS
|
|
|
|
Building Chez Scheme under 64-bit Windows with Bash/WSL, MinGW/MSYS,
|
|
or Cygwin follows the instructions above, except that 'make install'
|
|
and 'make uninstall' are not supported. Alternatively, the main Chez
|
|
Scheme executable can be built from the Windows command line or
|
|
cross-compiled using MinGW as described further below.
|
|
|
|
On Bash/WSL, the build directory must be in a location with a Windows
|
|
path such as /mnt/c, and the 'OS' environment variable must be set to
|
|
'Windows_NT' to indicate a build for Windows, as opposed to a build
|
|
for Linux on Windows:
|
|
|
|
env OS=Windows_NT ./configure
|
|
env OS=Windows_NT make
|
|
|
|
Prerequisites:
|
|
|
|
* Bash/WSL, MinGW/MSYS, or Cygwin with bash, git, grep, make, sed, etc.
|
|
* Microsoft Visual Studio 2022, 2019, 2017, or 2015
|
|
* WiX Toolset (for making an install)
|
|
|
|
Be sure that git config core.autocrlf is set to false.
|
|
|
|
If you're using Visual Studio 2022 or 2019, install "Desktop
|
|
development with C++" on the "Workloads" tabs and the "C++ 2022 [or
|
|
2019] Redistributable MSMs" on the "Individual components" tab under
|
|
the "Compilers, build tools, and runtimes" section.
|
|
|
|
To run Chez Scheme or Petite Chez Scheme from a Windows command prompt,
|
|
set PATH:
|
|
|
|
set PATH=$W\bin\$M;%PATH%
|
|
|
|
again with $W and $M replaced with the workarea name and machine
|
|
type, and start Chez Scheme with the command "scheme" or Petite
|
|
Chez with the command "petite".
|
|
|
|
The executables are dynamically linked against the Microsoft Visual
|
|
C++ run-time library vcruntime140.dll. If you distribute the
|
|
executables to a different system, be sure to include the
|
|
redistributable run-time library.
|
|
|
|
Making an Install for Windows
|
|
|
|
cd wininstall
|
|
make workareas
|
|
make
|
|
|
|
This will create workareas and compile binaries for the a6nt, i3nt,
|
|
ta6nt, and ti3nt configurations and then include them in a single
|
|
Windows installer package Chez Scheme.exe. The package also includes
|
|
example files and the redistributable Microsoft Visual C++ run-time
|
|
libraries.
|
|
|
|
Testing under Windows
|
|
|
|
The iconv tests in mats/io.ms require that a 32-bit or 64-bit (as
|
|
appropriate) iconv.dll, libiconv.dll, or libiconv-2.dll implementing
|
|
GNU libiconv be located in $W\bin\$M or the path. Windows sources for
|
|
libiconv can be found at:
|
|
|
|
http://gnuwin32.sourceforge.net/packages/libiconv.htm
|
|
|
|
An alternative that uses the Windows API can be found at:
|
|
|
|
https://github.com/burgerrg/win-iconv/releases
|
|
|
|
If the DLL is not present, the iconv tests will fail. No other tests
|
|
should be affected.
|
|
|
|
Unset the TZ environment variable before running the tests, because
|
|
the Cygwin values are incompatible with the Microsoft C Runtime
|
|
Library.
|
|
|
|
Use 'make test' described above to run the tests.
|
|
|
|
WINDOWS EXECUTABLE VIA COMMAND PROMPT
|
|
|
|
To build the Chez Scheme executable using Microsoft Visual Studio,
|
|
first set up command-line tools. The c\vs.bat script can help if you
|
|
supply amd64 for a 64-bit build or x86 for a 32-bit build:
|
|
|
|
c\vs.bat amd64
|
|
|
|
Then, run c\build/bat with a machine name, either ta6nt (64-bit
|
|
threaded), a6nt (64-bit non-threaded), ti3nt (32-bit threaded), or
|
|
i3nt (32-bit non-threaded):
|
|
|
|
c\build.bat ta6nt
|
|
|
|
The resulting executable in <machine>\bin\<machine> relies on
|
|
bootfiles in ..\boot\<machine> relative to the executable.
|
|
|
|
CROSS-COMPILING THE WINDOWS EXECUTABLE
|
|
|
|
To cross-compile the main Chez Scheme executable for Windows using
|
|
MinGW, specify suitable build tools to configure, perhaps using
|
|
--toolprefix= like this:
|
|
|
|
./configure -m=ta6nt --threads --toolprefix=x86_64-w64-mingw32-
|
|
|
|
Then, make with c/Mf-<machine> while supplying cross=t and o=o,
|
|
possibly like this:
|
|
|
|
(cd ta6nt/c && make -f Mf-ta6nt cross=t o=o)
|
|
|
|
The executable is written to <machine>/bin/<machine>, and it should be
|
|
installed with bootfiles in ../boot/<machine>/ relative to the
|
|
executable.
|