diff mbox

[v4,4/4] guile: new package

Message ID 1415310486-25904-5-git-send-email-paguilar@paguilar.org
State Changes Requested
Headers show

Commit Message

Pedro Aguilar Nov. 6, 2014, 9:48 p.m. UTC
Guile is an interpreter and compiler for the Scheme programming
language, a clean and elegant dialect of Lisp.

Signed-off-by: Pedro Aguilar <paguilar@paguilar.org>

---
Changes v3 -> v4:
- Fix formatting issues
(Suggested by Jerzy Grzegorek)

Changes v2 -> v3:
- Improve patches
- Remove unused dependencies
- Fix patches formatting
(All changes suggested by Thomas Petazzoni)

Changes v1 -> v2:
- Add all needed dependencies
- Explain GUILE_CONF_ENV arguments
- Remove PKG_CONFIG_HOST_BINARY
- Fix patches formatting
- Add thread comments in Config.in
(All changes suggested by Yann Morin)

Signed-off-by: Pedro Aguilar <paguilar@paguilar.org>
---
 package/Config.in                                  |  1 +
 package/guile/Config.in                            | 15 +++++++++
 package/guile/guile-01-fix_arm_endianness.patch    | 25 +++++++++++++++
 .../guile/guile-02-calculate-csqrt_manually.patch  | 16 ++++++++++
 package/guile/guile-03-remove_unused_funcs.patch   | 36 ++++++++++++++++++++++
 package/guile/guile.mk                             | 25 +++++++++++++++
 6 files changed, 118 insertions(+)
 create mode 100644 package/guile/Config.in
 create mode 100644 package/guile/guile-01-fix_arm_endianness.patch
 create mode 100644 package/guile/guile-02-calculate-csqrt_manually.patch
 create mode 100644 package/guile/guile-03-remove_unused_funcs.patch
 create mode 100644 package/guile/guile.mk

Comments

Yann E. MORIN Nov. 18, 2014, 9:18 p.m. UTC | #1
Pedro, All,

On 2014-11-06 22:48 +0100, Pedro Aguilar spake thusly:
> Guile is an interpreter and compiler for the Scheme programming
> language, a clean and elegant dialect of Lisp.
> 
> Signed-off-by: Pedro Aguilar <paguilar@paguilar.org>
[--SNIP--]
> diff --git a/package/guile/Config.in b/package/guile/Config.in
> new file mode 100644
> index 0000000..85671e0
> --- /dev/null
> +++ b/package/guile/Config.in
> @@ -0,0 +1,15 @@
> +config BR2_PACKAGE_GUILE
> +	bool "guile"
> +	depends on BR2_TOOLCHAIN_HAS_THREADS
> +	select BR2_PACKAGE_LIBUNISTRING
> +	select BR2_PACKAGE_LIBFFI
> +	select BR2_PACKAGE_GMP
> +	select BR2_PACKAGE_BDWGC

Since you select bdwgc, you must also inherot from its dependencies:

    depends on BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS # bdwgc

[--SNIP--]
> diff --git a/package/guile/guile-01-fix_arm_endianness.patch b/package/guile/guile-01-fix_arm_endianness.patch
> new file mode 100644
> index 0000000..a30a241
> --- /dev/null
> +++ b/package/guile/guile-01-fix_arm_endianness.patch
> @@ -0,0 +1,25 @@
> +Fix support for ARM endianness, otherwise it gives the error
> +"unknown CPU endianness"
> +
> +Signed-off-by: Pedro Aguilar <paguilar@paguilar.org>

Did you try to send that patch upstream?

