Alright, task is on me to make autogen.sh happy again.  :)

Al,
        Try this updated patch against your 2009-06-11 snapshot.

PatchLog: (in addition to previous description)
autogen.sh:
        regenerate in libltdl subdir for consistency
        direct it to use config files in parent (root) dir
configure.ac:
        libtool section, one for libtool-2.x, other for 1.5.x (commented out)
        removed AM_MAINTAINER_MODE (recommended) to allow make to
                auto-regen when autotool sources are updated.
Makefile.am:
        ACLOCAL_AMFLAGS points to m4 macros in libltdl's subdir
src/Makefile.am:
        split out MODELHDRS in case we want to install them in the future


Same procedure after patching:
autogen.sh
configure-from-somwehere
make
make distcheck

This 'version' of gnucap again has no model plug-ins pre-loaded, you should either "attach gnucapbasemodels.so" or "dlopen gnucapbasemodels" before gnucap becomes useful.

Let me know how this goes!


Fang

David Fang
http://www.csl.cornell.edu/~fang/
http://www.achronix.com/
diff -u -r gnucap-2009-06-11/Makefile.am gnucap-2009-06-11-patched/Makefile.am
--- gnucap-2009-06-11/Makefile.am       2008-06-01 07:58:12.000000000 -0700
+++ gnucap-2009-06-11-patched/Makefile.am       2009-06-21 13:43:24.000000000 
-0700
@@ -2,7 +2,9 @@
 ##
 ## Top level automake file for gnucap
 
-SUBDIRS=       doc examples modelgen src
+SUBDIRS = libltdl modelgen src doc examples
 
-EXTRA_DIST=    autogen.sh Makefile.template configure.old
+ACLOCAL_AMFLAGS = -I libltdl/m4
+
+EXTRA_DIST = autogen.sh Makefile.template configure.old
 
diff -u -r gnucap-2009-06-11/autogen.sh gnucap-2009-06-11-patched/autogen.sh
--- gnucap-2009-06-11/autogen.sh        2007-02-27 09:39:37.000000000 -0800
+++ gnucap-2009-06-11-patched/autogen.sh        2009-06-21 13:35:41.000000000 
-0700
@@ -1,6 +1,6 @@
-#! /bin/sh
-#
-# $Id$
+#! /bin/sh -e
+#      -e exits script on first error (non-zero exit status)
+# $Id: $
 #
 # Run the various GNU autotools to bootstrap the build
 # system.  Should only need to be done once.
@@ -9,19 +9,45 @@
 CONFIG_SHELL=/bin/sh
 export CONFIG_SHELL
 
+regen()
+{
+printf "In: "
+pwd
 echo "Running aclocal..."
-aclocal $ACLOCAL_FLAGS || exit 1
+aclocal $ACLOCAL_FLAGS
 
 echo "Running autoheader..."
-autoheader || exit 1
+autoheader $ACLOCAL_FLAGS
 
 echo "Running automake..."
-automake -a -c --gnu || exit 1
+automake -a -c --gnu
 
 echo "Running autoconf..."
-autoconf || exit 1
+autoconf $ACLOCAL_FLAGS
+}
+
+echo "Running libtoolize..."
+rm -rf libltdl
+libtoolize --ltdl --force --copy
+
+# In the freshly installed libltdl directory:
+# we forcibly remove some autotool files to force them to be regenerated
+# using the local versions of the autotools, in case of version mismatch.
+# Also point the config dir to the top-level one to share common files.
+(cd libltdl && \
+        mkdir -p removed && \
+        mv -f configure.ac configure.ac.bkp && \
+        sed '/^AC_CONFIG_AUX_DIR/s|(.*)|([..])|' configure.ac.bkp \
+                > configure.ac && \
+        mv -f configure.ac.bkp removed && \
+        mv -f Makefile.in configure aclocal.m4 config-h.in removed ; \
+        mv -f config.* install-sh ltmain.sh missing removed || : ; \
+        regen )
+
+# back to top-dir
+regen
 
-echo "not Running configure..."
+echo "not Running configure."
 ##./configure $@ || exit 1
 
 
diff -u -r gnucap-2009-06-11/configure.ac gnucap-2009-06-11-patched/configure.ac
--- gnucap-2009-06-11/configure.ac      2009-06-10 21:30:52.000000000 -0700
+++ gnucap-2009-06-11-patched/configure.ac      2009-06-21 13:40:08.000000000 
-0700
@@ -28,8 +28,37 @@
 
 AM_INIT_AUTOMAKE(gnucap, 2009-06-11)
 AM_CONFIG_HEADER([config.h])
