1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 03:40:34 +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:
Andy Wingo 2017-05-22 14:13:20 +02:00
parent c248ea10be
commit b2c0e01bb4
16 changed files with 46 additions and 46 deletions

4
.gitignore vendored
View file

@ -67,8 +67,8 @@ guile-procedures.txt
guile-config/guile-config guile-config/guile-config
*.go *.go
TAGS TAGS
/meta/guile-2.2.pc /meta/guile-3.0.pc
/meta/guile-2.2-uninstalled.pc /meta/guile-3.0-uninstalled.pc
gdb-pre-inst-guile gdb-pre-inst-guile
cscope.out cscope.out
cscope.files cscope.files

View file

@ -2,10 +2,10 @@
# Note: `GUILE_VERSION' is defined in `configure.ac' using `git-version-gen'. # Note: `GUILE_VERSION' is defined in `configure.ac' using `git-version-gen'.
GUILE_MAJOR_VERSION=2 GUILE_MAJOR_VERSION=2
GUILE_MINOR_VERSION=2 GUILE_MINOR_VERSION=3
GUILE_MICRO_VERSION=2 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 # 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 # See libtool info pages for more information on how and when to
# change these. # change these.
LIBGUILE_INTERFACE_CURRENT=3 LIBGUILE_INTERFACE_CURRENT=0
LIBGUILE_INTERFACE_REVISION=0 LIBGUILE_INTERFACE_REVISION=0
LIBGUILE_INTERFACE_AGE=2 LIBGUILE_INTERFACE_AGE=0
LIBGUILE_INTERFACE="${LIBGUILE_INTERFACE_CURRENT}:${LIBGUILE_INTERFACE_REVISION}:${LIBGUILE_INTERFACE_AGE}" LIBGUILE_INTERFACE="${LIBGUILE_INTERFACE_CURRENT}:${LIBGUILE_INTERFACE_REVISION}:${LIBGUILE_INTERFACE_AGE}"

12
README
View file

@ -1,8 +1,8 @@
This is version 2.2 of Guile, Project GNU's extension language library. This is a prerelease of version 3.0 of Guile, Project GNU's extension
Guile is an implementation of the Scheme programming language, packaged language library. Guile is an implementation of the Scheme programming
as a library that can be linked into applications to give them their own language, packaged as a library that can be linked into applications to
extension language. Guile supports other languages as well, giving give them their own extension language. Guile supports other languages
users of Guile-based applications a choice of languages. as well, giving users of Guile-based applications a choice of languages.
Please send bug reports to bug-guile@gnu.org. 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 ===================================================== 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 along with Guile "object files" containing bytecode to be interpreted by
Guile's virtual machine. The bytecode format depends on the endianness Guile's virtual machine. The bytecode format depends on the endianness
and word size of the host CPU. and word size of the host CPU.

View file

@ -4,7 +4,7 @@
.\" groff -man -Tascii foo.1 .\" groff -man -Tascii foo.1
.\" .\"
.\" title section date source manual .\" 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 .SH NAME
guile \- The GNU Project Extension Language guile \- The GNU Project Extension Language

View file

@ -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 for a corresponding compiled file for a relative path it does so by
appending @code{.go} to the relative path. For example, searching for appending @code{.go} to the relative path. For example, searching for
@code{ice-9/popen} could find @code{ice-9/popen} could find
@code{/usr/lib/guile/2.2/ccache/ice-9/popen.go}, and use it instead of @code{/usr/lib/guile/3.0/ccache/ice-9/popen.go}, and use it instead of
@code{/usr/share/guile/2.2/ice-9/popen.scm}. @code{/usr/share/guile/3.0/ice-9/popen.scm}.
If @code{primitive-load-path} does not find a corresponding @code{.go} 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 file in the @code{%load-compiled-path}, or the @code{.go} file is out of

View file