> +diff -Nau guile-2.0.11.orig/module/system/base/target.scm guile-2.0.11/module/system/base/target.scm
> +--- guile-2.0.11.orig/module/system/base/target.scm	2013-02-28 09:42:45.000000000 +0100
> ++++ guile-2.0.11/module/system/base/target.scm	2014-11-03 23:05:01.789338997 +0100
> +@@ -70,7 +70,15 @@
> +             ((member cpu '("sparc" "sparc64" "powerpc" "powerpc64" "spu"
> +                            "mips" "mips64"))
> +              (endianness big))
> +-            ((string-match "^arm.*el" cpu)
> ++           ((string-match "^arm.*el" cpu)

Nit-picking: that replacement line is not properly aligned.

[--SNIP--]
> diff --git a/package/guile/guile-02-calculate-csqrt_manually.patch b/package/guile/guile-02-calculate-csqrt_manually.patch
> new file mode 100644
> index 0000000..98bb0b6
> --- /dev/null
> +++ b/package/guile/guile-02-calculate-csqrt_manually.patch
> @@ -0,0 +1,16 @@
> +Avoid using scm_from_complex_double(csqrt()) when building with uclibc.
> +
> +Signed-off-by: Pedro Aguilar <paguilar@paguilar.org>
> +
> +diff -Nau guile-2.0.11.orig/configure.ac guile-2.0.11/configure.ac
> +--- guile-2.0.11.orig/configure.ac	2014-03-12 14:36:02.000000000 +0100
> ++++ guile-2.0.11/configure.ac	2014-11-03 23:59:51.897267207 +0100
> +@@ -862,7 +862,7 @@
> + }]])],
> +     [guile_cv_use_csqrt=yes],
> +     [guile_cv_use_csqrt="no, glibc 2.3 bug"],
> +-    [guile_cv_use_csqrt="yes, hopefully (cross-compiling)"])])
> ++    [guile_cv_use_csqrt="no (cross-compiling)"])])

Not OK: it is possible to be cross-compiling with glibc, in which
case the result should be 'yes'.

> +   case $guile_cv_use_csqrt in
> +     yes*)
> +       AC_DEFINE([HAVE_USABLE_CSQRT], 1, [Define to 1 if csqrt is bug-free])
> diff --git a/package/guile/guile-03-remove_unused_funcs.patch b/package/guile/guile-03-remove_unused_funcs.patch
> new file mode 100644
> index 0000000..3d70ee9
> --- /dev/null
> +++ b/package/guile/guile-03-remove_unused_funcs.patch
> @@ -0,0 +1,36 @@
> +Remove unused static inline functions str_upcase_l() and 
> +str_downcase_l() that cause the compilation error:
> +'dereferencing pointer to incomplete type'.
> +
> +Signed-off-by: Pedro Aguilar <paguilar@paguilar.org>

Indeed, those functions are never called. WTF... :-/

[--SNIP--]
> diff --git a/package/guile/guile.mk b/package/guile/guile.mk
> new file mode 100644
> index 0000000..e0d7e80
> --- /dev/null
> +++ b/package/guile/guile.mk
> @@ -0,0 +1,25 @@
> +################################################################################
> +#
> +# guile
> +#
> +################################################################################
> +
> +GUILE_VERSION = 2.0.11
> +GUILE_SOURCE = guile-$(GUILE_VERSION).tar.xz
> +GUILE_SITE = $(BR2_GNU_MIRROR)/guile
> +GUILE_INSTALL_STAGING = YES
> +GUILE_LICENSE = LGPLv3+
> +GUILE_LICENSE_FILES = LICENSE COPYING COPYING.LESSER
> +GUILE_DEPENDENCIES = host-guile libunistring libffi gmp bdwgc
> +
> +HOST_GUILE_DEPENDENCIES = host-libunistring host-libffi host-gmp host-bdwgc host-flex host-libtool
> +
> +# The HAVE_GC* CFLAGS specify that we wil use internal callbacks instead 
> +# of the ones provided by bdwgc. Eg. HAVE_GC_SET_FINALIZER_NOTIFIER specifies 
> +# that we won't use bdwgc's GC_finalizer_notifier callback.
> +# Trying to use these specific bdwgc's callbacks breaks guile's building.
> +GUILE_CONF_ENV += GUILE_FOR_BUILD=$(HOST_DIR)/usr/bin/guile \
> +	CFLAGS="$(TARGET_CFLAGS) -DHAVE_GC_SET_FINALIZER_NOTIFIER -DHAVE_GC_GET_HEAP_USAGE_SAFE -DHAVE_GC_GET_FREE_SPACE_DIVISOR -DHAVE_GC_SET_FINALIZE_ON_DEMAND"

