Package: pari-gp
Version: 2.7.2-1
Severity: wishlist

While trying to use the debian package in sagemath, it turned out two things were lacking to make it work:
- they use anal.h ;
- they also have backported patches to add cb_pari_err_handle from upstream's repository (see end of this mail).

Can we get those in debian too?

Snark on #debian-science

PS: their cb_pari_err_handle.patch looks like:
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);


--
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to