@ -60,13 +60,13 @@ The @code{effective-version} function returns the version name that
should remain unchanged during a stable series. Currently that means should remain unchanged during a stable series. Currently that means
that it omits the micro version. The effective version should be used that it omits the micro version. The effective version should be used
for items like the versioned share directory name 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 @lisp
(version) @result{} "2.2.0" (version) @result{} "3.0.0"
(effective-version) @result{} "2.2" (effective-version) @result{} "3.0"
(major-version) @result{} "2" (major-version) @result{} "3"
(minor-version) @result{} "2" (minor-version) @result{} "0"
(micro-version) @result{} "0" (micro-version) @result{} "0"
@end lisp @end lisp
@end deffn @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}}; @file{/usr/share/guile/@var{GUILE_EFFECTIVE_VERSION}};
@noindent @noindent
for example @file{/usr/local/share/guile/2.2}. for example @file{/usr/local/share/guile/3.0}.
@end deffn @end deffn
@deffn {Scheme Procedure} %site-dir @deffn {Scheme Procedure} %site-dir

View file

@ -373,7 +373,7 @@ Here is an example using the Bash shell that adds the current directory,
@example @example
$ export GUILE_LOAD_COMPILED_PATH=".:../my-library" $ export GUILE_LOAD_COMPILED_PATH=".:../my-library"
$ guile -c '(display %load-compiled-path) (newline)' $ 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 @end example
@item GUILE_LOAD_PATH @item GUILE_LOAD_PATH
@ -392,8 +392,8 @@ directory to @code{%load-path}, and adds the relative directory
@example @example
$ env GUILE_LOAD_PATH=".:...:../srfi" \ $ env GUILE_LOAD_PATH=".:...:../srfi" \
guile -c '(display %load-path) (newline)' guile -c '(display %load-path) (newline)'
(. /usr/local/share/guile/2.2 \ (. /usr/local/share/guile/3.0 \
/usr/local/share/guile/site/2.2 \ /usr/local/share/guile/site/3.0 \
/usr/local/share/guile/site \ /usr/local/share/guile/site \
/usr/local/share/guile \ /usr/local/share/guile \
../srfi) ../srfi)

View file

@ -276,13 +276,11 @@ make_file (int fd)
@cindex finalization @cindex finalization
Note that the finalizer may be invoked in ways and at times you might 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 not expect. In a Guile built without threading support, finalizers are
for threads, the finalizer may be called from any thread that is running invoked via ``asyncs'', which interleaves them with running Scheme code;
Guile. In Guile 2.0, finalizers are invoked via ``asyncs'', which @pxref{Asyncs}. If the user's Guile is built with support for threads,
interleaves them with running Scheme code; @pxref{Asyncs}. In Guile 2.2 the finalizer will probably be called by a dedicated finalization
there will be a dedicated finalization thread, to ensure that the thread, unless the user invokes @code{scm_run_finalizers ()} explicitly.
finalization doesn't run within the critical section of any other thread
known to Guile.
In either case, finalizers run concurrently with the main program, and 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 so they need to be async-safe and thread-safe. If for some reason this

View file

@ -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 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. @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 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 For effective version @value{EFFECTIVE-VERSION}, for example, you would
invoke @code{pkg-config --cflags --libs guile-@value{EFFECTIVE-VERSION}} invoke @code{pkg-config --cflags --libs guile-@value{EFFECTIVE-VERSION}}

View file

@ -151,6 +151,7 @@ The Guile core has the following features,
guile guile
guile-2 ;; starting from Guile 2.x guile-2 ;; starting from Guile 2.x
guile-2.2 ;; starting from Guile 2.2 guile-2.2 ;; starting from Guile 2.2
guile-3.0 ;; starting from Guile 3.0
r5rs r5rs
srfi-0 srfi-0
srfi-4 srfi-4

View file

@ -247,9 +247,9 @@ void scm_ia64_longjmp (scm_i_jmp_buf *, int);
#define SCM_OBJCODE_WORD_SIZE SCM_CPP_STRINGIFY (SIZEOF_VOID_P) #define SCM_OBJCODE_WORD_SIZE SCM_CPP_STRINGIFY (SIZEOF_VOID_P)
/* Major and minor versions must be single characters. */ /* Major and minor versions must be single characters. */
#define SCM_OBJCODE_MAJOR_VERSION 3 #define SCM_OBJCODE_MAJOR_VERSION 4
#define SCM_OBJCODE_MINIMUM_MINOR_VERSION 9 #define SCM_OBJCODE_MINIMUM_MINOR_VERSION 0
#define SCM_OBJCODE_MINOR_VERSION A #define SCM_OBJCODE_MINOR_VERSION 0
#define SCM_OBJCODE_MAJOR_VERSION_STRING \ #define SCM_OBJCODE_MAJOR_VERSION_STRING \
SCM_CPP_STRINGIFY(SCM_OBJCODE_MAJOR_VERSION) SCM_CPP_STRINGIFY(SCM_OBJCODE_MAJOR_VERSION)
#define SCM_OBJCODE_MINOR_VERSION_STRING \ #define SCM_OBJCODE_MINOR_VERSION_STRING \