This line is overly long. What about (with tabs, not spaces):

    GUILE_CFLAGS = \
        -DHAVE_GC_SET_FINALIZER_NOTIFIER \
        -DHAVE_GC_GET_HEAP_USAGE_SAFE \
        -DHAVE_GC_GET_FREE_SPACE_DIVISOR \
        -DHAVE_GC_SET_FINALIZE_ON_DEMAND

    GUILE_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) $(GUILE_CFLAGS)"

Regards,
Yann E. MORIN.

> +$(eval $(autotools-package))
> +$(eval $(host-autotools-package))
> -- 
> 1.9.1
> 
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Pedro Aguilar Nov. 20, 2014, 11:02 p.m. UTC | #2
Hi Yann,

On 18/11/2014 22:18, Yann E. MORIN wrote:
[--SNIP--]
>> diff --git a/package/guile/Config.in b/package/guile/Config.in
>> new file mode 100644
>> index 0000000..85671e0
>> --- /dev/null
>> +++ b/package/guile/Config.in
>> @@ -0,0 +1,15 @@
>> +config BR2_PACKAGE_GUILE
>> +	bool "guile"
>> +	depends on BR2_TOOLCHAIN_HAS_THREADS
>> +	select BR2_PACKAGE_LIBUNISTRING
>> +	select BR2_PACKAGE_LIBFFI
>> +	select BR2_PACKAGE_GMP
>> +	select BR2_PACKAGE_BDWGC
>
> Since you select bdwgc, you must also inherot from its dependencies:
>
>      depends on BR2_PACKAGE_LIBATOMIC_ARCH_SUPPORTS # bdwgc

Ok, I'll add it below "depends on BR2_TOOLCHAIN_HAS_THREADS"

[--SNIP--]
>> diff --git a/package/guile/guile-01-fix_arm_endianness.patch b/package/guile/guile-01-fix_arm_endianness.patch
>> new file mode 100644
>> index 0000000..a30a241
>> --- /dev/null
>> +++ b/package/guile/guile-01-fix_arm_endianness.patch
>> @@ -0,0 +1,25 @@
>> +Fix support for ARM endianness, otherwise it gives the error
>> +"unknown CPU endianness"
>> +
>> +Signed-off-by: Pedro Aguilar <paguilar@paguilar.org>
>
> Did you try to send that patch upstream?

They already fixed it in git, but there isn't any stable release with 
this fix.

>> +diff -Nau guile-2.0.11.orig/module/system/base/target.scm guile-2.0.11/module/system/base/target.scm
>> +--- guile-2.0.11.orig/module/system/base/target.scm	2013-02-28 09:42:45.000000000 +0100
>> ++++ guile-2.0.11/module/system/base/target.scm	2014-11-03 23:05:01.789338997 +0100
>> +@@ -70,7 +70,15 @@
>> +             ((member cpu '("sparc" "sparc64" "powerpc" "powerpc64" "spu"
>> +                            "mips" "mips64"))
>> +              (endianness big))
>> +-            ((string-match "^arm.*el" cpu)
>> ++           ((string-match "^arm.*el" cpu)
>
> Nit-picking: that replacement line is not properly aligned.

Ok, fixed.

> [--SNIP--]
>> diff --git a/package/guile/guile-02-calculate-csqrt_manually.patch b/package/guile/guile-02-calculate-csqrt_manually.patch
>> new file mode 100644
>> index 0000000..98bb0b6
>> --- /dev/null
>> +++ b/package/guile/guile-02-calculate-csqrt_manually.patch
>> @@ -0,0 +1,16 @@
>> +Avoid using scm_from_complex_double(csqrt()) when building with uclibc.
>> +
>> +Signed-off-by: Pedro Aguilar <paguilar@paguilar.org>
>> +
>> +diff -Nau guile-2.0.11.orig/configure.ac guile-2.0.11/configure.ac
>> +--- guile-2.0.11.orig/configure.ac	2014-03-12 14:36:02.000000000 +0100
>> ++++ guile-2.0.11/configure.ac	2014-11-03 23:59:51.897267207 +0100
>> +@@ -862,7 +862,7 @@
>> + }]])],
>> +     [guile_cv_use_csqrt=yes],
>> +     [guile_cv_use_csqrt="no, glibc 2.3 bug"],
>> +-    [guile_cv_use_csqrt="yes, hopefully (cross-compiling)"])])
>> ++    [guile_cv_use_csqrt="no (cross-compiling)"])])
>
> Not OK: it is possible to be cross-compiling with glibc, in which
> case the result should be 'yes'.

