
* Extended unixstyle-install.ss to support additional operations, no need for src/copytree.ss and can fix an installation with DESTDIR svn: r3470
394 lines
17 KiB
Plaintext
394 lines
17 KiB
Plaintext
|
|
This is the source code distribution for PLT Scheme (MzScheme and/or
|
|
MrEd with DrScheme). For license information, please see the file
|
|
plt/notes/COPYING.LIB.
|
|
|
|
Compiled binaries, documentation, and up-to-date information are
|
|
available at
|
|
http://www.drscheme.org/
|
|
http://www.plt-scheme.org/software/mzscheme/
|
|
http://www.plt-scheme.org/software/mred/
|
|
|
|
The MzScheme and MrEd source code should compile and execute on
|
|
Windows, Mac OS X, or any Unix/X platform (including Linux).
|
|
|
|
Per-platform instructions are below.
|
|
|
|
Please report bugs via one of the following:
|
|
- Help Desk's "submit bug report" link (preferred)
|
|
- http://bugs.plt-scheme.org/
|
|
- bugs@plt-scheme.org (last resort)
|
|
|
|
-PLT
|
|
scheme@plt-scheme.org
|
|
|
|
========================================================================
|
|
Compiling for Windows
|
|
========================================================================
|
|
|
|
To compile with Microsoft Visual C, read the instructions in
|
|
plt\src\worksp\README.
|
|
|
|
To compile with Cygwin tools, follow the Unix instructions below, and
|
|
be sure to configure with --enable-shared. The result is a Unix-style
|
|
build, not a Windows-style build (e.g., MzScheme's `system-type'
|
|
procedure returns 'unix, not 'windows, and MrEd uses X11).
|
|
|
|
========================================================================
|
|
Compiling for Mac OS X
|
|
========================================================================
|
|
|
|
First, install the Mac OS X Developer Tools from Apple. Then, follow
|
|
the Unix instructions below, but note the following:
|
|
|
|
* The MzScheme build creates a framework, PLT_MzScheme.framework,
|
|
which is installed into plt/lib. This framework is used by the
|
|
executable `mzscheme' that goes into plt/bin.
|
|
|
|
* The MrEd build creates a framework, PLT_MrEd.framework, which is
|
|
installed into plt/lib. This framework is used by the executable
|
|
bundle MrEd.app that goes into the `plt' directory. Installation
|
|
creates a script, plt/bin/mred, that runs the bundle.
|
|
|
|
* The --enable-shared flag for `configure' is redundant (i.e., builds
|
|
create and use frameworks by default), and --disable-shared is not
|
|
supported.
|
|
|
|
* To build an X11-based MrEd, run `configure' with the --enable-xonx
|
|
flag. Frameworks are not used for such builds. The --enable-xonx
|
|
flag also affects the MzScheme build so that `system-type' reports
|
|
'unix.
|
|
|
|
========================================================================
|
|
Compiling for supported Unix variants (including Linux) or Cygwin
|
|
========================================================================
|
|
|
|
0. If you have an old PLT installation in the target directory,
|
|
remove it (unless you are using Subversion with an "in-place"
|
|
build as described below).
|
|
|
|
Also, make sure that you have libraries and header files for Xft
|
|
and Cairo (v1.23 and up) if you would like support for font
|
|
smoothing (Xft) and graphics smoothing (Cairo). These libraries
|
|
are not distributed with PLT Scheme. The configure process checks
|
|
automatically whether these libraries are available.
|
|
|
|
OpenGL support for MrEd sometimes requires special configuration
|
|
(though generally not under Linux). See the note at the end of
|
|
this section if OpenGL fails to work.
|
|
|
|
Finally, make sure that you are using GNU `make'. Specifically,
|
|
the content of the "foreign" subdirectory requires GNU `make'.
|
|
|
|
1. Run the script `configure' (which is in the same directory as this
|
|
README), usually with a --prefix=TARGETDIR command-line argument
|
|
and optionally with --enable-shared.
|
|
|
|
For example, if you want to install into /usr/local/plt using
|
|
dynamic libraries, then run
|
|
|
|
[here]configure --prefix=/usr/local/plt --enable-shared
|
|
|
|
where "[here]" is the directory path containing the `configure'
|
|
script (possibly unnecessary, or possibly just "./", depending on
|
|
your shell and PATH setting).
|
|
|
|
If the --prefix flag is omitted, the binaries are built for an
|
|
in-place installation (i.e., the parent of the directory
|
|
containing this README will be used directly). Unless
|
|
--enable-shared is used, the plt directory can be moved later;
|
|
most system administrators would recommend that you use
|
|
--enable-shared, but the PLT Scheme developers distribute binaries
|
|
built without --enable-shared.
|
|
|
|
The `configure' script generates the makefiles for building
|
|
MzScheme and/or MrEd. The current directory at the time
|
|
`configure' is run will be used as working space for building the
|
|
executables (independent of --prefix). This build directory does
|
|
not have to be in the source tree, even for an "in-place"
|
|
build. It's ok to run `configure' from its own directory (as in
|
|
the example above), but it's often better to pick a separate build
|
|
directory that is otherwise empty.
|
|
|
|
The `configure' script accepts many other flags that adjust the
|
|
build process. Run `configure --help' for more information. In
|
|
addition, a specific compiler can be selected through environment
|
|
variables. For example, to select the SGI compilers for Irix
|
|
instead of gcc, run configure as
|
|
|
|
env CC=cc CXX=CC [here]configure
|
|
|
|
For cross compilation, set the compiler variables to a compiler
|
|
for the target platform compiler, but also set CC_FOR_BUILD to a
|
|
compiler for the host platform (for building binaries to execute
|
|
during the build process).
|
|
|
|
If you re-run `configure' after running `make', then products of
|
|
the `make' may be incorrect due to changes in the compiler command
|
|
line. To be safe, run `make clean' each time after running
|
|
`configure'.
|
|
|
|
When building for multiple platforms or configurations out of the
|
|
same source directory, beware of cached `configure' information in
|
|
`config.cache'. Avoid this problem entirely by using a separate
|
|
build directory (but the same source) for each platform or
|
|
configuration.
|
|
|
|
2. Run `make'. [As noted in step 0, this must be GNU `make'.]
|
|
|
|
With Cygwin, you may need to use `make --unix'.
|
|
|
|
Binaries and libraries are placed in subdirectories of the build
|
|
directory. For example, the `mzscheme' binary appears in the
|
|
`mzscheme' directory.
|
|
|
|
3. Run `make install'.
|
|
|
|
This step copies binaries and libraries into place within the
|
|
target installation. For example, the `mzscheme' binary is copied
|
|
into the "bin" directory for an in-place build, or into the
|
|
executable directory for a --prefix build.
|
|
|
|
For a --prefix build, this step also creates a "config.ss" module
|
|
in a "config" collection for a --prefix build, so that various PLT
|
|
tools and libraries can find the installation directories. In
|
|
this case, you can also use a `DESTDIR' environment variable to
|
|
have the hierarchy constructed at a temporary place (useful for
|
|
packaging), for example: `make DESTDIR=/tmp/plt-build install'.
|
|
Note that if DESTDIR is used, the resulting installation will not
|
|
be functional until it is installed in the its intended place
|
|
(because at the end of this step, the generated "config.ss", the
|
|
binaries and the launchers will all get patched to point at the
|
|
installation paths, without the DESTDIR prefix).
|
|
|
|
Finally, this step compiles ".zo" bytecode files for installed
|
|
Scheme source, and generates launcher programs like
|
|
"DrScheme". Use `make plain-install' to install without compiling
|
|
".zo" files or creating launchers.
|
|
|
|
If the installation fails because the target directory cannot be
|
|
created, or because the target directory is not the one you
|
|
wanted, then you can run `configure' again with a new --prefix
|
|
value, then try step 3 again. After changing the --prefix value,
|
|
it is sometimes not necessary to repeat steps 1 or 2. (Try it and
|
|
find out...)
|
|
|
|
If you build frequently from the Subversion-based sources, beware
|
|
that you may accumulate user- and version-specific information in
|
|
your "add-ons" directory, which you can most easily find by
|
|
evaluating
|
|
(find-system-path 'addon-dir)
|
|
in MzScheme. In addition, if you configure with --enabled-shared,
|
|
you may accumlate many unused versions of the dynamic libraries in
|
|
your installation target.
|
|
|
|
4. [Optional] Run `help-desk' to install missing documentation.
|
|
|
|
The source distribution (or Subversion-based source) includes only
|
|
the release notes, and not the rest of the core documentation.
|
|
Run the newly installed `help-desk' and follow the "Manuals" link
|
|
to install the rest of the documentation. For a Subversion-based
|
|
build, the "Manuals" page includes a link to update previously
|
|
installed documentation.
|
|
|
|
After an "in-place" install without Subversion, the plt/src directory
|
|
is no longer needed, and it can be safely deleted. Build information
|
|
is recorded in a "buildinfo" file in the installation.
|
|
|
|
For a build without --prefix (or with --enable-origtree) and without
|
|
--enable-shared, you can safely move the install tree, because all
|
|
file references within the installation are relative.
|
|
|
|
OpenGL, Unix, and pthreads
|
|
--------------------------
|
|
|
|
On some Unix systems, programs that use the OpenGL library must also
|
|
link to pthreads. To use MrEd's OpenGL support on these systems, MrEd
|
|
must be configured with the --enable-pthread option. Unfortunately,
|
|
MzScheme's normal stack handling and use of signals (for its own
|
|
thread scheduling) do not interact well with pthreads. Thus, when
|
|
pthreads are enabled, MzScheme and MrEd cannot use interupt timers,
|
|
and the stack is limited to 1MB. These restrictions can degrade
|
|
performance and thread-responsiveness.
|
|
|
|
If `configure' detects that OpenGL requires -lpthread for linking,
|
|
and if --enable-pthread is not specified, `configure' prints a warning
|
|
and disables GL support. On some systems, including at least FreeBSD
|
|
with the MESA GL implementation (but not the NVIDIA implementation,
|
|
which does not need pthreads), `configure' cannot detect the need for
|
|
pthreads. On these platforms, GL support will be included in MrEd,
|
|
but it will not work properly unless --enable-pthread is specified.
|
|
|
|
========================================================================
|
|
Embedded Paths in the Executables
|
|
========================================================================
|
|
|
|
On all platforms, the MzScheme and MrEd binaries embed a path to the
|
|
main "collects" directory of library collections. This path can be
|
|
relative to the executable. Multiple paths can be provided, in which
|
|
case the first path is the main "collects" path, and additional paths
|
|
are placed before the main path (but after a user-specific "collects"
|
|
path) in the default collection path list.
|
|
|
|
The paths are embedded in the binary immediately after a "coLLECTs
|
|
dIRECTORy:" tag. Each path must be NUL terminated, the entire list of
|
|
paths must end with an additional NUL terminator, and the overall list
|
|
must be less than 1024 bytes long.
|
|
|
|
As an alternative to editing an exeuctable directly, the
|
|
`create-embedding-executable' procedure from `(lib "embed.ss"
|
|
"compiler")' can be used to change the embedded path. For example, the
|
|
following program clones the MzScheme executable to "/tmp/mz" and
|
|
changes the embedded path in the clone to "/tmp/collects":
|
|
|
|
(require (lib "embed.ss" "compiler"))
|
|
(create-embedding-executable "/tmp/mz" #:collects-path "/tmp/collects")
|
|
|
|
Similarly, `mzc' in `--exe' or `--gui-exe' mode accepts a `--collects'
|
|
flag to set the collection path in the generated executable.
|
|
|
|
Under Windows, executables also embed a path to DLLs. For more
|
|
information, see worksp\README.
|
|
|
|
Paths to all other installation directories are found through the
|
|
"config.ss" library of the "config" collection. See "doc.txt" in the
|
|
"config" collection (for search for "config.ss" in Help Desk) for more
|
|
information.
|
|
|
|
========================================================================
|
|
Compiling the OSKit-based Kernel
|
|
========================================================================
|
|
|
|
To build the OSKit-based MzScheme kernel, run the configure script
|
|
with the --enable-oskit or --enable-smalloskit flag. The result of
|
|
compiling will be `mzscheme.multiboot' in the `mzscheme' build
|
|
directory. It is a kernel in multiboot format.
|
|
|
|
Before building the MzScheme kernel, you must first install OSKit,
|
|
which is available from the Flux Research Group at Utah:
|
|
http://www.cs.utah.edu/projects/flux/oskit/
|
|
|
|
By default, configure assumes that OSKit is installed in
|
|
/usr/local. To specify a different location for OSKit, define the
|
|
OSKHOME environment variable.
|
|
|
|
For simplicity, the MzScheme kernel uses SGC rather than Boehm's
|
|
conservative garbage collector.
|
|
|
|
The --enable-smalloskit configuration produces a kernel without
|
|
networking or filesystem support. The kernel created by
|
|
--enable--oskit accepts filesystem and networking configuration
|
|
information on its multiboot command line via the --fs and --net
|
|
flags:
|
|
|
|
--fs <drive> <partition> : mounts the given partition as the root
|
|
directory. For example, to mount the seventh parition on main disk,
|
|
supply: --fs hda f. Many filesystem formats are supported,
|
|
including EXT2, MSDOS, and VFAT (all of the ones supported by
|
|
Linux; see OSKit for details). The standard kernel can only mount
|
|
one filesystem per run; hack main.c to get more.
|
|
|
|
--net <address> <netmask> <gateway> : initializes ethernet support
|
|
for MzScheme's TCP primitives. Example: --net 128.42.6.101
|
|
255.255.255.0 128.42.6.254. Many types of ethernet cards are
|
|
supported (the ones supported by FreeBSD; see OSKit for details).
|
|
|
|
Each of --fs and --net should be used once at most. The --fs and --net
|
|
flags must appear before any other command-line arguments, which are
|
|
handled by MzScheme in the usual way.
|
|
|
|
To access a filesystem or the network from non-multiboot kernels
|
|
(e.g., a LILO-compatible kernel), you must hardwire filesystem and
|
|
networking parameters in oskglue.inc when compiling the kernel; see
|
|
oskglue.inc for details (grep for `hardwire').
|
|
|
|
========================================================================
|
|
Porting to New Platforms
|
|
========================================================================
|
|
|
|
At a mininum, to port MzScheme to a new platform, edit
|
|
mzscheme/sconfig.h to provide a platform-specific compilation
|
|
information. As dsitributed, mzscheme/sconfig.h contains
|
|
configurations for the following platforms:
|
|
|
|
Windows
|
|
Mac OS X
|
|
Linux (x86, PPC, 68k, Alpha)
|
|
Cygwin
|
|
Solaris (x86, Sparc)
|
|
SunOS4 (Sparc)
|
|
IBM AIX (RS6000)
|
|
SGI IRIX (Mips)
|
|
DEC Ultrix
|
|
HP/UX
|
|
FreeBSD
|
|
OpenBSD
|
|
NetBSD
|
|
OSF1 (Alpha)
|
|
SCO Unix (x86)
|
|
|
|
If your platfrom is not supported by the Boehm garbage collector
|
|
(distributed with PLT source), provide the `--enable-sgc' flag to
|
|
`configure'.
|
|
|
|
========================================================================
|
|
Additional Compilation Notes
|
|
========================================================================
|
|
|
|
Garbage Collector
|
|
-----------------
|
|
|
|
The conservative garbage collector distributed with MzScheme (in the
|
|
gc directory) has been modified slightly from Boehm's standard
|
|
distribution. Mostly, the change modify the way that object
|
|
finalization is handled.
|
|
|
|
Precise GC
|
|
----------
|
|
|
|
MzScheme and MrEd can be compiled to an experimental form that uses a
|
|
mmemory-moving garbage collector with precise tracking of pointers (as
|
|
opposed to "conservation garbage collection"). The experimental forms
|
|
are called MzScheme3m and MrEd3m, repsectively, where the "3m" stands
|
|
for "moving memory manager".
|
|
|
|
* Building for Unix and Mac OS X
|
|
|
|
Run `make 3m'. Building MzScheme3m and MrEd3m first builds the
|
|
normal MzScheme and MrEd executables, then uses them to build the 3m
|
|
versions. Run `make install-3m' to install the 3m binaries.
|
|
|
|
Note on OS X (actually, PowerPC and gcc): gcc version 2.x has an
|
|
optimizer bug that prevents 3m from building. Either use gcc 3.x or
|
|
supply --disable-opt to `configure'.
|
|
|
|
* Windows
|
|
|
|
Build and install the normal MzScheme and MrEd executables using
|
|
Micsrosoft Visual C, and make sure that cl.exe is in your shell
|
|
path. Then, in a shell, change directories to plt\src\worksp\gc2 and
|
|
run
|
|
|
|
..\..\..\mzscheme.exe -r make.ss
|
|
|
|
The resulting MzScheme3m.exe and MrEd3m.exe will appear in the "plt"
|
|
directory, along with DLLs libmzsch3mxxxxxxx.dll and
|
|
libmred3mxxxxxxx.dll in plt/lib. (There is no correspingd
|
|
libmzgc3mxxxxxxx.dll. Instead, it is merged with
|
|
libmzsch3mxxxxxxx.dll.)
|
|
|
|
Configuration Options
|
|
---------------------
|
|
|
|
By default, MzScheme is compiled without support for single-precision
|
|
floating point numbers. This and other options can be modified by
|
|
setting flags in mzscheme/sconfig.h.
|
|
|
|
Modifying MzScheme
|
|
------------------
|
|
|
|
If you modify MzScheme and change any primitive syntax or the
|
|
collection of built-in identifers, be sure to turn off
|
|
USE_COMPILED_MACROS in schminc.h. Otherwise, MzScheme won't start.
|
|
See schminc.h for details.
|