mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Bug 719481 - GnuCash report crashes with Guile2
This is actually a bug in swig. This commit works around it by patching the swig generated source files until swig itself has been fixed. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@23557 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
510c20b8a9
commit
2a5f68c812
@ -108,7 +108,10 @@ libgncmod_app_utils_la_LIBADD = \
|
||||
if BUILDING_FROM_SCM
|
||||
swig-app-utils-guile.c: app-utils.i ${top_srcdir}/src/base-typemaps.i
|
||||
$(SWIG) -guile $(SWIG_ARGS) -Linkage module \
|
||||
-I${top_srcdir}/src -o $@ $<
|
||||
-I${top_srcdir}/src -o $@ $<; \
|
||||
if ! `grep "define scm_from_utf8_string" $@ > /dev/null 2>&1`; then \
|
||||
patch $@ $(top_srcdir)/src/swig-utf8.patch; \
|
||||
fi
|
||||
swig-app-utils-python.c: app-utils.i ${top_srcdir}/src/base-typemaps.i
|
||||
$(SWIG) -python -Wall -Werror $(SWIG_ARGS) \
|
||||
-I${top_srcdir}/src -o $@ $<
|
||||
|
@ -45,7 +45,10 @@ noinst_HEADERS = \
|
||||
if BUILDING_FROM_SCM
|
||||
swig-core-utils-guile.c: core-utils.i ${top_srcdir}/src/base-typemaps.i
|
||||
$(SWIG) -guile $(SWIG_ARGS) -Linkage module \
|
||||
-I${top_srcdir}/src -o $@ $<
|
||||
-I${top_srcdir}/src -o $@ $<; \
|
||||
if ! `grep "define scm_from_utf8_string" $@ > /dev/null 2>&1`; then \
|
||||
patch $@ $(top_srcdir)/src/swig-utf8.patch; \
|
||||
fi
|
||||
swig-core-utils-python.c: core-utils.i ${top_srcdir}/src/base-typemaps.i
|
||||
$(SWIG) -python -Wall -Werror $(SWIG_ARGS) \
|
||||
-I${top_srcdir}/src -o $@ $<
|
||||
|
@ -204,7 +204,10 @@ swig-engine.c: engine.i $(top_srcdir)/src/base-typemaps.i \
|
||||
$(QOFHEADERS) \
|
||||
$(gncinclude_HEADERS) $(noinst_HEADERS)
|
||||
$(SWIG) -guile $(SWIG_ARGS) -Linkage module \
|
||||
-I${top_srcdir}/src/libqof/qof -I${top_srcdir}/src -o $@ $<
|
||||
-I${top_srcdir}/src/libqof/qof -I${top_srcdir}/src -o $@ $<; \
|
||||
if ! `grep "define scm_from_utf8_string" $@ > /dev/null 2>&1`; then \
|
||||
patch $@ $(top_srcdir)/src/swig-utf8.patch; \
|
||||
fi
|
||||
endif
|
||||
|
||||
iso-4217-currencies.c: iso-4217-currencies.scm iso-currencies-to-c
|
||||
|
@ -32,7 +32,10 @@ noinst_DATA = .scm-links
|
||||
if BUILDING_FROM_SCM
|
||||
swig-gnc-module.c: gnc-module.i ${top_srcdir}/src/base-typemaps.i
|
||||
$(SWIG) -guile $(SWIG_ARGS) -Linkage module \
|
||||
-I${top_srcdir}/src -o $@ $<
|
||||
-I${top_srcdir}/src -o $@ $<; \
|
||||
if ! `grep "define scm_from_utf8_string" $@ > /dev/null 2>&1`; then \
|
||||
patch $@ $(top_srcdir)/src/swig-utf8.patch; \
|
||||
fi
|
||||
endif
|
||||
|
||||
EXTRA_DIST = \
|
||||
|
@ -24,7 +24,10 @@ libgncmodbar_la_LIBADD=libbar.la \
|
||||
|
||||
if BUILDING_FROM_SCM
|
||||
swig-bar.c: bar.i
|
||||
$(SWIG) -guile $(SWIG_ARGS) -Linkage module -o $@ $<
|
||||
$(SWIG) -guile $(SWIG_ARGS) -Linkage module -o $@ $<; \
|
||||
if ! `grep "define scm_from_utf8_string" $@ > /dev/null 2>&1`; then \
|
||||
patch $@ $(top_srcdir)/src/swig-utf8.patch; \
|
||||
fi
|
||||
endif
|
||||
|
||||
EXTRA_DIST = \
|
||||
|
@ -28,7 +28,10 @@ libgncmodbaz_la_LIBADD = \
|
||||
|
||||
if BUILDING_FROM_SCM
|
||||
swig-baz.c: baz.i
|
||||
$(SWIG) -guile $(SWIG_ARGS) -Linkage module -o $@ $<
|
||||
$(SWIG) -guile $(SWIG_ARGS) -Linkage module -o $@ $<; \
|
||||
if ! `grep "define scm_from_utf8_string" $@ > /dev/null 2>&1`; then \
|
||||
patch $@ $(top_srcdir)/src/swig-utf8.patch; \
|
||||
fi
|
||||
endif
|
||||
|
||||
EXTRA_DIST = \
|
||||
|
@ -29,7 +29,10 @@ EXTRA_DIST = \
|
||||
|
||||
if BUILDING_FROM_SCM
|
||||
swig-foo.c: foo.i
|
||||
$(SWIG) -guile $(SWIG_ARGS) -Linkage module -o $@ $<
|
||||
$(SWIG) -guile $(SWIG_ARGS) -Linkage module -o $@ $<; \
|
||||
if ! `grep "define scm_from_utf8_string" $@ > /dev/null 2>&1`; then \
|
||||
patch $@ $(top_srcdir)/src/swig-utf8.patch; \
|
||||
fi
|
||||
endif
|
||||
|
||||
BUILT_SOURCES = swig-foo.c
|
||||
|
@ -227,7 +227,10 @@ if BUILDING_FROM_SCM
|
||||
swig-gnome-utils.c: gnome-utils.i \
|
||||
${top_srcdir}/src/base-typemaps.i
|
||||
$(SWIG) -guile $(SWIG_ARGS) -Linkage module \
|
||||
-I${top_srcdir}/src -o $@ $<
|
||||
-I${top_srcdir}/src -o $@ $<; \
|
||||
if ! `grep "define scm_from_utf8_string" $@ > /dev/null 2>&1`; then \
|
||||
patch $@ $(top_srcdir)/src/swig-utf8.patch; \
|
||||
fi
|
||||
endif
|
||||
|
||||
gncmoddir = ${GNC_SHAREDIR}/guile-modules/gnucash
|
||||
|
@ -114,7 +114,10 @@ noinst_HEADERS = \
|
||||
if BUILDING_FROM_SCM
|
||||
swig-gnome.c: gnome.i dialog-progress.h ${top_srcdir}/src/base-typemaps.i
|
||||
$(SWIG) -guile $(SWIG_ARGS) -Linkage module \
|
||||
-I${top_srcdir}/src -o $@ $<
|
||||
-I${top_srcdir}/src -o $@ $<; \
|
||||
if ! `grep "define scm_from_utf8_string" $@ > /dev/null 2>&1`; then \
|
||||
patch $@ $(top_srcdir)/src/swig-utf8.patch; \
|
||||
fi
|
||||
endif
|
||||
|
||||
EXTRA_DIST = \
|
||||
|
@ -22,6 +22,8 @@
|
||||
/* Give Guile 1.8 a 2.0-like interface */
|
||||
#if (SCM_MAJOR_VERSION < 2)
|
||||
# define scm_c_string_length scm_i_string_length
|
||||
#endif
|
||||
#ifndef scm_from_utf8_string
|
||||
# define scm_from_utf8_string scm_from_locale_string
|
||||
# define scm_to_utf8_string scm_to_locale_string
|
||||
#endif
|
||||
|
@ -58,7 +58,10 @@ if BUILDING_FROM_SCM
|
||||
swig-gnc-html.c: gnc-html.i gnc-html.h \
|
||||
${top_srcdir}/src/base-typemaps.i
|
||||
$(SWIG) -guile $(SWIG_ARGS) -Linkage module \
|
||||
-I${top_srcdir}/src -o $@ $<
|
||||
-I${top_srcdir}/src -o $@ $<; \
|
||||
if ! `grep "define scm_from_utf8_string" $@ > /dev/null 2>&1`; then \
|
||||
patch $@ $(top_srcdir)/src/swig-utf8.patch; \
|
||||
fi
|
||||
endif
|
||||
|
||||
EXTRA_DIST = \
|
||||
|
@ -52,7 +52,10 @@ libgncmod_report_gnome_la_LIBADD = \
|
||||
if BUILDING_FROM_SCM
|
||||
swig-report-gnome.c: report-gnome.i ${top_srcdir}/src/base-typemaps.i
|
||||
$(SWIG) -guile $(SWIG_ARGS) -Linkage module \
|
||||
-I${top_srcdir}/src -o $@ $<
|
||||
-I${top_srcdir}/src -o $@ $<; \
|
||||
if ! `grep "define scm_from_utf8_string" $@ > /dev/null 2>&1`; then \
|
||||
patch $@ $(top_srcdir)/src/swig-utf8.patch; \
|
||||
fi
|
||||
endif
|
||||
|
||||
gncmoddir = ${GNC_SHAREDIR}/guile-modules/gnucash/report
|
||||
|
@ -24,7 +24,10 @@ libgncmod_report_system_la_LIBADD = \
|
||||
if BUILDING_FROM_SCM
|
||||
swig-report-system.c: report-system.i ${top_srcdir}/src/base-typemaps.i
|
||||
$(SWIG) -guile $(SWIG_ARGS) -Linkage module \
|
||||
-I${top_srcdir}/src -o $@ $<
|
||||
-I${top_srcdir}/src -o $@ $<; \
|
||||
if ! `grep "define scm_from_utf8_string" $@ > /dev/null 2>&1`; then \
|
||||
patch $@ $(top_srcdir)/src/swig-utf8.patch; \
|
||||
fi
|
||||
endif
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
|
60
src/swig-utf8.patch
Normal file
60
src/swig-utf8.patch
Normal file
@ -0,0 +1,60 @@
|
||||
--- guile_scm_run.swg
|
||||
+++ guile_scm_run.swg
|
||||
@@ -41,10 +41,14 @@ typedef struct swig_guile_clientdata {
|
||||
SCM goops_class;
|
||||
} swig_guile_clientdata;
|
||||
|
||||
+#if SCM_MAJOR_VERSION <= 2
|
||||
+#define scm_to_utf8_string scm_to_locale_string
|
||||
+#define scm_from_utf8_string scm_from_locale_string
|
||||
+#endif
|
||||
#define SWIG_scm2str(s) \
|
||||
SWIG_Guile_scm2newstr(s, NULL)
|
||||
#define SWIG_str02scm(str) \
|
||||
- str ? scm_from_locale_string(str) : SCM_BOOL_F
|
||||
+ str ? scm_from_utf8_string(str) : SCM_BOOL_F
|
||||
# define SWIG_malloc(size) \
|
||||
scm_malloc(size)
|
||||
# define SWIG_free(mem) \
|
||||
@@ -84,21 +88,13 @@ SWIGINTERN char *
|
||||
SWIG_Guile_scm2newstr(SCM str, size_t *len) {
|
||||
#define FUNC_NAME "SWIG_Guile_scm2newstr"
|
||||
char *ret;
|
||||
- char *tmp;
|
||||
- size_t l;
|
||||
|
||||
SCM_ASSERT (scm_is_string(str), str, 1, FUNC_NAME);
|
||||
- l = scm_c_string_length(str);
|
||||
|
||||
- ret = (char *) SWIG_malloc( (l + 1) * sizeof(char));
|
||||
+ ret = scm_to_utf8_string(str);
|
||||
if (!ret) return NULL;
|
||||
|
||||
- tmp = scm_to_locale_string(str);
|
||||
- memcpy(ret, tmp, l);
|
||||
- free(tmp);
|
||||
-
|
||||
- ret[l] = '\0';
|
||||
- if (len) *len = l;
|
||||
+ if (len) *len = strlen(ret) - 1;
|
||||
return ret;
|
||||
#undef FUNC_NAME
|
||||
}
|
||||
@@ -473,7 +469,7 @@ SWIG_Guile_GetArgs (SCM *dest, SCM rest,
|
||||
int num_args_passed = 0;
|
||||
for (i = 0; i<reqargs; i++) {
|
||||
if (!SCM_CONSP(rest))
|
||||
- scm_wrong_num_args(scm_from_locale_string(procname ? (char *) procname : "unknown procedure"));
|
||||
+ scm_wrong_num_args(scm_from_utf8_string(procname ? (char *) procname : "unknown procedure"));
|
||||
*dest++ = SCM_CAR(rest);
|
||||
rest = SCM_CDR(rest);
|
||||
num_args_passed++;
|
||||
@@ -486,7 +482,7 @@ SWIG_Guile_GetArgs (SCM *dest, SCM rest,
|
||||
for (; i<optargs; i++)
|
||||
*dest++ = SCM_UNDEFINED;
|
||||
if (!SCM_NULLP(rest))
|
||||
- scm_wrong_num_args(scm_from_locale_string(procname ? (char *) procname : "unknown procedure"));
|
||||
+ scm_wrong_num_args(scm_from_utf8_string(procname ? (char *) procname : "unknown procedure"));
|
||||
return num_args_passed;
|
||||
}
|
||||
|
@ -27,7 +27,10 @@ if BUILDING_FROM_SCM
|
||||
swig-unittest-support-guile.c: unittest-support.i $(top_srcdir)/src/base-typemaps.i
|
||||
$(SWIG) -guile $(SWIG_ARGS) -Linkage module \
|
||||
-I${top_srcdir}/src \
|
||||
${AM_CPPFLAGS} -o $@ $<
|
||||
${AM_CPPFLAGS} -o $@ $<; \
|
||||
if ! `grep "define scm_from_utf8_string" $@ > /dev/null 2>&1`; then \
|
||||
patch $@ $(top_srcdir)/src/swig-utf8.patch; \
|
||||
fi
|
||||
|
||||
swig-unittest-support-python.c: unittest-support.i $(top_srcdir)/src/base-typemaps.i
|
||||
$(SWIG) -python -Wall -Werror $(SWIG_ARGS) \
|
||||
|
Loading…
Reference in New Issue
Block a user