Teach the configurator how to build a macOS dynamic library and link
everything with it instead of the static library.
--- config/darwin.mk.orig	2018-11-27 14:30:54.000000000 -0600
+++ config/darwin.mk	2018-11-27 14:54:58.000000000 -0600
@@ -1,7 +1,9 @@
 #########################################################
-# Linux                                                 #
+# macOS                                                 #
 #########################################################
 OBJEXT=.o
+SHAREDLIBEXT=.dylib
+SHAREDLIBFLAGS=-dynamiclib -install_name $(PREFIX)/lib/$(notdir $@)
 LIBEXT=.a
 EXEEXT= 
 F2CEXT=.c
--- configurator/taucs_config.c.orig	2018-11-27 15:03:39.000000000 -0600
+++ configurator/taucs_config.c	2018-11-27 15:19:44.000000000 -0600
@@ -132,6 +132,7 @@
   if (flags & hsource   ) return ".h";
   if (flags & csource   ) return ".c";
   if (flags & cilksource) return ".c";
+  if (flags & sharedlib ) return "$(SHAREDLIBEXT)";
   if (flags & lib       ) return "$(LIBEXT)";
   if (flags & executable) return "$(EXEEXT)";
 
@@ -558,8 +559,12 @@
 
       fprintf(f, "%s: $(%s_content) $(STDDEPS)\n",get_full_name(i,0),base);
       fprintf(f,"\t- $(RM) %s\n",get_full_name(i,0));
+      if ( (files[i].flags & sharedlib) ) {
+      fprintf(f,"\t$(FC) $(FCFLAGS) $(COUTFLG)%s $(%s_content) $(SHAREDLIBFLAGS) $(LDFLAGS) $(LIBS)\n",get_full_name(i,0),base);
+      } else {
       fprintf(f,"\t$(AR) $(AOUTFLG)%s $(%s_content)\n",get_full_name(i,0),base);
       fprintf(f,"\t$(RANLIB) %s\n",get_full_name(i,0));
+      }
     }
 
     if ( (files[i].flags & executable) ) {
--- configurator/taucs_structure.h.orig	2003-09-04 04:05:18.000000000 -0500
+++ configurator/taucs_structure.h	2018-11-27 16:05:44.000000000 -0600
@@ -67,7 +67,9 @@
   dcomplex = 2048,
   scomplex = 4096,
   dreal    = 8192,
-  sreal    = 16384
+  sreal    = 16384,
+
+  sharedlib    = 32768
 };
 
 int source_types = csource | fcsource   | cilksource;
@@ -151,7 +158,7 @@
       "taucs_ccs_ops",
       0
     },
-    "libtaucs", 
+    "libtaucs.1", 
     { "LIBLAPACK", "LIBBLAS", 0 }
   },
 
@@ -161,7 +168,7 @@
       "readhb",
       0
     },
-    "libtaucs", 
+    "libtaucs.1", 
     { 0 }
   },
 
@@ -172,17 +179,17 @@
 
   { "AMD" , include, 0, { "ORDERING", 0 },
     { "amdatr","amdbar","amdexa","amdhaf","amdhat","amdpre","amdtru", 0 },
-    "libtaucs", { 0 }
+    "libtaucs.1", { 0 }
   },
 
   { "COLAMD" , include, 0,  { "ORDERING", 0 },
     { "colamd", 0 },
-    "libtaucs", { 0 }
+    "libtaucs.1", { 0 }
   },
 
   { "GENMMD" , include, 0, { "ORDERING", 0 },
     { "genmmd", 0 },
-    "libtaucs", { 0 }
+    "libtaucs.1", { 0 }
   },
 
   { "ORDERING", include, 0 , { "BASE", 0 },
@@ -190,7 +197,7 @@
       "taucs_ccs_order",
       0
     },
-    "libtaucs", 
+    "libtaucs.1", 
     { 0 }
   },
 
@@ -199,7 +206,7 @@
       "taucs_linsolve",
       0
     },
-    "libtaucs", 
+    "libtaucs.1", 
     { 0 }
   },
 
@@ -208,18 +215,18 @@
       "taucs_sn_llt",
       0
     },
-    "libtaucs", 
+    "libtaucs.1", 
     { 0 }
   },
 
   { "OOC_LLT" , include, 0, { "BASE", "ADVANCED_MEMORY_OPS", 0 },
     { "taucs_ccs_ooc_llt", "taucs_ooc_io", 0 },
-    "libtaucs", { 0 }
+    "libtaucs.1", { 0 }
   },
 
   { "OOC_LU" , include, 0, { "BASE", "ADVANCED_MEMORY_OPS", 0 },
     { "taucs_ccs_ooc_lu", "taucs_ooc_io", 0 },
-    "libtaucs", { 0 }
+    "libtaucs.1", { 0 }
   },
 
   { "ADVANCED_MEMORY_OPS", include, 0 , { "BASE", 0 },
@@ -227,23 +234,23 @@
       "taucs_memory",
       0
     },
-    "libtaucs", 
+    "libtaucs.1", 
     { 0 }
   },
 
   { "VAIDYA", include, 0, { "BASE", 0 },
     { "taucs_vaidya", "taucs_iter", 0 },
-    "libtaucs", { 0 }
+    "libtaucs.1", { 0 }
   },
 
   { "REC_VAIDYA", include, 0, { "BASE", 0 },
     { "taucs_recvaidya", "taucs_iter" ,0 },
-    "libtaucs", { 0 }
+    "libtaucs.1", { 0 }
   },
 
   { "GREMBAN" , include, 0, { "BASE", 0 },
     { "taucs_gremban", "taucs_iter" ,0 },
-    "libtaucs", { 0 }
+    "libtaucs.1", { 0 }
   },
 
   { "INCOMPLETE_CHOL", include, 0 , { "BASE", 0 },
@@ -252,18 +259,18 @@
       "taucs_ccs_solve_llt",
       0
     },
-    "libtaucs", 
+    "libtaucs.1", 
     { 0 }
   },
 
   { "ITER" , include, 0, { "BASE", 0 },
     { "taucs_iter", 0 },
-    "libtaucs", { 0 }
+    "libtaucs.1", { 0 }
   },
 
   { "INVERSE_FACTOR" , include, 0, { "BASE", 0 },
     { "taucs_ccs_xxt", 0 },
-    "libtaucs", { 0 }
+    "libtaucs.1", { 0 }
   },
 
   { "TESTING_PROGRAMS" , include, 0, { "TEST_DIRECT", "TEST_ITER", "TEST_MEMORY", 0 },
@@ -290,7 +297,7 @@
       "taucs_ccs_generators",
       0
     },
-    "libtaucs", { 0 }
+    "libtaucs.1", { 0 }
   },
 
   { "MALLOC_STUBS" , include, 0, { "BASE", 0 },
@@ -298,7 +305,7 @@
       "taucs_malloc",
       0
     },
-    "libtaucs", { 0 }
+    "libtaucs.1", { 0 }
   },
 
   { "AD_HOC_TEST" , exclude, 0, { "BASE", 0 }, /* this is for ad-hoc testing */
@@ -366,6 +373,7 @@
   { "memory_test" , "DIRPROGS", csource },
 
   { "libtaucs"    , "DIRLIB", lib },
+  { "libtaucs.1"  , "DIRLIB", sharedlib | lib },
 
   { "direct"      , "DIREXE", executable },
   { "taucs_run"   , "DIREXE", executable },
