mirror of
https://git.savannah.gnu.org/git/guix.git
synced 2025-01-18 21:46:35 +01:00
gnu: guile-emacs: Update to 8f87cbc1dae6a9e77368afc5736df8c342e9153d.
* gnu/packages/patches/guile-emacs-build-fixes.patch: New file. * gnu/packages/patches/guile-emacs-fix-configure.patch: Remove file. * gnu/local.mk (dist_patch_DATA): Update accordingly. * gnu/packages/emacs.scm (guile-emacs): Update to 8f87cbc1dae6a9e77368afc5736df8c342e9153d and use new patch. [arguments]: Allow parallel-build. Do not strip-binaries. Use recommended #:configure-flags and #:make-flags. Add stages "help-patch-progam-file-names" and "touch-lisp/finder-inf.el". No longer delete non-existent stage "strip-double-wrap". Delete stages "patch-compilation-driver", "set-libgccjit-path", "validate-comp-integrity", "restore-emacs-pdmp", "build-trampolines", and "install-site-start". [native-search-paths]: New field. Change-Id: I8153a55ef0061720ffd3c4833eff3ae6df3eccfc
This commit is contained in:
parent
e613e45274
commit
c09cd73f5c
4 changed files with 140 additions and 226 deletions
|
@ -1524,7 +1524,7 @@ dist_patch_DATA = \
|
|||
%D%/packages/patches/guile-present-coding.patch \
|
||||
%D%/packages/patches/guile-rsvg-pkgconfig.patch \
|
||||
%D%/packages/patches/guile-ssh-rename-bool.patch \
|
||||
%D%/packages/patches/guile-emacs-fix-configure.patch \
|
||||
%D%/packages/patches/guile-emacs-build-fixes.patch \
|
||||
%D%/packages/patches/gtk2-fix-builder-test.patch \
|
||||
%D%/packages/patches/gtk2-harden-list-store.patch \
|
||||
%D%/packages/patches/gtk2-respect-GUIX_GTK2_PATH.patch \
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
;;; Copyright © 2017, 2019, 2020, 2023, 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com>
|
||||
;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
|
||||
;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
|
||||
;;; Copyright © 2017, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
;;; Copyright © 2017, 2023, 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
;;; Copyright © 2018, 2023 Efraim Flashner <efraim@flashner.co.il>
|
||||
;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
;;; Copyright © 2018, 2019, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
|
@ -629,7 +629,7 @@ (define-public emacs-next-tree-sitter
|
|||
(deprecated-package "emacs-next-tree-sitter" emacs-next))
|
||||
|
||||
(define-public guile-emacs
|
||||
(let ((commit "41120e0f595b16387eebfbf731fff70481de1b4b")
|
||||
(let ((commit "8f87cbc1dae6a9e77368afc5736df8c342e9153d")
|
||||
(revision "0"))
|
||||
(package
|
||||
(inherit emacs)
|
||||
|
@ -638,35 +638,60 @@ (define-public guile-emacs
|
|||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://git.hcoop.net/git/bpt/emacs.git")
|
||||
(url "https://codeberg.org/lyrra/guilemacs")
|
||||
(commit commit)))
|
||||
(file-name (git-file-name name version))
|
||||
(patches (search-patches "guile-emacs-fix-configure.patch"))
|
||||
(patches (search-patches "guile-emacs-build-fixes.patch"))
|
||||
(sha256
|
||||
(base32
|
||||
"0lvcvsz0f4mawj04db35p1dvkffdqkz8pkhc0jzh9j9x2i63kcz6"))))
|
||||
"1yhxy6d5i673y35i66d2x975zih3cw6p59ylsb8xk68wds6s7xrl"))))
|
||||
(native-inputs
|
||||
(modify-inputs (package-native-inputs emacs)
|
||||
(prepend autoconf automake guile-for-guile-emacs)))
|
||||
(arguments
|
||||
(substitute-keyword-arguments `(;; Build fails if we allow parallel build.
|
||||
#:parallel-build? #f
|
||||
;; Tests aren't passing for now.
|
||||
(substitute-keyword-arguments `(;; Tests aren't passing for now.
|
||||
#:tests? #f
|
||||
#:strip-binaries? #f
|
||||
,@(package-arguments emacs))
|
||||
((#:configure-flags flags ''())
|
||||
#~(delete "--with-cairo" #$flags))
|
||||
#~`("CFLAGS=-Og -ggdb3"
|
||||
"--with-native-compilation=no"
|
||||
"--without-modules"
|
||||
"--without-threads"
|
||||
"--with-jpeg=no"
|
||||
"--without-cairo"
|
||||
"--without-tree-sitter"
|
||||
,@(fold delete #$flags '("--with-cairo"
|
||||
"--with-modules"
|
||||
"--with-native-compilation=aot"))))
|
||||
((#:make-flags flags #~'())
|
||||
#~(list "V=1"))
|
||||
((#:phases phases)
|
||||
#~(modify-phases #$phases
|
||||
(add-after 'unpack 'autogen
|
||||
(lambda _
|
||||
(invoke "sh" "autogen.sh")))
|
||||
;; Build sometimes fails: deps/dispnew.d: No such file or directory
|
||||
(add-before 'build 'make-deps-dir
|
||||
(lambda _
|
||||
(invoke "mkdir" "-p" "src/deps")))
|
||||
(delete 'patch-compilation-driver)
|
||||
(delete 'set-libgccjit-path)
|
||||
(delete 'validate-comp-integrity)
|
||||
(delete 'restore-emacs-pdmp)
|
||||
(delete 'strip-double-wrap))))))))
|
||||
(delete 'build-trampolines)
|
||||
(delete 'install-site-start)
|
||||
(add-after 'unpack 'help-patch-progam-file-names
|
||||
(lambda _
|
||||
(call-with-output-file "lisp/obsolete/terminal.el"
|
||||
(lambda (port) (display port)))))
|
||||
(add-after 'configure 'touch-lisp/finder-inf.el
|
||||
(lambda _
|
||||
(call-with-output-file "lisp/finder-inf.el"
|
||||
(lambda (port) (display port)))))))))
|
||||
(native-search-paths
|
||||
(list (search-path-specification
|
||||
(variable "EMACSLOADPATH")
|
||||
(files '("share/emacs/31.0.50/lisp")))
|
||||
(search-path-specification
|
||||
(variable "INFOPATH")
|
||||
(files '("share/info"))))))))
|
||||
|
||||
(define-public m17n-db
|
||||
(package
|
||||
|
|
100
gnu/packages/patches/guile-emacs-build-fixes.patch
Normal file
100
gnu/packages/patches/guile-emacs-build-fixes.patch
Normal file
|
@ -0,0 +1,100 @@
|
|||
From 49e8725b66cb721931a9a5f0f35405e19ccee956 Mon Sep 17 00:00:00 2001
|
||||
From: Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
Date: Sat, 7 Dec 2024 20:52:04 +0100
|
||||
Subject: [PATCH 1/3] robin's patch.
|
||||
|
||||
---
|
||||
src/gtkutil.c | 4 ++--
|
||||
src/print.c | 5 ++---
|
||||
2 files changed, 4 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/gtkutil.c b/src/gtkutil.c
|
||||
index b1471d56eb9..be72b50c9ef 100644
|
||||
--- a/src/gtkutil.c
|
||||
+++ b/src/gtkutil.c
|
||||
@@ -241,13 +241,13 @@ xg_display_open (char *display_name, GdkDisplay **dpy)
|
||||
{
|
||||
GdkDisplay *gdpy;
|
||||
|
||||
- unrequest_sigio (); /* See comment in x_display_ok, xterm.c. */
|
||||
+ // unrequest_sigio (); /* See comment in x_display_ok, xterm.c. */
|
||||
#ifndef HAVE_PGTK
|
||||
gdpy = gdk_display_open (display_name);
|
||||
#else
|
||||
gdpy = gdk_display_open (strlen (display_name) == 0 ? NULL : display_name);
|
||||
#endif
|
||||
- request_sigio ();
|
||||
+ // request_sigio ();
|
||||
if (!gdpy_def && gdpy)
|
||||
{
|
||||
gdpy_def = gdpy;
|
||||
diff --git a/src/print.c b/src/print.c
|
||||
index 002274bd7da..e2c2251bf5c 100644
|
||||
--- a/src/print.c
|
||||
+++ b/src/print.c
|
||||
@@ -2532,9 +2532,8 @@ print_object (Lisp_Object obj, Lisp_Object printcharfun, bool escapeflag)
|
||||
else
|
||||
scm_write (obj, port);
|
||||
scm_display (SCM_MAKE_CHAR ('>'), port);
|
||||
- //guilemacs: this looks wrong (size_byte = -1)
|
||||
- //strout (scm_to_locale_string (scm_get_output_string (port)),
|
||||
- // -1, -1, printcharfun);
|
||||
+ char* str = scm_to_locale_string (scm_get_output_string (port));
|
||||
+ strout (str, strlen(str), strlen(str), printcharfun);
|
||||
scm_close_port (port);
|
||||
}
|
||||
break;
|
||||
--
|
||||
2.46.0
|
||||
|
||||
From 325fc39906198c33d78e33895e385916099a283f Mon Sep 17 00:00:00 2001
|
||||
From: Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
Date: Sat, 7 Dec 2024 19:00:45 +0100
|
||||
Subject: [PATCH 2/3] src/xfns.c: Link fix.
|
||||
|
||||
---
|
||||
src/xfns.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/xfns.c b/src/xfns.c
|
||||
index 858402613b4..94fde4b9e84 100644
|
||||
--- a/src/xfns.c
|
||||
+++ b/src/xfns.c
|
||||
@@ -8921,7 +8921,8 @@ x_hide_tip (bool delete)
|
||||
else
|
||||
tip_frame = Qnil;
|
||||
|
||||
- return unbind_to (count, was_open);
|
||||
+ dynwind_end ();
|
||||
+ return was_open;
|
||||
}
|
||||
#else /* not USE_GTK */
|
||||
if (NILP (tip_frame)
|
||||
--
|
||||
2.46.0
|
||||
|
||||
From 7754d875df5c9cb8fefa44604061479108429bce Mon Sep 17 00:00:00 2001
|
||||
From: Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
Date: Sat, 7 Dec 2024 20:14:17 +0100
|
||||
Subject: [PATCH 3/3] dump fix: comment use of cl-function-documentation.
|
||||
|
||||
---
|
||||
lisp/simple.el | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lisp/simple.el b/lisp/simple.el
|
||||
index 15c790226b5..d1ceded84ae 100644
|
||||
--- a/lisp/simple.el
|
||||
+++ b/lisp/simple.el
|
||||
@@ -2800,7 +2800,7 @@ command-completion--command-for-this-buffer-function
|
||||
'(cl-defmethod function-documentation ((function accessor))
|
||||
(oclosure--accessor-docstring function)) ;; FIXME: η-reduce!
|
||||
|
||||
-(cl-defmethod function-documentation ((f cconv--interactive-helper))
|
||||
+'(cl-defmethod function-documentation ((f cconv--interactive-helper))
|
||||
(function-documentation (cconv--interactive-helper--fun f)))
|
||||
|
||||
;; This should be in `oclosure.el' but that file is loaded before `cl-generic'.
|
||||
--
|
||||
2.46.0
|
||||
|
|
@ -1,211 +0,0 @@
|
|||
Two patches here backporting fixes from Emacs master.
|
||||
|
||||
Upstream status: emailed first patch to latest committer, Robin Templeton
|
||||
<robin@igalia.com>, no response.
|
||||
|
||||
From dfcb3b6ff318e47b84a28cfc43f50bec42fa3570 Mon Sep 17 00:00:00 2001
|
||||
From: Jan Nieuwenhuizen <janneke@gnu.org>
|
||||
Date: Tue, 7 Nov 2017 18:48:03 +0100
|
||||
Subject: [PATCH 1/2] backport: Port jpeg configuration to Solaris 10 with Sun
|
||||
C.
|
||||
|
||||
* configure.ac: Check for jpeglib 6b by trying to link it, instead
|
||||
of relying on cpp magic that has problems in practice. Check for
|
||||
both jpeglib.h and jerror.h features. Remove special case for
|
||||
mingw32, which should no longer be needed (and if it were needed,
|
||||
should now be addressable by hotwiring emacs_cv_jpeglib).
|
||||
Fixes: bug#20332
|
||||
|
||||
From fdf532b9c915ad9ba72155646d29d0f530fd72ec Mon Sep 17 00:00:00 2001
|
||||
From: Paul Eggert <address@hidden>
|
||||
Date: Wed, 15 Apr 2015 18:30:01 -0700
|
||||
Subject: [PATCH] Port jpeg configuration to Solaris 10 with Sun C.
|
||||
|
||||
* configure.ac: Check for jpeglib 6b by trying to link it, instead
|
||||
of relying on cpp magic that has problems in practice. Check for
|
||||
both jpeglib.h and jerror.h features. Remove special case for
|
||||
mingw32, which should no longer be needed (and if it were needed,
|
||||
should now be addressable by hotwiring emacs_cv_jpeglib).
|
||||
Fixes: bug#20332
|
||||
---
|
||||
configure.ac | 72 ++++++++++++++++++++++++++++--------------------------------
|
||||
1 file changed, 34 insertions(+), 38 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 2445db4886..36fa8eb390 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3014,44 +3014,40 @@ AC_SUBST(LIBXPM)
|
||||
### mingw32 doesn't use -ljpeg, since it loads the library dynamically.
|
||||
HAVE_JPEG=no
|
||||
LIBJPEG=
|
||||
-if test "${opsys}" = "mingw32"; then
|
||||
- if test "${with_jpeg}" != "no"; then
|
||||
- dnl Checking for jpeglib.h can lose because of a redefinition of
|
||||
- dnl HAVE_STDLIB_H.
|
||||
- AC_CHECK_HEADER(jerror.h, HAVE_JPEG=yes, HAVE_JPEG=no)
|
||||
- fi
|
||||
- AH_TEMPLATE(HAVE_JPEG, [Define to 1 if you have the jpeg library (-ljpeg).])dnl
|
||||
- if test "${HAVE_JPEG}" = "yes"; then
|
||||
- AC_DEFINE(HAVE_JPEG)
|
||||
- AC_EGREP_CPP([version= *(6[2-9]|[7-9][0-9])],
|
||||
- [#include <jpeglib.h>
|
||||
- version=JPEG_LIB_VERSION
|
||||
-],
|
||||
- [AC_DEFINE(HAVE_JPEG)],
|
||||
- [AC_MSG_WARN([libjpeg found, but not version 6b or later])
|
||||
- HAVE_JPEG=no])
|
||||
- fi
|
||||
-elif test "${HAVE_X11}" = "yes" || test "${HAVE_W32}" = "yes"; then
|
||||
- if test "${with_jpeg}" != "no"; then
|
||||
- dnl Checking for jpeglib.h can lose because of a redefinition of
|
||||
- dnl HAVE_STDLIB_H.
|
||||
- AC_CHECK_HEADER(jerror.h,
|
||||
- [AC_CHECK_LIB(jpeg, jpeg_destroy_compress, HAVE_JPEG=yes)])
|
||||
- fi
|
||||
-
|
||||
- AH_TEMPLATE(HAVE_JPEG, [Define to 1 if you have the jpeg library (-ljpeg).])dnl
|
||||
- if test "${HAVE_JPEG}" = "yes"; then
|
||||
- AC_DEFINE(HAVE_JPEG)
|
||||
- AC_EGREP_CPP([version= *(6[2-9]|[7-9][0-9])],
|
||||
- [#include <jpeglib.h>
|
||||
- version=JPEG_LIB_VERSION
|
||||
-],
|
||||
- [AC_DEFINE(HAVE_JPEG)],
|
||||
- [AC_MSG_WARN([libjpeg found, but not version 6b or later])
|
||||
- HAVE_JPEG=no])
|
||||
- fi
|
||||
- if test "${HAVE_JPEG}" = "yes"; then
|
||||
- LIBJPEG=-ljpeg
|
||||
+if test "${with_jpeg}" != "no"; then
|
||||
+ AC_CACHE_CHECK([for jpeglib 6b or later],
|
||||
+ [emacs_cv_jpeglib],
|
||||
+ [OLD_LIBS=$LIBS
|
||||
+ for emacs_cv_jpeglib in yes -ljpeg no; do
|
||||
+ case $emacs_cv_jpeglib in
|
||||
+ yes) ;;
|
||||
+ no) break;;
|
||||
+ *) LIBS="$LIBS $emacs_cv_jpeglib";;
|
||||
+ esac
|
||||
+ AC_LINK_IFELSE(
|
||||
+ [AC_LANG_PROGRAM(
|
||||
+ [[#undef HAVE_STDLIB_H /* Avoid config.h/jpeglib.h collision. */
|
||||
+ #include <stdio.h> /* jpeglib.h needs FILE and size_t. */
|
||||
+ #include <jpeglib.h>
|
||||
+ #include <jerror.h>
|
||||
+ char verify[JPEG_LIB_VERSION < 62 ? -1 : 1];
|
||||
+ struct jpeg_decompress_struct cinfo;
|
||||
+ ]],
|
||||
+ [[
|
||||
+ jpeg_create_decompress (&cinfo);
|
||||
+ WARNMS (&cinfo, JWRN_JPEG_EOF);
|
||||
+ jpeg_destroy_decompress (&cinfo);
|
||||
+ ]])],
|
||||
+ [emacs_link_ok=yes],
|
||||
+ [emacs_link_ok=no])
|
||||
+ LIBS=$OLD_LIBS
|
||||
+ test $emacs_link_ok = yes && break
|
||||
+ done])
|
||||
+ if test "$emacs_cv_jpeglib" != no; then
|
||||
+ HAVE_JPEG=yes
|
||||
+ AC_DEFINE([HAVE_JPEG], 1,
|
||||
+ [Define to 1 if you have the jpeg library (typically -ljpeg).])
|
||||
+ test "$emacs_cv_jpeglib" != yes && LIBJPEG=$emacs_cv_jpeglib
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(LIBJPEG)
|
||||
--
|
||||
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
|
||||
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
|
||||
|
||||
From f761b92d520b72954be28ad66eb82d1a96c785fb Mon Sep 17 00:00:00 2001
|
||||
From: Jan Nieuwenhuizen <janneke@gnu.org>
|
||||
Date: Wed, 8 Nov 2017 14:05:43 +0100
|
||||
Subject: [PATCH 2/2] backport fix for #24065: calloc loop when compiling with
|
||||
-O2.
|
||||
|
||||
This patch fixes
|
||||
|
||||
EMACSLOADPATH= '../src/bootstrap-emacs' -batch --no-site-file --no-site-lisp -l autoload \
|
||||
--eval "(setq generate-autoload-cookie \";;;###cal-autoload\")" \
|
||||
--eval "(setq generated-autoload-file (expand-file-name
|
||||
(unmsys--file-name
|
||||
\"../../git-checkout/lisp/calendar/cal-loaddefs.el\")))" \
|
||||
-f batch-update-autoloads ../../git-checkout/lisp/calendar
|
||||
make[2]: *** [Makefile:466: ../../git-checkout/lisp/calendar/cal-loaddefs.el] Segmentation fault
|
||||
|
||||
in gdb seen as
|
||||
|
||||
in calloc (nmemb=<error reading variable: DWARF-2 expression error:Loop detected (257).>, size=size@entry=1) at gmalloc.c:1510
|
||||
|
||||
I did not find malloc-fixing commits from emacs master to cleanly
|
||||
cherry-pick, so this patch replaces the relevant part in configure
|
||||
(emacs 53da55b8cc45e76b836ebaadd23f46e92d25abce).
|
||||
|
||||
* configure.ac: backport system_malloc/hybrid_malloc detection.
|
||||
---
|
||||
configure.ac | 29 ++++++++++++++++++++++++++++-
|
||||
1 file changed, 28 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 36fa8eb390..3cc1794f37 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -1966,7 +1966,25 @@ case "$opsys" in
|
||||
darwin|mingw32|sol2-10) system_malloc=yes ;;
|
||||
esac
|
||||
|
||||
+hybrid_malloc=
|
||||
+system_malloc=yes
|
||||
+
|
||||
+test "$CANNOT_DUMP" = yes ||
|
||||
+case "$opsys" in
|
||||
+ ## darwin ld insists on the use of malloc routines in the System framework.
|
||||
+ darwin | mingw32 | nacl | sol2-10) ;;
|
||||
+ cygwin) hybrid_malloc=yes
|
||||
+ system_malloc= ;;
|
||||
+ *) test "$ac_cv_func_sbrk" = yes && system_malloc=$emacs_cv_sanitize_address;;
|
||||
+esac
|
||||
+
|
||||
+if test "${system_malloc}" != yes && test "${doug_lea_malloc}" != yes \
|
||||
+ && test "${UNEXEC_OBJ}" = unexelf.o; then
|
||||
+ hybrid_malloc=yes
|
||||
+fi
|
||||
+
|
||||
GMALLOC_OBJ=
|
||||
+HYBRID_MALLOC=
|
||||
if test "${system_malloc}" = "yes"; then
|
||||
AC_DEFINE([SYSTEM_MALLOC], 1,
|
||||
[Define to 1 to use the system memory allocator, even if it is not
|
||||
@@ -1975,6 +1993,14 @@ if test "${system_malloc}" = "yes"; then
|
||||
GNU_MALLOC_reason="
|
||||
(The GNU allocators don't work with this system configuration.)"
|
||||
VMLIMIT_OBJ=
|
||||
+elif test "$hybrid_malloc" = yes; then
|
||||
+ AC_DEFINE(HYBRID_MALLOC, 1,
|
||||
+ [Define to use gmalloc before dumping and the system malloc after.])
|
||||
+ HYBRID_MALLOC=1
|
||||
+ GNU_MALLOC=no
|
||||
+ GNU_MALLOC_reason=" (only before dumping)"
|
||||
+ GMALLOC_OBJ=gmalloc.o
|
||||
+ VMLIMIT_OBJ=
|
||||
else
|
||||
test "$doug_lea_malloc" != "yes" && GMALLOC_OBJ=gmalloc.o
|
||||
VMLIMIT_OBJ=vm-limit.o
|
||||
@@ -1993,10 +2019,11 @@ else
|
||||
of the main data segment.])
|
||||
fi
|
||||
fi
|
||||
+AC_SUBST([HYBRID_MALLOC])
|
||||
AC_SUBST(GMALLOC_OBJ)
|
||||
AC_SUBST(VMLIMIT_OBJ)
|
||||
|
||||
-if test "$doug_lea_malloc" = "yes" ; then
|
||||
+if test "$doug_lea_malloc" = "yes" && test "$hybrid_malloc" != yes; then
|
||||
if test "$GNU_MALLOC" = yes ; then
|
||||
GNU_MALLOC_reason="
|
||||
(Using Doug Lea's new malloc from the GNU C Library.)"
|
||||
--
|
||||
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
|
||||
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
|
||||
|
Loading…
Reference in a new issue