Using csqrt() is OK only for some versions of glib. If we use the 
fallback code, we're sure that it will work properly even with recent 
versions of glib.

>> +   case $guile_cv_use_csqrt in
>> +     yes*)
>> +       AC_DEFINE([HAVE_USABLE_CSQRT], 1, [Define to 1 if csqrt is bug-free])
>> diff --git a/package/guile/guile-03-remove_unused_funcs.patch b/package/guile/guile-03-remove_unused_funcs.patch
>> new file mode 100644
>> index 0000000..3d70ee9
>> --- /dev/null
>> +++ b/package/guile/guile-03-remove_unused_funcs.patch
>> @@ -0,0 +1,36 @@
>> +Remove unused static inline functions str_upcase_l() and
>> +str_downcase_l() that cause the compilation error:
>> +'dereferencing pointer to incomplete type'.
>> +
>> +Signed-off-by: Pedro Aguilar <paguilar@paguilar.org>
>
> Indeed, those functions are never called. WTF... :-/

I'll send a patch for this :)

> [--SNIP--]
>> diff --git a/package/guile/guile.mk b/package/guile/guile.mk
>> new file mode 100644
>> index 0000000..e0d7e80
>> --- /dev/null
>> +++ b/package/guile/guile.mk
>> @@ -0,0 +1,25 @@
>> +################################################################################
>> +#
>> +# guile
>> +#
>> +################################################################################
>> +
>> +GUILE_VERSION = 2.0.11
>> +GUILE_SOURCE = guile-$(GUILE_VERSION).tar.xz
>> +GUILE_SITE = $(BR2_GNU_MIRROR)/guile
>> +GUILE_INSTALL_STAGING = YES
>> +GUILE_LICENSE = LGPLv3+
>> +GUILE_LICENSE_FILES = LICENSE COPYING COPYING.LESSER
>> +GUILE_DEPENDENCIES = host-guile libunistring libffi gmp bdwgc
>> +
>> +HOST_GUILE_DEPENDENCIES = host-libunistring host-libffi host-gmp host-bdwgc host-flex host-libtool
>> +
>> +# The HAVE_GC* CFLAGS specify that we wil use internal callbacks instead
>> +# of the ones provided by bdwgc. Eg. HAVE_GC_SET_FINALIZER_NOTIFIER specifies
>> +# that we won't use bdwgc's GC_finalizer_notifier callback.
>> +# Trying to use these specific bdwgc's callbacks breaks guile's building.
>> +GUILE_CONF_ENV += GUILE_FOR_BUILD=$(HOST_DIR)/usr/bin/guile \
>> +	CFLAGS="$(TARGET_CFLAGS) -DHAVE_GC_SET_FINALIZER_NOTIFIER -DHAVE_GC_GET_HEAP_USAGE_SAFE -DHAVE_GC_GET_FREE_SPACE_DIVISOR -DHAVE_GC_SET_FINALIZE_ON_DEMAND"
>
> This line is overly long. What about (with tabs, not spaces):
>
>      GUILE_CFLAGS = \
>          -DHAVE_GC_SET_FINALIZER_NOTIFIER \
>          -DHAVE_GC_GET_HEAP_USAGE_SAFE \
>          -DHAVE_GC_GET_FREE_SPACE_DIVISOR \
>          -DHAVE_GC_SET_FINALIZE_ON_DEMAND
>
>      GUILE_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) $(GUILE_CFLAGS)"

Fixed it. I'll send the patch shortly.

Thanks!

Regards.
Yann E. MORIN Nov. 23, 2014, 3:29 p.m. UTC | #3
Pedro, All,