+AC_CANONICAL_HOST
+
+dnl AM_MAINTAINER_MODE
+
+dnl --------------------------- LIBTOOL SECTION -------------------------------
+dnl libtool-1.5.x setup
+dnl AC_LIBLTDL_CONVENIENCE
+dnl AC_SUBST(LTDLINCL)
+dnl AC_SUBST(LIBLTDL)
+dnl AC_LIB_LTDL
+dnl AC_LIBTOOL_DLOPEN
+dnl AC_DISABLE_STATIC
+dnl AC_PROG_LIBTOOL
+dnl AC_CONFIG_SUBDIRS(libltdl)
+
+dnl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+dnl libtool-2.x setup
+AC_CONFIG_MACRO_DIR([libltdl/m4])
+LT_INIT
+AC_DISABLE_STATIC
+LTDL_INIT
+AC_SUBST(LTDLINCL)
+AC_SUBST(LIBLTDL)
+dnl ------------------------- end LIBTOOL SECTION -----------------------------
+
+dnl need these variables to augment test environment
+LTDL_SHLIBPATH_VAR=$libltdl_cv_shlibpath_var
+AC_SUBST(LTDL_SHLIBPATH_VAR)
+LTDL_OBJDIR=$libltdl_cv_objdir
+AC_SUBST(LTDL_OBJDIR)
 
