changeset 6102:ef9569e10d8b

[project @ 2006-10-26 20:50:04 by jwe]
author jwe
date Thu, 26 Oct 2006 20:50:04 +0000
parents 9e70afeb2ebf
children a2fdc87184cf
files ChangeLog Makeconf.in configure.in libcruft/ChangeLog libcruft/Makefile.in libcruft/Makerules.in libcruft/mkf77def.in
diffstat 7 files changed, 145 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Thu Oct 26 18:44:02 2006 +0000
+++ b/ChangeLog	Thu Oct 26 20:50:04 2006 +0000
@@ -1,9 +1,16 @@
 2006-10-26  Michael Goffioul  <michael.goffioul@swing.be>
 
 	* configure.in (*-*-msdosmsvc): Set library_path_var.
+	(XTRA_CRUFT_LINK_DEPS): New variable.  Substitute it.
 
 2006-10-26  John W. Eaton  <jwe@octave.org>
 
+	* configure.in (F77_TOLOWER, F77_APPEND_UNDERSCORE,
+	F77_APPEND_EXTRA_UNDERSCORE): New variables.  Substitute them.
+	* Makeconf.in (F77_TOLOWER, F77_APPEND_UNDERSCORE,
+	F77_APPEND_EXTRA_UNDERSCORE): Substitute here.
+	(do-subst-f77-mangling): New macro.
+
 	* emacs/octave-inf.el (inferior-octave-has-built-in-variables):
 	New defvar.
 	(inferior-octave-resync-dirs): Check to see whether Octave has
--- a/Makeconf.in	Thu Oct 26 18:44:02 2006 +0000
+++ b/Makeconf.in	Thu Oct 26 20:50:04 2006 +0000
@@ -97,6 +97,10 @@
 ALL_FFLAGS = $(FFLAGS)
 F77_FLOAT_STORE_FLAG = @F77_FLOAT_STORE_FLAG@
 
+F77_TOLOWER=@F77_TOLOWER@
+F77_APPEND_UNDERSCORE=@F77_TOLOWER@
+F77_APPEND_EXTRA_UNDERSCORE=@F77_TOLOWER@
+
 # cc and associated flags.
 
 DLFCN_INCFLAGS = @DLFCN_INCFLAGS@
@@ -572,6 +576,15 @@
 $(top_srcdir)/move-if-change $@-t $@
 endef
 
+define do-subst-f77-mangling
+echo "making $@ from $<"
+$(SED) < $< \
+  -e "s|%F77_TOLOWER%|${F77_TOLOWER}|g" \
+  -e "s|%F77_APPEND_UNDERSCORE%|${F77_APPEND_UNDERSCORE}|" \
+  -e "s|%F77_APPEND_EXTRA_UNDERSCORE%|${F77_APPEND_EXTRA_UNDERSCORE}|" > $@-t
+$(top_srcdir)/move-if-change $@-t $@
+endef
+
 define do-mkpkgadd
 $(top_srcdir)/mkpkgadd $(srcdir) > PKG_ADD.t
 if [ -n "`cat PKG_ADD.t`" ]; then \
--- a/configure.in	Thu Oct 26 18:44:02 2006 +0000
+++ b/configure.in	Thu Oct 26 20:50:04 2006 +0000
@@ -29,7 +29,7 @@
 EXTERN_CXXFLAGS="$CXXFLAGS"
 
 AC_INIT
-AC_REVISION($Revision: 1.536 $)
+AC_REVISION($Revision: 1.537 $)
 AC_PREREQ(2.57)
 AC_CONFIG_SRCDIR([src/octave.cc])
 AC_CONFIG_HEADER(config.h)
@@ -292,6 +292,12 @@
 
 ieee_fp_flag=
 case "$canonical_host_type" in
