Date: Saturday, February 14, 2015 @ 18:19:15 Author: bisson Revision: 127692
add err_handle patch for sage-5.6 Added: pari/trunk/err_handle.patch Modified: pari/trunk/PKGBUILD ------------------+ PKGBUILD | 10 +++-- err_handle.patch | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+), 4 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2015-02-14 06:19:35 UTC (rev 127691) +++ PKGBUILD 2015-02-14 17:19:15 UTC (rev 127692) @@ -3,7 +3,7 @@ pkgname=pari pkgver=2.7.2 -pkgrel=1 +pkgrel=2 pkgdesc='Computer algebra system designed for fast computations in number theory' url='http://pari.math.u-bordeaux.fr/' license=('GPL') @@ -11,13 +11,15 @@ depends=('gmp' 'readline' 'libx11') makedepends=('perl' 'texlive-core') optdepends=('perl: gphelp, tex2mail') -validpgpkeys=('42028EA404A2E9D80AC453148F0E7C2B4522E387') -source=("http://pari.math.u-bordeaux.fr/pub/pari/unix/${pkgname}-${pkgver}.tar.gz"{,.asc}) -sha1sums=('27ef49c39860055ff97608bc323bff2afda1aa51' 'SKIP') +source=("http://pari.math.u-bordeaux.fr/pub/pari/unix/${pkgname}-${pkgver}.tar.gz" + 'err_handle.patch') +sha1sums=('27ef49c39860055ff97608bc323bff2afda1aa51' + '182066ab765eddb0b7fd98b441c158304545f5ec') prepare() { cd "${srcdir}/${pkgname}-${pkgver}" sed 's/\$addlib64//g' -i config/get_libpth + patch -p1 -i ../err_handle.patch # sage-5.6 uses this¸ from upstream trunk } build() { Added: err_handle.patch =================================================================== --- err_handle.patch (rev 0) +++ err_handle.patch 2015-02-14 17:19:15 UTC (rev 127692) @@ -0,0 +1,105 @@ +Add cb_pari_err_handle() callback + +Backported from upstream commits +e9e659dc9ecb5ca6a8296c7922528a4ecbb89cb0 +26a7ae0f42918407febe9901ded41faf26ef43a6 + +diff -ru src/src/headers/paricom.h b/src/headers/paricom.h +--- src/src/headers/paricom.h 2014-03-25 09:59:21.000000000 +0100 ++++ b/src/headers/paricom.h 2015-01-13 19:41:47.430885048 +0100 +@@ -81,6 +81,7 @@ + extern int (*cb_pari_whatnow)(PariOUT *out, const char *, int); + extern void (*cb_pari_sigint)(void); + extern int (*cb_pari_handle_exception)(long); ++extern int (*cb_pari_err_handle)(GEN); + extern void (*cb_pari_pre_recover)(long); + extern void (*cb_pari_err_recover)(long); + extern const char *pari_library_path; +diff -ru src/src/language/init.c b/src/language/init.c +--- src/src/language/init.c 2015-01-13 19:40:30.643622993 +0100 ++++ b/src/language/init.c 2015-01-13 19:41:47.431884833 +0100 +@@ -87,6 +87,7 @@ + + void (*cb_pari_ask_confirm)(const char *); + int (*cb_pari_handle_exception)(long); ++int (*cb_pari_err_handle)(GEN); + int (*cb_pari_whatnow)(PariOUT *out, const char *, int); + void (*cb_pari_sigint)(void); + void (*cb_pari_pre_recover)(long); +@@ -732,6 +733,8 @@ + static void + dflt_err_recover(long errnum) { (void) errnum; pari_exit(); } + ++static int pari_err_display(GEN err); ++ + /* initialize PARI data. Initialize [new|old]fun to NULL for default set. */ + void + pari_init_opts(size_t parisize, ulong maxprime, ulong init_opts) +@@ -739,6 +742,8 @@ + ulong u; + + cb_pari_whatnow = NULL; ++ cb_pari_handle_exception = NULL; ++ cb_pari_err_handle = pari_err_display; + cb_pari_pre_recover = NULL; + cb_pari_sigint = dflt_sigint_fun; + if (init_opts&INIT_JMPm) cb_pari_err_recover = dflt_err_recover; +@@ -887,9 +892,6 @@ + evalstate_reset(); + killallfiles(); + pari_init_errcatch(); +- out_puts(pariErr, "\n"); +- pariErr->flush(); +- + cb_pari_err_recover(numerr); + } + +@@ -1266,21 +1268,22 @@ + return NULL; /*NOT REACHED*/ + } + +-static void ++static int + pari_err_display(GEN err) + { + long numerr=err_get_num(err); ++ err_init(); + if (numerr==e_SYNTAX) + { + const char *msg = GSTR(gel(err,2)); + const char *s = (const char *) gmael(err,3,1); + const char *entry = (const char *) gmael(err,3,2); + print_errcontext(pariErr, msg, s, entry); +- return; + } + else + { + char *s = pari_err2str(err); ++ closure_err(0); + err_init_msg(numerr, e_USER); + pariErr->puts(s); + if (numerr==e_NOTFUNC) +@@ -1295,6 +1298,8 @@ + } + pari_free(s); + } ++ out_term_color(pariErr, c_NONE); ++ pariErr->flush(); return 0; + } + + void +@@ -1315,12 +1320,9 @@ + global_err_data = E; + if (*iferr_env) longjmp(*iferr_env, numerr); + mt_err_recover(numerr); +- err_init(); +- if (numerr != e_SYNTAX) closure_err(0); +- pari_err_display(E); +- out_term_color(pariErr, c_NONE); + va_end(ap); +- pariErr->flush(); ++ if (cb_pari_err_handle && ++ cb_pari_err_handle(E)) return; + if (cb_pari_handle_exception && + cb_pari_handle_exception(numerr)) return; + err_recover(numerr);