-AM_MAINTAINER_MODE
 
 AC_MSG_CHECKING([if debug code should be compiled in])
 AC_ARG_ENABLE([debug],
@@ -121,7 +150,8 @@
 fi
 
 # exports symbols to plugins
-LDFLAGS="$LDFLAGS -rdynamic"
+# LDFLAGS="$LDFLAGS -rdynamic"
+# use libtool flag -export-dynamic
 
 #AC_OUTPUT([
 #      Makefile
diff -u -r gnucap-2009-06-11/modelgen/Makefile.am 
gnucap-2009-06-11-patched/modelgen/Makefile.am
--- gnucap-2009-06-11/modelgen/Makefile.am      2009-06-10 21:19:47.000000000 
-0700
+++ gnucap-2009-06-11-patched/modelgen/Makefile.am      2009-06-20 
15:06:32.000000000 -0700
@@ -41,5 +41,5 @@
  configure.old Makefile.template
 
 
-INCLUDES=      -I$(top_srcdir)/src
+AM_CPPFLAGS = -I$(top_srcdir)/src
 
diff -u -r gnucap-2009-06-11/src/Makefile.am 
gnucap-2009-06-11-patched/src/Makefile.am
--- gnucap-2009-06-11/src/Makefile.am   2009-06-10 21:20:12.000000000 -0700
+++ gnucap-2009-06-11-patched/src/Makefile.am   2009-06-21 14:31:48.000000000 
-0700
@@ -24,6 +24,9 @@
 ##  02110-1301, USA.
 
 bin_PROGRAMS= gnucap
+pkglib_LTLIBRARIES = libgnucap.la gnucapbasemodels.la
+
+AM_CPPFLAGS = $(LTDLINCL)
 
 #------------------------------------------------------------------------
 # These source files can be omitted, and supplied as plugins.
@@ -91,7 +94,8 @@
 e_elemnt.cc e_ccsrc.cc e_storag.cc e_cardlist.cc \
 bm_model.cc bm_value.cc bm_cond.cc bm.cc \
 c__cmd.cc c_attach.cc c_file.cc c_genrat.cc \
-findbr.cc plot.cc main.cc globals.cc
+findbr.cc plot.cc globals.cc
+# main.cc
 #------------------------------------------------------------------------
 RAW_HDRS = \
 md.h ap.h mode.h constant.h declare.h patchlev.h \
@@ -111,40 +115,54 @@
 c_comand.h globals.h
 #------------------------------------------------------------------------
 ## The modelgen generated files
-MODELSRCS= ${MODELS:.model=.cc} ${MODELS:.model=.h}
+MODELSRCS= ${MODELS:.model=.cc}
+MODELHDRS= ${MODELS:.model=.h}
 MODELOBJS= ${MODELS:.model=.${OBJEXT}}
+MODELLTOBJS= ${MODELS:.model=.lo}
 
-nodist_gnucap_SOURCES= ${SRCS1} ${MODELSRCS} ${SRCS2}
+nodist_gnucapbasemodels_la_SOURCES = ${MODELSRCS} ${MODELHDRS}
+gnucapbasemodels_la_LDFLAGS = -module
 
 SRCS1= 
 SRCS2= ${RAW_SRCS} ${RAW_HDRS}
 
+libgnucap_la_SOURCES= ${SRCS1} ${SRCS2}
+libgnucap_la_LIBADD= ${LIBLTDL}
+
+gnucap_SOURCES= main.cc
+gnucap_LDADD = libgnucap.la
+# if symbols from executable are needed for plug-in modules
+gnucap_LDFLAGS = -export-dynamic
+
 # make all of the model object files depend on all of the model sources
 # this is a bit overkill, but for example the bjt model makes use of the
 # diode model and we want to be sure and capture that dependency
-${MODELOBJS}: ${MODELSRCS}
+${MODELOBJS} ${MODELLTOBJS}: ${MODELSRCS} ${MODELHDRS}
 
 ## Include the .model files in the distfile as well as the rest of the
 ## non-generated sources
 
-EXTRA_DIST= ${MODELS} ${SRCS1} ${SRCS2} \
+EXTRA_DIST= ${MODELS} \
 configure.old Make1 test_readline.cc spice-wrapper.cc \
 Make3 Makefile.template \
 Make2.g++ Make2.Debug Make2.mingw32 \
 Makefile.am
 
 ### Clean out the modelgen generated files
-CLEANFILES= ${MODELSRCS}
+CLEANFILES= ${MODELSRCS} ${MODELHDRS}
 
 ## Suffix rules for modelgen.
 ##
 
-SUFFIXES= .model
+SUFFIXES= .model .cc .h
 MODELGEN= @MODELGEN@
+MODELGENEXE = ${MODELGEN}${EXEEXT}
+
+.model.cc:
+       ${MODELGENEXE} -cc $<
 
-%.cc : %.model %.h ${MODELGEN}${EXEEXT}
-       ${MODELGEN} -cc $<
+.model.h:
+       ${MODELGENEXE} -h $<
 
-%.h : %.model ${MODELGEN}${EXEEXT}
-       ${MODELGEN} -h $<
+${MODELSRCS} ${MODELHDRS}: ${MODELGENEXE}
 
diff -u -r gnucap-2009-06-11/src/c_attach.cc 
gnucap-2009-06-11-patched/src/c_attach.cc
--- gnucap-2009-06-11/src/c_attach.cc   2009-06-10 21:20:11.000000000 -0700
+++ gnucap-2009-06-11-patched/src/c_attach.cc   2009-06-21 14:37:42.000000000 
-0700
@@ -23,6 +23,7 @@
 //testing=informal
 #include "c_comand.h"
 #include "globals.h"
+#include "ltdl.h"      /* for libtool's libltdl */
 /*--------------------------------------------------------------------------*/
 namespace {
 /*--------------------------------------------------------------------------*/
@@ -77,6 +78,24 @@
 } p1;
 DISPATCHER<CMD>::INSTALL d1(&command_dispatcher, "attach|load", &p1);
 /*--------------------------------------------------------------------------*/
+class CMD_DLOPEN : public CMD {
+public:
+  void do_it(CS& cmd, CARD_LIST*)
+  {itested();
+    if (cmd.more()) {itested();
+       // TODO: use something like a reference-counted pointer
+       // so that libraries are automatically dlclose()'d upon destruction
+       const lt_dlhandle mh = lt_dlopenext(cmd.tail().c_str());
+       if (!mh) {
+               throw Exception("Failed to load module\n"
+                   "You may need to adjust your dynamic library serach 
paths.");
+       }
+    }
+    // else do nothing
+  }
+} p4;
+DISPATCHER<CMD>::INSTALL d4(&command_dispatcher, "dlopen", &p4);
+/*--------------------------------------------------------------------------*/
 class CMD_DETACH : public CMD {
 public:
   void do_it(CS& cmd, CARD_LIST*)
diff -u -r gnucap-2009-06-11/src/main.cc gnucap-2009-06-11-patched/src/main.cc
--- gnucap-2009-06-11/src/main.cc       2009-06-10 21:20:11.000000000 -0700
+++ gnucap-2009-06-11-patched/src/main.cc       2009-06-21 14:33:10.000000000 
-0700
@@ -28,6 +28,7 @@
 #include "patchlev.h"
 #include "c_comand.h"
 #include "declare.h"   /* plclose */
+#include "ltdl.h"      /* for libtool's libltdl */
 /*--------------------------------------------------------------------------*/
 struct JMP_BUF{
   sigjmp_buf p;
@@ -176,8 +177,31 @@
   }
 }
 /*--------------------------------------------------------------------------*/
+/**
+       Class whose sole responsibility is to balance dlinit with dlexit,
+       using constructor/destructor duality, thereby guaranteeing
+       exception safety and non-leaking.
+       Provided by Fang.
+ */
+class ltdl_token {
+public:
+       ltdl_token() { lt_dlinit(); }
+       ~ltdl_token() { lt_dlexit(); }
+
+private:
+       ltdl_token(const ltdl_token&);
+
+       ltdl_token&
+       operator = (const ltdl_token&);
+
+       // also stack-allocate only...
+} /* __attribute__((unused)) */ ;
+
+
+/*--------------------------------------------------------------------------*/
 int main(int argc, const char *argv[])
 {
+  const ltdl_token __lt__;
   {
     SET_RUN_MODE xx(rBATCH);
     sign_on();
_______________________________________________
Gnucap-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/gnucap-devel

Reply via email to