+  ## Keep this pattern first, so that it is preferred over the
+  ## following pattern for x86.
+  *-*-msdosmsvc)
+    CXXFLAGS="$CXXFLAGS -EHs -MD"
+    CFLAGS="$CFLAGS -MD"
+  ;;
   i[[3456789]]86-*-*)
     if test "$GCC" = yes; then
       OCTAVE_CC_FLAG(-mieee-fp, [
@@ -347,10 +353,6 @@
     OCTAVE_CXX_FLAG(-mminimal-toc, [
       XTRA_CXXFLAGS="$XTRA_CXXFLAGS -mminimal-toc"])
   ;;
-  *-*-msdosmsvc)
-    CXXFLAGS="$CXXFLAGS -EHs -MD"
-    CFLAGS="$CFLAGS -MD"
-  ;;
 esac
 
 AC_SUBST(XTRA_CFLAGS)
@@ -638,6 +640,9 @@
 have_fortran_compiler=false
 have_f2c=false
 
+F77_TOLOWER=true
+F77_APPEND_UNDERSCORE=true
+F77_APPEND_EXTRA_UNDERSCORE=true
 if $use_f2c; then
   have_f2c=true
 else
@@ -645,6 +650,16 @@
     AC_F77_LIBRARY_LDFLAGS
     AC_F77_DUMMY_MAIN
     AC_F77_WRAPPERS
+    case "$ac_cv_f77_mangling" in
+      "upper case") F77_TOLOWER=false ;;
+    esac
+    case "$ac_cv_f77_mangling" in
+      "no underscore") F77_APPEND_UNDERSCORE=false ;;
+    esac
+    case "$ac_cv_f77_mangling" in
+      "no extra underscore") F77_APPEND_EXTRA_UNDERSCORE=false ;;
+    esac
+
     case "$canonical_host_type" in
       i[[3456789]]86-*-*)
         if test "$ac_cv_f77_compiler_gnu" = yes; then
@@ -677,6 +692,9 @@
     fi
   fi
 fi
+AC_SUBST(F77_TOLOWER)
+AC_SUBST(F77_APPEND_UNDERSCORE)
+AC_SUBST(F77_APPEND_EXTRA_UNDERSCORE)
 
 f77_rules_frag=/dev/null
 if $have_fortran_compiler; then
@@ -743,6 +761,15 @@
   AC_MSG_ERROR([See the file INSTALL for more information.])
 fi
 
+XTRA_CRUFT_LINK_DEPS=
+case "$canonical_host_type" in
+  *-*-msdosmsvc)
+    FLIBS="$FLIBS -lkernel32"
+    XTRA_CRUFT_LINK_DEPS="-Wl,-def:cruft.def"
+  ;;
+esac
+AC_SUBST(XTRA_CRUFT_LINK_DEPS)
+
 FC=$F77
 AC_SUBST(FC)
 AC_SUBST_FILE(f77_rules_frag)
--- a/libcruft/ChangeLog	Thu Oct 26 18:44:02 2006 +0000
+++ b/libcruft/ChangeLog	Thu Oct 26 20:50:04 2006 +0000
@@ -1,3 +1,34 @@
+2006-10-26  Michael Goffioul  <michael.goffioul@swing.be>
+
+	* Makefile.in (XTRA_CRUFT_LINK_DEPS): Substitute.
+	(CRUFT_DEFS): New variable.
+	(LINK_DEPS): Include $(XTRA_CRUFT_LINK_DEPS) in the list.
+	(clean, mostlyclean, distclean): Delete cruft.def.
+	(cruft.def): New target.
+	(libraries): Depend on cruft.def.
+
+2006-10-26  John W. Eaton  <jwe@octave.org>
+
+	* Makefile.in ($(CRUFT_DEFS)): Depend on $(SUBDIRS).
+	(cruft.def): Depend on $(CRUFT_DEFS).
+	(libraries): Depend on cruft.def only.
+
+	* mk77def.in: New script template
+	* Makefile.in (DISTFILES): Include mk77def.in in the list.
+	($(SUBDIRS)): Depend on mk77def.
+	(mk77def): New target.
+	(CRUFT_DEFS): New variable.
+	* Makerules.in (CRUFT_FSRC, CRUFT_CSRC, CRUFT_CXXSRC): New variables.
+	(CRUFT_SRC): Define using $(CRUFT_FSRC), $(CRUFT_CSRC), and
+	$(CRUFT_CXXSRC).
+	(CRUFT_DEFS): New variable.
+	($(CRUFT_DEFS)): Depend on $(TOPDIR)/libcruft/mkf77def.
+	(%.def : %.f): New pattern rule.  Use mkf77def script to do
+	Fortran name mangling.
+	(clean, mostlyclean, distclean): Delete $(CRUFT_DEFS).
+	(all): Depend on $(CRUFT_DEFS)
+	Partially from Michael Goffioul  <michael.goffioul@swing.be>.
+
 2006-10-25  John W. Eaton  <jwe@octave.org>
 
 	* Makerules.in (XTRA_CDEFS, XTRA_CXXDEFS): Substitute here.
