From 7bed56eca884dca7603b52fce0fd1930568bc17e Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jon.w.wilkes@gmail.com>
Date: Fri, 4 Aug 2017 18:11:57 -0400
Subject: [PATCH] make [declare -lib] handle absolute paths (and
 namespace-prefixed paths) consistent with object boxes

---
 pd/src/g_canvas.c | 9 ++++++++-
 pd/src/m_class.c  | 2 +-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c
index c0b10036b..e9c8f2d27 100644
--- a/pd/src/g_canvas.c
+++ b/pd/src/g_canvas.c
@@ -1922,6 +1922,7 @@ static void canvas_stdlib(t_canvasenvironment *e, char *stdlib)
     }
 }
 
+extern t_symbol *class_loadsym;     /* name under which an extern is invoked */
 
 void canvas_declare(t_canvas *x, t_symbol *s, int argc, t_atom *argv)
 {
@@ -1948,7 +1949,13 @@ void canvas_declare(t_canvas *x, t_symbol *s, int argc, t_atom *argv)
         }
         else if ((argc > i+1) && !strcmp(flag, "-lib"))
         {
-            sys_load_lib(x, atom_getsymbolarg(i+1, argc, argv)->s_name);
+            /* set class_loadsym in case we're loading a library by
+               absolute or namespace-prefixed path. Not sure yet
+               exactly how stdlib works so I haven't touched that
+               one... */
+            class_loadsym = atom_getsymbolarg(i+1, argc, argv);
+            sys_load_lib(x, class_loadsym->s_name);
+            class_loadsym = NULL;
             i++;
         }
         else if ((argc > i+1) && !strcmp(flag, "-stdlib"))
diff --git a/pd/src/m_class.c b/pd/src/m_class.c
index 54cfa965d..062746561 100644
--- a/pd/src/m_class.c
+++ b/pd/src/m_class.c
@@ -26,7 +26,7 @@
 #define snprintf sprintf_s
 #endif
 
-static t_symbol *class_loadsym;     /* name under which an extern is invoked */
+t_symbol *class_loadsym;     /* name under which an extern is invoked */
 static void pd_defaultfloat(t_pd *x, t_float f);
 static void pd_defaultblob(t_pd *x, t_blob *st); /* MP20061226 blob type */
 static void pd_defaultlist(t_pd *x, t_symbol *s, int argc, t_atom *argv);
-- 
GitLab