]> birchwood-abbey.net Git - mit-scheme.git/commitdiff
Merge branch 'master' into pucked.
authorMatt Birkholz <matt@birchwood-abbey.net>
Fri, 1 Apr 2022 13:19:03 +0000 (09:19 -0400)
committerMatt Birkholz <matt@birchwood-abbey.net>
Fri, 1 Apr 2022 13:19:03 +0000 (09:19 -0400)
1  2 
dist/make-src-files
dist/shared.sh
doc/ref-manual/Makefile.in
doc/ref-manual/scheme.texinfo
doc/user-manual/user.texinfo
src/edwin/intmod.scm
src/microcode/configure.ac
src/runtime/runtime.pkg

index d02729411014ddc358a6d1ed2efeca2151d2c17c,642b1199b6c6407ddf4dd95d3f56a1ecf5620976..52617fbe128ffd06f054670ca6b5b2755090489b
@@@ -27,43 -43,31 +43,38 @@@ USAGE_FUNCTION=system_usag
  . "$(dirname "${0}")"/shared.sh
  reset_output_dir
  
- notify "Creating the changelog"
- my_rm_f "${CHANGELOG}"
- run_command "${CHANGELOG}" "${SOURCE_TREE}" git log --name-status
- make_read_only "${CHANGELOG}"
+ GIT_REPO=https://git.savannah.gnu.org/git/"${PROJECT_NAME}".git
  
- notify "Creating the distribution directory"
- new_temp_dir "${DIST_DIR}"
- my_mv "${CHANGELOG}" "${DIST_DIR}"/.
- git archive ${RELEASE_TAG} \
-     -- debian/ src/ tests/ doc/ dist/Makefile Tags.sh etc/xscheme.el \
- | ( cd "${DIST_DIR}/" && tar xf - && mv dist/Makefile ./ && rmdir dist )
+ notify "Cloning the source tree"
+ run_command "${SRC_OUT}"-clone . git clone -b "${GIT_BRANCH}" "${GIT_REPO}"
 +
- # Clean up dot files from source tree
- my_find "${DIST_DIR}" -name '.*' -exec rm -f '{}' \;
++# Plugins are "sold" separately.
++for PLUGIN in ${PLUGINS[@]}; do
++    my_rm_rf "${DIST_DIR}"/src/${PLUGIN}
++done
 +
- reconf ()
+ cleanup_file "${PROJECT_NAME}"
+ generate_changelog ()
  {
-     if [[ -f configure ]]; then
-       my_configure
-       my_make distclean
-     else
-       cmd autoconf
-     fi
+     git log --name-status > ../"${CHANGELOG}"
+     make_read_only ../"${CHANGELOG}"
  }
  
- notify "Configuring the distribution directory"
- run_command "${SRC_OUT}"-config "${DIST_DIR}"/src ./Setup.sh
- run_command "${DOC_OUT}"-config "${DIST_DIR}"/doc reconf
+ notify "Creating the changelog"
+ run_command "${SRC_OUT}"-changelog "${PROJECT_NAME}" generate_changelog
+ my_rm_rf "${PROJECT_NAME}"/.git
  
- for PLUGIN in ${PLUGINS[@]}; do
-     my_rm_rf "${DIST_DIR}"/src/${PLUGIN}
- done
+ notify "Setting release number"
+ set_release_vars "${PROJECT_NAME}"
+ my_mv "${PROJECT_NAME}" "${DIST_DIR}"
+ cleanup_file "${DIST_DIR}"
+ notify "Configuring the source tree"
+ run_command "${SRC_OUT}"-config "${DIST_DIR}"/src ./Setup.sh
+ run_command_append "${SRC_OUT}"-config "${DIST_DIR}"/doc autoconf
  
- # Clean up after autoconf
- find "${DIST_DIR}" -type d -name autom4te.cache | xargs rm -rf
- fixup_perms "${DIST_DIR}"
 +
  notify "Creating archive file"
  make_tar_file "${SRC_OUT}" "${DIST_DIR}"
  
diff --cc dist/shared.sh
index 7b613eabdf500804a41be340d10a180f206614c1,dfd539170d5a19ebdef3c07a0583ebb6416e1313..de8e13dda7be0b54421dc28ac04327815a6bc584
@@@ -29,8 -29,7 +29,7 @@@ exec 3>&
  
  TL_DIR=$(pwd)
  PROGRAM=${0}
 -PROJECT_NAME=mit-scheme
 +PROJECT_NAME=mit-scheme-pucked