On 2014-11-21 00:02 +0100, Pedro Aguilar spake thusly:
> On 18/11/2014 22:18, Yann E. MORIN wrote:
[--SNIP--]
> >>diff --git a/package/guile/guile-01-fix_arm_endianness.patch b/package/guile/guile-01-fix_arm_endianness.patch
> >>new file mode 100644
> >>index 0000000..a30a241
> >>--- /dev/null
> >>+++ b/package/guile/guile-01-fix_arm_endianness.patch
> >>@@ -0,0 +1,25 @@
> >>+Fix support for ARM endianness, otherwise it gives the error
> >>+"unknown CPU endianness"
> >>+
> >>+Signed-off-by: Pedro Aguilar <paguilar@paguilar.org>
> >
> >Did you try to send that patch upstream?
> 
> They already fixed it in git, but there isn't any stable release with this
> fix.

Ah, so this is a patch that you back-ported from upstream, then?

In this case, just add a pointer to the upstream patch.

> >>+diff -Nau guile-2.0.11.orig/configure.ac guile-2.0.11/configure.ac
> >>+--- guile-2.0.11.orig/configure.ac	2014-03-12 14:36:02.000000000 +0100
> >>++++ guile-2.0.11/configure.ac	2014-11-03 23:59:51.897267207 +0100
> >>+@@ -862,7 +862,7 @@
> >>+ }]])],
> >>+     [guile_cv_use_csqrt=yes],
> >>+     [guile_cv_use_csqrt="no, glibc 2.3 bug"],
> >>+-    [guile_cv_use_csqrt="yes, hopefully (cross-compiling)"])])
> >>++    [guile_cv_use_csqrt="no (cross-compiling)"])])
> >
> >Not OK: it is possible to be cross-compiling with glibc, in which
> >case the result should be 'yes'.
> 
> Using csqrt() is OK only for some versions of glib. If we use the fallback
> code, we're sure that it will work properly even with recent versions of
> glib.

/me gets confused...
glib or glibc?

But even if the fallback code works in all cases, I gues we still want
to use the normal code whenever possible. That is, we want to detect
that csqrt() is available before using it.

But OK, we can live with the fallback code in Buildroot.

Maybe you could try to push a patch upstream to add a check whether
csqrt() is present and useable in the C library? That would allow us to
drop one patch when we update guile when the next release is out.

Regards,
Yann E. MORIN.
Pedro Aguilar Nov. 23, 2014, 7:20 p.m. UTC | #4
Hi Yann,

On 23/11/2014 16:29, Yann E. MORIN wrote:
[--SNIP--]
>>> Did you try to send that patch upstream?
>>
>> They already fixed it in git, but there isn't any stable release with this
>> fix.
>
> Ah, so this is a patch that you back-ported from upstream, then?
>
> In this case, just add a pointer to the upstream patch.

Ok, the following patch series will include the commit pointer.

>>>> +diff -Nau guile-2.0.11.orig/configure.ac guile-2.0.11/configure.ac
>>>> +--- guile-2.0.11.orig/configure.ac	2014-03-12 14:36:02.000000000 +0100
>>>> ++++ guile-2.0.11/configure.ac	2014-11-03 23:59:51.897267207 +0100
>>>> +@@ -862,7 +862,7 @@
>>>> + }]])],
>>>> +     [guile_cv_use_csqrt=yes],
>>>> +     [guile_cv_use_csqrt="no, glibc 2.3 bug"],
>>>> +-    [guile_cv_use_csqrt="yes, hopefully (cross-compiling)"])])
>>>> ++    [guile_cv_use_csqrt="no (cross-compiling)"])])
>>>
>>> Not OK: it is possible to be cross-compiling with glibc, in which
>>> case the result should be 'yes'.
>>
>> Using csqrt() is OK only for some versions of glib. If we use the fallback
>> code, we're sure that it will work properly even with recent versions of
>> glib.
>
> /me gets confused...
> glib or glibc?

glibc :)