View file

@ -87,7 +87,7 @@ static void register_elf (char *data, size_t len, char *frame_maps);
enum bytecode_kind enum bytecode_kind
{ {
BYTECODE_KIND_NONE, BYTECODE_KIND_NONE,
BYTECODE_KIND_GUILE_2_2 BYTECODE_KIND_GUILE_3_0
}; };
static SCM static SCM
@ -95,7 +95,7 @@ pointer_to_procedure (enum bytecode_kind bytecode_kind, char *ptr)
{ {
switch (bytecode_kind) switch (bytecode_kind)
{ {
case BYTECODE_KIND_GUILE_2_2: case BYTECODE_KIND_GUILE_3_0:
{ {
return scm_i_make_program ((scm_t_uint32 *) ptr); 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; scm_t_uint16 minor = dyn[i].d_un.d_val & 0xffff;
switch (major) switch (major)
{ {
case 0x0202: case 0x0300:
bytecode_kind = BYTECODE_KIND_GUILE_2_2; bytecode_kind = BYTECODE_KIND_GUILE_3_0;
if (minor < SCM_OBJCODE_MINIMUM_MINOR_VERSION) if (minor < SCM_OBJCODE_MINIMUM_MINOR_VERSION)
return "incompatible bytecode version"; return "incompatible bytecode version";
/* FIXME for 3.0: Go back to integers. */ if (minor > SCM_OBJCODE_MINOR_VERSION)
if (minor > SCM_OBJCODE_MINOR_VERSION_STRING[0])
return "incompatible bytecode version"; return "incompatible bytecode version";
break; break;
default: default:
@ -320,7 +319,7 @@ process_dynamic_segment (char *base, Elf_Phdr *dyn_phdr,
switch (bytecode_kind) switch (bytecode_kind)
{ {
case BYTECODE_KIND_GUILE_2_2: case BYTECODE_KIND_GUILE_3_0:
if ((scm_t_uintptr) init % 4) if ((scm_t_uintptr) init % 4)
return "unaligned DT_INIT"; return "unaligned DT_INIT";
if ((scm_t_uintptr) entry % 4) 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; SCM init = SCM_BOOL_F, entry = SCM_BOOL_F;
char *frame_maps = 0; char *frame_maps = 0;
errno = 0;
if (len < sizeof *header) if (len < sizeof *header)
ABORT ("object file too small"); ABORT ("object file too small");

View file

@ -77,7 +77,7 @@ substitute = \
-e "s|[@]guild[@]|$$guild|g" \ -e "s|[@]guild[@]|$$guild|g" \
-e "s|[@]installed_guile[@]|$$installed_guile|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 = \ dependency_substitutions = \
-e "s|[@]BDW_GC_CFLAGS[@]|$(BDW_GC_CFLAGS)|g" \ -e "s|[@]BDW_GC_CFLAGS[@]|$(BDW_GC_CFLAGS)|g" \
-e "s|[@]BDW_GC_LIBS[@]|$(BDW_GC_LIBS)|g" \ -e "s|[@]BDW_GC_LIBS[@]|$(BDW_GC_LIBS)|g" \

View file

@ -1806,8 +1806,8 @@ needed."
;;; ;;;
;; FIXME: Define these somewhere central, shared with C. ;; FIXME: Define these somewhere central, shared with C.
(define *bytecode-major-version* #x0202) (define *bytecode-major-version* #x0300)
(define *bytecode-minor-version* (char->integer #\A)) (define *bytecode-minor-version* 0)
(define (link-dynamic-section asm text rw rw-init frame-maps) (define (link-dynamic-section asm text rw rw-init frame-maps)
"Link the dynamic section for an ELF image with bytecode @var{text}, "Link the dynamic section for an ELF image with bytecode @var{text},