# HG changeset patch # User jwe # Date 1131731151 0 # Node ID e107161b8ca381147e70c5f34b3918f1b61e9aee # Parent 667ad2becb638b99f9d9cf82d11f61adb97edeb9 [project @ 2005-11-11 17:44:05 by jwe] diff -r 667ad2becb63 -r e107161b8ca3 src/ChangeLog --- a/src/ChangeLog Thu Nov 10 21:40:49 2005 +0000 +++ b/src/ChangeLog Fri Nov 11 17:45:51 2005 +0000 @@ -1,3 +1,22 @@ +2005-11-11 John W. Eaton + + * variables.cc (symbol_out_of_date): Check for autoloads here too. + + * Makefile.in (PKG_ADD): Depend on $(DLD_DEF_FILES), not $(DLD_SRC). + (%.df : %.cc): Also insert PKG_ADD commands in .df files. + (install-oct): Generate PKG_ADD file for install directory here. + Don't depend on PKG-ADD. No need to make .oct file links. + (clean): No need to delete links. + (stamp-oct-links): Delete target. + (distclean): No need to remove stamp-oct-links. + (all): Depend on $(OCT_FILES), not stamp-oct-links. + + * mk-pkg-add: New file. + * Makefile.in (DISTFILES): Add it to the list. + + * mk-oct-links: Delete. + * Makefile.in (DISTFILES): Remove it from the list. + 2005-11-10 John W. Eaton * ov-str-mat.h (octave_char_matrix_str::permute, diff -r 667ad2becb63 -r e107161b8ca3 src/DLD-FUNCTIONS/sparse.cc --- a/src/DLD-FUNCTIONS/sparse.cc Thu Nov 10 21:40:49 2005 +0000 +++ b/src/DLD-FUNCTIONS/sparse.cc Fri Nov 11 17:45:51 2005 +0000 @@ -633,9 +633,9 @@ return retval; } -// PKG_ADD: dispatch ("find", "spfind", "sparse matrix") -// PKG_ADD: dispatch ("find", "spfind", "sparse complex matrix") -// PKG_ADD: dispatch ("find", "spfind", "sparse bool matrix") +// PKG_ADD: dispatch ("find", "spfind", "sparse matrix"); +// PKG_ADD: dispatch ("find", "spfind", "sparse complex matrix"); +// PKG_ADD: dispatch ("find", "spfind", "sparse bool matrix"); DEFUN_DLD (spfind, args, nargout , "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {[...] =} spfind (...)\n\ diff -r 667ad2becb63 -r e107161b8ca3 src/DLD-FUNCTIONS/spchol.cc --- a/src/DLD-FUNCTIONS/spchol.cc Thu Nov 10 21:40:49 2005 +0000 +++ b/src/DLD-FUNCTIONS/spchol.cc Fri Nov 11 17:45:51 2005 +0000 @@ -116,9 +116,9 @@ return retval; } -// PKG_ADD: dispatch ("chol", "spchol", "sparse matrix") -// PKG_ADD: dispatch ("chol", "spchol", "sparse complex matrix") -// PKG_ADD: dispatch ("chol", "spchol", "sparse bool matrix") +// PKG_ADD: dispatch ("chol", "spchol", "sparse matrix"); +// PKG_ADD: dispatch ("chol", "spchol", "sparse complex matrix"); +// PKG_ADD: dispatch ("chol", "spchol", "sparse bool matrix"); DEFUN_DLD (spchol, args, nargout, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{r} =} spchol (@var{a})\n\ @@ -164,9 +164,9 @@ return sparse_chol (args, nargout, "spchol", false); } -// PKG_ADD: dispatch ("lchol", "splchol", "sparse matrix") -// PKG_ADD: dispatch ("lchol", "splchol", "sparse complex matrix") -// PKG_ADD: dispatch ("lchol", "splchol", "sparse bool matrix") +// PKG_ADD: dispatch ("lchol", "splchol", "sparse matrix"); +// PKG_ADD: dispatch ("lchol", "splchol", "sparse complex matrix"); +// PKG_ADD: dispatch ("lchol", "splchol", "sparse bool matrix"); DEFUN_DLD (splchol, args, nargout, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{l} =} splchol (@var{a})\n\ @@ -214,9 +214,9 @@ return sparse_chol (args, nargout, "splchol", true); } -// PKG_ADD: dispatch ("cholinv", "spcholinv", "sparse matrix") -// PKG_ADD: dispatch ("cholinv", "spcholinv", "sparse complex matrix") -// PKG_ADD: dispatch ("cholinv", "spcholinv", "sparse bool matrix") +// PKG_ADD: dispatch ("cholinv", "spcholinv", "sparse matrix"); +// PKG_ADD: dispatch ("cholinv", "spcholinv", "sparse complex matrix"); +// PKG_ADD: dispatch ("cholinv", "spcholinv", "sparse bool matrix"); DEFUN_DLD (spcholinv, args, , "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} spcholinv (@var{a})\n\ @@ -278,9 +278,9 @@ return retval; } -// PKG_ADD: dispatch ("chol2inv", "spchol2inv", "sparse matrix") -// PKG_ADD: dispatch ("chol2inv", "spchol2inv", "sparse complex matrix") -// PKG_ADD: dispatch ("chol2inv", "spchol2inv", "sparse bool matrix") +// PKG_ADD: dispatch ("chol2inv", "spchol2inv", "sparse matrix"); +// PKG_ADD: dispatch ("chol2inv", "spchol2inv", "sparse complex matrix"); +// PKG_ADD: dispatch ("chol2inv", "spchol2inv", "sparse bool matrix"); DEFUN_DLD (spchol2inv, args, , "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} spchol2inv (@var{u})\n\ diff -r 667ad2becb63 -r e107161b8ca3 src/DLD-FUNCTIONS/spdet.cc --- a/src/DLD-FUNCTIONS/spdet.cc Thu Nov 10 21:40:49 2005 +0000 +++ b/src/DLD-FUNCTIONS/spdet.cc Fri Nov 11 17:45:51 2005 +0000 @@ -36,9 +36,9 @@ #include "ov-re-sparse.h" #include "ov-cx-sparse.h" -// PKG_ADD: dispatch ("det", "spdet", "sparse matrix") -// PKG_ADD: dispatch ("det", "spdet", "sparse complex matrix") -// PKG_ADD: dispatch ("det", "spdet", "sparse bool matrix") +// PKG_ADD: dispatch ("det", "spdet", "sparse matrix"); +// PKG_ADD: dispatch ("det", "spdet", "sparse complex matrix"); +// PKG_ADD: dispatch ("det", "spdet", "sparse bool matrix"); DEFUN_DLD (spdet, args, , "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {[@var{d}, @var{rcond}] = } spdet (@var{a})\n\ diff -r 667ad2becb63 -r e107161b8ca3 src/DLD-FUNCTIONS/spkron.cc --- a/src/DLD-FUNCTIONS/spkron.cc Thu Nov 10 21:40:49 2005 +0000 +++ b/src/DLD-FUNCTIONS/spkron.cc Fri Nov 11 17:45:51 2005 +0000 @@ -79,9 +79,9 @@ template void kron (const Sparse&, const Sparse&, Sparse&); -// PKG_ADD: dispatch ("kron", "spkron", "sparse matrix") -// PKG_ADD: dispatch ("kron", "spkron", "sparse complex matrix") -// PKG_ADD: dispatch ("kron", "spkron", "sparse bool matrix") +// PKG_ADD: dispatch ("kron", "spkron", "sparse matrix"); +// PKG_ADD: dispatch ("kron", "spkron", "sparse complex matrix"); +// PKG_ADD: dispatch ("kron", "spkron", "sparse bool matrix"); DEFUN_DLD (spkron, args, nargout, "-*- texinfo -*-\n\ @deftypefn {Function File} {} spkron (@var{a}, @var{b})\n\ Form the kronecker product of two sparse matrices. This is defined\n\ diff -r 667ad2becb63 -r e107161b8ca3 src/DLD-FUNCTIONS/splu.cc --- a/src/DLD-FUNCTIONS/splu.cc Thu Nov 10 21:40:49 2005 +0000 +++ b/src/DLD-FUNCTIONS/splu.cc Fri Nov 11 17:45:51 2005 +0000 @@ -35,9 +35,9 @@ #include "ov-re-sparse.h" #include "ov-cx-sparse.h" -// PKG_ADD: dispatch ("lu", "splu", "sparse matrix") -// PKG_ADD: dispatch ("lu", "splu", "sparse complex matrix") -// PKG_ADD: dispatch ("lu", "splu", "sparse bool matrix") +// PKG_ADD: dispatch ("lu", "splu", "sparse matrix"); +// PKG_ADD: dispatch ("lu", "splu", "sparse complex matrix"); +// PKG_ADD: dispatch ("lu", "splu", "sparse bool matrix"); DEFUN_DLD (splu, args, nargout, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {[@var{l}, @var{u}] =} splu (@var{a})\n\ @@ -389,12 +389,12 @@ return retval; } -// PKG_ADD: dispatch ("inv", "spinv", "sparse matrix") -// PKG_ADD: dispatch ("inv", "spinv", "sparse complex matrix") -// PKG_ADD: dispatch ("inv", "spinv", "sparse bool matrix") -// PKG_ADD: dispatch ("inverse", "spinv", "sparse matrix") -// PKG_ADD: dispatch ("inverse", "spinv", "sparse complex matrix") -// PKG_ADD: dispatch ("inverse", "spinv", "sparse bool matrix") +// PKG_ADD: dispatch ("inv", "spinv", "sparse matrix"); +// PKG_ADD: dispatch ("inv", "spinv", "sparse complex matrix"); +// PKG_ADD: dispatch ("inv", "spinv", "sparse bool matrix"); +// PKG_ADD: dispatch ("inverse", "spinv", "sparse matrix"); +// PKG_ADD: dispatch ("inverse", "spinv", "sparse complex matrix"); +// PKG_ADD: dispatch ("inverse", "spinv", "sparse bool matrix"); DEFUN_DLD (spinv, args, nargout, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {[@var{x}, @var{rcond}] = } spinv (@var{a}, @var{Q})\n\ diff -r 667ad2becb63 -r e107161b8ca3 src/Makefile.in --- a/src/Makefile.in Thu Nov 10 21:40:49 2005 +0000 +++ b/src/Makefile.in Fri Nov 11 17:45:51 2005 +0000 @@ -23,8 +23,9 @@ %.df : %.cc @echo making $@ from $< - @$(CXXCPP) $(CPPFLAGS) $(CXXFLAGS_NO_PT_FLAGS) -DMAKE_BUILTINS $< \ - | $(srcdir)/mkdefs > $@-t + @(egrep '^(///*|/\*) *PKG_ADD:' $< ; \ + $(CXXCPP) $(CPPFLAGS) $(CXXFLAGS_NO_PT_FLAGS) -DMAKE_BUILTINS $< \ + | $(srcdir)/mkdefs) > $@-t @mv $@-t $@ # How to make a .oct file from a .o file: @@ -253,12 +254,12 @@ $(COLAMD_LIBS) $(CCOLAMD_LIBS) $(BLAS_LIBS) $(FFTW_LIBS) $(LIBS) $(FLIBS) DISTFILES = Makefile.in ChangeLog mkdefs mkops mkgendoc \ - DOCSTRINGS mkbuiltins mk-errno-list mk-oct-links \ + DOCSTRINGS mkbuiltins mk-errno-list mk-pkg-add \ defaults.h.in oct-conf.h.in oct-errno.cc.in octave.gperf oct-gperf.h \ octave.cc parse.cc lex.cc y.tab.h gplot.cc \ $(INCLUDES) $(DIST_SRC) $(OPT_HANDLERS) $(EXTRAS) -all: octave$(EXEEXT) stamp-oct-links PKG_ADD DOCSTRINGS +all: octave$(EXEEXT) $(OCT_FILES) PKG_ADD DOCSTRINGS .PHONY: all objects: $(OBJECTS) @@ -301,12 +302,6 @@ rm -f $@ $(SH_LD) $(SH_LDFLAGS) $(SONAME_FLAGS) -o $@ $^ $(OCTINTERP_LINK_DEPS) -stamp-oct-links: $(OCT_FILES) - if [ -n "$(OCT_FILES)" ]; then \ - $(srcdir)/mk-oct-links . $(DLD_DEF_FILES); \ - fi - touch stamp-oct-links - stamp-prereq: defaults.h oct-conf.h oct-gperf.h parse.cc lex.cc gplot.cc $(OPT_HANDLERS) touch stamp-prereq @@ -347,10 +342,8 @@ @$(srcdir)/mkbuiltins def-files var-files > $@-t @$(top_srcdir)/move-if-change $@-t $@ -PKG_ADD: $(DLD_SRC) - $(SED) -n -e 's,^//* *PKG_ADD: *,,p' \ - -e 's,^/\* *PKG_ADD: *\(.*\) \*/$$,\1,p' \ - $(addprefix $(srcdir)/, $(DLD_SRC)) > PKG_ADD-t +PKG_ADD: $(DLD_DEF_FILES) + $(srcdir)/mk-pkg-add --prefix $(shell pwd) $(DLD_DEF_FILES) > PKG_ADD-t mv PKG_ADD-t PKG_ADD DOCSTRINGS: gendoc$(BUILD_EXEEXT) @@ -403,15 +396,14 @@ cd $(DESTDIR)$(bindir) ; $(LN_S) octave-$(version)$(EXEEXT) octave$(EXEEXT) .PHONY: install-bin -install-oct: PKG_ADD +install-oct: $(top_srcdir)/mkinstalldirs $(DESTDIR)$(octfiledir) - $(INSTALL_DATA) PKG_ADD $(DESTDIR)$(octfiledir)/PKG_ADD if [ -n "$(OCT_FILES)" ]; then \ xfiles="$(OCT_FILES)"; \ for f in $$xfiles; do \ $(INSTALL_PROGRAM) $$f $(DESTDIR)$(octfiledir)/$$f; \ done; \ - $(srcdir)/mk-oct-links $(DESTDIR)$(octfiledir) $(DLD_DEF_FILES); \ + $(srcdir)/mk-pkg-add --prefix $(octfiledir) $(DLD_DEF_FILES) > $(DESTDIR)$(octfiledir)/PKG_ADD fi .PHONY: install-oct @@ -474,9 +466,6 @@ etags $(SOURCES) $(DLD_SRC) clean: - if [ -n "$(OCT_FILES)" ]; then \ - $(srcdir)/mk-oct-links --delete . $(DLD_DEF_FILES); \ - fi rm -f liboctinterp.$(LIBEXT) rm -f liboctinterp.$(SHLEXT_VER) liboctinterp.$(SHLEXT) rm -f $(OBJECTS) $(MAKEDEPS) $(DOC_FILES) $(OCT_FILES) @@ -491,7 +480,7 @@ distclean: clean rm -f Makefile octave$(EXEEXT) .fname so_locations oct-errno.cc - rm -f stamp-prereq stamp-liboctave-prereq stamp-oct-links + rm -f stamp-prereq stamp-liboctave-prereq rm -f doc-files gendoc.cc DOCSTRINGS .PHONY: distclean diff -r 667ad2becb63 -r e107161b8ca3 src/mk-oct-links --- a/src/mk-oct-links Thu Nov 10 21:40:49 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -#! /bin/sh -e - -# Create additional links to .oct files that define more than one -# function. - -# If the first arg is --print, only print the links we need to make. - -# The first non-option arg is taken as the directory where the .oct -# files are installed. The remaining arguments should be the list of -# .df files corresponding to the source files that were used to -# create the .oct files. - -SED=${SED:-'sed'} - -print_only=false -delete_links=false -if [ $1 = "--print" -o $1 = "-p" ]; then - print_only=true - shift -elif [ $1 = "--delete" ]; then - delete_links=true - shift -fi - -links_dir=$1 -shift - -for f in "$@"; do - if [ -f $f ]; then - base=`basename $f | $SED 's/\.df$//'` - fcns=`grep '^ *XDEFUN_DLD_INTERNAL' $f |\ - $SED -e 's/XDEFUN_DLD_INTERNAL *( *//' -e 's/ *,.*$//' |\ - sort -u` - if [ -n "$fcns" ]; then - for n in $fcns; do - if [ "$n" = "$base" ]; then - true - else - if $print_only; then - echo $base.oct $n.oct - elif $delete_links; then - rm -f $links_dir/$n.oct - else - echo "creating link $n.oct -> $base.oct" - ( cd $links_dir; rm -f $n.oct; ln $base.oct $n.oct ) - fi - fi - done - fi - fi -done - -exit $? diff -r 667ad2becb63 -r e107161b8ca3 src/mk-pkg-add --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/mk-pkg-add Fri Nov 11 17:45:51 2005 +0000 @@ -0,0 +1,53 @@ +#! /bin/sh -e + +# Create additional links to .oct files that define more than one +# function. + +# If the first arg is --print, only print the links we need to make. + +# The first non-option arg is taken as the directory where the .oct +# files are installed. The remaining arguments should be the list of +# .df files corresponding to the source files that were used to +# create the .oct files. + +SED=${SED:-'sed'} + +if [ $1 = "--prefix" ]; then + shift + prefix="$1" + shift +fi + +for f in "$@"; do + if [ -f $f ]; then + + ## Compute and print the autoloads. + + base=`basename $f | $SED 's/\.df$//'` + fcns=`grep '^ *XDEFUN_DLD_INTERNAL' $f |\ + $SED -e 's/XDEFUN_DLD_INTERNAL *( *//' -e 's/ *,.*$//' |\ + sort -u` + if [ -n "$fcns" ]; then + for n in $fcns; do + if [ "$n" = "$base" ]; then + true + else + if [ -n "$prefix" ]; then + echo "autoload (\"$n\", \"$prefix/$base.oct\");" + else + echo "autoload (\"$n\", \"$base.oct\");" + fi + fi + done + fi + + ## Process PKG_ADD directives after autoloads so that all + ## necessary functions can be found before they are used. + + $SED -n -e 's,^//* *PKG_ADD: *,,p' \ + -e 's,^/\* *PKG_ADD: *\(.*\) *\*/ *$,\1,p' $f + + fi +done + +exit $? diff -r 667ad2becb63 -r e107161b8ca3 src/variables.cc --- a/src/variables.cc Thu Nov 10 21:40:49 2005 +0000 +++ b/src/variables.cc Fri Nov 11 17:45:51 2005 +0000 @@ -1030,14 +1030,35 @@ std::string nm = fcn->name (); + // XXX FIXME XXX -- the following code is repeated + // in load_fcn_from_file in parse.y. + string_vector names (2); - names[0] = nm + ".oct"; - names[1] = nm + ".m"; - - std::string file = octave_env::make_absolute - (Vload_path_dir_path.find_first_of (names), - octave_env::getcwd ()); + int nm_len = nm.length (); + + std::string file; + + if (octave_env::absolute_pathname (nm) + && ((nm_len > 4 && nm.substr (nm_len-4) == ".oct") + || (nm_len > 2 && nm.substr (nm_len-4) == ".m"))) + { + file = nm; + } + else + { + file = lookup_autoload (nm); + + if (file.empty ()) + { + names[0] = nm + ".oct"; + names[1] = nm + ".m"; + + file = octave_env::make_absolute + (Vload_path_dir_path.find_first_of (names), + octave_env::getcwd ()); + } + } if (same_file (file, ff)) {