> But even if the fallback code works in all cases, I gues we still want
> to use the normal code whenever possible. That is, we want to detect
> that csqrt() is available before using it.
>
> But OK, we can live with the fallback code in Buildroot.
>
> Maybe you could try to push a patch upstream to add a check whether
> csqrt() is present and useable in the C library? That would allow us to
> drop one patch when we update guile when the next release is out.

I'll send the patch to them shortly.

Thanks.
diff mbox

Patch

diff --git a/package/Config.in b/package/Config.in
index 1354c27..d45495d 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -391,6 +391,7 @@  endmenu
 menu "Interpreter languages and scripting"
 	source "package/enscript/Config.in"
 	source "package/erlang/Config.in"
+	source "package/guile/Config.in"
 	source "package/haserl/Config.in"
 	source "package/jamvm/Config.in"
 	source "package/jimtcl/Config.in"
diff --git a/package/guile/Config.in b/package/guile/Config.in
new file mode 100644
index 0000000..85671e0
--- /dev/null
+++ b/package/guile/Config.in
@@ -0,0 +1,15 @@ 
+config BR2_PACKAGE_GUILE
+	bool "guile"
+	depends on BR2_TOOLCHAIN_HAS_THREADS
+	select BR2_PACKAGE_LIBUNISTRING
+	select BR2_PACKAGE_LIBFFI
+	select BR2_PACKAGE_GMP
+	select BR2_PACKAGE_BDWGC
+	help
+	  Guile is an interpreter and compiler for the Scheme 
+	  programming language, a clean and elegant dialect of Lisp.
+
+	  http://www.gnu.org/software/guile
+
+comment "guile needs a toolchain w/ threads"
+	depends on !BR2_TOOLCHAIN_HAS_THREADS
diff --git a/package/guile/guile-01-fix_arm_endianness.patch b/package/guile/guile-01-fix_arm_endianness.patch
new file mode 100644
index 0000000..a30a241
--- /dev/null
+++ b/package/guile/guile-01-fix_arm_endianness.patch
@@ -0,0 +1,25 @@ 
+Fix support for ARM endianness, otherwise it gives the error
+"unknown CPU endianness"
+
+Signed-off-by: Pedro Aguilar <paguilar@paguilar.org>
+
+diff -Nau guile-2.0.11.orig/module/system/base/target.scm guile-2.0.11/module/system/base/target.scm
+--- guile-2.0.11.orig/module/system/base/target.scm	2013-02-28 09:42:45.000000000 +0100
++++ guile-2.0.11/module/system/base/target.scm	2014-11-03 23:05:01.789338997 +0100
+@@ -70,7 +70,15 @@
+             ((member cpu '("sparc" "sparc64" "powerpc" "powerpc64" "spu"
+                            "mips" "mips64"))
+              (endianness big))
+-            ((string-match "^arm.*el" cpu)
++           ((string-match "^arm.*el" cpu)
++             (endianness little))
++            ((string-match "^arm.*eb" cpu)
++             (endianness big))
++            ((string-prefix? "arm" cpu)          ;ARMs are LE by default
++             (endianness little))
++            ((string-match "^aarch64.*be" cpu)
++             (endianness big))
++            ((string=? "aarch64" cpu)
+              (endianness little))
+             (else
+              (error "unknown CPU endianness" cpu)))))
diff --git a/package/guile/guile-02-calculate-csqrt_manually.patch b/package/guile/guile-02-calculate-csqrt_manually.patch
new file mode 100644
index 0000000..98bb0b6
--- /dev/null
+++ b/package/guile/guile-02-calculate-csqrt_manually.patch
@@ -0,0 +1,16 @@ 
+Avoid using scm_from_complex_double(csqrt()) when building with uclibc.
+
+Signed-off-by: Pedro Aguilar <paguilar@paguilar.org>
+
+diff -Nau guile-2.0.11.orig/configure.ac guile-2.0.11/configure.ac
+--- guile-2.0.11.orig/configure.ac	2014-03-12 14:36:02.000000000 +0100
++++ guile-2.0.11/configure.ac	2014-11-03 23:59:51.897267207 +0100
+@@ -862,7 +862,7 @@
+ }]])],
+     [guile_cv_use_csqrt=yes],
+     [guile_cv_use_csqrt="no, glibc 2.3 bug"],
+-    [guile_cv_use_csqrt="yes, hopefully (cross-compiling)"])])
++    [guile_cv_use_csqrt="no (cross-compiling)"])])
+   case $guile_cv_use_csqrt in
+     yes*)
+       AC_DEFINE([HAVE_USABLE_CSQRT], 1, [Define to 1 if csqrt is bug-free])
diff --git a/package/guile/guile-03-remove_unused_funcs.patch b/package/guile/guile-03-remove_unused_funcs.patch
new file mode 100644
index 0000000..3d70ee9
--- /dev/null
+++ b/package/guile/guile-03-remove_unused_funcs.patch
@@ -0,0 +1,36 @@ 
+Remove unused static inline functions str_upcase_l() and 
+str_downcase_l() that cause the compilation error:
+'dereferencing pointer to incomplete type'.
+
+Signed-off-by: Pedro Aguilar <paguilar@paguilar.org>
+
+diff -Nau guile-2.0.11.orig/libguile/i18n.c guile-2.0.11/libguile/i18n.c
+--- guile-2.0.11.orig/libguile/i18n.c	2014-01-21 22:25:11.000000000 +0100
++++ guile-2.0.11/libguile/i18n.c	2014-11-04 23:18:52.675435613 +0100
+@@ -851,26 +851,6 @@
+   *dst = '\0';
+ }
+ 
+-#ifdef USE_GNU_LOCALE_API
+-static inline void
+-str_upcase_l (register char *dst, register const char *src,
+-	      scm_t_locale locale)
+-{
+-  for (; *src != '\0'; src++, dst++)
+-    *dst = toupper_l (*src, locale);
+-  *dst = '\0';
+-}
+-
+-static inline void
+-str_downcase_l (register char *dst, register const char *src,
+-		scm_t_locale locale)
+-{
+-  for (; *src != '\0'; src++, dst++)
+-    *dst = tolower_l (*src, locale);
+-  *dst = '\0';
+-}
+-#endif
+-
+ 
+ SCM_DEFINE (scm_string_locale_lt, "string-locale<?", 2, 1, 0,
+ 	    (SCM s1, SCM s2, SCM locale),
diff --git a/package/guile/guile.mk b/package/guile/guile.mk
new file mode 100644
index 0000000..e0d7e80
--- /dev/null
+++ b/package/guile/guile.mk
@@ -0,0 +1,25 @@ 
+################################################################################
+#
+# guile
+#
+################################################################################
+
+GUILE_VERSION = 2.0.11
+GUILE_SOURCE = guile-$(GUILE_VERSION).tar.xz
+GUILE_SITE = $(BR2_GNU_MIRROR)/guile
+GUILE_INSTALL_STAGING = YES
+GUILE_LICENSE = LGPLv3+
+GUILE_LICENSE_FILES = LICENSE COPYING COPYING.LESSER
+GUILE_DEPENDENCIES = host-guile libunistring libffi gmp bdwgc
+
+HOST_GUILE_DEPENDENCIES = host-libunistring host-libffi host-gmp host-bdwgc host-flex host-libtool
+
+# The HAVE_GC* CFLAGS specify that we wil use internal callbacks instead 
+# of the ones provided by bdwgc. Eg. HAVE_GC_SET_FINALIZER_NOTIFIER specifies 
+# that we won't use bdwgc's GC_finalizer_notifier callback.
+# Trying to use these specific bdwgc's callbacks breaks guile's building.
+GUILE_CONF_ENV += GUILE_FOR_BUILD=$(HOST_DIR)/usr/bin/guile \
+	CFLAGS="$(TARGET_CFLAGS) -DHAVE_GC_SET_FINALIZER_NOTIFIER -DHAVE_GC_GET_HEAP_USAGE_SAFE -DHAVE_GC_GET_FREE_SPACE_DIVISOR -DHAVE_GC_SET_FINALIZE_ON_DEMAND"
+
+$(eval $(autotools-package))
+$(eval $(host-autotools-package))