- SOURCE_TREE=.
  
  usage ()
  {
@@@ -56,15 -55,38 +55,40 @@@ standard_args (
      DIST_TYPE=${1:-standard}
  }
  
- source_missing ()
- {
-     echo "${SOURCE_TREE}: directory not found"
-     exit 1
- }
+ ${ARGS_FUNCTION:-standard_args} "${@}"
  
- [[ -d ${SOURCE_TREE} ]] || source_missing
+ CHANGELOG=changelog.txt
+ TAR_SUFFIX=.tar.gz
  
- ${ARGS_FUNCTION:-standard_args} "${@}"
+ OUTPUT_DIR=${TL_DIR}/.out
+ RELEASE_OUT=${OUTPUT_DIR}/release
+ SRC_OUT=${OUTPUT_DIR}/src
+ DOC_OUT=${OUTPUT_DIR}/doc
+ LIARC_OUT=${OUTPUT_DIR}/liarc
+ NATIVE_OUT=${OUTPUT_DIR}/native
+ MACOSX_OUT=${OUTPUT_DIR}/macosx
+ PLUGINS=(blowfish gdbm edwin imail x11 x11-screen)
++PLUGINS+=(berkeley-db pgsql)
++PLUGINS+=(cairo gl glib gtk gtk-screen pango planetarium devops)
+ set_release_vars ()
+ {
+     local -r SOURCE_TREE=${1}
+     case ${DIST_TYPE} in
+         snapshot)
+           RELEASE=$(date +%Y%m%d)
+           ;;
+         standard)
+           RELEASE=$(get_release "${SOURCE_TREE}")
+           ;;
+         *)
+           usage
+           ;;
+     esac
+     DIST_DIR=${PROJECT_NAME}-${RELEASE}
+     echo "${RELEASE}" > "${RELEASE_OUT}"
+ }
  
  get_release ()
  {
Simple merge
Simple merge
index 7fa88da712dac42f545c1ffc61571431287f0b13,6cf19bba83da843e6ddad7b6320b2e24584a52f0..6a3712ab526dfbc8403d9f9207b475bbe6237fd8
@@@ -4104,395 -4263,7 +4109,395 @@@ Edwin's internal display data structure
  state that prevents Edwin from running.
  @end deffn
  
 -@node GNU Free Documentation License, Environment-variable Index, Edwin, Top
 +@node Release Notes
 +@appendix Release Notes
 +
 +This experimental version of MIT/GNU Scheme got a new project name,
 +MIT/GNU Scheme Pucked, and a new command name,
 +@code{mit-scheme-pucked}, so that it can be installed alongside the
 +stable release.  While it comes with experimental plugins and a
 +strange name, the core of the system is largely unchanged.  Note that
 +this is a @emph{bleeding edge} core.  The head of the MIT/GNU Scheme
 +project's development branch on Savannah is merged in frequently.
 +
 +The experimental code unique to this ``pucked'' version of Scheme is
 +almost entirely contained in the new plugins.  One ``old'' plugin,
 +Edwin, contains significant changes to accommodate Gtk screens, but these
 +changes should not be apparent to casual users.  If your code does not
 +hack Edwin and you previously said
 +
 +@example
 +mit-scheme --load my-code
 +@end example
 +
 +@noindent
 +you should be able to say
 +
 +@example
 +mit-scheme-pucked --load my-code
 +@end example
 +
 +@noindent
 +and be no worse off.
 +
 +@noindent
 +Users may want to use the following enhancements in their code.
 +
 +@itemize @bullet
 +@item
 +The Debian packaging includes a @file{.desktop} file in
 +@url{freedesktop.org} format.  In the right place it makes this Scheme
 +available through an icon (a lambda holding a fountain pen) in a
 +@file{.desktop} aware application launcher.
 +
 +@item
 +The installation process includes HTML documentation by default.  In
 +the right place these files are available in your web browser, whether
 +online or offline, using a file URL like the following Ubuntu locator.
 +
 +@example
 +@url{file:///usr/share/doc/mit-scheme-pucked/html/index.html}
 +@end example
 +
 +HTML documentation for installed plugins is found in the same location.
 +
 +@item
 +The @code{planetarium} plugin can draw a simple tellurion, but that's
 +about all.
 +
 +@item
 +The @code{gtk-screen} plugin allows Edwin to display text using Pango.
 +@end itemize
 +
 +@cindex cond-expand feature
 +@cindex feature, cond-expand
 +The @code{cond-expand} feature @code{pucked} will be present, to keep
 +your adaptations to this experiment separate from old code intended
 +only for your stable worlds.
 +
 +@node Installation
 +@appendix Installation
 +
 +MIT/GNU Scheme Pucked and its plugins are now available as packages
 +for recent versions of Ubuntu on Intel@registeredsymbol{}64
 +architecture machines.  If
 +@uref{https://birchwood-abbey.net/~puck/Scheme/} has links to packages
 +for your Ubuntu, you can use your Ubuntu package manager to add,
 +remove and update Scheme and its plugins.  @xref{Ubuntu Installation}.
 +
 +Scheme is also available as ``binary'' archives that can be unpacked,
 +compiled and installed on non-Ubuntu, even non-GNU/Linux operating
 +systems, if they are sufficiently Unix-like.  Installation requires
 +something resembling the customary GNU tool chain.  The Scheme
 +interpreter will be built and installed much like any other (GNU) C
 +program on your system.  Detailed instructions for installing Scheme
 +this way can be found below.  @xref{Unix Installation}.
 +
 +@menu
 +* Ubuntu Installation::
 +* Unix Installation::
 +@end menu
 +
 +@node Ubuntu Installation
 +@section Ubuntu Installation
 +
 +Using an Ubuntu package manager, you can add Birchwood Abbey to your
 +list of package sources and install or update Scheme and its plugins
 +just like other packages.
 +
 +You would begin by installing the GPG key used to sign the packages.
 +It is available at this URL:
 +
 +@example
 +@url{https://birchwood-abbey.net/codemaster.txt}
 +@end example
 +
 +You should save the page, e.g. as @file{codemaster.txt} in your
 +downloads folder, then install the key with the @code{apt-key}
 +command.
 +
 +@example
 +sudo apt-key add ~/Downloads/codemaster.txt
 +@end example
 +
 +Next add the repository to your list of package sources.  On Ubuntu
 +18.04 you would use this command:
 +
 +@example
 +sudo add-apt-repository \
 +    "deb http://birchwood-abbey.net/ubuntu/18.04/ birchwood main"
 +@end example
 +
 +or by editing files in @file{/etc/apt/}.
 +
 +Finally, use your package manager to update its list of available
 +packages and choose the Scheme plugins you would like to install.
 +Scheme itself will be automatically selected because all of the
 +plugins depend on it.  You might choose the
 +@code{mit-scheme-pucked-x11-screen} plugin because it depends on
 +Scheme and Edwin and makes Scheme a graphical X11 application like the
 +original MIT/GNU Scheme.  You could do this with Apt by entering the
 +following commands.
 +
 +@example
 +sudo apt update
 +sudo apt install mit-scheme-pucked-x11-screen
 +@end example
 +
 +Note that the Ubuntu version number is part of the source URL.  This
 +allows new versions of Scheme and its plugins to be provided for old
 +versions of Ubuntu.  (Normally you would upgrade to new versions of
 +Ubuntu to get new versions of Scheme.)  However this means there may
 +be @emph{four} packages named @code{mit-scheme-pucked} with the
 +@emph{same} version, each compiled for Ubuntu 16.04, 18.04, 19.10 and
 +20.04.
 +
 +When you upgrade to a new version of Ubuntu you should first remove
 +the @code{mit-scheme-pucked} package (which will remove all of its
 +plugins), then re-install them after changing the source URL (e.g. to
 +@url{http://birchwood-abbey.net/ubuntu/19.10/}).
 +
 +@example
 +sudo apt remove mit-scheme-pucked
 +sudo add-apt-repository -r \
 +    "deb http://birchwood-abbey.net/ubuntu/19.04/ birchwood main"
 +sudo add-apt-repository \
 +    "deb http://birchwood-abbey.net/ubuntu/19.10/ birchwood main"
 +sudo apt update
 +sudo apt install mit-scheme-pucked-x11-screen
 +@end example
 +
 +You can also download the package files and install them by hand.
 +Links to the files can be found on the project home page.
 +
 +@example
 +@uref{https://birchwood-abbey.net/~puck/Scheme/}
 +@end example
 +
 +You will need to know your Ubuntu version (e.g. 20.04) and Debian
 +machine architecture (e.g. amd64), then click on the corresponding
 +link.  You will need to do this for your chosen plugin, all of the
 +plugins it requires, and Scheme itself (the @code{mit-scheme-pucked}
 +package).
 +
 +For example if you want Edwin to display in an X11 window you will
 +want to install the @code{x11-screen} plugin which requires the
 +@code{edwin} plugin which requires several more.  Each entry on the
 +project home page lists the package files available for a plugin
 +and all of its required plugins.
 +
 +If you would like to verify that the downloaded files are authentic
 +you will need the corresponding @file{.changes} files.  Each contains
 +checksums for the package files and is signed.  If you saved Puck's
 +GPG key in @file{~/Downloads/codemaster.txt}, you can add it to your
 +keyring like this:
 +
 +@example
 +gpg --import ~/Downloads/codemaster.txt
 +@end example
 +
 +Then verify the signature on the @file{.changes} file like this:
 +
 +@example
 +gpg --verify ~/Downloads/mit-scheme-pucked_@value{VERSION}-1_amd64.changes
 +@end example
 +
 +And compare the checksum in the @file{.changes} file to one
 +computed from your downloaded file.
 +
 +@example
 +grep mit-scheme-pucked_@value{VERSION}-1_amd64.deb \
 +     mit-scheme-pucked_@value{VERSION}-1_amd64.changes
 +sha256sum mit-scheme-pucked_@value{VERSION}-1_amd64.deb
 +@end example
 +
 +After you have downloaded and verified all of the required files, you
 +can install them, required packages first, e.g.@: starting with
 +@code{mit-scheme-pucked} and finishing with
 +@code{mit-scheme-pucked-x11-screen}.
 +@verbatim
 +P=~/Downloads/mit-scheme-pucked
 +sudo dpkg --install ${P}_10.1.20-1_amd64.deb
 +sudo dpkg --install ${P}-gdbm_1.0.6-1_amd64.deb
 +sudo dpkg --install ${P}-blowfish_1.1.6-1_amd64.deb
 +sudo dpkg --install ${P}-edwin_3.117.7-1_amd64.deb
 +sudo dpkg --install ${P}-x11_1.3.4-1_amd64.deb
 +sudo dpkg --install ${P}-x11-screen_1.0.6-1_amd64.deb
 +@end verbatim
 +
 +As mentioned above, when you upgrade to a new version of Ubuntu you
 +should first remove the @code{mit-scheme-pucked} package (which should
 +remove all of its plugins), then install the packages built for your
 +new Ubuntu.
 +
 +@node Unix Installation
 +@section Unix Installation
 +
 +We will use as an example the installation for GNU/Linux.  The
 +installation for other unix systems is similar.  There are several
 +references to @var{ARCH} below; these refer to the computer
 +architecture that Scheme is compiled for: either @samp{i386}
 +@samp{x86-64}, @samp{aarch64}, or @samp{svm1}.
 +
 +@mitgnu{} is distributed as a compressed `tar' file.  The tar
 +file contains both source and binary files; the binary files are
 +pre-compiled Scheme code for a particular computer architecture.  The
 +source files are C programs that need to be compiled.
 +
 +@heading Requirements
 +
 +At a minimum, you will need a C compiler (e.g. @samp{gcc}) and a
 +@samp{make} program, and a ``curses'' library.  For example, here are
 +the packages that must be installed on some popular systems:
 +
 +@itemize @bullet
 +@item
- Debian-like systems: @code{gcc} @code{make} @code{libncurses-dev}
++Debian-like systems: @code{gcc} @code{make} @code{m4} @code{libncurses-dev}
 +@item
- CentOS-like systems: @code{gcc} @code{make} @code{ncurses-devel}
++CentOS-like systems: @code{gcc} @code{make} @code{m4} @code{ncurses-devel}
 +@item
 +macOS systems: Command line developer tools @samp{xcode-select --install}
 +@end itemize
 +
 +Additionally, if you want support for X11 graphics, you'll need:
 +
 +@itemize @bullet
 +@item
 +Debian-like systems: @code{libx11-dev}
 +@item
 +CentOS-like systems: @code{libX11-devel}
 +@item
 +macOS systems: @code{XQuartz} (from @url{https://www.xquartz.org/})
 +@end itemize
 +
 +@heading Steps
 +
 +In order to install the software, it's necessary to configure and
 +compile the C code, then to install the combined C and Scheme
 +binaries, with the following steps.
 +
 +@enumerate
 +@item
 +Unpack the tar file,
 +@file{mit-scheme-pucked-@var{VERSION}-@var{ARCH}.tar.gz}, into the directory
 +@file{mit-scheme-pucked-@var{VERSION}}.  For example,
 +
 +@example
- tar xzf mit-scheme-pucked-@value{VERSION}-x86-64.tar.gz
++tar xzf mit-scheme-pucked-@var{VERSION}-x86-64.tar.gz
 +@end example
 +
- will create a new directory @file{mit-scheme-pucked-@value{VERSION}}.
++will create a new directory @file{mit-scheme-pucked-@var{VERSION}}.
 +
 +@item
 +Move into the @file{src} subdirectory of the new directory:
 +
 +@example
- cd mit-scheme-pucked-@value{VERSION}/src
++cd mit-scheme-pucked-@var{VERSION}/src
 +@end example
 +
 +@item
 +Configure the software:
 +
 +@example
 +./configure
 +@end example
 +
 +By default, the software will be installed in @file{/usr/local}, in
 +the subdirectories @file{bin} and @file{lib}.  If you want it
 +installed somewhere else, for example @file{/opt/mit-scheme-pucked}, pass the
 +@option{--prefix} option to the configure script, as in
 +@kbd{./configure --prefix=/opt/mit-scheme-pucked}.
 +
 +The configure script accepts all the normal arguments for such
 +scripts, and additionally accepts some that are specific to @mitgnu{}.
 +To see all the possible arguments and their meanings, run the command
 +@kbd{./configure --help}.  However, do not specify the following
 +options, which are all preconfigured to the right values; doing so
 +will probably cause the build to fail:
 +
 +@example
 +--enable-native-code
 +--enable-host-scheme-test
 +--enable-cross-compiling
 +--with-compiler-target
 +--with-default-target
 +--with-scheme-build
 +@end example
 +
 +@item
 +Build the software:
 +
 +@example
 +make
 +@end example
 +
 +@item
 +Install the software:
 +
 +@example
 +make install
 +@end example
 +
 +Depending on configuration options and file-system permissions, you
 +may need super-user privileges to do the installation steps.
 +
 +@item
 +Build the documentation:
 +
 +@example
 +cd ../doc
 +./configure
 +make
 +@end example
 +
 +@item
 +Install the documentation:
 +
 +@example
 +make install-info install-html install-pdf
 +@end example
 +
 +Depending on configuration options and file-system permissions, you
 +may need super-user privileges to do the installation step.
 +@end enumerate
 +
 +@heading Plugins
 +
 +After you have installed Scheme you may want to install several
 +@dfn{plugins}.  Scheme no longer uses dynamically loaded microcode
 +modules installed with Scheme.  The micromodules have been converted
 +into plugins: new subsystems that use the C/FFI to dynamically load
 +the same code.  Instead you configure, build, and install additional
 +plugins after installing the core system.
 +
 +By default, the following plugins are built and installed:
 +@file{edwin}, @file{imail}, @file{x11}, and @file{x11-screen}.  (The
 +latter two only if X11 libraries are installed on your system.)  To
 +get all of the functionality previously available in version 9.2 you
 +will need to build and install the remaining plugins included in the
 +@file{src} subdirectory: @file{blowfish}, @file{gdbm},
 +and @file{pgsql}.  These plugins are all configured, built, and
 +installed in the GNU standard way.  See the @file{README} file in each
 +plugin's source directory for complete details.
 +
 +More plugins can be found on the project home page.  Short
 +descriptions help to choose from among them.  Click on the source
 +archive link for each plugin you would like to use, and any plugins it
 +requires.  You will need to build and install each plugin before any
 +that require it.  These plugins are not distributed in binary form
 +except as Ubuntu packages.
 +
 +@heading Cleanup
 +
 +After installing Scheme and your desired plugins, you can delete the
 +source directory:
 +
 +@example
 +cd ../..
 +rm -rf mit-scheme-pucked-@value{VERSION}
 +@end example
 +
 +@node GNU Free Documentation License
  @appendix GNU Free Documentation License
  
  @cindex FDL, GNU Free Documentation License
Simple merge
Simple merge
Simple merge