--- a/libcruft/Makefile.in	Thu Oct 26 18:44:02 2006 +0000
+++ b/libcruft/Makefile.in	Thu Oct 26 20:50:04 2006 +0000
@@ -39,15 +39,21 @@
 
 CLEAN_SUBDIRS = $(DISTSUBDIRS)
 
-DISTFILES = Makefile.in ChangeLog Makerules.in $(SOURCES) STOP.patch
+DISTFILES = Makefile.in ChangeLog Makerules.in $(SOURCES) \
+	STOP.patch mkf77def.in
 
-# include BLAS and FFTW just in case some of libcruft depends on them
-LINK_DEPS = $(BLAS_LIBS) $(FFTW_LIBS) $(FLIBS)
+# Include BLAS and FFTW just in case some of libcruft depends on them
+XTRA_CRUFT_LINK_DEPS = @XTRA_CRUFT_LINK_DEPS@
+LINK_DEPS = $(BLAS_LIBS) $(FFTW_LIBS) $(FLIBS) $(XTRA_CRUFT_LINK_DEPS)
 
 all: libraries
 .PHONY: all
 
-$(SUBDIRS):
+mkf77def: mkf77def.in $(TOPDIR)/Makeconf
+	@$(do-subst-f77-mangling)
+	chmod a+rx $@
+
+$(SUBDIRS): mkf77def
 	$(MAKE) -C $@ all
 .PHONY: $(SUBDIRS)
 
@@ -61,6 +67,7 @@
 CRUFT_OBJ2 := $(patsubst $(srcdir)/%, %, $(CRUFT_FSRC))
 CRUFT_OBJ1 := $(patsubst %.f, %.o, $(CRUFT_OBJ2))
 CRUFT_OBJ := $(CRUFT_OBJ1) $(MISC_OBJ)
+CRUFT_DEFS := $(patsubst %.f, %.def, $(CRUFT_OBJ2))
 
 ifeq ($(SHARED_LIBS), true)
   ifdef FPICFLAG
@@ -87,7 +94,13 @@
   endif
 endif
 
-libraries: $(SUBDIRS)
+$(CRUFT_DEFS): $(SUBDIRS)
+
+cruft.def: $(CRUFT_DEFS)
+	echo "EXPORTS" > $@
+	cat $(CRUFT_DEFS) >> $@
+
+libraries: cruft.def
 	$(MAKE) $(LIBRARIES)
 .PHONY: libraries
 
@@ -161,7 +174,7 @@
 clean mostlyclean distclean::
 	rm -f $(LIBPRE)cruft.$(LIBEXT) $(CRUFT_OBJ)
 	rm -f $(LIBPRE)cruft.$(SHLEXT_VER) $(LIBPRE)cruft.$(SHLEXT)
-	rm -f cruft.def
+	rm -f $(CRUFT_DEFS) cruft.def
 
 distclean maintainer-clean::
 	rm -f Makefile Makerules so_locations
--- a/libcruft/Makerules.in	Thu Oct 26 18:44:02 2006 +0000
+++ b/libcruft/Makerules.in	Thu Oct 26 20:50:04 2006 +0000
@@ -17,11 +17,13 @@
 
 DISTFILES = Makefile.in $(SOURCES) $(SPECIAL)
 
-CRUFT_SRC = $(wildcard $(srcdir)/*.f) \
-             $(wildcard $(srcdir)/*.c) \
-             $(wildcard $(srcdir)/*.cc)
+CRUFT_FSRC = $(wildcard $(srcdir)/*.f)
+CRUFT_CSRC = $(wildcard $(srcdir)/*.c)
+CRUFT_CXXSRC = $(wildcard $(srcdir)/*.cc)
+CRUFT_SRC = $(CRUFT_FSRC) $(CRUFT_CSRC) $(CRUFT_CXXSRC)
 CRUFT_BASE = $(basename $(notdir $(CRUFT_SRC)) )
 CRUFT_OBJ = $(addsuffix .o, $(CRUFT_BASE) )
+CRUFT_DEFS = $(patsubst %.f, %.def, $(notdir $(CRUFT_FSRC)))
 
 ifeq ($(SHARED_LIBS), true)
   ifdef FPICFLAG
@@ -40,7 +42,7 @@
   LIBCRUFT_DEPEND := $(LIBCRUFT_OBJS)
 endif
 
-all: pic $(LIBCRUFT_DEPEND) $(CRUFT_PICOBJ) $(SPECIAL_PICDEPEND)
+all: pic $(CRUFT_DEFS) $(LIBCRUFT_DEPEND) $(CRUFT_PICOBJ) $(SPECIAL_PICDEPEND)
 	@echo "warning: run make in parent directory to update libraries"
 .PHONY: all
 
@@ -64,6 +66,13 @@
 
 $(CRUFT_PICOBJ): stmp-pic
 
+$(CRUFT_DEFS): $(TOPDIR)/libcruft/mkf77def
+
+%.def : %.f
+	@echo "making $@ from $<"
+	@$(TOPDIR)/libcruft/mkf77def < $< > $@.t
+	$(top_srcdir)/move-if-change $@.t $@
+
 install:: all
 .PHONY: install
 
@@ -80,7 +89,7 @@
 	etags $(SOURCES)
 
 clean mostlyclean distclean maintainer-clean::
-	rm -f $(MAKEDEPS) $(CRUFT_OBJ) $(CRUFT_PICOBJ)
+	rm -f $(MAKEDEPS) $(CRUFT_OBJ) $(CRUFT_PICOBJ) $(CRUFT_DEFS)
 	-rmdir pic
 	rm -f stmp-pic
 .PHONY: clean mostlyclean
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libcruft/mkf77def.in	Thu Oct 26 20:50:04 2006 +0000
@@ -0,0 +1,29 @@
+#! /bin/sh
+
+SED=${SED:-'sed'}
+AWK=${AWK:-'awk'}
+
+F77_TOLOWER=%F77_APPEND_UNDERSCORE%
+F77_APPEND_UNDERSCORE=%F77_APPEND_UNDERSCORE%
+F77_APPEND_EXTRA_UNDERSCORE=%F77_APPEND_EXTRA_UNDERSCORE%
+
+if $F77_TOLOWER; then
+  case_cmd="tolower";
+else
+  case_cmd="toupper";
+fi
+
+if $F77_APPEND_UNDERSCORE; then
+  uscore="_";
+else
+  uscore="";
+fi
+
+if $F77_APPEND_EXTRA_UNDERSCORE; then
+  awkcmd="$AWK '{ if (\$0 ~ /_/) extra = \"_\"; else extra = \"\"; printf (\"%s%s%s\n\", $case_cmd (\$0), \"$uscore\", extra); }'"
+else
+  awkcmd="$AWK '{ printf (\"%s%s\n\", tolower (\$0), \"$uscore\"); }'"
+fi
+
+$SED -n -e 's/^[ \t]*\([Ff][Uu][Nn][Cc][Tt][Ii][Oo][Nn]\|[Ss][Uu][Bb][Rr][Oo][Uu][Tt][Ii][Nn][Ee]\|[Ee][Nn][Tt][Rr][Yy]\)[ \t]*\([^ \t(]*\).*$/\2/p' | \
+  eval $awkcmd