mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-29 19:30:36 +02:00
Update effective version to 3.0
* GUILE-VERSION: Bump version to 2.3.0, and effective version to 3.0. * .gitignore: * README: * doc/guile.1: * doc/ref/api-evaluation.texi: * doc/ref/api-options.texi: * doc/ref/guile-invoke.texi: * doc/ref/libguile-foreign-objects.texi: * doc/ref/libguile-parallel.texi: * doc/ref/srfi-modules.texi: Update to 3.0. * libguile/_scm.h (SCM_OBJCODE_MAJOR_VERSION): (SCM_OBJCODE_MINIMUM_MINOR_VERSION, SCM_OBJCODE_MINOR_VERSION): Bump bytecode version for fallback path. * libguile/loader.c: Update to avoid loading version 2.2 bytecode files. * meta/guile-3.0-uninstalled.pc.in: * meta/guile-3.0.pc.in: Rename. * module/system/vm/assembler.scm (*bytecode-major-version*): (*bytecode-minor-version*): Write the new bytecode version.
This commit is contained in:
parent
c248ea10be
commit
b2c0e01bb4
16 changed files with 46 additions and 46 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -67,8 +67,8 @@ guile-procedures.txt
|
|||
guile-config/guile-config
|
||||
*.go
|
||||
TAGS
|
||||
/meta/guile-2.2.pc
|
||||
/meta/guile-2.2-uninstalled.pc
|
||||
/meta/guile-3.0.pc
|
||||
/meta/guile-3.0-uninstalled.pc
|
||||
gdb-pre-inst-guile
|
||||
cscope.out
|
||||
cscope.files
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
# Note: `GUILE_VERSION' is defined in `configure.ac' using `git-version-gen'.
|
||||
GUILE_MAJOR_VERSION=2
|
||||
GUILE_MINOR_VERSION=2
|
||||
GUILE_MICRO_VERSION=2
|
||||
GUILE_MINOR_VERSION=3
|
||||
GUILE_MICRO_VERSION=0
|
||||
|
||||
GUILE_EFFECTIVE_VERSION=2.2
|
||||
GUILE_EFFECTIVE_VERSION=3.0
|
||||
|
||||
|
||||
# All of the shared lib versioning info. Right now, for this to work
|
||||
|
@ -16,7 +16,7 @@ GUILE_EFFECTIVE_VERSION=2.2
|
|||
# See libtool info pages for more information on how and when to
|
||||
# change these.
|
||||
|
||||
LIBGUILE_INTERFACE_CURRENT=3
|
||||
LIBGUILE_INTERFACE_CURRENT=0
|
||||
LIBGUILE_INTERFACE_REVISION=0
|
||||
LIBGUILE_INTERFACE_AGE=2
|
||||
LIBGUILE_INTERFACE_AGE=0
|
||||
LIBGUILE_INTERFACE="${LIBGUILE_INTERFACE_CURRENT}:${LIBGUILE_INTERFACE_REVISION}:${LIBGUILE_INTERFACE_AGE}"
|
||||
|
|
12
README
12
README
|
@ -1,8 +1,8 @@
|
|||
This is version 2.2 of Guile, Project GNU's extension language library.
|
||||
Guile is an implementation of the Scheme programming language, packaged
|
||||
as a library that can be linked into applications to give them their own
|
||||
extension language. Guile supports other languages as well, giving
|
||||
users of Guile-based applications a choice of languages.
|
||||
This is a prerelease of version 3.0 of Guile, Project GNU's extension
|
||||
language library. Guile is an implementation of the Scheme programming
|
||||
language, packaged as a library that can be linked into applications to
|
||||
give them their own extension language. Guile supports other languages
|
||||
as well, giving users of Guile-based applications a choice of languages.
|
||||
|
||||
Please send bug reports to bug-guile@gnu.org.
|
||||
|
||||
|
@ -257,7 +257,7 @@ switches specific to Guile you may find useful in some circumstances.
|
|||
|
||||
Cross building Guile =====================================================
|
||||
|
||||
As of Guile 2.2.x, the build process produces a library, libguile-2.2,
|
||||
As of Guile 3.0.x, the build process produces a library, libguile-3.0,
|
||||
along with Guile "object files" containing bytecode to be interpreted by
|
||||
Guile's virtual machine. The bytecode format depends on the endianness
|
||||
and word size of the host CPU.
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
.\" groff -man -Tascii foo.1
|
||||
.\"
|
||||
.\" title section date source manual
|
||||
.TH GUILE 1 "2011-03-04" GNU "GNU Guile 2.2"
|
||||
.TH GUILE 1 "2017-05-22" GNU "GNU Guile 3.0"
|
||||
.
|
||||
.SH NAME
|
||||
guile \- The GNU Project Extension Language
|
||||
|
|
|
@ -935,8 +935,8 @@ When @code{primitive-load-path} searches the @code{%load-compiled-path}
|
|||
for a corresponding compiled file for a relative path it does so by
|
||||
appending @code{.go} to the relative path. For example, searching for
|
||||
@code{ice-9/popen} could find
|
||||
@code{/usr/lib/guile/2.2/ccache/ice-9/popen.go}, and use it instead of
|
||||
@code{/usr/share/guile/2.2/ice-9/popen.scm}.
|
||||
@code{/usr/lib/guile/3.0/ccache/ice-9/popen.go}, and use it instead of
|
||||
@code{/usr/share/guile/3.0/ice-9/popen.scm}.
|
||||
|
||||
If @code{primitive-load-path} does not find a corresponding @code{.go}
|
||||
file in the @code{%load-compiled-path}, or the @code{.go} file is out of
|
||||
|
|
|
@ -60,13 +60,13 @@ The @code{effective-version} function returns the version name that
|
|||
should remain unchanged during a stable series. Currently that means
|
||||
that it omits the micro version. The effective version should be used
|
||||
for items like the versioned share directory name
|
||||
i.e.@: @file{/usr/share/guile/2.2/}
|
||||
i.e.@: @file{/usr/share/guile/3.0/}
|
||||
|
||||
@lisp
|
||||
(version) @result{} "2.2.0"
|
||||
(effective-version) @result{} "2.2"
|
||||
(major-version) @result{} "2"
|
||||
(minor-version) @result{} "2"
|
||||
(version) @result{} "3.0.0"
|
||||
(effective-version) @result{} "3.0"
|
||||
(major-version) @result{} "3"
|
||||
(minor-version) @result{} "0"
|
||||
(micro-version) @result{} "0"
|
||||
@end lisp
|
||||
@end deffn
|
||||
|
@ -87,7 +87,7 @@ party package) are installed. On Unix-like systems this is usually
|
|||
@file{/usr/share/guile/@var{GUILE_EFFECTIVE_VERSION}};
|
||||
|
||||
@noindent
|
||||
for example @file{/usr/local/share/guile/2.2}.
|
||||
for example @file{/usr/local/share/guile/3.0}.
|
||||
@end deffn
|
||||
|
||||
@deffn {Scheme Procedure} %site-dir
|
||||
|
|
|
@ -373,7 +373,7 @@ Here is an example using the Bash shell that adds the current directory,
|
|||
@example
|
||||
$ export GUILE_LOAD_COMPILED_PATH=".:../my-library"
|
||||
$ guile -c '(display %load-compiled-path) (newline)'
|
||||
(. ../my-library /usr/local/lib/guile/2.2/ccache)
|
||||
(. ../my-library /usr/local/lib/guile/3.0/ccache)
|
||||
@end example
|
||||
|
||||
@item GUILE_LOAD_PATH
|
||||
|
@ -392,8 +392,8 @@ directory to @code{%load-path}, and adds the relative directory
|
|||
@example
|
||||
$ env GUILE_LOAD_PATH=".:...:../srfi" \
|
||||
guile -c '(display %load-path) (newline)'
|
||||
(. /usr/local/share/guile/2.2 \
|
||||
/usr/local/share/guile/site/2.2 \
|
||||
(. /usr/local/share/guile/3.0 \
|
||||
/usr/local/share/guile/site/3.0 \
|
||||
/usr/local/share/guile/site \
|
||||
/usr/local/share/guile \
|
||||
../srfi)
|
||||
|
|
|
@ -276,13 +276,11 @@ make_file (int fd)
|
|||
@cindex finalization
|
||||
|
||||
Note that the finalizer may be invoked in ways and at times you might
|
||||
not expect. In particular, if the user's Guile is built with support
|
||||
for threads, the finalizer may be called from any thread that is running
|
||||
Guile. In Guile 2.0, finalizers are invoked via ``asyncs'', which
|
||||
interleaves them with running Scheme code; @pxref{Asyncs}. In Guile 2.2
|
||||
there will be a dedicated finalization thread, to ensure that the
|
||||
finalization doesn't run within the critical section of any other thread
|
||||
known to Guile.
|
||||
not expect. In a Guile built without threading support, finalizers are
|
||||
invoked via ``asyncs'', which interleaves them with running Scheme code;
|
||||
@pxref{Asyncs}. If the user's Guile is built with support for threads,
|
||||
the finalizer will probably be called by a dedicated finalization
|
||||
thread, unless the user invokes @code{scm_run_finalizers ()} explicitly.
|
||||
|
||||
In either case, finalizers run concurrently with the main program, and
|
||||
so they need to be async-safe and thread-safe. If for some reason this
|
||||
|
|
|
@ -27,7 +27,7 @@ need to know which version of Guile to ask for, when they build against
|
|||
Guile. Guile solves this problem by installing a file to be read by the
|
||||
@code{pkg-config} utility, a tool to query installed packages by name.
|
||||
Guile encodes the version into its pkg-config name, so that users can
|
||||
ask for @code{guile-2.0} or @code{guile-2.2}, as appropriate.
|
||||
ask for @code{guile-2.2} or @code{guile-3.0}, as appropriate.
|
||||
|
||||
For effective version @value{EFFECTIVE-VERSION}, for example, you would
|
||||
invoke @code{pkg-config --cflags --libs guile-@value{EFFECTIVE-VERSION}}
|
||||
|
|
|
@ -151,6 +151,7 @@ The Guile core has the following features,
|
|||
guile
|
||||
guile-2 ;; starting from Guile 2.x
|
||||
guile-2.2 ;; starting from Guile 2.2
|
||||
guile-3.0 ;; starting from Guile 3.0
|
||||
r5rs
|
||||
srfi-0
|
||||
srfi-4
|
||||
|
|
|
@ -247,9 +247,9 @@ void scm_ia64_longjmp (scm_i_jmp_buf *, int);
|
|||
#define SCM_OBJCODE_WORD_SIZE SCM_CPP_STRINGIFY (SIZEOF_VOID_P)
|
||||
|
||||
/* Major and minor versions must be single characters. */
|
||||
#define SCM_OBJCODE_MAJOR_VERSION 3
|
||||
#define SCM_OBJCODE_MINIMUM_MINOR_VERSION 9
|
||||
#define SCM_OBJCODE_MINOR_VERSION A
|
||||
#define SCM_OBJCODE_MAJOR_VERSION 4
|
||||
#define SCM_OBJCODE_MINIMUM_MINOR_VERSION 0
|
||||
#define SCM_OBJCODE_MINOR_VERSION 0
|
||||
#define SCM_OBJCODE_MAJOR_VERSION_STRING \
|
||||
SCM_CPP_STRINGIFY(SCM_OBJCODE_MAJOR_VERSION)
|
||||
#define SCM_OBJCODE_MINOR_VERSION_STRING \
|
||||
|
|
|
@ -87,7 +87,7 @@ static void register_elf (char *data, size_t len, char *frame_maps);
|
|||
enum bytecode_kind
|
||||
{
|
||||
BYTECODE_KIND_NONE,
|
||||
BYTECODE_KIND_GUILE_2_2
|
||||
BYTECODE_KIND_GUILE_3_0
|
||||
};
|
||||
|
||||
static SCM
|
||||
|
@ -95,7 +95,7 @@ pointer_to_procedure (enum bytecode_kind bytecode_kind, char *ptr)
|
|||
{
|
||||
switch (bytecode_kind)
|
||||
{
|
||||
case BYTECODE_KIND_GUILE_2_2:
|
||||
case BYTECODE_KIND_GUILE_3_0:
|
||||
{
|
||||
return scm_i_make_program ((scm_t_uint32 *) ptr);
|
||||
}
|
||||
|
@ -294,12 +294,11 @@ process_dynamic_segment (char *base, Elf_Phdr *dyn_phdr,
|
|||
scm_t_uint16 minor = dyn[i].d_un.d_val & 0xffff;
|
||||
switch (major)
|
||||
{
|
||||
case 0x0202:
|
||||
bytecode_kind = BYTECODE_KIND_GUILE_2_2;
|
||||
case 0x0300:
|
||||
bytecode_kind = BYTECODE_KIND_GUILE_3_0;
|
||||
if (minor < SCM_OBJCODE_MINIMUM_MINOR_VERSION)
|
||||
return "incompatible bytecode version";
|
||||
/* FIXME for 3.0: Go back to integers. */
|
||||
if (minor > SCM_OBJCODE_MINOR_VERSION_STRING[0])
|
||||
if (minor > SCM_OBJCODE_MINOR_VERSION)
|
||||
return "incompatible bytecode version";
|
||||
break;
|
||||
default:
|
||||
|
@ -320,7 +319,7 @@ process_dynamic_segment (char *base, Elf_Phdr *dyn_phdr,
|
|||
|
||||
switch (bytecode_kind)
|
||||
{
|
||||
case BYTECODE_KIND_GUILE_2_2:
|
||||
case BYTECODE_KIND_GUILE_3_0:
|
||||
if ((scm_t_uintptr) init % 4)
|
||||
return "unaligned DT_INIT";
|
||||
if ((scm_t_uintptr) entry % 4)
|
||||
|
@ -356,6 +355,8 @@ load_thunk_from_memory (char *data, size_t len, int is_read_only)
|
|||
SCM init = SCM_BOOL_F, entry = SCM_BOOL_F;
|
||||
char *frame_maps = 0;
|
||||
|
||||
errno = 0;
|
||||
|
||||
if (len < sizeof *header)
|
||||
ABORT ("object file too small");
|
||||
|
||||
|
|
|
@ -77,7 +77,7 @@ substitute = \
|
|||
-e "s|[@]guild[@]|$$guild|g" \
|
||||
-e "s|[@]installed_guile[@]|$$installed_guile|g"
|
||||
|
||||
# Substitutions for dependencies that appear in 'guile-2.0.pc'.
|
||||
# Substitutions for dependencies that appear in 'guile-3.0.pc'.
|
||||
dependency_substitutions = \
|
||||
-e "s|[@]BDW_GC_CFLAGS[@]|$(BDW_GC_CFLAGS)|g" \
|
||||
-e "s|[@]BDW_GC_LIBS[@]|$(BDW_GC_LIBS)|g" \
|
||||
|
|
|
@ -1806,8 +1806,8 @@ needed."
|
|||
;;;
|
||||
|
||||
;; FIXME: Define these somewhere central, shared with C.
|
||||
(define *bytecode-major-version* #x0202)
|
||||
(define *bytecode-minor-version* (char->integer #\A))
|
||||
(define *bytecode-major-version* #x0300)
|
||||
(define *bytecode-minor-version* 0)
|
||||
|
||||
(define (link-dynamic-section asm text rw rw-init frame-maps)
|
||||
"Link the dynamic section for an ELF image with bytecode @var{text},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue