Repository: gnu-octave/octave Branch: default Commit: bb4f6f46da29 Files: 3781 Total size: 37.1 MB Directory structure: gitextract_lou5yk_x/ ├── .dir-locals.el ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── dependabot.yml │ └── workflows/ │ ├── codeql-analysis.yaml │ ├── make-alpine.yaml │ ├── make-cross.yaml │ ├── make-cygwin.yaml │ ├── make-macos.yaml │ ├── make-mingw.yaml │ └── make-ubuntu.yaml ├── .hgignore ├── .hgtags ├── CITATION ├── COPYING ├── COPYRIGHT.md ├── Makefile.am ├── README ├── autogen.sh ├── autopull.sh ├── bootstrap ├── bootstrap-funclib.sh ├── bootstrap.conf ├── build-aux/ │ ├── OctJavaQry.java │ ├── changelog.tmpl │ ├── check-subst-vars.in.sh │ ├── find-defun-files.in.sh │ ├── find-files-with-tests.in.sh │ ├── get-source-mtime.sh │ ├── inplace-edit.pl │ ├── make-gnu-dist-files │ ├── mk-hg-id.sh │ ├── mk-octave-config-h.sh │ ├── mk-opts.pl │ ├── mk-pkg-add.sh │ ├── module.mk │ ├── subst-config-vals.in.sh │ ├── subst-cross-config-vals.in.sh │ ├── subst-script-vals.in.sh │ └── update-bug-status.sh ├── configure.ac ├── doc/ │ ├── doxyhtml/ │ │ ├── Doxyfile.in │ │ ├── README.md │ │ ├── module.mk │ │ └── pages/ │ │ └── macros.dox │ ├── interpreter/ │ │ ├── arith.txi │ │ ├── audio.txi │ │ ├── basics.txi │ │ ├── bugs.txi │ │ ├── config-images.sh │ │ ├── container.txi │ │ ├── contributors.in │ │ ├── cp-idx.txi │ │ ├── data.txi │ │ ├── debug.txi │ │ ├── diagperm.txi │ │ ├── diffeq.txi │ │ ├── doccheck/ │ │ │ ├── README │ │ │ ├── add-to-aspell-dict.pl │ │ │ ├── aspell-octave.en.pws │ │ │ ├── aspell.conf │ │ │ ├── mk-undocumented-list.pl │ │ │ └── spellcheck │ │ ├── errors.txi │ │ ├── eval.txi │ │ ├── expr.txi │ │ ├── external.txi │ │ ├── fn-idx.txi │ │ ├── func.txi │ │ ├── genpropdoc.m │ │ ├── geometry.txi │ │ ├── geometryimages.m │ │ ├── gpl.txi │ │ ├── grammar.txi │ │ ├── graphics-properties.mk │ │ ├── gui.txi │ │ ├── image.txi │ │ ├── images │ │ ├── images.awk │ │ ├── install.txi │ │ ├── interp.txi │ │ ├── interpimages.m │ │ ├── intro.txi │ │ ├── io.txi │ │ ├── linalg.txi │ │ ├── macros.texi │ │ ├── matrix.txi │ │ ├── mk-doc-cache.pl │ │ ├── mk-qthelp.pl │ │ ├── mkcontrib.awk │ │ ├── mkoctfile.1 │ │ ├── module.mk │ │ ├── munge-texi.pl │ │ ├── nonlin.txi │ │ ├── numbers.txi │ │ ├── obsolete.txi │ │ ├── octave-cli.1 │ │ ├── octave-config.1 │ │ ├── octave-logo.eps │ │ ├── octave.1 │ │ ├── octave.css │ │ ├── octave.texi │ │ ├── oop.txi │ │ ├── op-idx.txi │ │ ├── optim.txi │ │ ├── package.txi │ │ ├── plot.txi │ │ ├── plotimages.m │ │ ├── poly.txi │ │ ├── pr-idx.txi │ │ ├── preface.txi │ │ ├── quad.txi │ │ ├── set.txi │ │ ├── signal.txi │ │ ├── sparse.txi │ │ ├── sparseimages.m │ │ ├── splineimages.m │ │ ├── stats.txi │ │ ├── stmt.txi │ │ ├── strings.txi │ │ ├── system.txi │ │ ├── testfun.txi │ │ ├── var.txi │ │ └── vectorize.txi │ ├── liboctave/ │ │ ├── array.texi │ │ ├── bugs.texi │ │ ├── cp-idx.texi │ │ ├── dae.texi │ │ ├── diffeq.texi │ │ ├── error.texi │ │ ├── factor.texi │ │ ├── fn-idx.texi │ │ ├── gpl.texi │ │ ├── install.texi │ │ ├── intro.texi │ │ ├── liboctave.texi │ │ ├── matvec.texi │ │ ├── module.mk │ │ ├── nleqn.texi │ │ ├── nlfunc.texi │ │ ├── ode.texi │ │ ├── optim.texi │ │ ├── preface.texi │ │ ├── quad.texi │ │ └── range.texi │ ├── module.mk │ ├── refcard/ │ │ ├── module.mk │ │ ├── refcard-a4.tex │ │ ├── refcard-legal.tex │ │ ├── refcard-letter.tex │ │ └── refcard.tex │ └── texmf.cnf ├── etc/ │ ├── CHECKLIST.md │ ├── HACKING.md │ ├── NEWS.1 │ ├── NEWS.10.md │ ├── NEWS.11.md │ ├── NEWS.12.md │ ├── NEWS.2 │ ├── NEWS.3 │ ├── NEWS.4 │ ├── NEWS.5.md │ ├── NEWS.6.md │ ├── NEWS.7.md │ ├── NEWS.8.md │ ├── NEWS.9.md │ ├── OLD-ChangeLogs/ │ │ ├── ChangeLog │ │ ├── ChangeLog.1 │ │ ├── doc-ChangeLog │ │ ├── libcruft-ChangeLog │ │ ├── liboctave-ChangeLog │ │ ├── scripts-ChangeLog │ │ ├── src-ChangeLog │ │ └── test-ChangeLog │ ├── RELEASE-CHECKLIST.wiki │ ├── ROADMAP.md │ ├── fonts/ │ │ ├── FreeMono.otf │ │ ├── FreeMonoBold.otf │ │ ├── FreeMonoBoldOblique.otf │ │ ├── FreeMonoOblique.otf │ │ ├── FreeSans.otf │ │ ├── FreeSansBold.otf │ │ ├── FreeSansBoldOblique.otf │ │ └── FreeSansOblique.otf │ ├── gdbinit │ ├── icons/ │ │ ├── org.octave.Octave.desktop.in │ │ └── org.octave.Octave.metainfo.xml │ └── module.mk ├── examples/ │ ├── code/ │ │ ├── @FIRfilter/ │ │ │ ├── FIRfilter.m │ │ │ ├── FIRfilter_aggregation.m │ │ │ ├── display.m │ │ │ ├── subsasgn.m │ │ │ └── subsref.m │ │ ├── @polynomial/ │ │ │ ├── disp.m │ │ │ ├── double.m │ │ │ ├── end.m │ │ │ ├── get.m │ │ │ ├── mtimes.m │ │ │ ├── numel.m │ │ │ ├── plot.m │ │ │ ├── polynomial.m │ │ │ ├── polynomial_superiorto.m │ │ │ ├── polyval.m │ │ │ ├── roots.m │ │ │ ├── set.m │ │ │ ├── subsasgn.m │ │ │ └── subsref.m │ │ ├── COPYING │ │ ├── addtwomatrices.cc │ │ ├── celldemo.cc │ │ ├── embedded.cc │ │ ├── fortrandemo.cc │ │ ├── fortransub.f │ │ ├── funcdemo.cc │ │ ├── globaldemo.cc │ │ ├── helloworld.cc │ │ ├── make_int.cc │ │ ├── mex_celldemo.c │ │ ├── mex_demo.c │ │ ├── mex_fevaldemo.c │ │ ├── mex_fevalf.f │ │ ├── mex_funcdemo.c │ │ ├── mex_hellodemo.c │ │ ├── mex_pow2demo.c │ │ ├── mex_propdemo.c │ │ ├── mex_setdemo.c │ │ ├── mex_sparsedemo.c │ │ ├── mex_stringdemo.c │ │ ├── mex_structdemo.c │ │ ├── module.mk │ │ ├── oct_demo.cc │ │ ├── oregonator.cc │ │ ├── oregonator.m │ │ ├── paramdemo.cc │ │ ├── polynomial2.m │ │ ├── standalone.cc │ │ ├── standalonebuiltin.cc │ │ ├── stringdemo.cc │ │ ├── structdemo.cc │ │ └── unwinddemo.cc │ ├── data/ │ │ ├── README │ │ ├── module.mk │ │ ├── penny.mat │ │ ├── west0479.mat │ │ └── west0479.mtx │ └── module.mk ├── libgui/ │ ├── graphics/ │ │ ├── BaseControl.cc │ │ ├── BaseControl.h │ │ ├── ButtonControl.cc │ │ ├── ButtonControl.h │ │ ├── ButtonGroup.cc │ │ ├── ButtonGroup.h │ │ ├── Canvas.cc │ │ ├── Canvas.h │ │ ├── CheckBoxControl.cc │ │ ├── CheckBoxControl.h │ │ ├── Container.cc │ │ ├── Container.h │ │ ├── ContextMenu.cc │ │ ├── ContextMenu.h │ │ ├── EditControl.cc │ │ ├── EditControl.h │ │ ├── Figure.cc │ │ ├── Figure.h │ │ ├── FigureWindow.cc │ │ ├── FigureWindow.h │ │ ├── GLCanvas.cc │ │ ├── GLCanvas.h │ │ ├── GenericEventNotify.h │ │ ├── KeyMap.cc │ │ ├── KeyMap.h │ │ ├── ListBoxControl.cc │ │ ├── ListBoxControl.h │ │ ├── Logger.cc │ │ ├── Logger.h │ │ ├── Menu.cc │ │ ├── Menu.h │ │ ├── MenuContainer.h │ │ ├── Object.cc │ │ ├── Object.h │ │ ├── ObjectProxy.cc │ │ ├── ObjectProxy.h │ │ ├── Panel.cc │ │ ├── Panel.h │ │ ├── PopupMenuControl.cc │ │ ├── PopupMenuControl.h │ │ ├── PushButtonControl.cc │ │ ├── PushButtonControl.h │ │ ├── PushTool.cc │ │ ├── PushTool.h │ │ ├── QtHandlesUtils.cc │ │ ├── QtHandlesUtils.h │ │ ├── RadioButtonControl.cc │ │ ├── RadioButtonControl.h │ │ ├── SliderControl.cc │ │ ├── SliderControl.h │ │ ├── Table.cc │ │ ├── Table.h │ │ ├── TextControl.cc │ │ ├── TextControl.h │ │ ├── TextEdit.cc │ │ ├── TextEdit.h │ │ ├── ToggleButtonControl.cc │ │ ├── ToggleButtonControl.h │ │ ├── ToggleTool.cc │ │ ├── ToggleTool.h │ │ ├── ToolBar.cc │ │ ├── ToolBar.h │ │ ├── ToolBarButton.cc │ │ ├── ToolBarButton.h │ │ ├── annotation-dialog.cc │ │ ├── annotation-dialog.h │ │ ├── annotation-dialog.ui │ │ ├── gl-select.cc │ │ ├── gl-select.h │ │ ├── module.mk │ │ ├── qopengl-functions.h │ │ ├── qt-graphics-toolkit.cc │ │ └── qt-graphics-toolkit.h │ ├── kb-layouts/ │ │ ├── default.keytab │ │ ├── linux.keytab │ │ └── vt420pc.keytab │ ├── languages/ │ │ ├── ast_ES.ts │ │ ├── be_BY.ts │ │ ├── build_ts/ │ │ │ ├── README.md │ │ │ ├── octave-qsci/ │ │ │ │ ├── Qsci/ │ │ │ │ │ ├── qsciabstractapis.h │ │ │ │ │ ├── qsciapis.h │ │ │ │ │ ├── qscicommand.h │ │ │ │ │ ├── qscicommandset.h │ │ │ │ │ ├── qscidocument.h │ │ │ │ │ ├── qsciglobal.h │ │ │ │ │ ├── qscilexer.h │ │ │ │ │ ├── qscilexeravs.h │ │ │ │ │ ├── qscilexerbash.h │ │ │ │ │ ├── qscilexerbatch.h │ │ │ │ │ ├── qscilexercmake.h │ │ │ │ │ ├── qscilexercoffeescript.h │ │ │ │ │ ├── qscilexercpp.h │ │ │ │ │ ├── qscilexercsharp.h │ │ │ │ │ ├── qscilexercss.h │ │ │ │ │ ├── qscilexercustom.h │ │ │ │ │ ├── qscilexerd.h │ │ │ │ │ ├── qscilexerdiff.h │ │ │ │ │ ├── qscilexeredifact.h │ │ │ │ │ ├── qscilexerfortran.h │ │ │ │ │ ├── qscilexerfortran77.h │ │ │ │ │ ├── qscilexerhtml.h │ │ │ │ │ ├── qscilexeridl.h │ │ │ │ │ ├── qscilexerjava.h │ │ │ │ │ ├── qscilexerjavascript.h │ │ │ │ │ ├── qscilexerjson.h │ │ │ │ │ ├── qscilexerlua.h │ │ │ │ │ ├── qscilexermakefile.h │ │ │ │ │ ├── qscilexermarkdown.h │ │ │ │ │ ├── qscilexermatlab.h │ │ │ │ │ ├── qscilexeroctave.h │ │ │ │ │ ├── qscilexerpascal.h │ │ │ │ │ ├── qscilexerperl.h │ │ │ │ │ ├── qscilexerpo.h │ │ │ │ │ ├── qscilexerpostscript.h │ │ │ │ │ ├── qscilexerpov.h │ │ │ │ │ ├── qscilexerproperties.h │ │ │ │ │ ├── qscilexerpython.h │ │ │ │ │ ├── qscilexerruby.h │ │ │ │ │ ├── qscilexerspice.h │ │ │ │ │ ├── qscilexersql.h │ │ │ │ │ ├── qscilexertcl.h │ │ │ │ │ ├── qscilexertex.h │ │ │ │ │ ├── qscilexerverilog.h │ │ │ │ │ ├── qscilexervhdl.h │ │ │ │ │ ├── qscilexerxml.h │ │ │ │ │ ├── qscilexeryaml.h │ │ │ │ │ ├── qscimacro.h │ │ │ │ │ ├── qsciprinter.h │ │ │ │ │ ├── qsciscintilla.h │ │ │ │ │ ├── qsciscintillabase.h │ │ │ │ │ ├── qscistyle.h │ │ │ │ │ └── qscistyledtext.h │ │ │ │ ├── qscilexer.cpp │ │ │ │ ├── qscilexerbash.cpp │ │ │ │ ├── qscilexerbatch.cpp │ │ │ │ ├── qscilexercpp.cpp │ │ │ │ ├── qscilexerdiff.cpp │ │ │ │ ├── qscilexermatlab.cpp │ │ │ │ ├── qscilexeroctave.cpp │ │ │ │ ├── qscilexerperl.cpp │ │ │ │ ├── qsciscintilla.cpp │ │ │ │ └── qsciscintillabase.cpp │ │ │ ├── octave-qt/ │ │ │ │ ├── qabstractpagesetupdialog.cpp │ │ │ │ ├── qabstractprintdialog.cpp │ │ │ │ ├── qcolordialog.cpp │ │ │ │ ├── qcolordialog_symbian.cpp │ │ │ │ ├── qdialog.cpp │ │ │ │ ├── qdialogbuttonbox.cpp │ │ │ │ ├── qdialogsbinarycompat_win.cpp │ │ │ │ ├── qerrormessage.cpp │ │ │ │ ├── qfiledialog.cpp │ │ │ │ ├── qfiledialog_symbian.cpp │ │ │ │ ├── qfiledialog_win.cpp │ │ │ │ ├── qfileinfogatherer.cpp │ │ │ │ ├── qfilesystemmodel.cpp │ │ │ │ ├── qfontdialog.cpp │ │ │ │ ├── qhelpsearchquerywidget.cpp │ │ │ │ ├── qinputdialog.cpp │ │ │ │ ├── qmessagebox.cpp │ │ │ │ ├── qpagesetupdialog.cpp │ │ │ │ ├── qpagesetupdialog_unix.cpp │ │ │ │ ├── qpagesetupdialog_win.cpp │ │ │ │ ├── qplatformtheme.cpp │ │ │ │ ├── qprintdialog_qws.cpp │ │ │ │ ├── qprintdialog_unix.cpp │ │ │ │ └── qprintdialog_win.cpp │ │ │ ├── update_external_sources │ │ │ └── update_ts_files │ │ ├── ca_ES.ts │ │ ├── de_DE.ts │ │ ├── en_US.ts │ │ ├── es_ES.ts │ │ ├── eu_ES.ts │ │ ├── fr_FR.ts │ │ ├── hu_HU.ts │ │ ├── it_IT.ts │ │ ├── ja_JP.ts │ │ ├── lt_LT.ts │ │ ├── nl_NL.ts │ │ ├── pt_BR.ts │ │ ├── pt_PT.ts │ │ ├── ru_RU.ts │ │ ├── sv_SE.ts │ │ ├── tr_TR.ts │ │ ├── translators │ │ ├── uk_UA.ts │ │ └── zh_CN.ts │ ├── liboctgui-build-info.h │ ├── liboctgui-build-info.in.cc │ ├── module.mk │ ├── qterminal/ │ │ ├── libqterminal/ │ │ │ ├── LineFont.src │ │ │ ├── QTerminal.cc │ │ │ ├── QTerminal.h │ │ │ ├── README │ │ │ ├── default.keytab │ │ │ ├── kb-layouts/ │ │ │ │ ├── default.keytab │ │ │ │ ├── linux.keytab │ │ │ │ └── vt420pc.keytab │ │ │ ├── unix/ │ │ │ │ ├── BlockArray.cpp │ │ │ │ ├── BlockArray.h │ │ │ │ ├── Character.h │ │ │ │ ├── CharacterColor.h │ │ │ │ ├── Emulation.cpp │ │ │ │ ├── Emulation.h │ │ │ │ ├── ExtendedDefaultTranslator.h │ │ │ │ ├── ExtendedDefaultTranslatorMac.h │ │ │ │ ├── Filter.cpp │ │ │ │ ├── Filter.h │ │ │ │ ├── History.cpp │ │ │ │ ├── History.h │ │ │ │ ├── KeyboardTranslator.cpp │ │ │ │ ├── KeyboardTranslator.h │ │ │ │ ├── QUnixTerminalImpl.cpp │ │ │ │ ├── QUnixTerminalImpl.h │ │ │ │ ├── Screen.cpp │ │ │ │ ├── Screen.h │ │ │ │ ├── ScreenWindow.cpp │ │ │ │ ├── ScreenWindow.h │ │ │ │ ├── SelfListener.cpp │ │ │ │ ├── SelfListener.h │ │ │ │ ├── TerminalCharacterDecoder.cpp │ │ │ │ ├── TerminalCharacterDecoder.h │ │ │ │ ├── TerminalModel.cpp │ │ │ │ ├── TerminalModel.h │ │ │ │ ├── TerminalView.cpp │ │ │ │ ├── TerminalView.h │ │ │ │ ├── Vt102Emulation.cpp │ │ │ │ ├── Vt102Emulation.h │ │ │ │ ├── konsole_wcwidth.cpp │ │ │ │ ├── konsole_wcwidth.h │ │ │ │ ├── kpty.cpp │ │ │ │ ├── kpty.h │ │ │ │ └── kpty_p.h │ │ │ └── win32/ │ │ │ ├── QTerminalColors.cpp │ │ │ ├── QTerminalColors.h │ │ │ ├── QWinTerminalImpl.cpp │ │ │ └── QWinTerminalImpl.h │ │ ├── module.mk │ │ ├── msvc.pri │ │ └── qterminal/ │ │ ├── README │ │ └── main.cpp │ └── src/ │ ├── color-picker.cc │ ├── color-picker.h │ ├── command-widget.cc │ ├── command-widget.h │ ├── community-news.cc │ ├── community-news.h │ ├── console-lexer.cc │ ├── console-lexer.h │ ├── dialog.cc │ ├── dialog.h │ ├── documentation-bookmarks.cc │ ├── documentation-bookmarks.h │ ├── documentation-dock-widget.cc │ ├── documentation-dock-widget.h │ ├── documentation.cc │ ├── documentation.h │ ├── dw-main-window.cc │ ├── dw-main-window.h │ ├── external-editor-interface.cc │ ├── external-editor-interface.h │ ├── files-dock-widget.cc │ ├── files-dock-widget.h │ ├── find-files-dialog.cc │ ├── find-files-dialog.h │ ├── find-files-model.cc │ ├── find-files-model.h │ ├── find-widget.cc │ ├── find-widget.h │ ├── graphics-init.cc │ ├── graphics-init.h │ ├── gui-preferences-all.h │ ├── gui-preferences-cs.cc │ ├── gui-preferences-cs.h │ ├── gui-preferences-dc.cc │ ├── gui-preferences-dc.h │ ├── gui-preferences-dw.cc │ ├── gui-preferences-dw.h │ ├── gui-preferences-ed.cc │ ├── gui-preferences-ed.h │ ├── gui-preferences-fb.cc │ ├── gui-preferences-fb.h │ ├── gui-preferences-ff.cc │ ├── gui-preferences-ff.h │ ├── gui-preferences-global.cc │ ├── gui-preferences-global.h │ ├── gui-preferences-gp.cc │ ├── gui-preferences-gp.h │ ├── gui-preferences-hw.cc │ ├── gui-preferences-hw.h │ ├── gui-preferences-mw.cc │ ├── gui-preferences-mw.h │ ├── gui-preferences-nr.cc │ ├── gui-preferences-nr.h │ ├── gui-preferences-pd.cc │ ├── gui-preferences-pd.h │ ├── gui-preferences-sc.cc │ ├── gui-preferences-sc.h │ ├── gui-preferences-sd.cc │ ├── gui-preferences-sd.h │ ├── gui-preferences-ve.cc │ ├── gui-preferences-ve.h │ ├── gui-preferences-ws.cc │ ├── gui-preferences-ws.h │ ├── gui-preferences.cc │ ├── gui-preferences.h │ ├── gui-settings.cc │ ├── gui-settings.h │ ├── gui-utils.cc │ ├── gui-utils.h │ ├── history-dock-widget.cc │ ├── history-dock-widget.h │ ├── icons/ │ │ ├── license.md │ │ ├── octave/ │ │ │ └── index.theme │ │ └── tango/ │ │ └── index.theme │ ├── interpreter-qobject.cc │ ├── interpreter-qobject.h │ ├── led-indicator.cc │ ├── led-indicator.h │ ├── m-editor/ │ │ ├── file-editor-interface.h │ │ ├── file-editor-tab.cc │ │ ├── file-editor-tab.h │ │ ├── file-editor.cc │ │ ├── file-editor.h │ │ ├── find-dialog.cc │ │ ├── find-dialog.h │ │ ├── marker.cc │ │ ├── marker.h │ │ ├── octave-qscintilla.cc │ │ ├── octave-qscintilla.h │ │ ├── octave-txt-lexer.cc │ │ └── octave-txt-lexer.h │ ├── main-window.cc │ ├── main-window.h │ ├── module.mk │ ├── news-reader.cc │ ├── news-reader.h │ ├── octave-dock-widget.cc │ ├── octave-dock-widget.h │ ├── octave-qobject.cc │ ├── octave-qobject.h │ ├── octave-qt-features.h │ ├── qt-application.cc │ ├── qt-application.h │ ├── qt-interpreter-events.cc │ ├── qt-interpreter-events.h │ ├── qt-utils.h │ ├── release-notes.cc │ ├── release-notes.h │ ├── resource.qrc │ ├── self-listener.cc │ ├── self-listener.h │ ├── set-path-dialog.cc │ ├── set-path-dialog.h │ ├── set-path-model.cc │ ├── set-path-model.h │ ├── settings-dialog.cc │ ├── settings-dialog.h │ ├── settings-dialog.ui │ ├── shortcuts-tree-widget.cc │ ├── shortcuts-tree-widget.h │ ├── tab-bar.cc │ ├── tab-bar.h │ ├── terminal-dock-widget.cc │ ├── terminal-dock-widget.h │ ├── variable-editor-model.cc │ ├── variable-editor-model.h │ ├── variable-editor.cc │ ├── variable-editor.h │ ├── welcome-wizard.cc │ ├── welcome-wizard.h │ ├── workspace-model.cc │ ├── workspace-model.h │ ├── workspace-view.cc │ └── workspace-view.h ├── libinterp/ │ ├── build-env.h │ ├── build-env.in.cc │ ├── corefcn/ │ │ ├── Cell.cc │ │ ├── Cell.h │ │ ├── __magick_read__.cc │ │ ├── auto-shlib.cc │ │ ├── auto-shlib.h │ │ ├── base-text-renderer.cc │ │ ├── base-text-renderer.h │ │ ├── c-file-ptr-stream.cc │ │ ├── c-file-ptr-stream.h │ │ ├── call-stack.cc │ │ ├── call-stack.h │ │ ├── cdisplay.c │ │ ├── cdisplay.h │ │ ├── cmd-edit.cc │ │ ├── cmd-edit.h │ │ ├── cmd-hist.cc │ │ ├── cmd-hist.h │ │ ├── coct-hdf5-types.c │ │ ├── data.cc │ │ ├── data.h │ │ ├── debug.cc │ │ ├── default-defs.in.h │ │ ├── defaults.cc │ │ ├── defaults.h │ │ ├── defun-dld.h │ │ ├── defun-int.h │ │ ├── defun.cc │ │ ├── defun.h │ │ ├── display.cc │ │ ├── display.h │ │ ├── dynamic-ld.cc │ │ ├── dynamic-ld.h │ │ ├── environment.cc │ │ ├── environment.h │ │ ├── error.cc │ │ ├── error.h │ │ ├── errwarn.cc │ │ ├── errwarn.h │ │ ├── event-manager.cc │ │ ├── event-manager.h │ │ ├── event-queue.cc │ │ ├── event-queue.h │ │ ├── fcn-info.cc │ │ ├── fcn-info.h │ │ ├── file-io.cc │ │ ├── file-io.h │ │ ├── ft-text-renderer.cc │ │ ├── ft-text-renderer.h │ │ ├── genprops.awk │ │ ├── gh-manager.cc │ │ ├── gh-manager.h │ │ ├── gl-render.cc │ │ ├── gl-render.h │ │ ├── gl2ps-print.cc │ │ ├── gl2ps-print.h │ │ ├── graphics-handle.h │ │ ├── graphics-toolkit.cc │ │ ├── graphics-toolkit.h │ │ ├── graphics-utils.cc │ │ ├── graphics-utils.h │ │ ├── graphics.cc │ │ ├── graphics.in.h │ │ ├── gtk-manager.cc │ │ ├── gtk-manager.h │ │ ├── gzfstream.cc │ │ ├── gzfstream.h │ │ ├── help.cc │ │ ├── help.h │ │ ├── hook-fcn.cc │ │ ├── hook-fcn.h │ │ ├── input.cc │ │ ├── input.h │ │ ├── interpreter-private.cc │ │ ├── interpreter-private.h │ │ ├── interpreter.cc │ │ ├── interpreter.h │ │ ├── latex-text-renderer.cc │ │ ├── latex-text-renderer.h │ │ ├── load-path.cc │ │ ├── load-path.h │ │ ├── load-save.cc │ │ ├── load-save.h │ │ ├── ls-ascii-helper.cc │ │ ├── ls-ascii-helper.h │ │ ├── ls-hdf5.cc │ │ ├── ls-hdf5.h │ │ ├── ls-mat-ascii.cc │ │ ├── ls-mat-ascii.h │ │ ├── ls-mat-subsys.cc │ │ ├── ls-mat-subsys.h │ │ ├── ls-mat4.cc │ │ ├── ls-mat4.h │ │ ├── ls-mat5.cc │ │ ├── ls-mat5.h │ │ ├── ls-oct-binary.cc │ │ ├── ls-oct-binary.h │ │ ├── ls-oct-text.cc │ │ ├── ls-oct-text.h │ │ ├── ls-utils.cc │ │ ├── ls-utils.h │ │ ├── mex-private.h │ │ ├── mk-mxtypes-h.in.sh │ │ ├── module.mk │ │ ├── mx-type-traits.h │ │ ├── mxarray.cc │ │ ├── mxarray.h │ │ ├── mxtypes.in.h │ │ ├── numeric/ │ │ │ ├── __betainc__.cc │ │ │ ├── __contourc__.cc │ │ │ ├── __dsearchn__.cc │ │ │ ├── __eigs__.cc │ │ │ ├── __expint__.cc │ │ │ ├── __gammainc__.cc │ │ │ ├── __ichol__.cc │ │ │ ├── __ilu__.cc │ │ │ ├── __isprimelarge__.cc │ │ │ ├── __lin_interpn__.cc │ │ │ ├── __pchip_deriv__.cc │ │ │ ├── __qp__.cc │ │ │ ├── amd.cc │ │ │ ├── balance.cc │ │ │ ├── besselj.cc │ │ │ ├── bitfcns.cc │ │ │ ├── ccolamd.cc │ │ │ ├── chol.cc │ │ │ ├── colamd.cc │ │ │ ├── colloc.cc │ │ │ ├── conv2.cc │ │ │ ├── daspk.cc │ │ │ ├── dasrt.cc │ │ │ ├── dassl.cc │ │ │ ├── det.cc │ │ │ ├── dmperm.cc │ │ │ ├── dot.cc │ │ │ ├── eig.cc │ │ │ ├── ellipj.cc │ │ │ ├── fft.cc │ │ │ ├── fft2.cc │ │ │ ├── fftn.cc │ │ │ ├── filter.cc │ │ │ ├── gcd.cc │ │ │ ├── givens.cc │ │ │ ├── gsvd.cc │ │ │ ├── hash.cc │ │ │ ├── hess.cc │ │ │ ├── hex2num.cc │ │ │ ├── inv.cc │ │ │ ├── kron.cc │ │ │ ├── lsode.cc │ │ │ ├── lu.cc │ │ │ ├── mappers.cc │ │ │ ├── max.cc │ │ │ ├── mgorth.cc │ │ │ ├── module.mk │ │ │ ├── ordqz.cc │ │ │ ├── ordschur.cc │ │ │ ├── perms.cc │ │ │ ├── pinv.cc │ │ │ ├── pow2.cc │ │ │ ├── psi.cc │ │ │ ├── qr.cc │ │ │ ├── quad.cc │ │ │ ├── quadcc.cc │ │ │ ├── qz.cc │ │ │ ├── rand.cc │ │ │ ├── rcond.cc │ │ │ ├── schur.cc │ │ │ ├── sparse.cc │ │ │ ├── spparms.cc │ │ │ ├── sqrtm.cc │ │ │ ├── stream-euler.cc │ │ │ ├── svd.cc │ │ │ ├── sylvester.cc │ │ │ ├── symbfact.cc │ │ │ ├── symrcm.cc │ │ │ ├── trexc.cc │ │ │ └── tsearch.cc │ │ ├── oct-errno.h │ │ ├── oct-fstrm.cc │ │ ├── oct-fstrm.h │ │ ├── oct-handle.h │ │ ├── oct-hdf5-types.cc │ │ ├── oct-hdf5-types.h │ │ ├── oct-hdf5.h │ │ ├── oct-hist.cc │ │ ├── oct-hist.h │ │ ├── oct-iostrm.cc │ │ ├── oct-iostrm.h │ │ ├── oct-map.cc │ │ ├── oct-map.h │ │ ├── oct-opengl.h │ │ ├── oct-prcstrm.cc │ │ ├── oct-prcstrm.h │ │ ├── oct-procbuf.cc │ │ ├── oct-procbuf.h │ │ ├── oct-process.cc │ │ ├── oct-process.h │ │ ├── oct-rl-edit.c │ │ ├── oct-rl-edit.h │ │ ├── oct-rl-hist.c │ │ ├── oct-rl-hist.h │ │ ├── oct-stdstrm.h │ │ ├── oct-stream.cc │ │ ├── oct-stream.h │ │ ├── oct-strstrm.cc │ │ ├── oct-strstrm.h │ │ ├── oct-tex-lexer.in.ll │ │ ├── oct-tex-parser.yy │ │ ├── oct-tex-symbols.in │ │ ├── oct.h │ │ ├── octave-default-image.h │ │ ├── pager.cc │ │ ├── pager.h │ │ ├── panic.cc │ │ ├── panic.h │ │ ├── pr-flt-fmt.cc │ │ ├── pr-flt-fmt.h │ │ ├── pr-output.cc │ │ ├── pr-output.h │ │ ├── procstream.cc │ │ ├── procstream.h │ │ ├── sighandlers.cc │ │ ├── sighandlers.h │ │ ├── sparse-xdiv.cc │ │ ├── sparse-xdiv.h │ │ ├── sparse-xpow.cc │ │ ├── sparse-xpow.h │ │ ├── stack-frame.cc │ │ ├── stack-frame.h │ │ ├── syminfo.cc │ │ ├── syminfo.h │ │ ├── symrec.cc │ │ ├── symrec.h │ │ ├── symscope.cc │ │ ├── symscope.h │ │ ├── symtab.cc │ │ ├── symtab.h │ │ ├── sysdep.cc │ │ ├── sysdep.h │ │ ├── system/ │ │ │ ├── __ftp__.cc │ │ │ ├── dirfns.cc │ │ │ ├── dlmread.cc │ │ │ ├── getgrent.cc │ │ │ ├── getpwent.cc │ │ │ ├── getrusage.cc │ │ │ ├── mk-errno-list.sh │ │ │ ├── module.mk │ │ │ ├── nproc.cc │ │ │ ├── oct-errno.in.cc │ │ │ ├── syscalls.cc │ │ │ ├── time.cc │ │ │ └── urlwrite.cc │ │ ├── text-engine.cc │ │ ├── text-engine.h │ │ ├── text-renderer.cc │ │ ├── text-renderer.h │ │ ├── toplev.cc │ │ ├── url-handle-manager.cc │ │ ├── url-handle-manager.h │ │ ├── util/ │ │ │ ├── bsxfun.cc │ │ │ ├── cellfun.cc │ │ │ ├── find.cc │ │ │ ├── jsondecode.cc │ │ │ ├── jsonencode.cc │ │ │ ├── lookup.cc │ │ │ ├── matrix_type.cc │ │ │ ├── module.mk │ │ │ ├── regexp.cc │ │ │ ├── strfind.cc │ │ │ ├── strfns.cc │ │ │ ├── sub2ind.cc │ │ │ ├── tril.cc │ │ │ └── typecast.cc │ │ ├── utils.cc │ │ ├── utils.h │ │ ├── variables.cc │ │ ├── variables.h │ │ ├── xdiv.cc │ │ ├── xdiv.h │ │ ├── xnorm.cc │ │ ├── xnorm.h │ │ ├── xpow.cc │ │ └── xpow.h │ ├── dldfcn/ │ │ ├── __delaunayn__.cc │ │ ├── __fltk_uigetfile__.cc │ │ ├── __glpk__.cc │ │ ├── __init_fltk__.cc │ │ ├── __init_gnuplot__.cc │ │ ├── __ode15__.cc │ │ ├── __voronoi__.cc │ │ ├── audiodevinfo.cc │ │ ├── audioread.cc │ │ ├── config-module.awk │ │ ├── config-module.sh │ │ ├── convhulln.cc │ │ ├── fftw.cc │ │ ├── gzip.cc │ │ ├── module-files │ │ └── oct-qhull.h │ ├── liboctinterp-build-info.h │ ├── liboctinterp-build-info.in.cc │ ├── mk-build-env-features.sh │ ├── mk-builtins.pl │ ├── mk-doc.pl │ ├── module.mk │ ├── octave-value/ │ │ ├── cdef-class.cc │ │ ├── cdef-class.h │ │ ├── cdef-fwd.h │ │ ├── cdef-manager.cc │ │ ├── cdef-manager.h │ │ ├── cdef-method.cc │ │ ├── cdef-method.h │ │ ├── cdef-object.cc │ │ ├── cdef-object.h │ │ ├── cdef-package.cc │ │ ├── cdef-package.h │ │ ├── cdef-property.cc │ │ ├── cdef-property.h │ │ ├── cdef-utils.cc │ │ ├── cdef-utils.h │ │ ├── module.mk │ │ ├── ov-base-diag-inst.cc │ │ ├── ov-base-diag.cc │ │ ├── ov-base-diag.h │ │ ├── ov-base-int-inst.cc │ │ ├── ov-base-int.cc │ │ ├── ov-base-int.h │ │ ├── ov-base-mat-inst.cc │ │ ├── ov-base-mat.cc │ │ ├── ov-base-mat.h │ │ ├── ov-base-scalar-inst.cc │ │ ├── ov-base-scalar.cc │ │ ├── ov-base-scalar.h │ │ ├── ov-base-sparse-inst.cc │ │ ├── ov-base-sparse.cc │ │ ├── ov-base-sparse.h │ │ ├── ov-base.cc │ │ ├── ov-base.h │ │ ├── ov-bool-mat.cc │ │ ├── ov-bool-mat.h │ │ ├── ov-bool-sparse.cc │ │ ├── ov-bool-sparse.h │ │ ├── ov-bool.cc │ │ ├── ov-bool.h │ │ ├── ov-builtin.cc │ │ ├── ov-builtin.h │ │ ├── ov-cell.cc │ │ ├── ov-cell.h │ │ ├── ov-ch-mat.cc │ │ ├── ov-ch-mat.h │ │ ├── ov-class.cc │ │ ├── ov-class.h │ │ ├── ov-classdef.cc │ │ ├── ov-classdef.h │ │ ├── ov-colon.cc │ │ ├── ov-colon.h │ │ ├── ov-complex.cc │ │ ├── ov-complex.h │ │ ├── ov-cs-list.cc │ │ ├── ov-cs-list.h │ │ ├── ov-cx-diag.cc │ │ ├── ov-cx-diag.h │ │ ├── ov-cx-mat.cc │ │ ├── ov-cx-mat.h │ │ ├── ov-cx-sparse.cc │ │ ├── ov-cx-sparse.h │ │ ├── ov-dld-fcn.cc │ │ ├── ov-dld-fcn.h │ │ ├── ov-fcn-handle.cc │ │ ├── ov-fcn-handle.h │ │ ├── ov-fcn.cc │ │ ├── ov-fcn.h │ │ ├── ov-float.cc │ │ ├── ov-float.h │ │ ├── ov-flt-complex.cc │ │ ├── ov-flt-complex.h │ │ ├── ov-flt-cx-diag.cc │ │ ├── ov-flt-cx-diag.h │ │ ├── ov-flt-cx-mat.cc │ │ ├── ov-flt-cx-mat.h │ │ ├── ov-flt-re-diag.cc │ │ ├── ov-flt-re-diag.h │ │ ├── ov-flt-re-mat.cc │ │ ├── ov-flt-re-mat.h │ │ ├── ov-inline.h │ │ ├── ov-int-traits.h │ │ ├── ov-int16.cc │ │ ├── ov-int16.h │ │ ├── ov-int32.cc │ │ ├── ov-int32.h │ │ ├── ov-int64.cc │ │ ├── ov-int64.h │ │ ├── ov-int8.cc │ │ ├── ov-int8.h │ │ ├── ov-intx.h │ │ ├── ov-java.cc │ │ ├── ov-java.h │ │ ├── ov-lazy-idx.cc │ │ ├── ov-lazy-idx.h │ │ ├── ov-legacy-range.cc │ │ ├── ov-legacy-range.h │ │ ├── ov-magic-int.cc │ │ ├── ov-magic-int.h │ │ ├── ov-mex-fcn.cc │ │ ├── ov-mex-fcn.h │ │ ├── ov-null-mat.cc │ │ ├── ov-null-mat.h │ │ ├── ov-oncleanup.cc │ │ ├── ov-oncleanup.h │ │ ├── ov-perm.cc │ │ ├── ov-perm.h │ │ ├── ov-range-traits.h │ │ ├── ov-range.cc │ │ ├── ov-range.h │ │ ├── ov-re-diag.cc │ │ ├── ov-re-diag.h │ │ ├── ov-re-mat.cc │ │ ├── ov-re-mat.h │ │ ├── ov-re-sparse.cc │ │ ├── ov-re-sparse.h │ │ ├── ov-scalar.cc │ │ ├── ov-scalar.h │ │ ├── ov-str-mat.cc │ │ ├── ov-str-mat.h │ │ ├── ov-struct.cc │ │ ├── ov-struct.h │ │ ├── ov-typeinfo.cc │ │ ├── ov-typeinfo.h │ │ ├── ov-uint16.cc │ │ ├── ov-uint16.h │ │ ├── ov-uint32.cc │ │ ├── ov-uint32.h │ │ ├── ov-uint64.cc │ │ ├── ov-uint64.h │ │ ├── ov-uint8.cc │ │ ├── ov-uint8.h │ │ ├── ov-usr-fcn.cc │ │ ├── ov-usr-fcn.h │ │ ├── ov.cc │ │ ├── ov.h │ │ ├── ovl.cc │ │ └── ovl.h │ ├── octave.cc │ ├── octave.h │ ├── octinterp.in.pc │ ├── op-kw-docs │ ├── operators/ │ │ ├── mk-ops.sh │ │ ├── module.mk │ │ ├── op-b-b.cc │ │ ├── op-b-bm.cc │ │ ├── op-b-sbm.cc │ │ ├── op-bm-b.cc │ │ ├── op-bm-bm.cc │ │ ├── op-bm-sbm.cc │ │ ├── op-cdm-cdm.cc │ │ ├── op-cdm-cm.cc │ │ ├── op-cdm-cs.cc │ │ ├── op-cdm-dm.cc │ │ ├── op-cdm-m.cc │ │ ├── op-cdm-s.cc │ │ ├── op-cell.cc │ │ ├── op-chm.cc │ │ ├── op-class.cc │ │ ├── op-cm-cdm.cc │ │ ├── op-cm-cm.cc │ │ ├── op-cm-cs.cc │ │ ├── op-cm-dm.cc │ │ ├── op-cm-m.cc │ │ ├── op-cm-pm.cc │ │ ├── op-cm-s.cc │ │ ├── op-cm-scm.cc │ │ ├── op-cm-sm.cc │ │ ├── op-cs-cm.cc │ │ ├── op-cs-cs.cc │ │ ├── op-cs-m.cc │ │ ├── op-cs-s.cc │ │ ├── op-cs-scm.cc │ │ ├── op-cs-sm.cc │ │ ├── op-dm-cdm.cc │ │ ├── op-dm-cm.cc │ │ ├── op-dm-cs.cc │ │ ├── op-dm-dm.cc │ │ ├── op-dm-m.cc │ │ ├── op-dm-s.cc │ │ ├── op-dm-scm.cc │ │ ├── op-dm-sm.cc │ │ ├── op-dm-template.cc │ │ ├── op-dms-template.cc │ │ ├── op-fcdm-fcdm.cc │ │ ├── op-fcdm-fcm.cc │ │ ├── op-fcdm-fcs.cc │ │ ├── op-fcdm-fdm.cc │ │ ├── op-fcdm-fm.cc │ │ ├── op-fcdm-fs.cc │ │ ├── op-fcm-fcdm.cc │ │ ├── op-fcm-fcm.cc │ │ ├── op-fcm-fcs.cc │ │ ├── op-fcm-fdm.cc │ │ ├── op-fcm-fm.cc │ │ ├── op-fcm-fs.cc │ │ ├── op-fcm-pm.cc │ │ ├── op-fcn.cc │ │ ├── op-fcs-fcm.cc │ │ ├── op-fcs-fcs.cc │ │ ├── op-fcs-fm.cc │ │ ├── op-fcs-fs.cc │ │ ├── op-fdm-fcdm.cc │ │ ├── op-fdm-fcm.cc │ │ ├── op-fdm-fcs.cc │ │ ├── op-fdm-fdm.cc │ │ ├── op-fdm-fm.cc │ │ ├── op-fdm-fs.cc │ │ ├── op-fm-fcdm.cc │ │ ├── op-fm-fcm.cc │ │ ├── op-fm-fcs.cc │ │ ├── op-fm-fdm.cc │ │ ├── op-fm-fm.cc │ │ ├── op-fm-fs.cc │ │ ├── op-fm-pm.cc │ │ ├── op-fs-fcm.cc │ │ ├── op-fs-fcs.cc │ │ ├── op-fs-fm.cc │ │ ├── op-fs-fs.cc │ │ ├── op-i16-i16.cc │ │ ├── op-i32-i32.cc │ │ ├── op-i64-i64.cc │ │ ├── op-i8-i8.cc │ │ ├── op-int-concat.cc │ │ ├── op-int.h │ │ ├── op-m-cdm.cc │ │ ├── op-m-cm.cc │ │ ├── op-m-cs.cc │ │ ├── op-m-dm.cc │ │ ├── op-m-m.cc │ │ ├── op-m-pm.cc │ │ ├── op-m-s.cc │ │ ├── op-m-scm.cc │ │ ├── op-m-sm.cc │ │ ├── op-mi.cc │ │ ├── op-pm-cm.cc │ │ ├── op-pm-fcm.cc │ │ ├── op-pm-fm.cc │ │ ├── op-pm-m.cc │ │ ├── op-pm-pm.cc │ │ ├── op-pm-scm.cc │ │ ├── op-pm-sm.cc │ │ ├── op-pm-template.cc │ │ ├── op-range.cc │ │ ├── op-s-cm.cc │ │ ├── op-s-cs.cc │ │ ├── op-s-m.cc │ │ ├── op-s-s.cc │ │ ├── op-s-scm.cc │ │ ├── op-s-sm.cc │ │ ├── op-sbm-b.cc │ │ ├── op-sbm-bm.cc │ │ ├── op-sbm-sbm.cc │ │ ├── op-scm-cm.cc │ │ ├── op-scm-cs.cc │ │ ├── op-scm-m.cc │ │ ├── op-scm-s.cc │ │ ├── op-scm-scm.cc │ │ ├── op-scm-sm.cc │ │ ├── op-sm-cm.cc │ │ ├── op-sm-cs.cc │ │ ├── op-sm-m.cc │ │ ├── op-sm-s.cc │ │ ├── op-sm-scm.cc │ │ ├── op-sm-sm.cc │ │ ├── op-str-m.cc │ │ ├── op-str-s.cc │ │ ├── op-str-str.cc │ │ ├── op-struct.cc │ │ ├── op-ui16-ui16.cc │ │ ├── op-ui32-ui32.cc │ │ ├── op-ui64-ui64.cc │ │ ├── op-ui8-ui8.cc │ │ └── ops.h │ ├── options.h │ ├── parse-tree/ │ │ ├── anon-fcn-validator.cc │ │ ├── anon-fcn-validator.h │ │ ├── bp-table.cc │ │ ├── bp-table.h │ │ ├── comment-list.cc │ │ ├── comment-list.h │ │ ├── filepos.h │ │ ├── lex.h │ │ ├── lex.ll │ │ ├── module.mk │ │ ├── oct-lvalue.cc │ │ ├── oct-lvalue.h │ │ ├── oct-parse.yy │ │ ├── octave.gperf │ │ ├── parse.h │ │ ├── profiler.cc │ │ ├── profiler.h │ │ ├── pt-all.h │ │ ├── pt-anon-scopes.cc │ │ ├── pt-anon-scopes.h │ │ ├── pt-arg-list.cc │ │ ├── pt-arg-list.h │ │ ├── pt-args-block.cc │ │ ├── pt-args-block.h │ │ ├── pt-array-list.cc │ │ ├── pt-array-list.h │ │ ├── pt-assign.cc │ │ ├── pt-assign.h │ │ ├── pt-binop.cc │ │ ├── pt-binop.h │ │ ├── pt-bp.cc │ │ ├── pt-bp.h │ │ ├── pt-cbinop.cc │ │ ├── pt-cbinop.h │ │ ├── pt-cell.cc │ │ ├── pt-cell.h │ │ ├── pt-check.cc │ │ ├── pt-check.h │ │ ├── pt-classdef.cc │ │ ├── pt-classdef.h │ │ ├── pt-cmd.h │ │ ├── pt-colon.cc │ │ ├── pt-colon.h │ │ ├── pt-const.cc │ │ ├── pt-const.h │ │ ├── pt-decl.cc │ │ ├── pt-decl.h │ │ ├── pt-delimiter-list.h │ │ ├── pt-eval.cc │ │ ├── pt-eval.h │ │ ├── pt-except.cc │ │ ├── pt-except.h │ │ ├── pt-exp.cc │ │ ├── pt-exp.h │ │ ├── pt-fcn-handle.cc │ │ ├── pt-fcn-handle.h │ │ ├── pt-id.cc │ │ ├── pt-id.h │ │ ├── pt-idx.cc │ │ ├── pt-idx.h │ │ ├── pt-jump.h │ │ ├── pt-loop.cc │ │ ├── pt-loop.h │ │ ├── pt-mat.cc │ │ ├── pt-mat.h │ │ ├── pt-misc.cc │ │ ├── pt-misc.h │ │ ├── pt-pr-code.cc │ │ ├── pt-pr-code.h │ │ ├── pt-select.cc │ │ ├── pt-select.h │ │ ├── pt-spmd.cc │ │ ├── pt-spmd.h │ │ ├── pt-stmt.cc │ │ ├── pt-stmt.h │ │ ├── pt-tm-const.cc │ │ ├── pt-tm-const.h │ │ ├── pt-unop.cc │ │ ├── pt-unop.h │ │ ├── pt-walk.cc │ │ ├── pt-walk.h │ │ ├── pt.cc │ │ ├── pt.h │ │ ├── separator-list.h │ │ └── token.h │ ├── template-inst/ │ │ ├── Array-tc.cc │ │ ├── Array.cc │ │ ├── Array.h │ │ └── module.mk │ └── usage.h ├── libmex/ │ ├── liboctmex-build-info.h │ ├── liboctmex-build-info.in.cc │ ├── mex.cc │ ├── mex.h │ ├── mexproto.h │ ├── module.mk │ └── octmex.in.pc ├── liboctave/ │ ├── array/ │ │ ├── Array-C.cc │ │ ├── Array-b.cc │ │ ├── Array-base.cc │ │ ├── Array-base.h │ │ ├── Array-ch.cc │ │ ├── Array-d.cc │ │ ├── Array-f.cc │ │ ├── Array-fC.cc │ │ ├── Array-fwd.h │ │ ├── Array-i.cc │ │ ├── Array-idx-vec.cc │ │ ├── Array-oct.cc │ │ ├── Array-oct.h │ │ ├── Array-s.cc │ │ ├── Array-str.cc │ │ ├── Array-util.cc │ │ ├── Array-util.h │ │ ├── Array-voidp.cc │ │ ├── CColVector.cc │ │ ├── CColVector.h │ │ ├── CDiagMatrix.cc │ │ ├── CDiagMatrix.h │ │ ├── CMatrix.cc │ │ ├── CMatrix.h │ │ ├── CNDArray.cc │ │ ├── CNDArray.h │ │ ├── CRowVector.cc │ │ ├── CRowVector.h │ │ ├── CSparse.cc │ │ ├── CSparse.h │ │ ├── DiagArray2.cc │ │ ├── DiagArray2.h │ │ ├── MArray-C.cc │ │ ├── MArray-d.cc │ │ ├── MArray-f.cc │ │ ├── MArray-fC.cc │ │ ├── MArray-fwd.h │ │ ├── MArray-i.cc │ │ ├── MArray-s.cc │ │ ├── MArray.cc │ │ ├── MArray.h │ │ ├── MDiagArray2.cc │ │ ├── MDiagArray2.h │ │ ├── MSparse-C.cc │ │ ├── MSparse-d.cc │ │ ├── MSparse.cc │ │ ├── MSparse.h │ │ ├── Matrix.h │ │ ├── MatrixType.cc │ │ ├── MatrixType.h │ │ ├── PermMatrix.cc │ │ ├── PermMatrix.h │ │ ├── Range.cc │ │ ├── Range.h │ │ ├── Sparse-C.cc │ │ ├── Sparse-b.cc │ │ ├── Sparse-d.cc │ │ ├── Sparse-fwd.h │ │ ├── Sparse.cc │ │ ├── Sparse.h │ │ ├── boolMatrix.cc │ │ ├── boolMatrix.h │ │ ├── boolNDArray.cc │ │ ├── boolNDArray.h │ │ ├── boolSparse.cc │ │ ├── boolSparse.h │ │ ├── chMatrix.cc │ │ ├── chMatrix.h │ │ ├── chNDArray.cc │ │ ├── chNDArray.h │ │ ├── dColVector.cc │ │ ├── dColVector.h │ │ ├── dDiagMatrix.cc │ │ ├── dDiagMatrix.h │ │ ├── dMatrix.cc │ │ ├── dMatrix.h │ │ ├── dNDArray.cc │ │ ├── dNDArray.h │ │ ├── dRowVector.cc │ │ ├── dRowVector.h │ │ ├── dSparse.cc │ │ ├── dSparse.h │ │ ├── dim-vector.cc │ │ ├── dim-vector.h │ │ ├── fCColVector.cc │ │ ├── fCColVector.h │ │ ├── fCDiagMatrix.cc │ │ ├── fCDiagMatrix.h │ │ ├── fCMatrix.cc │ │ ├── fCMatrix.h │ │ ├── fCNDArray.cc │ │ ├── fCNDArray.h │ │ ├── fCRowVector.cc │ │ ├── fCRowVector.h │ │ ├── fColVector.cc │ │ ├── fColVector.h │ │ ├── fDiagMatrix.cc │ │ ├── fDiagMatrix.h │ │ ├── fMatrix.cc │ │ ├── fMatrix.h │ │ ├── fNDArray.cc │ │ ├── fNDArray.h │ │ ├── fRowVector.cc │ │ ├── fRowVector.h │ │ ├── idx-vector.cc │ │ ├── idx-vector.h │ │ ├── int16NDArray.cc │ │ ├── int16NDArray.h │ │ ├── int32NDArray.cc │ │ ├── int32NDArray.h │ │ ├── int64NDArray.cc │ │ ├── int64NDArray.h │ │ ├── int8NDArray.cc │ │ ├── int8NDArray.h │ │ ├── intNDArray-fwd.h │ │ ├── intNDArray.cc │ │ ├── intNDArray.h │ │ ├── module.mk │ │ ├── mx-fwd.h │ │ ├── range-fwd.h │ │ ├── uint16NDArray.cc │ │ ├── uint16NDArray.h │ │ ├── uint32NDArray.cc │ │ ├── uint32NDArray.h │ │ ├── uint64NDArray.cc │ │ ├── uint64NDArray.h │ │ ├── uint8NDArray.cc │ │ └── uint8NDArray.h │ ├── external/ │ │ ├── Faddeeva/ │ │ │ ├── Faddeeva.cc │ │ │ ├── Faddeeva.hh │ │ │ └── module.mk │ │ ├── amos/ │ │ │ ├── README │ │ │ ├── cacai.f │ │ │ ├── cacon.f │ │ │ ├── cairy.f │ │ │ ├── casyi.f │ │ │ ├── cbesh.f │ │ │ ├── cbesi.f │ │ │ ├── cbesj.f │ │ │ ├── cbesk.f │ │ │ ├── cbesy.f │ │ │ ├── cbinu.f │ │ │ ├── cbiry.f │ │ │ ├── cbknu.f │ │ │ ├── cbuni.f │ │ │ ├── cbunk.f │ │ │ ├── ckscl.f │ │ │ ├── cmlri.f │ │ │ ├── crati.f │ │ │ ├── cs1s2.f │ │ │ ├── cseri.f │ │ │ ├── cshch.f │ │ │ ├── cuchk.f │ │ │ ├── cunhj.f │ │ │ ├── cuni1.f │ │ │ ├── cuni2.f │ │ │ ├── cunik.f │ │ │ ├── cunk1.f │ │ │ ├── cunk2.f │ │ │ ├── cuoik.f │ │ │ ├── cwrsk.f │ │ │ ├── dgamln.f │ │ │ ├── gamln.f │ │ │ ├── module.mk │ │ │ ├── xzabs.f │ │ │ ├── xzexp.f │ │ │ ├── xzlog.f │ │ │ ├── xzsqrt.f │ │ │ ├── zacai.f │ │ │ ├── zacon.f │ │ │ ├── zairy.f │ │ │ ├── zasyi.f │ │ │ ├── zbesh.f │ │ │ ├── zbesi.f │ │ │ ├── zbesj.f │ │ │ ├── zbesk.f │ │ │ ├── zbesy.f │ │ │ ├── zbinu.f │ │ │ ├── zbiry.f │ │ │ ├── zbknu.f │ │ │ ├── zbuni.f │ │ │ ├── zbunk.f │ │ │ ├── zdiv.f │ │ │ ├── zkscl.f │ │ │ ├── zmlri.f │ │ │ ├── zmlt.f │ │ │ ├── zrati.f │ │ │ ├── zs1s2.f │ │ │ ├── zseri.f │ │ │ ├── zshch.f │ │ │ ├── zuchk.f │ │ │ ├── zunhj.f │ │ │ ├── zuni1.f │ │ │ ├── zuni2.f │ │ │ ├── zunik.f │ │ │ ├── zunk1.f │ │ │ ├── zunk2.f │ │ │ ├── zuoik.f │ │ │ └── zwrsk.f │ │ ├── blas-xtra/ │ │ │ ├── cdotc3.f │ │ │ ├── cmatm3.f │ │ │ ├── ddot3.f │ │ │ ├── dmatm3.f │ │ │ ├── module.mk │ │ │ ├── sdot3.f │ │ │ ├── smatm3.f │ │ │ ├── xcdotc.f │ │ │ ├── xcdotu.f │ │ │ ├── xddot.f │ │ │ ├── xdnrm2.f │ │ │ ├── xdznrm2.f │ │ │ ├── xerbla.cc │ │ │ ├── xscnrm2.f │ │ │ ├── xsdot.f │ │ │ ├── xsnrm2.f │ │ │ ├── xzdotc.f │ │ │ ├── xzdotu.f │ │ │ ├── zdotc3.f │ │ │ └── zmatm3.f │ │ ├── daspk/ │ │ │ ├── datv.f │ │ │ ├── dcnst0.f │ │ │ ├── dcnstr.f │ │ │ ├── ddasic.f │ │ │ ├── ddasid.f │ │ │ ├── ddasik.f │ │ │ ├── ddaspk.f │ │ │ ├── ddstp.f │ │ │ ├── ddwnrm.f │ │ │ ├── dfnrmd.f │ │ │ ├── dfnrmk.f │ │ │ ├── dhels.f │ │ │ ├── dheqr.f │ │ │ ├── dinvwt.f │ │ │ ├── dlinsd.f │ │ │ ├── dlinsk.f │ │ │ ├── dmatd.f │ │ │ ├── dnedd.f │ │ │ ├── dnedk.f │ │ │ ├── dnsd.f │ │ │ ├── dnsid.f │ │ │ ├── dnsik.f │ │ │ ├── dnsk.f │ │ │ ├── dorth.f │ │ │ ├── dslvd.f │ │ │ ├── dslvk.f │ │ │ ├── dspigm.f │ │ │ ├── dyypnw.f │ │ │ └── module.mk │ │ ├── dasrt/ │ │ │ ├── ddasrt.f │ │ │ ├── drchek.f │ │ │ ├── droots.f │ │ │ └── module.mk │ │ ├── dassl/ │ │ │ ├── ddaini.f │ │ │ ├── ddajac.f │ │ │ ├── ddanrm.f │ │ │ ├── ddaslv.f │ │ │ ├── ddassl.f │ │ │ ├── ddastp.f │ │ │ ├── ddatrp.f │ │ │ ├── ddawts.f │ │ │ └── module.mk │ │ ├── lapack-xtra/ │ │ │ ├── crsf2csf.f │ │ │ ├── module.mk │ │ │ ├── xclange.f │ │ │ ├── xdlamch.f │ │ │ ├── xdlange.f │ │ │ ├── xilaenv.f │ │ │ ├── xslamch.f │ │ │ ├── xslange.f │ │ │ ├── xzlange.f │ │ │ └── zrsf2csf.f │ │ ├── mk-f77-def.in.sh │ │ ├── module.mk │ │ ├── odepack/ │ │ │ ├── dcfode.f │ │ │ ├── dewset.f │ │ │ ├── dintdy.f │ │ │ ├── dlsode.f │ │ │ ├── dprepj.f │ │ │ ├── dsolsy.f │ │ │ ├── dstode.f │ │ │ ├── dvnorm.f │ │ │ ├── module.mk │ │ │ ├── scfode.f │ │ │ ├── sewset.f │ │ │ ├── sintdy.f │ │ │ ├── slsode.f │ │ │ ├── sprepj.f │ │ │ ├── ssolsy.f │ │ │ ├── sstode.f │ │ │ └── svnorm.f │ │ ├── quadpack/ │ │ │ ├── dqagi.f │ │ │ ├── dqagie.f │ │ │ ├── dqagp.f │ │ │ ├── dqagpe.f │ │ │ ├── dqelg.f │ │ │ ├── dqk15i.f │ │ │ ├── dqk21.f │ │ │ ├── dqpsrt.f │ │ │ ├── module.mk │ │ │ ├── qagi.f │ │ │ ├── qagie.f │ │ │ ├── qagp.f │ │ │ ├── qagpe.f │ │ │ ├── qelg.f │ │ │ ├── qk15i.f │ │ │ ├── qk21.f │ │ │ ├── qpsrt.f │ │ │ └── xerror.f │ │ ├── ranlib/ │ │ │ ├── Basegen.doc │ │ │ ├── HOWTOGET │ │ │ ├── README │ │ │ ├── advnst.f │ │ │ ├── genbet.f │ │ │ ├── genchi.f │ │ │ ├── genexp.f │ │ │ ├── genf.f │ │ │ ├── gengam.f │ │ │ ├── genmn.f │ │ │ ├── genmul.f │ │ │ ├── gennch.f │ │ │ ├── gennf.f │ │ │ ├── gennor.f │ │ │ ├── genprm.f │ │ │ ├── genunf.f │ │ │ ├── getcgn.f │ │ │ ├── getsd.f │ │ │ ├── ignbin.f │ │ │ ├── ignlgi.f │ │ │ ├── ignnbn.f │ │ │ ├── ignpoi.f │ │ │ ├── ignuin.f │ │ │ ├── initgn.f │ │ │ ├── inrgcm.f │ │ │ ├── lennob.f │ │ │ ├── mltmod.f │ │ │ ├── module.mk │ │ │ ├── phrtsd.f │ │ │ ├── qrgnin.f │ │ │ ├── randlib.chs │ │ │ ├── randlib.fdoc │ │ │ ├── ranf.f │ │ │ ├── setall.f │ │ │ ├── setant.f │ │ │ ├── setgmn.f │ │ │ ├── setsd.f │ │ │ ├── sexpo.f │ │ │ ├── sgamma.f │ │ │ ├── snorm.f │ │ │ ├── tstbot.for │ │ │ ├── tstgmn.for │ │ │ ├── tstmid.for │ │ │ └── wrap.f │ │ ├── slatec-err/ │ │ │ ├── fdump.f │ │ │ ├── ixsav.f │ │ │ ├── j4save.f │ │ │ ├── module.mk │ │ │ ├── xerclr.f │ │ │ ├── xercnt.f │ │ │ ├── xerhlt.f │ │ │ ├── xermsg.f │ │ │ ├── xerprn.f │ │ │ ├── xerrwd.f │ │ │ ├── xerrwv.f │ │ │ ├── xersve.f │ │ │ ├── xgetf.f │ │ │ ├── xgetua.f │ │ │ ├── xsetf.f │ │ │ └── xsetua.f │ │ └── slatec-fn/ │ │ ├── albeta.f │ │ ├── algams.f │ │ ├── alngam.f │ │ ├── alnrel.f │ │ ├── csevl.f │ │ ├── d9gmit.f │ │ ├── d9lgic.f │ │ ├── d9lgit.f │ │ ├── d9lgmc.f │ │ ├── dcsevl.f │ │ ├── dgamlm.f │ │ ├── dgamma.f │ │ ├── dgamr.f │ │ ├── dlbeta.f │ │ ├── dlgams.f │ │ ├── dlngam.f │ │ ├── dlnrel.f │ │ ├── dpchim.f │ │ ├── dpchst.f │ │ ├── dpsifn.f │ │ ├── gamlim.f │ │ ├── gamma.f │ │ ├── gamr.f │ │ ├── initds.f │ │ ├── inits.f │ │ ├── module.mk │ │ ├── pchim.f │ │ ├── pchst.f │ │ ├── psifn.f │ │ ├── r9gmit.f │ │ ├── r9lgic.f │ │ ├── r9lgit.f │ │ └── r9lgmc.f │ ├── liboctave-build-info.h │ ├── liboctave-build-info.in.cc │ ├── mk-version-h.in.sh │ ├── module.mk │ ├── numeric/ │ │ ├── CollocWt.cc │ │ ├── CollocWt.h │ │ ├── DAE.h │ │ ├── DAEFunc.h │ │ ├── DAERT.h │ │ ├── DAERTFunc.h │ │ ├── DASPK-opts.in │ │ ├── DASPK.cc │ │ ├── DASPK.h │ │ ├── DASRT-opts.in │ │ ├── DASRT.cc │ │ ├── DASRT.h │ │ ├── DASSL-opts.in │ │ ├── DASSL.cc │ │ ├── DASSL.h │ │ ├── DET.h │ │ ├── EIG.cc │ │ ├── EIG.h │ │ ├── LSODE-opts.in │ │ ├── LSODE.cc │ │ ├── LSODE.h │ │ ├── ODE.h │ │ ├── ODEFunc.h │ │ ├── ODES.cc │ │ ├── ODES.h │ │ ├── ODESFunc.h │ │ ├── Quad-opts.in │ │ ├── Quad.cc │ │ ├── Quad.h │ │ ├── aepbalance.cc │ │ ├── aepbalance.h │ │ ├── amos-proto.h │ │ ├── arpack-proto.h │ │ ├── base-dae.h │ │ ├── base-de.h │ │ ├── blas-proto.h │ │ ├── bsxfun-decl.h │ │ ├── bsxfun-defs.cc │ │ ├── bsxfun.h │ │ ├── chol.cc │ │ ├── chol.h │ │ ├── eigs-base.cc │ │ ├── eigs-base.h │ │ ├── fEIG.cc │ │ ├── fEIG.h │ │ ├── gepbalance.cc │ │ ├── gepbalance.h │ │ ├── gsvd.cc │ │ ├── gsvd.h │ │ ├── hess.cc │ │ ├── hess.h │ │ ├── lapack-proto.h │ │ ├── lo-amos-proto.h │ │ ├── lo-arpack-proto.h │ │ ├── lo-blas-proto.h │ │ ├── lo-lapack-proto.h │ │ ├── lo-mappers.h │ │ ├── lo-qrupdate-proto.h │ │ ├── lo-ranlib-proto.h │ │ ├── lo-slatec-proto.h │ │ ├── lo-specfun.h │ │ ├── lu.cc │ │ ├── lu.h │ │ ├── mappers.cc │ │ ├── mappers.h │ │ ├── module.mk │ │ ├── oct-convn.cc │ │ ├── oct-convn.h │ │ ├── oct-fftw.cc │ │ ├── oct-fftw.h │ │ ├── oct-norm.cc │ │ ├── oct-norm.h │ │ ├── oct-rand.cc │ │ ├── oct-rand.h │ │ ├── oct-specfun.cc │ │ ├── oct-specfun.h │ │ ├── oct-spparms.cc │ │ ├── oct-spparms.h │ │ ├── qr.cc │ │ ├── qr.h │ │ ├── qrp.cc │ │ ├── qrp.h │ │ ├── qrupdate-proto.h │ │ ├── randgamma.cc │ │ ├── randgamma.h │ │ ├── randmtzig.cc │ │ ├── randmtzig.h │ │ ├── randpoisson.cc │ │ ├── randpoisson.h │ │ ├── ranlib-proto.h │ │ ├── schur.cc │ │ ├── schur.h │ │ ├── slatec-proto.h │ │ ├── sparse-chol.cc │ │ ├── sparse-chol.h │ │ ├── sparse-dmsolve.cc │ │ ├── sparse-dmsolve.h │ │ ├── sparse-lu.cc │ │ ├── sparse-lu.h │ │ ├── sparse-qr.cc │ │ ├── sparse-qr.h │ │ ├── svd.cc │ │ └── svd.h │ ├── octave.in.pc │ ├── operators/ │ │ ├── Sparse-diag-op-defs.h │ │ ├── Sparse-op-decls.h │ │ ├── Sparse-op-defs.h │ │ ├── Sparse-perm-op-defs.h │ │ ├── config-ops.sh │ │ ├── mk-ops.awk │ │ ├── module.mk │ │ ├── mx-base.h │ │ ├── mx-defs.h │ │ ├── mx-ext.h │ │ ├── mx-inlines.cc │ │ ├── mx-op-decl.h │ │ ├── mx-op-defs.h │ │ ├── mx-ops │ │ ├── smx-ops │ │ └── vx-ops │ ├── system/ │ │ ├── child-list.cc │ │ ├── child-list.h │ │ ├── cmach-info.h │ │ ├── dir-ops.cc │ │ ├── dir-ops.h │ │ ├── file-ops.cc │ │ ├── file-ops.h │ │ ├── file-stat.cc │ │ ├── file-stat.h │ │ ├── lo-sysdep.h │ │ ├── lo-sysinfo.h │ │ ├── mach-info.cc │ │ ├── mach-info.h │ │ ├── module.mk │ │ ├── oct-env.cc │ │ ├── oct-env.h │ │ ├── oct-group.cc │ │ ├── oct-group.h │ │ ├── oct-password.cc │ │ ├── oct-password.h │ │ ├── oct-syscalls.cc │ │ ├── oct-syscalls.h │ │ ├── oct-sysdep.cc │ │ ├── oct-sysdep.h │ │ ├── oct-sysinfo.cc │ │ ├── oct-sysinfo.h │ │ ├── oct-time.cc │ │ ├── oct-time.h │ │ ├── oct-uname.cc │ │ └── oct-uname.h │ ├── util/ │ │ ├── action-container.cc │ │ ├── action-container.h │ │ ├── base-list.h │ │ ├── blaswrap.c │ │ ├── byte-swap.h │ │ ├── caseless-str.h │ │ ├── d1mach-tst.for │ │ ├── d1mach.f │ │ ├── data-conv.cc │ │ ├── data-conv.h │ │ ├── f77-dummy-main.cc │ │ ├── f77-fcn.cc │ │ ├── f77-fcn.h │ │ ├── file-info.cc │ │ ├── file-info.h │ │ ├── glob-match.cc │ │ ├── glob-match.h │ │ ├── i1mach.f │ │ ├── kpse.cc │ │ ├── kpse.h │ │ ├── lo-array-errwarn.cc │ │ ├── lo-array-errwarn.h │ │ ├── lo-error.h │ │ ├── lo-hash.h │ │ ├── lo-ieee.cc │ │ ├── lo-ieee.h │ │ ├── lo-regexp.h │ │ ├── lo-traits.h │ │ ├── lo-utils.cc │ │ ├── lo-utils.h │ │ ├── module.mk │ │ ├── oct-base64.cc │ │ ├── oct-base64.h │ │ ├── oct-binmap.h │ │ ├── oct-cmplx.cc │ │ ├── oct-cmplx.h │ │ ├── oct-error.cc │ │ ├── oct-error.h │ │ ├── oct-glob.cc │ │ ├── oct-glob.h │ │ ├── oct-hash.cc │ │ ├── oct-hash.h │ │ ├── oct-inttypes-fwd.h │ │ ├── oct-inttypes.cc │ │ ├── oct-inttypes.h │ │ ├── oct-locbuf.h │ │ ├── oct-mutex.cc │ │ ├── oct-mutex.h │ │ ├── oct-refcount.h │ │ ├── oct-regexp.cc │ │ ├── oct-regexp.h │ │ ├── oct-shlib.cc │ │ ├── oct-shlib.h │ │ ├── oct-sort.cc │ │ ├── oct-sort.h │ │ ├── oct-sparse.cc │ │ ├── oct-sparse.h │ │ ├── oct-string.cc │ │ ├── oct-string.h │ │ ├── oct-traits.h │ │ ├── octave-preserve-stream-state.h │ │ ├── pathsearch.cc │ │ ├── pathsearch.h │ │ ├── quit.cc │ │ ├── quit.h │ │ ├── r1mach.f │ │ ├── singleton-cleanup.cc │ │ ├── singleton-cleanup.h │ │ ├── sparse-util.cc │ │ ├── sparse-util.h │ │ ├── str-vec.cc │ │ ├── str-vec.h │ │ ├── unwind-prot.cc │ │ ├── unwind-prot.h │ │ ├── url-transfer.cc │ │ └── url-transfer.h │ ├── version.cc │ ├── version.in.h │ └── wrappers/ │ ├── _Exit-wrapper.c │ ├── _Exit-wrapper.h │ ├── areadlink-wrapper.c │ ├── areadlink-wrapper.h │ ├── async-system-wrapper.c │ ├── async-system-wrapper.h │ ├── base64-wrappers.c │ ├── base64-wrappers.h │ ├── canonicalize-file-name-wrapper.c │ ├── canonicalize-file-name-wrapper.h │ ├── cxx-signal-helpers.cc │ ├── dirent-wrappers.c │ ├── dirent-wrappers.h │ ├── fcntl-wrappers.c │ ├── fcntl-wrappers.h │ ├── filepos-wrappers.c │ ├── filepos-wrappers.h │ ├── fpucw-wrappers.c │ ├── fpucw-wrappers.h │ ├── gen-tempname-wrapper.c │ ├── gen-tempname-wrapper.h │ ├── getopt-wrapper.c │ ├── getopt-wrapper.h │ ├── glob-wrappers.c │ ├── glob-wrappers.h │ ├── hash-wrappers.c │ ├── hash-wrappers.h │ ├── iconv-wrappers.c │ ├── iconv-wrappers.h │ ├── intprops-wrappers.c │ ├── intprops-wrappers.h │ ├── localcharset-wrapper.c │ ├── localcharset-wrapper.h │ ├── math-wrappers.c │ ├── math-wrappers.h │ ├── mkostemp-wrapper.c │ ├── mkostemp-wrapper.h │ ├── mkostemps-wrapper.c │ ├── mkostemps-wrapper.h │ ├── module.mk │ ├── nanosleep-wrapper.c │ ├── nanosleep-wrapper.h │ ├── nproc-wrapper.c │ ├── nproc-wrapper.h │ ├── octave-popen2.c │ ├── octave-popen2.h │ ├── pwd-wrappers.c │ ├── pwd-wrappers.h │ ├── select-wrappers.c │ ├── select-wrappers.h │ ├── set-program-name-wrapper.c │ ├── set-program-name-wrapper.h │ ├── setenv-wrapper.c │ ├── setenv-wrapper.h │ ├── signal-wrappers.c │ ├── signal-wrappers.h │ ├── stat-wrappers.c │ ├── stat-wrappers.h │ ├── strcase-wrappers.c │ ├── strcase-wrappers.h │ ├── strdup-wrapper.c │ ├── strdup-wrapper.h │ ├── strftime-wrapper.c │ ├── strftime-wrapper.h │ ├── strmode-wrapper.c │ ├── strmode-wrapper.h │ ├── strptime-wrapper.c │ ├── strptime-wrapper.h │ ├── time-wrappers.c │ ├── time-wrappers.h │ ├── uname-wrapper.c │ ├── uname-wrapper.h │ ├── unicase-wrappers.c │ ├── unicase-wrappers.h │ ├── uniconv-wrappers.c │ ├── uniconv-wrappers.h │ ├── unictype-wrappers.c │ ├── unictype-wrappers.h │ ├── unistd-wrappers.c │ ├── unistd-wrappers.h │ ├── unistr-wrappers.c │ ├── unistr-wrappers.h │ ├── unsetenv-wrapper.c │ ├── unsetenv-wrapper.h │ ├── vasprintf-wrapper.c │ ├── vasprintf-wrapper.h │ ├── wait-for-input.c │ ├── wait-for-input.h │ ├── wait-wrappers.c │ └── wait-wrappers.h ├── m4/ │ ├── acinclude.m4 │ ├── ax_blas.m4 │ ├── ax_compare_version.m4 │ ├── ax_cxx_compile_stdcxx.m4 │ ├── ax_lapack.m4 │ ├── ax_openmp.m4 │ ├── ax_pthread.m4 │ ├── module.mk │ ├── octave_blas.m4 │ └── pkg.m4 ├── oct-conf-post-private.in.h ├── oct-conf-post-public.in.h ├── octave.doap ├── run-octave.in ├── scripts/ │ ├── +containers/ │ │ ├── Map.m │ │ └── module.mk │ ├── +matlab/ │ │ ├── +lang/ │ │ │ ├── MemoizedFunction.m │ │ │ ├── makeUniqueStrings.m │ │ │ ├── makeValidName.m │ │ │ └── module.mk │ │ └── +net/ │ │ ├── base64decode.m │ │ ├── base64encode.m │ │ └── module.mk │ ├── .oct-config │ ├── @ftp/ │ │ ├── ascii.m │ │ ├── binary.m │ │ ├── cd.m │ │ ├── close.m │ │ ├── delete.m │ │ ├── dir.m │ │ ├── disp.m │ │ ├── ftp.m │ │ ├── loadobj.m │ │ ├── mget.m │ │ ├── mkdir.m │ │ ├── module.mk │ │ ├── mput.m │ │ ├── rename.m │ │ ├── rmdir.m │ │ └── saveobj.m │ ├── audio/ │ │ ├── .oct-config │ │ ├── @audioplayer/ │ │ │ ├── __get_properties__.m │ │ │ ├── audioplayer.m │ │ │ ├── disp.m │ │ │ ├── get.m │ │ │ ├── isplaying.m │ │ │ ├── pause.m │ │ │ ├── play.m │ │ │ ├── playblocking.m │ │ │ ├── resume.m │ │ │ ├── set.m │ │ │ ├── stop.m │ │ │ ├── subsasgn.m │ │ │ └── subsref.m │ │ ├── @audiorecorder/ │ │ │ ├── __get_properties__.m │ │ │ ├── audiorecorder.m │ │ │ ├── disp.m │ │ │ ├── get.m │ │ │ ├── getaudiodata.m │ │ │ ├── getplayer.m │ │ │ ├── isrecording.m │ │ │ ├── pause.m │ │ │ ├── play.m │ │ │ ├── record.m │ │ │ ├── recordblocking.m │ │ │ ├── resume.m │ │ │ ├── set.m │ │ │ ├── stop.m │ │ │ ├── subsasgn.m │ │ │ └── subsref.m │ │ ├── lin2mu.m │ │ ├── module.mk │ │ ├── mu2lin.m │ │ ├── record.m │ │ ├── sound.m │ │ └── soundsc.m │ ├── deprecated/ │ │ ├── .oct-config │ │ └── module.mk │ ├── elfun/ │ │ ├── .oct-config │ │ ├── acosd.m │ │ ├── acot.m │ │ ├── acotd.m │ │ ├── acoth.m │ │ ├── acsc.m │ │ ├── acscd.m │ │ ├── acsch.m │ │ ├── asec.m │ │ ├── asecd.m │ │ ├── asech.m │ │ ├── asind.m │ │ ├── atan2d.m │ │ ├── atand.m │ │ ├── cosd.m │ │ ├── cospi.m │ │ ├── cot.m │ │ ├── cotd.m │ │ ├── coth.m │ │ ├── csc.m │ │ ├── cscd.m │ │ ├── csch.m │ │ ├── module.mk │ │ ├── sec.m │ │ ├── secd.m │ │ ├── sech.m │ │ ├── sind.m │ │ ├── sinpi.m │ │ └── tand.m │ ├── general/ │ │ ├── .oct-config │ │ ├── accumarray.m │ │ ├── accumdim.m │ │ ├── bincoeff.m │ │ ├── bitcmp.m │ │ ├── bitget.m │ │ ├── bitset.m │ │ ├── blkdiag.m │ │ ├── cart2pol.m │ │ ├── cart2sph.m │ │ ├── cell2mat.m │ │ ├── celldisp.m │ │ ├── circshift.m │ │ ├── common_size.m │ │ ├── cplxpair.m │ │ ├── cumtrapz.m │ │ ├── curl.m │ │ ├── dblquad.m │ │ ├── deal.m │ │ ├── deg2rad.m │ │ ├── del2.m │ │ ├── divergence.m │ │ ├── flip.m │ │ ├── fliplr.m │ │ ├── flipud.m │ │ ├── gradient.m │ │ ├── idivide.m │ │ ├── int2str.m │ │ ├── integral.m │ │ ├── integral2.m │ │ ├── integral3.m │ │ ├── interp1.m │ │ ├── interp2.m │ │ ├── interp3.m │ │ ├── interpft.m │ │ ├── interpn.m │ │ ├── isequal.m │ │ ├── isequaln.m │ │ ├── isuniform.m │ │ ├── logspace.m │ │ ├── module.mk │ │ ├── nextpow2.m │ │ ├── num2str.m │ │ ├── pagectranspose.m │ │ ├── pagetranspose.m │ │ ├── pol2cart.m │ │ ├── polyarea.m │ │ ├── postpad.m │ │ ├── prepad.m │ │ ├── private/ │ │ │ └── __splinen__.m │ │ ├── quad2d.m │ │ ├── quadgk.m │ │ ├── quadl.m │ │ ├── quadv.m │ │ ├── rad2deg.m │ │ ├── rat.m │ │ ├── repelem.m │ │ ├── repmat.m │ │ ├── rescale.m │ │ ├── rng.m │ │ ├── rot90.m │ │ ├── rotdim.m │ │ ├── shiftdim.m │ │ ├── sortrows.m │ │ ├── sph2cart.m │ │ ├── structfun.m │ │ ├── subsindex.m │ │ ├── trapz.m │ │ ├── triplequad.m │ │ └── xor.m │ ├── geometry/ │ │ ├── .oct-config │ │ ├── convhull.m │ │ ├── delaunay.m │ │ ├── delaunayn.m │ │ ├── dsearchn.m │ │ ├── griddata.m │ │ ├── griddata3.m │ │ ├── griddatan.m │ │ ├── inpolygon.m │ │ ├── module.mk │ │ ├── rectint.m │ │ ├── rotx.m │ │ ├── roty.m │ │ ├── rotz.m │ │ ├── tsearchn.m │ │ ├── voronoi.m │ │ └── voronoin.m │ ├── gui/ │ │ ├── .oct-config │ │ ├── dialog.m │ │ ├── errordlg.m │ │ ├── getappdata.m │ │ ├── getpixelposition.m │ │ ├── guidata.m │ │ ├── guihandles.m │ │ ├── helpdlg.m │ │ ├── inputdlg.m │ │ ├── isappdata.m │ │ ├── listdlg.m │ │ ├── listfonts.m │ │ ├── module.mk │ │ ├── movegui.m │ │ ├── msgbox.m │ │ ├── private/ │ │ │ ├── __file_filter__.m │ │ │ ├── __fltk_file_filter__.m │ │ │ ├── __get_funcname__.m │ │ │ ├── __is_function__.m │ │ │ ├── __ok_cancel_dlg__.m │ │ │ ├── __uigetdir_fltk__.m │ │ │ ├── __uigetfile_fltk__.m │ │ │ ├── __uiobject_split_args__.m │ │ │ └── __uiputfile_fltk__.m │ │ ├── questdlg.m │ │ ├── rmappdata.m │ │ ├── setappdata.m │ │ ├── uibuttongroup.m │ │ ├── uicontextmenu.m │ │ ├── uicontrol.m │ │ ├── uifigure.m │ │ ├── uigetdir.m │ │ ├── uigetfile.m │ │ ├── uimenu.m │ │ ├── uipanel.m │ │ ├── uipushtool.m │ │ ├── uiputfile.m │ │ ├── uiresume.m │ │ ├── uisetfont.m │ │ ├── uitable.m │ │ ├── uitoggletool.m │ │ ├── uitoolbar.m │ │ ├── uiwait.m │ │ ├── waitbar.m │ │ ├── waitforbuttonpress.m │ │ └── warndlg.m │ ├── help/ │ │ ├── .oct-config │ │ ├── __gripe_missing_component__.m │ │ ├── __makeinfo__.m │ │ ├── __unimplemented__.m │ │ ├── ans.m │ │ ├── bessel.m │ │ ├── debug.m │ │ ├── doc.m │ │ ├── doc_cache_create.m │ │ ├── error_ids.m │ │ ├── get_first_help_sentence.m │ │ ├── help.m │ │ ├── lookfor.m │ │ ├── module.mk │ │ ├── print_usage.m │ │ ├── private/ │ │ │ ├── __additional_help_message__.m │ │ │ └── __strip_html_tags__.m │ │ ├── slash.m │ │ ├── type.m │ │ ├── warning_ids.m │ │ └── which.m │ ├── image/ │ │ ├── .oct-config │ │ ├── autumn.m │ │ ├── bone.m │ │ ├── brighten.m │ │ ├── cmpermute.m │ │ ├── cmunique.m │ │ ├── colorcube.m │ │ ├── colormap.m │ │ ├── contrast.m │ │ ├── cool.m │ │ ├── copper.m │ │ ├── cubehelix.m │ │ ├── default.img │ │ ├── dither.m │ │ ├── flag.m │ │ ├── frame2im.m │ │ ├── getframe.m │ │ ├── gray.m │ │ ├── gray2ind.m │ │ ├── hot.m │ │ ├── hsv.m │ │ ├── hsv2rgb.m │ │ ├── im2double.m │ │ ├── im2frame.m │ │ ├── image.m │ │ ├── imagesc.m │ │ ├── imfinfo.m │ │ ├── imformats.m │ │ ├── imread.m │ │ ├── imshow.m │ │ ├── imwrite.m │ │ ├── ind2gray.m │ │ ├── ind2rgb.m │ │ ├── iscolormap.m │ │ ├── jet.m │ │ ├── lines.m │ │ ├── module.mk │ │ ├── movie.m │ │ ├── ocean.m │ │ ├── pink.m │ │ ├── prism.m │ │ ├── private/ │ │ │ ├── __imfinfo__.m │ │ │ ├── __imread__.m │ │ │ ├── __imwrite__.m │ │ │ ├── colorspace_conversion_input_check.m │ │ │ ├── colorspace_conversion_revert.m │ │ │ ├── imageIO.m │ │ │ ├── imwrite_filename.m │ │ │ └── ind2x.m │ │ ├── rainbow.m │ │ ├── rgb2gray.m │ │ ├── rgb2hsv.m │ │ ├── rgb2ind.m │ │ ├── rgbplot.m │ │ ├── spinmap.m │ │ ├── spring.m │ │ ├── summer.m │ │ ├── turbo.m │ │ ├── viridis.m │ │ ├── white.m │ │ └── winter.m │ ├── io/ │ │ ├── .oct-config │ │ ├── beep.m │ │ ├── csvread.m │ │ ├── csvwrite.m │ │ ├── dlmwrite.m │ │ ├── fileread.m │ │ ├── importdata.m │ │ ├── is_valid_file_id.m │ │ └── module.mk │ ├── java/ │ │ ├── .oct-config │ │ ├── javaArray.m │ │ ├── java_get.m │ │ ├── java_set.m │ │ ├── javaaddpath.m │ │ ├── javachk.m │ │ ├── javaclasspath.m │ │ ├── javamem.m │ │ ├── javarmpath.m │ │ ├── module.mk │ │ ├── org/ │ │ │ └── octave/ │ │ │ ├── ClassHelper.java │ │ │ ├── Matrix.java │ │ │ ├── OctClassLoader.java │ │ │ ├── Octave.java │ │ │ └── OctaveReference.java │ │ └── usejava.m │ ├── legacy/ │ │ ├── .oct-config │ │ ├── @inline/ │ │ │ ├── argnames.m │ │ │ ├── cat.m │ │ │ ├── char.m │ │ │ ├── disp.m │ │ │ ├── exist.m │ │ │ ├── feval.m │ │ │ ├── formula.m │ │ │ ├── horzcat.m │ │ │ ├── inline.m │ │ │ ├── module.mk │ │ │ ├── nargin.m │ │ │ ├── nargout.m │ │ │ ├── subsref.m │ │ │ ├── symvar.m │ │ │ ├── vectorize.m │ │ │ └── vertcat.m │ │ ├── __vectorize__.m │ │ ├── caxis.m │ │ ├── findstr.m │ │ ├── flipdim.m │ │ ├── genvarname.m │ │ ├── isdir.m │ │ ├── isequalwithequalnans.m │ │ ├── isstr.m │ │ ├── maxNumCompThreads.m │ │ ├── module.mk │ │ ├── setstr.m │ │ ├── strmatch.m │ │ ├── strread.m │ │ ├── textread.m │ │ └── vectorize.m │ ├── linear-algebra/ │ │ ├── .oct-config │ │ ├── bandwidth.m │ │ ├── commutation_matrix.m │ │ ├── cond.m │ │ ├── condeig.m │ │ ├── condest.m │ │ ├── cross.m │ │ ├── duplication_matrix.m │ │ ├── expm.m │ │ ├── funm.m │ │ ├── gls.m │ │ ├── housh.m │ │ ├── isbanded.m │ │ ├── isdefinite.m │ │ ├── isdiag.m │ │ ├── ishermitian.m │ │ ├── issymmetric.m │ │ ├── istril.m │ │ ├── istriu.m │ │ ├── krylov.m │ │ ├── linsolve.m │ │ ├── logm.m │ │ ├── lscov.m │ │ ├── module.mk │ │ ├── normest.m │ │ ├── normest1.m │ │ ├── null.m │ │ ├── ols.m │ │ ├── ordeig.m │ │ ├── orth.m │ │ ├── planerot.m │ │ ├── qzhess.m │ │ ├── rank.m │ │ ├── rref.m │ │ ├── subspace.m │ │ ├── tensorprod.m │ │ ├── trace.m │ │ ├── vech.m │ │ └── vecnorm.m │ ├── miscellaneous/ │ │ ├── .oct-config │ │ ├── bug_report.m │ │ ├── bunzip2.m │ │ ├── cast.m │ │ ├── citation.m │ │ ├── clearAllMemoizedCaches.m │ │ ├── clearvars.m │ │ ├── compare_versions.m │ │ ├── computer.m │ │ ├── copyfile.m │ │ ├── delete.m │ │ ├── dir.m │ │ ├── dos.m │ │ ├── edit.m │ │ ├── fieldnames.m │ │ ├── fileattrib.m │ │ ├── fileparts.m │ │ ├── fullfile.m │ │ ├── getfield.m │ │ ├── grabcode.m │ │ ├── gunzip.m │ │ ├── info.m │ │ ├── inputParser.m │ │ ├── isdeployed.m │ │ ├── isfile.m │ │ ├── isfolder.m │ │ ├── ismac.m │ │ ├── ismethod.m │ │ ├── ispc.m │ │ ├── isunix.m │ │ ├── jupyter_notebook.m │ │ ├── license.m │ │ ├── list_primes.m │ │ ├── loadobj.m │ │ ├── ls.m │ │ ├── ls_command.m │ │ ├── memoize.m │ │ ├── memory.m │ │ ├── menu.m │ │ ├── methods.m │ │ ├── mex.m │ │ ├── mexext.m │ │ ├── mkdir.m │ │ ├── mkoctfile.m │ │ ├── module.mk │ │ ├── movefile.m │ │ ├── mustBeFinite.m │ │ ├── mustBeGreaterThan.m │ │ ├── mustBeGreaterThanOrEqual.m │ │ ├── mustBeInteger.m │ │ ├── mustBeLessThan.m │ │ ├── mustBeLessThanOrEqual.m │ │ ├── mustBeMember.m │ │ ├── mustBeNegative.m │ │ ├── mustBeNonNan.m │ │ ├── mustBeNonempty.m │ │ ├── mustBeNonnegative.m │ │ ├── mustBeNonpositive.m │ │ ├── mustBeNonsparse.m │ │ ├── mustBeNonzero.m │ │ ├── mustBeNumeric.m │ │ ├── mustBeNumericOrLogical.m │ │ ├── mustBePositive.m │ │ ├── mustBeReal.m │ │ ├── namedargs2cell.m │ │ ├── namelengthmax.m │ │ ├── nargchk.m │ │ ├── narginchk.m │ │ ├── nargoutchk.m │ │ ├── news.m │ │ ├── nthargout.m │ │ ├── open.m │ │ ├── orderfields.m │ │ ├── pack.m │ │ ├── parseparams.m │ │ ├── perl.m │ │ ├── private/ │ │ │ ├── __memoize__.m │ │ │ ├── __publish_html_output__.m │ │ │ ├── __publish_latex_output__.m │ │ │ ├── __w2mpth__.m │ │ │ ├── display_info_file.m │ │ │ └── tar_is_bsd.m │ │ ├── publish.m │ │ ├── python.m │ │ ├── recycle.m │ │ ├── run.m │ │ ├── saveobj.m │ │ ├── setfield.m │ │ ├── substruct.m │ │ ├── swapbytes.m │ │ ├── symvar.m │ │ ├── tar.m │ │ ├── unix.m │ │ ├── unpack.m │ │ ├── untar.m │ │ ├── unzip.m │ │ ├── validateattributes.m │ │ ├── ver.m │ │ ├── verLessThan.m │ │ ├── version.m │ │ ├── what.m │ │ └── zip.m │ ├── mk-doc.pl │ ├── mk-pkg-add.sh │ ├── module.mk │ ├── ode/ │ │ ├── .oct-config │ │ ├── decic.m │ │ ├── module.mk │ │ ├── ode15i.m │ │ ├── ode15s.m │ │ ├── ode23.m │ │ ├── ode23s.m │ │ ├── ode45.m │ │ ├── odeget.m │ │ ├── odeplot.m │ │ ├── odeset.m │ │ └── private/ │ │ ├── AbsRel_norm.m │ │ ├── check_default_input.m │ │ ├── integrate_adaptive.m │ │ ├── kahan.m │ │ ├── ode_event_handler.m │ │ ├── odedefaults.m │ │ ├── odemergeopts.m │ │ ├── runge_kutta_23.m │ │ ├── runge_kutta_23s.m │ │ ├── runge_kutta_45_dorpri.m │ │ ├── runge_kutta_interpolate.m │ │ └── starting_stepsize.m │ ├── optimization/ │ │ ├── .oct-config │ │ ├── __all_opts__.m │ │ ├── fminbnd.m │ │ ├── fminsearch.m │ │ ├── fminunc.m │ │ ├── fsolve.m │ │ ├── fzero.m │ │ ├── glpk.m │ │ ├── humps.m │ │ ├── lsqnonneg.m │ │ ├── module.mk │ │ ├── optimget.m │ │ ├── optimset.m │ │ ├── pqpnonneg.m │ │ ├── private/ │ │ │ └── __fdjac__.m │ │ ├── qp.m │ │ └── sqp.m │ ├── path/ │ │ ├── .oct-config │ │ ├── import.m │ │ ├── matlabroot.m │ │ ├── module.mk │ │ ├── pathdef.m │ │ ├── private/ │ │ │ └── getsavepath.m │ │ └── savepath.m │ ├── pkg/ │ │ ├── .oct-config │ │ ├── module.mk │ │ ├── pkg.m │ │ └── private/ │ │ ├── build.m │ │ ├── configure_make.m │ │ ├── convert_possible_cell_to_struct.m │ │ ├── default_prefix.m │ │ ├── describe.m │ │ ├── dirempty.m │ │ ├── expand_rel_paths.m │ │ ├── get_description.m │ │ ├── get_inverse_dependencies.m │ │ ├── get_pkg_info.m │ │ ├── get_unsatisfied_deps.m │ │ ├── get_validated_pkg_list.m │ │ ├── getarch.m │ │ ├── getarchdir.m │ │ ├── install.m │ │ ├── installed_packages.m │ │ ├── load_packages.m │ │ ├── load_packages_and_dependencies.m │ │ ├── make_rel_paths.m │ │ ├── rebuild.m │ │ ├── save_order.m │ │ ├── search_packages.m │ │ ├── standardize_paths.m │ │ ├── uninstall.m │ │ └── unload_packages.m │ ├── plot/ │ │ ├── appearance/ │ │ │ ├── .oct-config │ │ │ ├── __clabel__.m │ │ │ ├── __getlegenddata__.m │ │ │ ├── __rotate_around_axis__.m │ │ │ ├── annotation.m │ │ │ ├── axis.m │ │ │ ├── box.m │ │ │ ├── camlookat.m │ │ │ ├── camorbit.m │ │ │ ├── campos.m │ │ │ ├── camroll.m │ │ │ ├── camtarget.m │ │ │ ├── camup.m │ │ │ ├── camva.m │ │ │ ├── camzoom.m │ │ │ ├── clabel.m │ │ │ ├── clim.m │ │ │ ├── daspect.m │ │ │ ├── datetick.m │ │ │ ├── diffuse.m │ │ │ ├── grid.m │ │ │ ├── gtext.m │ │ │ ├── hidden.m │ │ │ ├── legend.m │ │ │ ├── lighting.m │ │ │ ├── material.m │ │ │ ├── module.mk │ │ │ ├── orient.m │ │ │ ├── pbaspect.m │ │ │ ├── private/ │ │ │ │ ├── __axis_label__.m │ │ │ │ ├── __axis_limits__.m │ │ │ │ ├── __gnuplot_legend__.m │ │ │ │ └── __tickangle__.m │ │ │ ├── rticklabels.m │ │ │ ├── rticks.m │ │ │ ├── shading.m │ │ │ ├── specular.m │ │ │ ├── text.m │ │ │ ├── thetaticklabels.m │ │ │ ├── thetaticks.m │ │ │ ├── title.m │ │ │ ├── view.m │ │ │ ├── whitebg.m │ │ │ ├── xlabel.m │ │ │ ├── xlim.m │ │ │ ├── xtickangle.m │ │ │ ├── xticklabels.m │ │ │ ├── xticks.m │ │ │ ├── ylabel.m │ │ │ ├── ylim.m │ │ │ ├── ytickangle.m │ │ │ ├── yticklabels.m │ │ │ ├── yticks.m │ │ │ ├── zlabel.m │ │ │ ├── zlim.m │ │ │ ├── ztickangle.m │ │ │ ├── zticklabels.m │ │ │ └── zticks.m │ │ ├── draw/ │ │ │ ├── .oct-config │ │ │ ├── area.m │ │ │ ├── bar.m │ │ │ ├── barh.m │ │ │ ├── camlight.m │ │ │ ├── colorbar.m │ │ │ ├── comet.m │ │ │ ├── comet3.m │ │ │ ├── compass.m │ │ │ ├── contour.m │ │ │ ├── contour3.m │ │ │ ├── contourc.m │ │ │ ├── contourf.m │ │ │ ├── cylinder.m │ │ │ ├── ellipsoid.m │ │ │ ├── errorbar.m │ │ │ ├── ezcontour.m │ │ │ ├── ezcontourf.m │ │ │ ├── ezmesh.m │ │ │ ├── ezmeshc.m │ │ │ ├── ezplot.m │ │ │ ├── ezplot3.m │ │ │ ├── ezpolar.m │ │ │ ├── ezsurf.m │ │ │ ├── ezsurfc.m │ │ │ ├── feather.m │ │ │ ├── fill.m │ │ │ ├── fill3.m │ │ │ ├── fplot.m │ │ │ ├── hist.m │ │ │ ├── isocaps.m │ │ │ ├── isocolors.m │ │ │ ├── isonormals.m │ │ │ ├── isosurface.m │ │ │ ├── light.m │ │ │ ├── lightangle.m │ │ │ ├── line.m │ │ │ ├── loglog.m │ │ │ ├── loglogerr.m │ │ │ ├── mesh.m │ │ │ ├── meshc.m │ │ │ ├── meshz.m │ │ │ ├── module.mk │ │ │ ├── ostreamtube.m │ │ │ ├── pareto.m │ │ │ ├── patch.m │ │ │ ├── pcolor.m │ │ │ ├── peaks.m │ │ │ ├── pie.m │ │ │ ├── pie3.m │ │ │ ├── plot.m │ │ │ ├── plot3.m │ │ │ ├── plotmatrix.m │ │ │ ├── plotyy.m │ │ │ ├── polar.m │ │ │ ├── private/ │ │ │ │ ├── __add_datasource__.m │ │ │ │ ├── __bar__.m │ │ │ │ ├── __calc_isovalue_from_data__.m │ │ │ │ ├── __contour__.m │ │ │ │ ├── __errplot__.m │ │ │ │ ├── __ezplot__.m │ │ │ │ ├── __gnuplot_scatter__.m │ │ │ │ ├── __interp_cube__.m │ │ │ │ ├── __line__.m │ │ │ │ ├── __marching_cube__.m │ │ │ │ ├── __patch__.m │ │ │ │ ├── __pie__.m │ │ │ │ ├── __plt__.m │ │ │ │ ├── __quiver__.m │ │ │ │ ├── __scatter__.m │ │ │ │ ├── __stem__.m │ │ │ │ └── __unite_shared_vertices__.m │ │ │ ├── quiver.m │ │ │ ├── quiver3.m │ │ │ ├── rectangle.m │ │ │ ├── reducepatch.m │ │ │ ├── reducevolume.m │ │ │ ├── ribbon.m │ │ │ ├── rose.m │ │ │ ├── scatter.m │ │ │ ├── scatter3.m │ │ │ ├── semilogx.m │ │ │ ├── semilogxerr.m │ │ │ ├── semilogy.m │ │ │ ├── semilogyerr.m │ │ │ ├── shrinkfaces.m │ │ │ ├── slice.m │ │ │ ├── smooth3.m │ │ │ ├── sombrero.m │ │ │ ├── sphere.m │ │ │ ├── stairs.m │ │ │ ├── stem.m │ │ │ ├── stem3.m │ │ │ ├── stemleaf.m │ │ │ ├── stream2.m │ │ │ ├── stream3.m │ │ │ ├── streamline.m │ │ │ ├── streamribbon.m │ │ │ ├── streamtube.m │ │ │ ├── surf.m │ │ │ ├── surface.m │ │ │ ├── surfc.m │ │ │ ├── surfl.m │ │ │ ├── surfnorm.m │ │ │ ├── tetramesh.m │ │ │ ├── trimesh.m │ │ │ ├── triplot.m │ │ │ ├── trisurf.m │ │ │ ├── waterfall.m │ │ │ ├── xline.m │ │ │ └── yline.m │ │ └── util/ │ │ ├── .oct-config │ │ ├── __actual_axis_position__.m │ │ ├── __check_rendering_capability__.m │ │ ├── __default_plot_options__.m │ │ ├── __gnuplot_drawnow__.m │ │ ├── __next_line_color__.m │ │ ├── __next_line_style__.m │ │ ├── __opengl_info__.m │ │ ├── __plt_get_axis_arg__.m │ │ ├── __pltopt__.m │ │ ├── allchild.m │ │ ├── ancestor.m │ │ ├── axes.m │ │ ├── cla.m │ │ ├── clf.m │ │ ├── close.m │ │ ├── closereq.m │ │ ├── colstyle.m │ │ ├── copyobj.m │ │ ├── figure.m │ │ ├── findall.m │ │ ├── findfigs.m │ │ ├── findobj.m │ │ ├── gca.m │ │ ├── gcbf.m │ │ ├── gcbo.m │ │ ├── gcf.m │ │ ├── gco.m │ │ ├── ginput.m │ │ ├── gnuplot_binary.in.m │ │ ├── graphics_toolkit.m │ │ ├── groot.m │ │ ├── gui_mainfcn.m │ │ ├── hdl2struct.m │ │ ├── hggroup.m │ │ ├── hgload.m │ │ ├── hgsave.m │ │ ├── hgtransform.m │ │ ├── hold.m │ │ ├── isaxes.m │ │ ├── isfigure.m │ │ ├── isgraphics.m │ │ ├── ishandle.m │ │ ├── ishold.m │ │ ├── isprop.m │ │ ├── linkaxes.m │ │ ├── linkprop.m │ │ ├── meshgrid.m │ │ ├── module.mk │ │ ├── ndgrid.m │ │ ├── newplot.m │ │ ├── openfig.m │ │ ├── pan.m │ │ ├── print.m │ │ ├── printd.m │ │ ├── private/ │ │ │ ├── __add_default_menu__.m │ │ │ ├── __ghostscript__.m │ │ │ ├── __gnuplot_draw_axes__.m │ │ │ ├── __gnuplot_draw_figure__.m │ │ │ ├── __gnuplot_get_var__.m │ │ │ ├── __gnuplot_ginput__.m │ │ │ ├── __gnuplot_has_feature__.m │ │ │ ├── __gnuplot_has_terminal__.m │ │ │ ├── __gnuplot_open_stream__.m │ │ │ ├── __gnuplot_print__.m │ │ │ ├── __gnuplot_version__.m │ │ │ ├── __opengl_print__.m │ │ │ ├── __print_parse_opts__.m │ │ │ └── __set_default_mouse_modes__.m │ │ ├── refresh.m │ │ ├── refreshdata.m │ │ ├── rotate.m │ │ ├── rotate3d.m │ │ ├── saveas.m │ │ ├── savefig.m │ │ ├── shg.m │ │ ├── struct2hdl.m │ │ ├── subplot.m │ │ └── zoom.m │ ├── polynomial/ │ │ ├── .oct-config │ │ ├── compan.m │ │ ├── conv.m │ │ ├── deconv.m │ │ ├── mkpp.m │ │ ├── module.mk │ │ ├── mpoles.m │ │ ├── padecoef.m │ │ ├── pchip.m │ │ ├── poly.m │ │ ├── polyaffine.m │ │ ├── polyder.m │ │ ├── polyeig.m │ │ ├── polyfit.m │ │ ├── polygcd.m │ │ ├── polyint.m │ │ ├── polyout.m │ │ ├── polyreduce.m │ │ ├── polyval.m │ │ ├── polyvalm.m │ │ ├── ppder.m │ │ ├── ppint.m │ │ ├── ppjumps.m │ │ ├── ppval.m │ │ ├── private/ │ │ │ └── __splinefit__.m │ │ ├── residue.m │ │ ├── roots.m │ │ ├── spline.m │ │ ├── splinefit.m │ │ └── unmkpp.m │ ├── prefs/ │ │ ├── .oct-config │ │ ├── addpref.m │ │ ├── getpref.m │ │ ├── ispref.m │ │ ├── module.mk │ │ ├── prefdir.m │ │ ├── preferences.m │ │ ├── private/ │ │ │ ├── loadprefs.m │ │ │ ├── prefsfile.m │ │ │ └── saveprefs.m │ │ ├── rmpref.m │ │ └── setpref.m │ ├── profiler/ │ │ ├── .oct-config │ │ ├── html/ │ │ │ ├── flat-entry.html │ │ │ ├── flat.html │ │ │ ├── function.html │ │ │ ├── hierarchical-entry.html │ │ │ ├── hierarchical.html │ │ │ └── style.css │ │ ├── module.mk │ │ ├── profexplore.m │ │ ├── profexport.m │ │ ├── profile.m │ │ └── profshow.m │ ├── set/ │ │ ├── .oct-config │ │ ├── intersect.m │ │ ├── ismember.m │ │ ├── ismembertol.m │ │ ├── module.mk │ │ ├── powerset.m │ │ ├── private/ │ │ │ └── validsetargs.m │ │ ├── setdiff.m │ │ ├── setxor.m │ │ ├── union.m │ │ ├── unique.m │ │ └── uniquetol.m │ ├── signal/ │ │ ├── .oct-config │ │ ├── __parse_movargs__.m │ │ ├── arch_fit.m │ │ ├── arch_rnd.m │ │ ├── arch_test.m │ │ ├── arma_rnd.m │ │ ├── autoreg_matrix.m │ │ ├── bartlett.m │ │ ├── blackman.m │ │ ├── detrend.m │ │ ├── diffpara.m │ │ ├── durbinlevinson.m │ │ ├── fftconv.m │ │ ├── fftfilt.m │ │ ├── fftshift.m │ │ ├── filter2.m │ │ ├── fractdiff.m │ │ ├── freqz.m │ │ ├── freqz_plot.m │ │ ├── hamming.m │ │ ├── hanning.m │ │ ├── hurst.m │ │ ├── ifftshift.m │ │ ├── module.mk │ │ ├── movfun.m │ │ ├── movslice.m │ │ ├── periodogram.m │ │ ├── private/ │ │ │ ├── rectangle_lw.m │ │ │ ├── rectangle_sw.m │ │ │ ├── triangle_lw.m │ │ │ └── triangle_sw.m │ │ ├── sinc.m │ │ ├── sinetone.m │ │ ├── sinewave.m │ │ ├── spectral_adf.m │ │ ├── spectral_xdf.m │ │ ├── spencer.m │ │ ├── stft.m │ │ ├── synthesis.m │ │ ├── unwrap.m │ │ └── yulewalker.m │ ├── sparse/ │ │ ├── .oct-config │ │ ├── bicg.m │ │ ├── bicgstab.m │ │ ├── cgs.m │ │ ├── colperm.m │ │ ├── eigs.m │ │ ├── etreeplot.m │ │ ├── gmres.m │ │ ├── gplot.m │ │ ├── ichol.m │ │ ├── ilu.m │ │ ├── module.mk │ │ ├── nonzeros.m │ │ ├── pcg.m │ │ ├── pcr.m │ │ ├── private/ │ │ │ ├── __alltohandles__.m │ │ │ ├── __default__input__.m │ │ │ └── __sprand__.m │ │ ├── qmr.m │ │ ├── spaugment.m │ │ ├── spconvert.m │ │ ├── spdiags.m │ │ ├── speye.m │ │ ├── spfun.m │ │ ├── spones.m │ │ ├── sprand.m │ │ ├── sprandn.m │ │ ├── sprandsym.m │ │ ├── spstats.m │ │ ├── spy.m │ │ ├── svds.m │ │ ├── tfqmr.m │ │ ├── treelayout.m │ │ └── treeplot.m │ ├── specfun/ │ │ ├── .oct-config │ │ ├── beta.m │ │ ├── betainc.m │ │ ├── betaincinv.m │ │ ├── betaln.m │ │ ├── cosint.m │ │ ├── ellipke.m │ │ ├── expint.m │ │ ├── factor.m │ │ ├── factorial.m │ │ ├── gammainc.m │ │ ├── gammaincinv.m │ │ ├── isprime.m │ │ ├── lcm.m │ │ ├── legendre.m │ │ ├── module.mk │ │ ├── nchoosek.m │ │ ├── nthroot.m │ │ ├── primes.m │ │ ├── reallog.m │ │ ├── realpow.m │ │ ├── realsqrt.m │ │ └── sinint.m │ ├── special-matrix/ │ │ ├── .oct-config │ │ ├── gallery.m │ │ ├── hadamard.m │ │ ├── hankel.m │ │ ├── hilb.m │ │ ├── invhilb.m │ │ ├── magic.m │ │ ├── module.mk │ │ ├── pascal.m │ │ ├── rosser.m │ │ ├── toeplitz.m │ │ ├── vander.m │ │ └── wilkinson.m │ ├── startup/ │ │ ├── inputrc │ │ ├── module.mk │ │ ├── octave_packages │ │ ├── site-rcfile │ │ └── version-rcfile │ ├── statistics/ │ │ ├── .oct-config │ │ ├── bounds.m │ │ ├── center.m │ │ ├── corr.m │ │ ├── corrcoef.m │ │ ├── corrcov.m │ │ ├── cov.m │ │ ├── discrete_cdf.m │ │ ├── discrete_inv.m │ │ ├── discrete_pdf.m │ │ ├── discrete_rnd.m │ │ ├── empirical_cdf.m │ │ ├── empirical_inv.m │ │ ├── empirical_pdf.m │ │ ├── empirical_rnd.m │ │ ├── histc.m │ │ ├── iqr.m │ │ ├── kendall.m │ │ ├── kurtosis.m │ │ ├── mad.m │ │ ├── mape.m │ │ ├── mean.m │ │ ├── meansq.m │ │ ├── median.m │ │ ├── mode.m │ │ ├── module.mk │ │ ├── moment.m │ │ ├── movmad.m │ │ ├── movmax.m │ │ ├── movmean.m │ │ ├── movmedian.m │ │ ├── movmin.m │ │ ├── movprod.m │ │ ├── movstd.m │ │ ├── movsum.m │ │ ├── movvar.m │ │ ├── normalize.m │ │ ├── prctile.m │ │ ├── quantile.m │ │ ├── range.m │ │ ├── ranks.m │ │ ├── rms.m │ │ ├── rmse.m │ │ ├── run_count.m │ │ ├── runlength.m │ │ ├── skewness.m │ │ ├── spearman.m │ │ ├── statistics.m │ │ ├── std.m │ │ ├── var.m │ │ └── zscore.m │ ├── strings/ │ │ ├── .oct-config │ │ ├── base2dec.m │ │ ├── bin2dec.m │ │ ├── blanks.m │ │ ├── cstrcat.m │ │ ├── deblank.m │ │ ├── dec2base.m │ │ ├── dec2bin.m │ │ ├── dec2hex.m │ │ ├── endsWith.m │ │ ├── erase.m │ │ ├── hex2dec.m │ │ ├── index.m │ │ ├── isletter.m │ │ ├── isstring.m │ │ ├── isstrprop.m │ │ ├── mat2str.m │ │ ├── module.mk │ │ ├── native2unicode.m │ │ ├── ostrsplit.m │ │ ├── regexptranslate.m │ │ ├── rindex.m │ │ ├── startsWith.m │ │ ├── str2num.m │ │ ├── strcat.m │ │ ├── strchr.m │ │ ├── strjoin.m │ │ ├── strjust.m │ │ ├── strsplit.m │ │ ├── strtok.m │ │ ├── strtrim.m │ │ ├── strtrunc.m │ │ ├── substr.m │ │ ├── unicode2native.m │ │ ├── untabify.m │ │ └── validatestring.m │ ├── testfun/ │ │ ├── .oct-config │ │ ├── __debug_octave__.m │ │ ├── __have_feature__.m │ │ ├── __printf_assert__.m │ │ ├── __prog_output_assert__.m │ │ ├── __run_test_suite__.m │ │ ├── assert.m │ │ ├── assert_equal.m │ │ ├── demo.m │ │ ├── example.m │ │ ├── fail.m │ │ ├── module.mk │ │ ├── oruntests.m │ │ ├── private/ │ │ │ ├── compare_plot_demos.m │ │ │ ├── dump_demos.m │ │ │ ├── html-plot-demos-template.html │ │ │ └── html_compare_plot_demos.m │ │ ├── rundemos.m │ │ ├── speed.m │ │ └── test.m │ ├── time/ │ │ ├── .oct-config │ │ ├── addtodate.m │ │ ├── asctime.m │ │ ├── calendar.m │ │ ├── clock.m │ │ ├── ctime.m │ │ ├── date.m │ │ ├── datenum.m │ │ ├── datestr.m │ │ ├── datevec.m │ │ ├── eomday.m │ │ ├── etime.m │ │ ├── is_leap_year.m │ │ ├── module.mk │ │ ├── now.m │ │ └── weekday.m │ └── web/ │ ├── .oct-config │ ├── module.mk │ ├── web.m │ ├── weboptions.m │ ├── webread.m │ └── webwrite.m ├── src/ │ ├── display-available.c │ ├── display-available.h │ ├── main-cli.cc │ ├── main-gui.cc │ ├── main.in.cc │ ├── mkoctfile.in.cc │ ├── module.mk │ ├── octave-build-info.h │ ├── octave-build-info.in.cc │ ├── octave-config.in.cc │ ├── octave-qsvghandler.h │ ├── octave-svgconvert.cc │ ├── shared-fcns.h │ └── shared-sysdep.h └── test/ ├── Makefile.am ├── anonymous-function.tst ├── args.tst ├── bc-overloads-expected ├── bug-31371.tst ├── bug-35448/ │ ├── bug-35448.tst │ ├── fA.m │ ├── fB.m │ ├── fC.m │ └── module.mk ├── bug-35881/ │ ├── bug-35881.tst │ ├── bug35881.m │ └── module.mk ├── bug-36025/ │ ├── @testclass/ │ │ ├── one.m │ │ ├── testclass.m │ │ └── two.m │ ├── bug-36025.tst │ └── module.mk ├── bug-38236/ │ ├── bug-38236.tst │ ├── df_vr.m │ ├── module.mk │ └── u_vr.m ├── bug-38691/ │ ├── bug-38691.tst │ ├── dir1/ │ │ └── func1.m │ ├── dir2/ │ │ ├── func1.m │ │ ├── func2.m │ │ └── func3.m │ └── module.mk ├── bug-40117.tst ├── bug-41723/ │ ├── bug-41723.tst │ ├── class_bug41723.m │ └── module.mk ├── bug-44643/ │ ├── bug-44643.tst │ ├── bug44643.m │ └── module.mk ├── bug-44940/ │ ├── bug-44940.tst │ ├── class_bug44940.m │ └── module.mk ├── bug-45351/ │ ├── bug-45351.tst │ ├── bug45351.m │ └── module.mk ├── bug-45969.tst ├── bug-45972.tst ├── bug-46330.tst ├── bug-46660/ │ ├── bug-46660.tst │ ├── class_bug46660.m │ └── module.mk ├── bug-47680/ │ ├── bug-47680.tst │ ├── module.mk │ ├── sub_bug47680.m │ └── super_bug47680.m ├── bug-48693/ │ ├── bug-48693.tst │ ├── bug48693.m │ └── module.mk ├── bug-49379/ │ ├── bug-49379.tst │ ├── class_bug49379.m │ └── module.mk ├── bug-49904.tst ├── bug-50014/ │ ├── bug-50014.tst │ ├── duplicate_nested_function.m │ ├── duplicate_nested_in_subfunction_ok.m │ ├── duplicate_nested_parent_function.m │ ├── duplicate_parent_nested2.m │ ├── duplicate_parent_nested_function.m │ ├── duplicate_primary_nested_function.m │ ├── duplicate_primary_subfunction.m │ ├── duplicate_primary_subfunction_old_syntax.m │ ├── duplicate_subfunction.m │ ├── duplicate_subfunction_old_syntax.m │ ├── duplicate_subfunction_separate_scope_ok.m │ └── module.mk ├── bug-50035/ │ ├── @bug50035/ │ │ ├── bug50035.m │ │ └── display.m │ ├── bug-50035.tst │ └── module.mk ├── bug-50395/ │ ├── bug-50395.tst │ ├── bug50395_a.m │ ├── bug50395_c.m │ └── module.mk ├── bug-50716/ │ ├── bug-50716.tst │ ├── module.mk │ └── myclass.m ├── bug-50831/ │ ├── bug-50831.tst │ └── module.mk ├── bug-51192/ │ ├── bug-51192.tst │ ├── class_bug51192.m │ └── module.mk ├── bug-51532/ │ ├── +package_bug51532/ │ │ └── foo.m │ ├── bug-51532.tst │ └── module.mk ├── bug-51534/ │ ├── bug-51534.tst │ ├── child_bug51534.m │ ├── module.mk │ └── parent_bug51534.m ├── bug-51599/ │ ├── bug-51599.tst │ ├── class_bug51599.m │ └── module.mk ├── bug-52075/ │ ├── bug-52075.tst │ ├── class_bug52075.m │ └── module.mk ├── bug-52722/ │ ├── bug-52722.tst │ ├── define_globals.m │ ├── include_globals.m │ └── module.mk ├── bug-52851/ │ ├── bug-52851.tst │ ├── module.mk │ ├── script1.m │ ├── script2.m │ ├── script3.m │ └── script4.m ├── bug-53027/ │ ├── bug-53027.tst │ ├── globals53027.m │ ├── gtest53027.m │ ├── module.mk │ ├── ntest53027a.m │ ├── ntest53027b.m │ └── ntest53027c.m ├── bug-53468/ │ ├── bug-53468.tst │ ├── module.mk │ ├── ofig403.ofig │ ├── ofig421.ofig │ └── ofig51.ofig ├── bug-53579.tst ├── bug-53599.tst ├── bug-53956/ │ ├── bug-53956.tst │ ├── bug53956_class_2.m │ ├── bug53956_class_3.m │ ├── bug53956_class_4.m │ └── module.mk ├── bug-54490.tst ├── bug-54995/ │ ├── @testclass54995/ │ │ ├── subsref.m │ │ └── testclass54995.m │ ├── bug-54995.tst │ └── module.mk ├── bug-55308.tst ├── bug-55321.tst ├── bug-55322.tst ├── bug-55758/ │ ├── bug-55758.tst │ ├── class_bug_55758.m │ └── module.mk ├── bug-56068/ │ ├── bug-56068.tst │ ├── bug_56068.m │ └── module.mk ├── bug-58572/ │ ├── bug-58572.tst │ ├── bug58572.m │ └── module.mk ├── bug-58593/ │ ├── bug-58593.tst │ ├── module.mk │ ├── myclass1.m │ └── myclass2.m ├── bug-59451/ │ ├── bug-59451.tst │ ├── bug59451.m │ ├── foo/ │ │ ├── @double/ │ │ │ └── bug59451.m │ │ └── @single/ │ │ └── bug59451.m │ └── module.mk ├── bug-59617/ │ ├── @bug59617/ │ │ ├── bug59617.m │ │ └── max.m │ ├── bug-59617.tst │ └── module.mk ├── bug-59661/ │ ├── bug-59661.tst │ ├── bug59661.m │ └── module.mk ├── bug-59704/ │ ├── bug-59704.tst │ ├── bug59704_1.m │ ├── bug59704_1_test.m │ ├── bug59704_2.m │ └── module.mk ├── bug-59937/ │ ├── bug-59937.tst │ ├── eval_global_script.m │ └── module.mk ├── bug-59950.tst ├── bug-60237/ │ ├── bug-60237.tst │ ├── bug_60237.m │ └── module.mk ├── bug-60726/ │ ├── @class2_bug60726/ │ │ ├── class2_bug60726.m │ │ └── subsref.m │ ├── bug60726.tst │ ├── class_bug60726.m │ └── module.mk ├── bug-60882/ │ ├── bug-60882.tst │ ├── bug_60882.m │ └── module.mk ├── bug-61105/ │ ├── bug-61105.tst │ ├── module.mk │ ├── nested_test_1.m │ ├── nested_test_2.m │ └── nested_test_3.m ├── bug-61191/ │ ├── bug-61191.tst │ ├── module.mk │ └── subdir/ │ └── bug_61191.m ├── bug-61201.tst ├── bug-63841/ │ ├── @cls2_b63841/ │ │ ├── cls2_b63841.m │ │ └── subsref.m │ ├── bug-63841.tst │ ├── cls_b63841.m │ └── module.mk ├── bug-64620/ │ ├── bug-64620.tst │ ├── bug_64620_1.m │ ├── bug_64620_2.m │ ├── cdef_counts_self.m │ └── module.mk ├── bug-65037/ │ ├── bug-65037.tst │ ├── bug65037_base.m │ ├── bug65037_derived.m │ └── module.mk ├── bug-65153.tst ├── bug-67096/ │ ├── bug-67096.tst │ ├── class_bug67096.m │ └── module.mk ├── bug-67403/ │ ├── bug-67403.tst │ ├── class_bug67403.m │ └── module.mk ├── bug-67964/ │ ├── bug-67964.tst │ ├── foo1.mat │ ├── foo2.mat │ └── module.mk ├── class-concat/ │ ├── @foo/ │ │ └── foo.m │ ├── class-concat.tst │ └── module.mk ├── classdef/ │ ├── @class_bug62802/ │ │ ├── amethod.m │ │ └── class_bug62802.m │ ├── @class_bug67362/ │ │ ├── class_bug67362.m │ │ └── shared_name.m │ ├── @osc/ │ │ └── osc.m │ ├── bug_60763.m │ ├── cdef_array_break_cycles.m │ ├── class_bug50011_1.m │ ├── class_bug50011_1A.m │ ├── class_bug50011_1B.m │ ├── class_bug50011_2.m │ ├── class_bug50011_2A.m │ ├── class_bug50011_2B.m │ ├── class_bug52614A.m │ ├── class_bug52614B.m │ ├── class_bug55766.m │ ├── class_bug59775A.m │ ├── class_bug59775B.m │ ├── class_bug60723A.m │ ├── class_bug60723B.m │ ├── class_bug60723C.m │ ├── class_bug66930A.m │ ├── class_bug66930B.m │ ├── class_bug67845A.m │ ├── class_bug67845A_handle.m │ ├── class_bug67845B.m │ ├── class_bug67845B_handle.m │ ├── class_bug67845C.m │ ├── class_bug67845C_handle.m │ ├── class_pair.m │ ├── class_pair_elem.m │ ├── class_pair_elem_dominant.m │ ├── class_pair_elem_dominant_handle.m │ ├── class_pair_elem_handle.m │ ├── class_pair_handle.m │ ├── classdef.tst │ ├── foo_handle_class.m │ ├── foo_method_changes_property_size.m │ ├── foo_static_method_constant_property.m │ ├── foo_subsref_subsasgn.m │ ├── foo_value_class.m │ ├── handle_class.m │ ├── module.mk │ ├── overloaded_all_class.m │ ├── overloaded_all_class_handle.m │ ├── overloaded_any_class.m │ ├── overloaded_any_class_handle.m │ ├── overloaded_cat_class.m │ ├── overloaded_cat_class_handle.m │ ├── overloaded_ctranspose_class.m │ ├── overloaded_ctranspose_class_handle.m │ ├── overloaded_horzcat_vertcat_class.m │ ├── overloaded_horzcat_vertcat_class_handle.m │ ├── overloaded_permute_class.m │ ├── overloaded_permute_class_handle.m │ ├── overloaded_sizeof_class.m │ ├── overloaded_subsref.m │ ├── overloaded_transpose_class.m │ ├── overloaded_transpose_class_handle.m │ ├── plist_t1.m │ ├── plist_t2.m │ ├── plist_t3.m │ ├── struct_wrapper.m │ ├── value_class.m │ ├── value_class_reshape.m │ └── value_class_subclass.m ├── classdef-debug/ │ ├── classdef_breakpoints.m │ ├── classdef_breakpoints2.m │ ├── module.mk │ └── test-classdef-breakpoints.tst ├── classdef-load-save/ │ ├── changed-class/ │ │ └── loadobj_changed_class.m │ ├── classdef-load-save-text.tst │ ├── classdef-load-save-v6.tst │ ├── classdef-load-save-v7.tst │ ├── custom_saveobj.m │ ├── invalid_saveobj_class.m │ ├── loadobj_changed_class.m │ ├── loadobj_class.m │ ├── loadobj_saveobj_class.m │ ├── module.mk │ ├── regular_class.m │ ├── regular_class_construct_on_load.m │ ├── regular_class_with_constructor.m │ ├── regular_handle_class.m │ ├── saveobj_obj_class.m │ ├── saveobj_struct_class.m │ └── transient_property_class.m ├── classdef-multiple-inheritance/ │ ├── base_1.m │ ├── base_2.m │ ├── child_from_base_1.m │ ├── child_from_base_1_and_2.m │ ├── classdef-multiple-inheritance.tst │ └── module.mk ├── classes/ │ ├── @Blork/ │ │ ├── Blork.m │ │ ├── bleek.m │ │ ├── display.m │ │ ├── get.m │ │ └── set.m │ ├── @CPrecedenceTester1/ │ │ ├── CPrecedenceTester1.m │ │ ├── double.m │ │ ├── plus.m │ │ └── tattack.m │ ├── @CPrecedenceTester2/ │ │ ├── CPrecedenceTester2.m │ │ ├── double.m │ │ ├── plus.m │ │ └── tattack.m │ ├── @CPrecedenceTester3/ │ │ ├── CPrecedenceTester3.m │ │ ├── double.m │ │ ├── plus.m │ │ └── tattack.m │ ├── @Cork/ │ │ ├── Cork.m │ │ ├── click.m │ │ ├── display.m │ │ ├── get.m │ │ └── set.m │ ├── @Dork/ │ │ ├── Dork.m │ │ ├── bling.m │ │ ├── display.m │ │ ├── gack.m │ │ ├── get.m │ │ ├── getStash.m │ │ ├── private/ │ │ │ └── myStash.m │ │ └── set.m │ ├── @Gork/ │ │ ├── Gork.m │ │ ├── cork.m │ │ ├── display.m │ │ ├── gark.m │ │ ├── get.m │ │ ├── set.m │ │ ├── subsasgn.m │ │ └── subsref.m │ ├── @Pork/ │ │ ├── Pork.m │ │ ├── bling.m │ │ ├── display.m │ │ ├── get.m │ │ ├── gurk.m │ │ ├── private/ │ │ │ └── myStash.m │ │ └── set.m │ ├── @SizeTester/ │ │ ├── SizeTester.m │ │ ├── numel.m │ │ └── size.m │ ├── @Sneetch/ │ │ ├── Sneetch.m │ │ └── display.m │ ├── @Snork/ │ │ ├── Snork.m │ │ ├── cack.m │ │ ├── ctranspose.m │ │ ├── display.m │ │ ├── double.m │ │ ├── end.m │ │ ├── eq.m │ │ ├── ge.m │ │ ├── get.m │ │ ├── getStash.m │ │ ├── gick.m │ │ ├── gt.m │ │ ├── horzcat.m │ │ ├── ldivide.m │ │ ├── le.m │ │ ├── loadobj.m │ │ ├── lt.m │ │ ├── minus.m │ │ ├── mldivide.m │ │ ├── mpower.m │ │ ├── mrdivide.m │ │ ├── mtimes.m │ │ ├── ne.m │ │ ├── plus.m │ │ ├── power.m │ │ ├── private/ │ │ │ └── myStash.m │ │ ├── rdivide.m │ │ ├── saveobj.m │ │ ├── set.m │ │ ├── subsasgn.m │ │ ├── subsindex.m │ │ ├── subsref.m │ │ ├── tattack.m │ │ ├── times.m │ │ ├── transpose.m │ │ ├── uminus.m │ │ ├── uplus.m │ │ └── vertcat.m │ ├── @Spork/ │ │ ├── Spork.m │ │ ├── cack.m │ │ ├── display.m │ │ ├── geek.m │ │ ├── get.m │ │ ├── getStash.m │ │ ├── loadobj.m │ │ ├── private/ │ │ │ └── myStash.m │ │ ├── saveobj.m │ │ └── set.m │ ├── classes.tst │ └── module.mk ├── colon-op/ │ ├── @legacy_colon_op/ │ │ ├── colon.m │ │ └── legacy_colon_op.m │ ├── colon-op.tst │ ├── colon_op.m │ └── module.mk ├── colormaps.tst ├── command.tst ├── complex.tst ├── ctor-vs-method/ │ ├── @derived/ │ │ ├── derived.m │ │ └── parent.m │ ├── @other/ │ │ ├── other.m │ │ └── parent.m │ ├── @parent/ │ │ ├── method.m │ │ └── parent.m │ ├── __trace__.m │ ├── ctor-vs-method.tst │ └── module.mk ├── deprecate-props.tst ├── diag-perm.tst ├── error.tst ├── eval-catch.tst ├── eval-command.tst ├── fcn-handle/ │ ├── +pkga/ │ │ └── +pkgb/ │ │ ├── bug51709_a.m │ │ ├── bug51709_b.m │ │ ├── f1.m │ │ └── f2.m │ ├── @fhdr_derived/ │ │ └── fhdr_derived.m │ ├── @fhdr_other/ │ │ ├── fhdr_other.m │ │ ├── getsize_arrayfun.m │ │ ├── getsize_cellfun.m │ │ └── getsize_loop.m │ ├── @fhdr_parent/ │ │ ├── fhdr_parent.m │ │ └── numel.m │ ├── bug-51567.tst │ ├── bug-57941.tst │ ├── bug51567.m │ ├── bug51709_a.m │ ├── bug51709_c.m │ ├── bug57941a.m │ ├── bug57941b.m │ ├── bug58519.tst │ ├── bug60845.m │ ├── derived-resolution.tst │ ├── f1.m │ ├── handle-to-sibling.tst │ ├── keyword.tst │ ├── module.mk │ ├── object-method.tst │ ├── package-function.tst │ ├── shared-ctx.tst │ ├── shared_ctx.m │ └── static-method.tst ├── file-encoding/ │ ├── .oct-config │ ├── CP1251/ │ │ ├── .oct-config │ │ └── test_CP1251.m │ ├── file-encoding.tst │ ├── module.mk │ └── test_CP1252.m ├── fntests.m ├── for.tst ├── func.tst ├── global.tst ├── help/ │ ├── cdefdir/ │ │ ├── cdef_help1.m │ │ ├── cdef_help2.m │ │ ├── cdef_help3.m │ │ └── cdef_help4.m │ ├── function_with_utf_8_doc_string.m │ ├── help.tst │ ├── module.mk │ └── undoc_fcn.m ├── if.tst ├── index.tst ├── inline-fcn.tst ├── integer.tst ├── io.tst ├── json/ │ ├── jsondecode.tst │ ├── jsonencode.tst │ └── module.mk ├── jupyter-notebook/ │ ├── jupyter-notebook.tst │ ├── module.mk │ ├── octave-kernel.ipynb │ └── plot-magic-and-errors.ipynb ├── leftdiv.tst ├── line-continue.tst ├── load-path/ │ ├── in-load-path/ │ │ └── load_path_fcn.m │ ├── module.mk │ ├── namespace-builtin/ │ │ └── +namespace_test/ │ │ └── quad.m │ ├── namespace-corelib/ │ │ └── +namespace_test/ │ │ └── plot.m │ ├── not-in-load-path/ │ │ └── load_path_fcn.m │ ├── refresh-load-path.tst │ ├── shadowed-builtin/ │ │ └── quad.m │ └── shadowed-corelib/ │ └── plot.m ├── local-functions/ │ ├── local-functions.tst │ ├── local_function_eval.m │ └── module.mk ├── logical-index.tst ├── mex/ │ ├── bug-51725.tst │ ├── bug-54096.tst │ ├── bug_51725.c │ ├── bug_54096.c │ ├── mexnumtst.c │ ├── mexnumtst.tst │ └── module.mk ├── mk-bc-overloads-tst.sh ├── mk-conv-tst.sh ├── mk-sparse-tst.sh ├── mk_bc_overloads_expected.m ├── nest/ │ ├── arg_nest.m │ ├── arg_ret.m │ ├── bug_59989.m │ ├── counter.m │ ├── module.mk │ ├── nest.tst │ ├── nest_eval.m │ ├── no_closure.m │ ├── nst1.m │ ├── nst2.m │ ├── nst3.m │ ├── persistent_nest.m │ ├── recursive_nest.m │ ├── recursive_nest2.m │ ├── recursive_nest3.m │ ├── scope0.m │ ├── scope1.m │ ├── scope2.m │ ├── scope3.m │ ├── script_nest.m │ ├── script_nest_2.m │ ├── script_nest_script.m │ ├── script_nest_script_2.m │ ├── varg_nest.m │ └── varg_nest2.m ├── null-assign.tst ├── parser.tst ├── pkg/ │ ├── mfile-basic-test/ │ │ ├── COPYING │ │ ├── DESCRIPTION │ │ ├── INDEX │ │ ├── NEWS │ │ ├── doc/ │ │ │ ├── example-package.txi │ │ │ └── macros.texi │ │ └── inst/ │ │ └── example_mfile.m │ ├── mfile-minimal-test/ │ │ ├── COPYING │ │ ├── DESCRIPTION │ │ └── inst/ │ │ └── example_mfile.m │ ├── module.mk │ └── pkg.tst ├── prefer.tst ├── private-functions/ │ ├── fcn.m │ ├── module.mk │ ├── private/ │ │ ├── ascript.m │ │ ├── bscript.m │ │ ├── pfcn1.m │ │ └── pfcn2.m │ └── private-functions.tst ├── publish/ │ ├── module.mk │ ├── publish.tst │ ├── test_script.m │ ├── test_script_code_only.m │ ├── test_script_empty.m │ ├── test_script_example.m │ └── test_script_head_only.m ├── range.tst ├── recursion.tst ├── return.tst ├── show-failures.awk ├── single-index.tst ├── slice.tst ├── sparse-assign.tst ├── sparse-broadcasting.tst ├── struct.tst ├── switch.tst ├── system.tst ├── transpose.tst ├── try.tst ├── unwind.tst └── while.tst ================================================ FILE CONTENTS ================================================ ================================================ FILE: .dir-locals.el ================================================ ((nil . ((c-file-style . "gnu") (indent-tabs-mode . nil) (fill-column . 72))) (change-log-mode . ((indent-tabs-mode . t))) (makefile-mode . ((indent-tabs-mode . t)))) ================================================ FILE: .editorconfig ================================================ root = true [*] charset = utf-8 end_of_line = lf indent_size = 2 indent_style = space insert_final_newline = true [*.{am,mk}] indent_size = tab indent_style = tab ================================================ FILE: .gitattributes ================================================ # line endings in repository match line endings on disc * -text ================================================ FILE: .github/dependabot.yml ================================================ # Set update schedule for GitHub Actions version: 2 updates: - package-ecosystem: "github-actions" directory: "/" schedule: # Check for updates to GitHub Actions every week interval: "weekly" ================================================ FILE: .github/workflows/codeql-analysis.yaml ================================================ name: "CodeQL" on: schedule: # Run job every Monday and Thursday at 16:30 UTC - cron: '30 16 * * 1,4' workflow_dispatch: jobs: ubuntu: name: CodeQL analysis (Ubuntu) runs-on: ubuntu-latest strategy: fail-fast: false matrix: # Override automatic language detection by changing the below list # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python'] language: ['cpp'] # Learn more... # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection steps: - name: checkout repository uses: actions/checkout@v6 - name: install dependencies run: | sudo apt -qq update sudo apt install -y autoconf automake bison dvipng epstool fig2dev \ flex g++ gcc gfortran gnuplot-x11 gperf gzip icoutils \ libarpack2-dev libblas-dev libcurl4-gnutls-dev libfftw3-dev \ libfltk1.3-dev libfontconfig1-dev libfreetype6-dev \ libgl1-mesa-dev libgl2ps-dev libglpk-dev libgraphicsmagick++1-dev \ libhdf5-dev liblapack-dev libosmesa6-dev libpcre2-dev \ libqhull-dev libqscintilla2-qt5-dev libqrupdate-dev \ libreadline-dev librsvg2-bin libsndfile1-dev libsuitesparse-dev \ libsundials-dev libtool libxft-dev make openjdk-8-jdk \ perl portaudio19-dev pstoedit qtbase5-dev qttools5-dev \ qttools5-dev-tools rapidjson-dev rsync tar zlib1g-dev - name: bootstrap run: GNULIB_URL=https://github.com/coreutils/gnulib.git ./bootstrap - name: configure run: | mkdir .build cd .build && ../configure \ CPPFLAGS="-I/usr/include/hdf5/serial -I/usr/include/suitesparse" \ LDFLAGS="-L/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)/hdf5/serial" \ --disable-docs - name: initialize CodeQL # Initialize the CodeQL tools for scanning. uses: github/codeql-action/init@v4 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # queries: ./path/to/local/query, your-org/your-repo/queries@main - name: build run: make -C ./.build all -j2 V=1 - name: perform CodeQL analysis uses: github/codeql-action/analyze@v4 windows: name: CodeQL analysis (Windows) runs-on: windows-latest defaults: run: # Use MSYS2 as default shell shell: msys2 {0} strategy: fail-fast: false matrix: # Override automatic language detection by changing the below list # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python'] language: ['cpp'] # Learn more... # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection msystem: ['MINGW64'] include: - msystem: 'MINGW64' env: CHERE_INVOKING: 1 # perl uses cmd shell by default PERL5SHELL: bash -l -c steps: - uses: msys2/setup-msys2@v2 with: update: true # Use pre-installed version to save disc space on partition with source. # We need that space for building. release: false # The packages are listed in (alphabetically sorted) blocks: # The first block is for mandatory dependencies. # The second block is for optional dependencies needed when building from a release tarball. # The third block is for additional dependencies needed when building from a repository checkout. pacboy: >- autotools:p cc:p fc:p gperf:p openblas:p pcre2:p readline:p arpack:p curl:p fftw:p fltk:p gl2ps:p glpk:p ghostscript:p gnuplot:p graphicsmagick:p hdf5:p libsndfile:p portaudio:p qhull:p qrupdate:p qscintilla:p qt5-base:p qt5-imageformats:p qt5-svg:p qt5-tools:p rapidjson:p suitesparse:p sundials:p ccache:p icoutils:p librsvg:p texinfo:p install: >- base-devel git texinfo msystem: ${{ matrix.msystem }} - name: checkout repository uses: actions/checkout@v6 - name: bootstrap run: GNULIB_URL=https://github.com/coreutils/gnulib.git ./bootstrap - name: configure # configure sometimes hangs while compiling 32bit Fortran. # It should take much less than 30 minutes. Cancel the step if it takes longer. timeout-minutes: 30 # FIXME: Fix building with Java support. Override JAVA_HOME for now. # FIXME: How do we get a working TeX environment in MSYS2? Disable building the documentation for now. # Linking with ncurses fails. Use termcap library instead. run: | mkdir .build cd .build && ../configure \ JAVA_HOME="" \ --disable-docs \ --with-qt=5 - name: initialize CodeQL # Initialize the CodeQL tools for scanning. uses: github/codeql-action/init@v4 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # queries: ./path/to/local/query, your-org/your-repo/queries@main - name: build # Spawning processes seems to have a big overhead on this platform. # Use a somewhat larger number of parallel processes to compensate for that. run: make -C ./.build all -j8 V=1 - name: perform CodeQL analysis uses: github/codeql-action/analyze@v4 ================================================ FILE: .github/workflows/make-alpine.yaml ================================================ name: make-alpine on: workflow_dispatch: push: concurrency: ci-alpine-${{ github.ref }} jobs: alpine: runs-on: ubuntu-latest name: Alpine (x86, musl) defaults: run: # Use emulated shell as default shell: alpine.sh {0} env: LIBGL_ALWAYS_SOFTWARE: "1" steps: - name: get CPU information shell: bash run: | cat /proc/cpuinfo - name: checkout repository uses: actions/checkout@v6 - name: install dependencies uses: jirutka/setup-alpine@v1 with: # For available CPU architectures, see: # https://github.com/marketplace/actions/setup-alpine-linux-environment arch: x86 # QScintilla-Qt6 is currently not distributed by Alpine Linux. When # it is, consider switching to Qt6 packages: # qt6-qt5compat-dev # qt6-qttools-dev # The following packages are only needed to buid and install gl2ps: # cmake # wget # libpng # sudo # ARPACK as distributed for Alpine latest-stable seems to be broken: # arpack-dev packages: > build-base autoconf automake m4 git ccache coreutils gfortran flex gperf icoutils mesa-dri-gallium libtool libltdl rsvg-convert texlive-dvi bison curl-dev fftw-dev fltk-dev fontconfig-dev freetype-dev ghostscript-dev glpk-dev glu-dev gnuplot graphicsmagick-dev hdf5-dev lcms2-dev libsm-dev libsndfile-dev openblas-dev pcre2-dev perl portaudio-dev qhull-dev qrupdate-dev qscintilla-dev qt5-qttools-dev qscintilla-dev rapidjson-dev readline-dev suitesparse-dev texinfo texmf-dist-lang texmf-dist-latexrecommended texmf-dist-plaingeneric xvfb-run xz-dev zlib-dev bzip2 gzip tar zip cmake wget libpng sudo - name: prepare ccache # create key with human readable timestamp # used in action/cache/restore and action/cache/save steps id: ccache-prepare run: | echo "key=ccache:alpine:x86:${{ github.ref }}:$(date +"%Y-%m-%d_%H-%M-%S"):${{ github.sha }}" >> $GITHUB_OUTPUT - name: restore ccache # setup the github cache used to maintain the ccache from one job to the next uses: actions/cache/restore@v5 with: # location of the ccache of the chroot in the root file system path: /home/runner/rootfs/alpine-latest-x86/home/runner/.ccache key: ${{ steps.ccache-prepare.outputs.key }} restore-keys: | ccache:alpine:x86:${{ github.ref }} ccache:alpine:x86:refs/heads/default - name: configure ccache run: | test -d ~/.ccache || mkdir ~/.ccache echo "max_size = 1G" >> ~/.ccache/ccache.conf echo "compression = true" >> ~/.ccache/ccache.conf ccache --version ccache -p ccache -s echo "/usr/lib/ccache/bin" >> $GITHUB_PATH - name: build gl2ps # gl2ps is currently not distributed by Alpine Linux. # We need it for printing. # As of 2025/12/14, gl2ps is in the Alpine Linux testing repository. run: | mkdir -p gl2ps && cd gl2ps printf "::group::\033[0;32m==>\033[0m Download tarball\n" wget -O gl2ps-1.4.2.tgz https://geuz.org/gl2ps/src/gl2ps-1.4.2.tgz echo "::endgroup::" printf "::group::\033[0;32m==>\033[0m Unpack tarball\n" tar zxvf gl2ps-1.4.2.tgz echo "::endgroup::" printf "::group::\033[0;32m==>\033[0m Configure\n" mkdir -p build && cd build cmake \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ ../gl2ps-1.4.2 echo "::endgroup::" printf "::group::\033[0;32m==>\033[0m Build\n" cmake --build . echo "::endgroup::" printf "::group::\033[0;32m==>\033[0m Install\n" sudo cmake --install . echo "::endgroup::" - name: bootstrap run: GNULIB_URL=https://github.com/coreutils/gnulib.git ./bootstrap - name: configure id: configure timeout-minutes: 30 run: | echo $PATH echo which ccache which ccache which gcc echo gcc --version gcc --version which g++ echo g++ --version g++ --version which gfortran echo gfortran --version gfortran --version mkdir .build echo "::group::Run configure script" # The default stack size for "new threads" is a measly 128 kiB for # musl. Manually, set the stack size for "new threads" to 1.5 MiB # which is still a lot smaller than the current default of 8 MiB that # is used, e.g., by Ubuntu 24.10. Without that, running Octave fails # at "random" tests. cd .build && ../configure LDFLAGS="-Wl,-z,stack-size=1572864" echo "::endgroup::" - name: display config.log if: always() && (steps.configure.outcome != 'skipped') continue-on-error: true # Displaying the log shouldn't take long. Cancel the step if it does. timeout-minutes: 5 run: cat ./.build/config.log - name: build # Parallel make seems to fail intermittently when creating the figures # for the manual. The error message says it fails to connect to a # display. Maybe an xvfb issue? # Use single job make for now which seems to work more reliably. run: | XDG_RUNTIME_DIR=$RUNNER_TEMP xvfb-run -a make -C ./.build all V=1 - name: ccache status run: ccache -s - name: save ccache # Save the cache after we are done (successfully) building uses: actions/cache/save@v5 with: path: /home/runner/rootfs/alpine-latest-x86/home/runner/.ccache key: ${{ steps.ccache-prepare.outputs.key }} - name: check id: run-test-suite timeout-minutes: 60 run: | ./.build/run-octave --no-init-file --no-history --eval "version -blas, version -lapack" XDG_RUNTIME_DIR=$RUNNER_TEMP \ xvfb-run -a make -C ./.build check | tee ./test-suite.log - name: display test suite log if: always() && (steps.run-test-suite.outcome != 'skipped') continue-on-error: true # Displaying the log shouldn't take long. Cancel the step if it does. timeout-minutes: 5 run: cat ./.build/test/fntests.log - name: test history file creation # see bug #62365 # Pipe to an interactive session to trigger appending the command to # the history. This will trigger the creation of a history file. run: | echo "history_file (make_absolute_filename ('./a/b/c/history')); disp ('test')" | ./.build/run-octave -i [ -f ./a/b/c/history ] || echo "::warning::Creating history file failed" - name: install run: | sudo make -C ./.build install - name: test stand-alone executable run: | cd examples/code mkoctfile --link-stand-alone embedded.cc -o embedded LD_LIBRARY_PATH="/usr/local/lib/octave/$(octave --eval "disp(version())")" ./embedded - name: test Octave packages env: # colon separated list of packages # reasons for including these packages in the CI tests: # * control: builds .oct files from C++ and Fortran sources # * stk: builds .mex files from C sources PACKAGE_NAMES: "control:stk" run: | unset CC unset CXX IFS=: for package in ${PACKAGE_NAMES}; do printf " \033[0;32m==>\033[0m Octave package \033[0;32m${package}\033[0m\n" echo "::group::Install ${package}" octave --eval "pkg install -verbose -forge ${package}" echo "::endgroup::" echo "::group::Test ${package}" octave --eval "pkg test ${package}" echo "::endgroup::" echo "::group::Test log for ${package}" cat ${GITHUB_WORKSPACE}/fntests.log echo "::endgroup::" done - name: analyze test suite results # Make sure the test summary lists 0 "FAIL"s and no "REGRESSION" run: | [ -n "$(grep -e "FAIL\s*0" ./test-suite.log)" ] \ || echo "::warning::At least one test failed" [ -z "$(grep -e "REGRESSION" ./test-suite.log)" ] \ || echo "::warning::At least one regression in test suite" echo Finished analyzing test suite results. ================================================ FILE: .github/workflows/make-cross.yaml ================================================ name: make-cross-build on: workflow_dispatch: # schedule: # # Run job every Wednesday and Saturday at 16:30 UTC # - cron: '30 16 * * 3,6' push: concurrency: ci-cross-build-${{ github.ref }} jobs: cross-build: runs-on: ${{ matrix.os }} strategy: # Allow other runners in the matrix to continue if some fail fail-fast: false matrix: # List of architectures that are supported by Ubuntu: # https://canonical-ubuntu-packaging-guide.readthedocs-hosted.com/en/latest/reference/architectures/ arch: [armhf, ppc64el, s390x, riscv64] include: - arch: armhf target-triple: arm-linux-gnueabihf os: ubuntu-24.04-arm ccache-max: 1G qemu-user: - arch: ppc64el target-triple: powerpc64le-linux-gnu os: ubuntu-24.04-arm ccache-max: 1G qemu-user: qemu-ppc64le - arch: s390x target-triple: s390x-linux-gnu os: ubuntu-24.04 ccache-max: 1G qemu-user: qemu-s390x - arch: riscv64 target-triple: riscv64-linux-gnu os: ubuntu-24.04-arm ccache-max: 1.4G qemu-user: qemu-riscv64 name: cross ${{ matrix.arch }} env: CC: ${{ matrix.target-triple }}-gcc CXX: ${{ matrix.target-triple }}-g++ F77: ${{ matrix.target-triple }}-gfortran steps: - name: get CPU information run: lscpu - name: checkout repository uses: actions/checkout@v6 - name: install toolchain for ${{ matrix.arch }} run: | sudo apt -qq update sudo apt install -y \ g++-${{ matrix.target-triple }} \ gfortran-${{ matrix.target-triple }} \ autoconf automake bison ccache \ dvipng epstool fig2dev flex gnuplot-x11 gperf gzip icoutils \ libtool make perl pstoedit qt6-tools-dev-tools rsync tar texinfo \ ${{ matrix.arch == 'armhf' && ' ' || 'qemu-user-binfmt' }} - name: add repositories for ${{ matrix.arch }} packages # deb822-style format: # https://manpages.ubuntu.com/manpages/noble/man5/sources.list.5.html run: | sudo dpkg --add-architecture ${{ matrix.arch }} case ${{ matrix.os }} in "ubuntu-24.04-arm") sudo bash -c 'cat - >/etc/apt/sources.list.d/ubuntu.sources' <<-EOF Types: deb URIs: http://ports.ubuntu.com/ubuntu-ports/ Suites: noble noble-updates noble-backports Components: main restricted universe multiverse Architectures: arm64 ${{ matrix.arch }} Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg Types: deb URIs: http://security.ports.ubuntu.com/ubuntu-ports/ Suites: noble-security Components: main restricted universe multiverse Architectures: arm64 ${{ matrix.arch }} Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg EOF ;; "ubuntu-24.04") sudo bash -c 'cat - >/etc/apt/sources.list.d/ubuntu.sources' <<-EOF Types: deb URIs: http://archive.ubuntu.com/ubuntu/ Suites: noble noble-updates noble-backports Components: main restricted universe multiverse Architectures: amd64 Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg Types: deb URIs: http://security.ubuntu.com/ubuntu/ Suites: noble-security Components: main restricted universe multiverse Architectures: amd64 Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg Types: deb URIs: http://ports.ubuntu.com/ubuntu-ports/ Suites: noble noble-updates noble-backports Components: main restricted universe multiverse Architectures: ${{ matrix.arch }} Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg Types: deb URIs: http://security.ports.ubuntu.com/ubuntu-ports/ Suites: noble-security Components: main restricted universe multiverse Architectures: ${{ matrix.arch }} Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg EOF ;; esac sudo apt update - name: install dependencies for ${{ matrix.arch }} run: | sudo apt install -y \ libarpack2-dev:${{ matrix.arch }} \ libblas-dev:${{ matrix.arch }} \ libcurl4-gnutls-dev:${{ matrix.arch }} \ libfftw3-dev:${{ matrix.arch }} \ libfltk1.3-dev:${{ matrix.arch }} \ libfontconfig1-dev:${{ matrix.arch }} \ libfreetype6-dev:${{ matrix.arch }} \ libgl1-mesa-dev:${{ matrix.arch }} \ libgl2ps-dev:${{ matrix.arch }} \ libglpk-dev:${{ matrix.arch }} \ libgraphicsmagick++1-dev:${{ matrix.arch }} \ libhdf5-dev:${{ matrix.arch }} \ liblapack-dev:${{ matrix.arch }} \ libosmesa6-dev:${{ matrix.arch }} \ libpcre2-dev:${{ matrix.arch }} \ libqhull-dev:${{ matrix.arch }} \ libqscintilla2-qt6-dev:${{ matrix.arch }} \ libqrupdate-dev:${{ matrix.arch }} \ libreadline-dev:${{ matrix.arch }} \ librsvg2-bin:${{ matrix.arch }} \ libsndfile1-dev:${{ matrix.arch }} \ libsuitesparse-dev:${{ matrix.arch }} \ libxft-dev:${{ matrix.arch }} \ portaudio19-dev:${{ matrix.arch }} \ qt6-5compat-dev:${{ matrix.arch }} \ qt6-base-dev:${{ matrix.arch }} \ qt6-tools-dev:${{ matrix.arch }} \ rapidjson-dev:${{ matrix.arch }} \ zlib1g-dev:${{ matrix.arch }} - name: prepare ccache # create key with human readable timestamp # used in action/cache/restore and action/cache/save steps id: ccache-prepare run: | echo "key=ccache:cross:${{ matrix.os }}:${{ matrix.arch }}:${{ github.ref }}:$(date +"%Y-%m-%d_%H-%M-%S"):${{ github.sha }}" >> $GITHUB_OUTPUT - name: restore ccache # setup the github cache used to maintain the ccache from one job to the next uses: actions/cache/restore@v5 with: path: ~/.ccache key: ${{ steps.ccache-prepare.outputs.key }} restore-keys: | ccache:cross:${{ matrix.os }}:${{ matrix.arch }}:${{ github.ref }} ccache:cross:${{ matrix.os }}:${{ matrix.arch }}:refs/heads/default - name: configure ccache env: CCACHE_MAX: ${{ matrix.ccache-max }} run: | test -d ~/.ccache || mkdir ~/.ccache echo "max_size = $CCACHE_MAX" >> ~/.ccache/ccache.conf ccache -s echo "/usr/lib/ccache" >> $GITHUB_PATH - name: bootstrap run: GNULIB_URL=https://github.com/coreutils/gnulib.git ./bootstrap - name: configure id: configure timeout-minutes: 30 run: | echo $PATH echo which ccache which ccache which $CC echo $CC --version $CC --version which ${CXX% *} echo ${CXX% *} --version ${CXX% *} --version which $F77 echo $F77 --version $F77 --version mkdir .build echo "::group::Run configure script" cd .build && ../configure \ --host=${{ matrix.target-triple }} \ --disable-docs \ --disable-java \ JAVA_HOME="" \ PKG_CONFIG_PATH=/usr/lib/${{ matrix.target-triple }}/pkgconfig/ echo "::endgroup::" - name: display config.log if: always() && (steps.configure.outcome != 'skipped') continue-on-error: true # Displaying the log shouldn't take long. Cancel the step if it does. timeout-minutes: 5 run: cat ./.build/config.log - name: build run: XDG_RUNTIME_DIR=$RUNNER_TEMP make -C ./.build -j $(nproc) all V=1 - name: ccache status run: ccache -s - name: save ccache # Save the cache after we are done (successfully) building uses: actions/cache/save@v5 with: path: ~/.ccache key: ${{ steps.ccache-prepare.outputs.key }} - name: check id: run-test-suite timeout-minutes: 60 env: driver: ${{ matrix.qemu-user }} # Without "-cli", there are deadlocks or crashes while running some # tests that are related to graphics. This might be due to using qemu # or xvfb-run or a combination of the two or an actual issue in Octave. run: | ./.build/run-octave --no-init-file --no-history --eval "version -blas, version -lapack" XDG_RUNTIME_DIR=$RUNNER_TEMP RUN_OCTAVE_OPTIONS="-cli" \ make -C ./.build check | tee ./test-suite.log - name: display test suite log if: always() && (steps.run-test-suite.outcome != 'skipped') continue-on-error: true # Displaying the log shouldn't take long. Cancel the step if it does. timeout-minutes: 5 run: cat ./.build/test/fntests.log - name: test history file creation # see bug #62365 # Pipe to an interactive session to trigger appending the command to # the history. This will trigger the creation of a history file. run: | echo "history_file (make_absolute_filename ('./a/b/c/history')); disp ('test')" | ./.build/run-octave -i [ -f ./a/b/c/history ] || echo "::warning::Creating history file failed" - name: install run: | sudo make -C ./.build install - name: test stand-alone executable run: | unset CC unset CXX cd examples/code mkoctfile --link-stand-alone embedded.cc -o embedded LD_LIBRARY_PATH="/usr/local/lib/octave/$(octave --eval "disp(version())")" \ ./embedded - name: test Octave packages env: # colon separated list of packages # reasons for including these packages in the CI tests: # * control: builds .oct files from C++ and Fortran sources # * stk: builds .mex files from C sources PACKAGE_NAMES: "control:stk" run: | unset CC unset CXX IFS=':' read -r -a packages <<< "${PACKAGE_NAMES}" for package in "${packages[@]}"; do printf " \033[0;32m==>\033[0m Octave package \033[0;32m${package}\033[0m\n" echo "::group::Install ${package}" octave --eval "pkg install -verbose -forge ${package}" echo "::endgroup::" if [ ${{ matrix.arch }} = "armhf" ]; then echo "::group::Test ${package}" octave --eval "pkg test ${package}" echo "::endgroup::" echo "::group::Test log for ${package}" cat ${GITHUB_WORKSPACE}/fntests.log echo "::endgroup::" fi done - name: analyze test suite results # Make sure the test summary lists 0 "FAIL"s and no "REGRESSION" run: | [ -n "$(grep -e "FAIL\s*0" ./test-suite.log)" ] || exit 1 [ -z "$(grep -e "REGRESSION" ./test-suite.log)" ] || exit 1 echo No unknown failing tests. ================================================ FILE: .github/workflows/make-cygwin.yaml ================================================ name: make-cygwin on: workflow_dispatch: push: concurrency: ci-cygwin-${{ github.ref }} jobs: cygwin: runs-on: ${{ matrix.os }} defaults: run: # Use Cygwin bash as default shell shell: C:\cygwin\bin\bash.exe --login -eo pipefail -o igncr '{0}' strategy: # Allow other runners in the matrix to continue if some fail fail-fast: false matrix: # For available GitHub-hosted runners, see: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners os: [windows-latest] env: CHERE_INVOKING: "1" CC: gcc CXX: g++ F77: gfortran # ccache 3.1 doesn't read configuration files CCACHE_COMPRESS: "1" steps: - name: get CPU name shell: pwsh run : | Get-CIMInstance -Class Win32_Processor | Select-Object -Property Name - name: checkout repository # This must be done before installing Cygwin because their git is # incompatible with this action. uses: actions/checkout@v6 - name: install Cygwin build environment uses: cygwin/cygwin-install-action@v6 with: # The packages are listed in (alphabetically sorted) blocks: # The first block is for mandatory dependencies. # The second block is for optional dependencies needed when building from a release tarball. # The third block is for additional dependencies needed when building from a repository checkout. # The fourth block is for additional run-time dependencies (to run test suite) that aren't needed to build. # FIXME: libklu-devel should depend on libbtf-devel. Install it manually even if Octave doesn't explicitly use it. packages: >- autoconf automake make gcc-g++ gcc-fortran bison dash flex gperf libtool liblapack-devel libpcre2-devel libreadline-devel ghostscript gnuplot-base libamd-devel libarpack-devel libbtf-devel libbz2-devel libcamd-devel libccolamd-devel libcholmod-devel libcolamd-devel libcurl-devel libcxsparse-devel libfftw3-devel libfltk-devel libfontconfig-devel libfreetype-devel libGL-devel libgl2ps-devel libglpk-devel libGLU-devel libgomp1 libGraphicsMagick-devel libhdf5-devel libiconv-devel libklu-devel libportaudio-devel libqhull-devel libqrupdate-devel libqscintilla2_qt5-devel libQt5Core-devel libQt5Gui-devel libQt5Help-devel libsndfile-devel libsuitesparseconfig-devel libsundials-devel libspqr-devel libumfpack-devel qt5-doc-tools rapidjson-devel ccache git icoutils python rsvg texinfo unzip zip - name: prepare ccache # create key with human readable timestamp # used in action/cache/restore and action/cache/save steps id: ccache-prepare run: | echo "ccachedir=$(cygpath -m ~/.ccache)" >> $GITHUB_OUTPUT echo "key=ccache:${{ matrix.os }}:cygwin:${{ github.ref }}:$(date +"%Y-%m-%d_%H-%M-%S"):${{ github.sha }}" >> $GITHUB_OUTPUT - name: restore ccache # Setup a github cache used to maintain the ccache from one run to the next uses: actions/cache/restore@v5 with: path: ${{ steps.ccache-prepare.outputs.ccachedir }} key: ${{ steps.ccache-prepare.outputs.key }} restore-keys: | ccache:${{ matrix.os }}:cygwin:${{ github.ref }} ccache:${{ matrix.os }}:cygwin:refs/heads/default - name: configure ccache run: | # work around issue with ccache calling itself recursively [ -f /usr/bin/ccache.exe ] && mv /usr/bin/ccache.exe /usr/bin/ccache which ccache ccache -V # ccache 3.1 doesn't read configuration files # test -d ${{ steps.ccache-prepare.outputs.ccachedir }} || mkdir -p ${{ steps.ccache-prepare.outputs.ccachedir }} # echo "max_size = 0.9G" > ${{ steps.ccache-prepare.outputs.ccachedir }}/ccache.conf # echo "compression = true" >> ${{ steps.ccache-prepare.outputs.ccachedir }}/ccache.conf # limit maximum cache size to avoid exceeding the total disk or cache quota ccache -M 0.9G ccache -s # create ccache symlinks for all compilers test -d /usr/lib/ccache/bin || mkdir -p /usr/lib/ccache/bin ln -s /usr/bin/ccache /usr/lib/ccache/bin/${CC}.exe ln -s /usr/bin/ccache /usr/lib/ccache/bin/${CXX}.exe ln -s /usr/bin/ccache /usr/lib/ccache/bin/${F77}.exe # prepend path to ccache symlinks to PATH echo 'export PATH="/usr/lib/ccache/bin:$PATH"' >> ~/.bash_profile - name: bootstrap run: GNULIB_URL=https://github.com/coreutils/gnulib.git ./bootstrap - name: configure id: configure # FIXME: Fix building with Java support. Override JAVA_HOME for now. # FIXME: How do we get a working TeX environment in Cygwin? Disable building the documentation for now. # FIXME: Exporting symbols for instantiated template classes doesn't work currently. Maybe, test again when Cygwin updated to a newer compiler than GCC 11.4.0? run: | echo $PATH which $CC echo $CC --version $CC --version which $CXX echo $CXX --version $CXX --version which $F77 echo $F77 --version $F77 --version mkdir .build echo "::group::Run configure script" cd .build && ../configure \ --libexecdir=/usr/lib \ --enable-shared \ --disable-java \ --disable-docs \ JAVA_HOME="" \ EGREP="grep -E" \ FLIBS="-lgfortran -lquadmath" echo "::endgroup::" - name: display config.log if: always() && (steps.configure.outcome != 'skipped') continue-on-error: true # Displaying the log shouldn't take long. Cancel the step if it does. timeout-minutes: 5 run: cat ./.build/config.log - name: build # Spawning processes seems to have a big overhead on this platform. Use a somewhat larger number of parallel processes to compensate for that. run: | EGREP="grep -E" make -C ./.build all -j8 V=1 - name: ccache status continue-on-error: true run: ccache -s - name: save ccache # Save the cache after we are done (successfully) building uses: actions/cache/save@v5 with: path: ${{ steps.ccache-prepare.outputs.ccachedir }} key: ${{ steps.ccache-prepare.outputs.key }} - name: rebase binaries run: | find ${GITHUB_WORKSPACE}/.build -name "*.oct" -or -name "*.dll" | tee binaries.list rebase -O -T binaries.list - name: check id: run-test-suite # Continuing on error in this step means that jobs will be "green" even # if the test suite crashes. But if we don't continue, we'll loose the # ccache. # It would be nice if we could mark the job as "yellow" (and continue) # in that case. The second best thing is to display a warning in the # job summary (see below). continue-on-error: true timeout-minutes: 60 # mkoctfile seems to have trouble when gcc is called via ccache. So, # remove the directory with the ccache wrappers from PATH. run: | export PATH=$(echo "$PATH" | sed -e "s|/usr/lib/ccache/bin:||g") ./.build/run-octave --no-init-file --no-history --eval "version -blas, version -lapack" EGREP="grep -E" make -C ./.build check | tee ./test-suite.log - name: display test suite log if: always() && (steps.run-test-suite.outcome != 'skipped') continue-on-error: true # Displaying the log shouldn't take long. Cancel the step if it does. timeout-minutes: 5 run: cat ./.build/test/fntests.log - name: test history file creation # see bug #62365 # Pipe to an interactive session to trigger appending the command to # the history. This will trigger the creation of a history file. run: | echo "history_file (make_absolute_filename ('./a/b/c/history')); disp ('test')" | ./.build/run-octave -i [ -f ./a/b/c/history ] || echo "::warning::Creating history file failed" - name: install run: | make -C ./.build install - name: test stand-alone executable run: | unset CC unset CXX export PATH=$(echo "$PATH" | sed -e "s|/usr/lib/ccache/bin:||g") cd examples/code mkoctfile --link-stand-alone embedded.cc -o embedded ./embedded.exe - name: test Octave packages env: # colon separated list of packages # reasons for including these packages in the CI tests: # * control: builds .oct files from C++ and Fortran sources # * stk: builds .mex files from C sources PACKAGE_NAMES: "control:stk" run: | unset CC unset CXX export PATH=$(echo "$PATH" | sed -e "s|/usr/lib/ccache/bin:||g") IFS=':' read -r -a packages <<< "${PACKAGE_NAMES}" for package in "${packages[@]}"; do printf " \033[0;32m==>\033[0m Octave package \033[0;32m${package}\033[0m\n" echo "::group::Install ${package}" octave --eval "pkg install -verbose -forge ${package}" echo "::endgroup::" echo "::group::Test ${package}" octave --eval "pkg test ${package}" echo "::endgroup::" echo "::group::Test log for ${package}" cat ${GITHUB_WORKSPACE}/fntests.log echo "::endgroup::" done - name: analyze test suite results # Make sure the test summary lists 0 "FAIL"s and no "REGRESSION" run: | [ -n "$(grep -e "FAIL\s*0" ./test-suite.log)" ] || echo "::warning::At least one test failed" [ -z "$(grep -e "REGRESSION" ./test-suite.log)" ] || echo "::warning::At least one regression in test suite" echo Finished analyzing test suite results. ================================================ FILE: .github/workflows/make-macos.yaml ================================================ name: make-macos on: workflow_dispatch: push: concurrency: ci-macos-${{ github.ref }} jobs: macos: runs-on: ${{ matrix.os }} name: ${{ matrix.os }} Qt${{ matrix.qt }} strategy: # Allow other runners in the matrix to continue if some fail fail-fast: false matrix: # For available GitHub-hosted runners, see: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners os: [macos-14, macos-15] # Most (or all) homebrew packages are compiled with clang and link # against libc++. So we also use clang to avoid issues with symbols # that don't match. # compiler: [real-gcc, clang] compiler: [clang] qt: [6] include: # - compiler: real-gcc # cc: "/usr/local/bin/gcc-10" # cxx: "/usr/local/bin/g++-10" # cppflags: "-I/usr/local/opt/hdf5/include -I/usr/local/opt/gl2ps/include -I/usr/local/opt/glpk/include -I/usr/local/opt/pcre/include -I/usr/local/opt/qscintilla2/include -I/usr/local/opt/suite-sparse/include -I/usr/local/opt/sundials/include" # ldflags: "-L/usr/local/opt/hdf5/lib -L/usr/local/opt/gl2ps/lib -L/usr/local/opt/glpk/lib -L/usr/local/opt/pcre/lib -L/usr/local/opt/qscintilla2/lib -L/usr/local/opt/suite-sparse/lib -L/usr/local/opt/sundials/lib" - compiler: clang cc: "clang" cxx: "clang++" - os: macos-15-intel qt: "5" cc: "clang" cxx: "clang++" env: CC: ${{ matrix.cc }} CXX: ${{ matrix.cxx }} F77: gfortran steps: - name: checkout repository uses: actions/checkout@v6 - name: install dependencies # This step sometimes takes long and still recovers. But sometimes it # seems to hang indefinitely. # Use a pretty long timeout (but still less than the default 6 hours). timeout-minutes: 75 # Homebrew's Python conflicts with the Python that comes pre-installed # on the GitHub runners. Some of Octave's dependencies depend on # different versions of Homebrew's Python. Enforce using the ones from # Homebrew to avoid errors on updates. # See: https://github.com/orgs/Homebrew/discussions/3928 # It looks like "gfortran" isn't working correctly unless "gcc" is # re-installed. # See also: https://formulae.brew.sh/formula/octave#default # The packages are listed in (alphabetically sorted) blocks: # The first block is for "direct" dependencies. # The second block is for additional dependencies needed when building from a release tarball. # The third block is for additional dependencies needed when building from a repository checkout. run: | brew update brew install --overwrite python@3.12 python@3.13 brew reinstall gcc brew install arpack epstool fast_float fftw fig2dev fltk fontconfig \ freetype ghostscript gl2ps glpk gnuplot graphicsmagick hdf5 \ libiconv libsndfile libtool openblas pcre2 portaudio pstoedit \ qhull qrupdate qscintilla2 \ rapidjson readline suite-sparse sundials texinfo \ ccache gnu-sed openjdk pkg-config \ automake autoconf bison gettext icoutils librsvg mactex-no-gui brew install --overwrite \ ${{ matrix.qt == '6' && 'qt5compat qtbase qttools' || 'qt@5' }} eval "$(/usr/libexec/path_helper)" HOMEBREW_PREFIX=$(brew --prefix) echo "HOMEBREW_PREFIX=$(brew --prefix)" >> $GITHUB_ENV echo "/Library/TeX/texbin" >> $GITHUB_PATH echo "${HOMEBREW_PREFIX}/opt/qt@${{ matrix.qt }}/bin" >> $GITHUB_PATH echo "${HOMEBREW_PREFIX}/opt/texinfo/bin" >> $GITHUB_PATH echo "${HOMEBREW_PREFIX}/opt/bison/bin" >> $GITHUB_PATH echo "${HOMEBREW_PREFIX}/opt/gnu-sed/libexec/gnubin" >> $GITHUB_PATH echo "${HOMEBREW_PREFIX}/opt/libiconv/bin" >> $GITHUB_PATH - name: prepare ccache # create key with human readable timestamp # used in action/cache/restore and action/cache/save steps id: ccache-prepare run: | echo "key=ccache:${{ matrix.os }}:${{ matrix.compiler }}:qt${{ matrix.qt }}:${{ github.ref }}:$(date +"%Y-%m-%d_%H-%M-%S"):${{ github.sha }}" >> $GITHUB_OUTPUT - name: restore ccache # setup the github cache used to maintain the ccache from one job to the next uses: actions/cache/restore@v5 id: restore-ccache with: path: /Users/runner/Library/Caches/ccache key: ${{ steps.ccache-prepare.outputs.key }} restore-keys: | ccache:${{ matrix.os }}:${{ matrix.compiler }}:qt${{ matrix.qt }}:${{ github.ref }} ccache:${{ matrix.os }}:${{ matrix.compiler }}:qt${{ matrix.qt }}:refs/heads/default - name: configure ccache # The cache doesn't seem to compress well on macOS. Is it already compressed? # Limit the maximum size to avoid exceeding the total cache limits. run: | test -d /Users/runner/Library/Preferences/ccache || mkdir /Users/runner/Library/Preferences/ccache echo "max_size = 0.9G" >> /Users/runner/Library/Preferences/ccache/ccache.conf ccache -s echo "${HOMEBREW_PREFIX}/opt/ccache/libexec" >> $GITHUB_PATH - name: bootstrap run: GNULIB_URL=https://github.com/coreutils/gnulib.git ./bootstrap - name: configure id: configure timeout-minutes: 30 env: MY_CPPFLAGS: ${{ matrix.cppflags }} MY_LDFLAGS: ${{ matrix.ldflags }} # This is a hodgepodge of configure flags put together from the # buildbot rules: # https://hg.octave.org/octave-buildbot/file/tip/master.cfg#l543 # And the homebrew formula: # https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/octave.rb # Amended with additional flags that seem to be needed. # Not all of those might be needed or be correct. run: | echo $PATH echo which ccache which ccache which $CC echo $CC --version $CC --version which $CXX echo $CXX --version $CXX --version which $F77 echo $F77 --version $F77 --version mkdir .build echo "::group::Run configure script" cd .build && ../configure \ CPPFLAGS="-I${HOMEBREW_PREFIX}/opt/gettext/include -I${HOMEBREW_PREFIX}/opt/icu4c/include -I${HOMEBREW_PREFIX}/opt/libiconv/include -I${HOMEBREW_PREFIX}/opt/qt@${{ matrix.qt }}/include -I${HOMEBREW_PREFIX}/opt/readline/include -I${HOMEBREW_PREFIX}/opt/sqlite/include $MY_CPPFLAGS -I${HOMEBREW_PREFIX}/include" \ CXXFLAGS="-O2 -g" \ LDFLAGS="-L${HOMEBREW_PREFIX}/opt/bison/lib -L${HOMEBREW_PREFIX}/opt/gettext/lib -L${HOMEBREW_PREFIX}/opt/icu4c/lib -L${HOMEBREW_PREFIX}/opt/libiconv/lib -L${HOMEBREW_PREFIX}/opt/readline/lib -L${HOMEBREW_PREFIX}/opt/sqlite/lib $MY_LDFLAGS -L${HOMEBREW_PREFIX}/lib" \ PKG_CONFIG_PATH="${HOMEBREW_PREFIX}/opt/openblas/lib/pkgconfig:${HOMEBREW_PREFIX}/opt/icu4c/lib/pkgconfig:${HOMEBREW_PREFIX}/opt/qt@${{ matrix.qt }}/lib/pkgconfig" \ --with-qt=${{ matrix.qt }} \ QCOLLECTIONGENERATOR="qhelpgenerator" \ --with-x=no \ --with-blas="-L${HOMEBREW_PREFIX}/opt/openblas/lib -lopenblas" \ --with-java-homedir="${HOMEBREW_PREFIX}/opt/openjdk" \ --prefix="${HOME}/usr" echo "::endgroup::" - name: display config.log if: always() && (steps.configure.outcome != 'skipped') continue-on-error: true # Displaying the log shouldn't take long. Cancel the step if it does. timeout-minutes: 5 run: cat ./.build/config.log - name: build run: make -C ./.build all -j3 V=1 - name: ccache status run: ccache -s - name: save ccache # Save the cache after we are done (successfully) building uses: actions/cache/save@v5 with: path: /Users/runner/Library/Caches/ccache key: ${{ steps.ccache-prepare.outputs.key }} - name: check id: run-test-suite # Continuing on error in this step means that jobs will be "green" even # if the test suite crashes. But if we don't continue, we'll loose the # ccache and other jobs will be cancelled, too. # It would be nice if we could mark the job as "yellow" (and continue) # in that case. The second best thing is to display a warning in the # job summary (see below). continue-on-error: true timeout-minutes: 60 run: | echo 'makeinfo_program ("${HOMEBREW_PREFIX}/opt/texinfo/bin/makeinfo");' >> ./scripts/startup/site-rcfile ./.build/run-octave --no-init-file --no-history --eval "version -blas, version -lapack" make -C ./.build check | tee ./test-suite.log - name: display test suite log if: always() && (steps.run-test-suite.outcome != 'skipped') continue-on-error: true # Displaying the log shouldn't take long. Cancel the step if it does. timeout-minutes: 5 run: cat ./.build/test/fntests.log - name: test history file creation # see bug #62365 # Pipe to an interactive session to trigger appending the command to # the history. This will trigger the creation of a history file. run: | echo "history_file (make_absolute_filename ('./a/b/c/history')); disp ('test')" | ./.build/run-octave -i [ -f ./a/b/c/history ] || echo "::warning::Creating history file failed" - name: install run: | mkdir -p /Users/runner/usr make -C ./.build install - name: test stand-alone executable run: | unset CC unset CXX cd examples/code PATH="/Users/runner/usr/bin:$PATH" \ mkoctfile --link-stand-alone embedded.cc -o embedded ./embedded - name: test Octave packages env: # colon separated list of packages # reasons for including these packages in the CI tests: # * control: builds .oct files from C++ and Fortran sources # * stk: builds .mex files from C sources PACKAGE_NAMES: "control:stk" run: | unset CC unset CXX export F77=gfortran export PATH="/Users/runner/usr/bin:$PATH" IFS=':' read -r -a packages <<< "${PACKAGE_NAMES}" for package in "${packages[@]}"; do printf " \033[0;32m==>\033[0m Octave package \033[0;32m${package}\033[0m\n" echo "::group::Install ${package}" octave --eval "pkg install -verbose -forge ${package}" echo "::endgroup::" echo "::group::Test ${package}" octave --eval "pkg test ${package}" echo "::endgroup::" echo "::group::Test log for ${package}" cat ${GITHUB_WORKSPACE}/fntests.log echo "::endgroup::" done - name: analyze test suite results # Make sure the test summary lists 0 "FAIL"s and no "REGRESSION" run: | [ -n "$(grep -e "FAIL\s*0" ./test-suite.log)" ] || exit 1 [ -z "$(grep -e "REGRESSION" ./test-suite.log)" ] || exit 1 echo No unknown failing tests. ================================================ FILE: .github/workflows/make-mingw.yaml ================================================ name: make-mingw on: workflow_dispatch: push: concurrency: ci-mingw-${{ github.ref }} jobs: mingw: runs-on: ${{ matrix.os }} name: mingw-w64 ${{ matrix.msystem }} defaults: run: # Use MSYS2 as default shell shell: msys2 {0} strategy: # Allow other runners in the matrix to continue if some fail fail-fast: false matrix: # For available GitHub-hosted runners, see: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners msystem: [MINGW64, CLANG64, CLANGARM64] include: - msystem: MINGW64 os: windows-latest mingw-prefix: mingw64 cc: gcc cxx: g++ f77: gfortran extra-config-flags: "" ccache-max: 0.9G allow-error: false - msystem: CLANG64 os: windows-latest mingw-prefix: clang64 cc: clang cxx: clang++ f77: flang # Clang seems to require a different set of dllexport attributes than GCC. extra-config-flags: --disable-lib-visibility-flags ccache-max: 400M # This configuration is not fully supported yet allow-error: true - msystem: CLANGARM64 os: windows-11-arm mingw-prefix: clangarm64 cc: clang cxx: clang++ f77: flang # Clang seems to require a different set of dllexport attributes than GCC. extra-config-flags: --disable-lib-visibility-flags ccache-max: 400M # This configuration is not fully supported yet allow-error: true env: CHERE_INVOKING: 1 CC: ${{ matrix.cc }} CXX: ${{ matrix.cxx }} F77: ${{ matrix.f77 }} # perl uses cmd shell by default PERL5SHELL: bash -l -c steps: - name: get runner hardware information shell: pwsh run : | Get-PSDrive -PSProvider FileSystem Get-CIMInstance -Class Win32_Processor | Select-Object -Property Name - name: install MSYS2 build environment uses: msys2/setup-msys2@v2 with: update: true # Use pre-installed version if possible to save disc space on # partition with source. We need that space for building. release: ${{ matrix.msystem == 'CLANGARM64' }} msystem: ${{ matrix.msystem }} # The packages are listed in (alphabetically sorted) blocks: # The first block is for mandatory dependencies. # The second block is for optional dependencies needed when building from a release tarball. # The third block is for additional dependencies needed when building from a repository checkout. # The fourth block is for additional run-time dependencies (to run test suite) that aren't needed to build. pacboy: >- autotools:p cc:p fc:p gperf:p openblas:p pcre2:p readline:p arpack:p curl:p fftw:p fltk:p gl2ps:p glpk:p ghostscript:p gnuplot:p graphicsmagick:p hdf5:p libsndfile:p portaudio:p qhull:p qrupdate:p qscintilla:p qt5-base:p qt5-imageformats:p qt5-svg:p qt5-tools:p rapidjson:p suitesparse:p sundials:p ccache:p icoutils:p librsvg:p texinfo:p install: >- base-devel git unzip zip - name: checkout repository uses: actions/checkout@v6 - name: prepare ccache # create key with human readable timestamp # used in action/cache/restore and action/cache/save steps id: ccache-prepare run: | echo "ccachedir=$(cygpath -m $(ccache -k cache_dir))" >> $GITHUB_OUTPUT echo "key=ccache:${{ matrix.os }}:${{ matrix.msystem }}:${{ github.ref }}:$(date +"%Y-%m-%d_%H-%M-%S"):${{ github.sha }}" >> $GITHUB_OUTPUT echo "timestamp=$(date +"%Y-%m-%d_%H-%M-%S")" >> $GITHUB_OUTPUT - name: restore ccache # Setup the github cache used to maintain the ccache from one job to the next uses: actions/cache/restore@v5 with: path: ${{ steps.ccache-prepare.outputs.ccachedir }} key: ${{ steps.ccache-prepare.outputs.key }} restore-keys: | ccache:${{ matrix.os }}:${{ matrix.msystem }}:${{ github.ref }} ccache:${{ matrix.os }}:${{ matrix.msystem }}:refs/heads/default - name: configure ccache # Limit the maximum size and switch on compression to avoid exceeding the total disk or cache quota. run: | which ccache test -d ${{ steps.ccache-prepare.outputs.ccachedir }} || mkdir -p ${{ steps.ccache-prepare.outputs.ccachedir }} echo "max_size = ${{ matrix.ccache-max }}" > ${{ steps.ccache-prepare.outputs.ccachedir }}/ccache.conf echo "compression = true" >> ${{ steps.ccache-prepare.outputs.ccachedir }}/ccache.conf ccache -p ccache -s # prepend path to ccache helper scripts to PATH echo 'export PATH="$MINGW_PREFIX/lib/ccache/bin:$PATH"' >> ~/.bash_profile - name: bootstrap run: GNULIB_URL=https://github.com/coreutils/gnulib.git ./bootstrap - name: configure id: configure # configure sometimes hangs while compiling 32bit Fortran. # It should take much less than 30 minutes. Cancel the step if it takes longer. timeout-minutes: 30 # FIXME: Fix building with Java support. Override JAVA_HOME for now. # FIXME: How do we get a working TeX environment in MSYS2? Disable building the documentation for now. run: | echo $PATH which $CC echo $CC --version $CC --version which ${CXX% *} echo ${CXX% *} --version ${CXX% *} --version which $F77 echo $F77 --version $F77 --version mkdir .build echo "::group::Run configure script" cd .build && ../configure \ JAVA_HOME="" \ --enable-relocate-all \ --disable-docs \ --with-qt=5 \ ${{ matrix.extra-config-flags }} echo "::endgroup::" - name: display config.log if: always() && (steps.configure.outcome != 'skipped') continue-on-error: true # Displaying the log shouldn't take long. Cancel the step if it does. timeout-minutes: 5 run: cat ./.build/config.log - name: build # Spawning processes seems to have a big overhead on this platform. Use a somewhat larger number of parallel processes to compensate for that. run: | make -C ./.build all -j8 V=1 - name: ccache status continue-on-error: true run: ccache -s - name: save ccache # Save the cache after we are done (successfully) building uses: actions/cache/save@v5 with: path: ${{ steps.ccache-prepare.outputs.ccachedir }} key: ${{ steps.ccache-prepare.outputs.key }} - name: check id: run-test-suite # Continuing on error in this step means that jobs will be "green" even # if the test suite crashes. But if we don't continue, we'll loose the # ccache and other jobs will be cancelled, too. # It would be nice if we could mark the job as "yellow" (and continue) # in that case. The second best thing is to display a warning in the # job summary (see below). continue-on-error: true timeout-minutes: 60 # mkoctfile seems to have trouble when gcc is called via ccache. So, # remove the directory with the ccache wrappers from PATH. run: | export PATH=$(echo "$PATH" | sed -e "s|$MINGW_PREFIX/lib/ccache/bin:||g") ./.build/run-octave --no-init-file --no-history --no-gui-libs --eval "version -blas, version -lapack" make -C ./.build check RUN_OCTAVE_OPTIONS="--no-gui-libs" | tee ./test-suite.log - name: display test suite log if: always() && (steps.run-test-suite.outcome != 'skipped') continue-on-error: true # Displaying the log shouldn't take long. Cancel the step if it does. timeout-minutes: 5 run: cat ./.build/test/fntests.log - name: test history file creation # see bug #62365 # Pipe to an interactive session to trigger appending the command to # the history. This will trigger the creation of a history file. run: | echo "history_file (make_absolute_filename ('./a/b/c/history')); disp ('test')" | ./.build/run-octave -i [ -f ./a/b/c/history ] || echo "::warning::Creating history file failed" - name: install run: | mkdir -p /c/octave/pkg make -C ./.build DESTDIR=/c/octave/pkg install - name: test stand-alone executable continue-on-error: ${{ matrix.allow-error }} run: | unset CC unset CXX export PATH=$(echo "$PATH" | sed -e "s|$MINGW_PREFIX/lib/ccache/bin:||g") export PATH="/c/octave/pkg/${{ matrix.mingw-prefix }}/bin:$PATH" cd examples/code mkoctfile --link-stand-alone embedded.cc -o embedded ./embedded.exe - name: test Octave packages continue-on-error: ${{ matrix.allow-error }} env: # colon separated list of packages # reasons for including these packages in the CI tests: # * control: builds .oct files from C++ and Fortran sources # * stk: builds .mex files from C sources PACKAGE_NAMES: "control:stk" run: | unset CC unset CXX export PATH=$(echo "$PATH" | sed -e "s|$MINGW_PREFIX/lib/ccache/bin:||g") export PATH="/c/octave/pkg/${{ matrix.mingw-prefix }}/bin:$PATH" IFS=':' read -r -a packages <<< "${PACKAGE_NAMES}" for package in "${packages[@]}"; do printf " \033[0;32m==>\033[0m Octave package \033[0;32m${package}\033[0m\n" echo "::group::Install ${package}" octave --eval "pkg install -verbose -forge ${package}" echo "::endgroup::" echo "::group::Test ${package}" octave --eval "pkg test ${package}" echo "::endgroup::" echo "::group::Test log for ${package}" cat ${GITHUB_WORKSPACE}/fntests.log echo "::endgroup::" done - name: analyze test suite results # Make sure the test summary lists 0 "FAIL"s and no "REGRESSION" run: | [ -n "$(grep -e "FAIL\s*0" ./test-suite.log)" ] || echo "::warning::At least one test failed" [ -z "$(grep -e "REGRESSION" ./test-suite.log)" ] || echo "::warning::At least one regression in test suite" echo Finished analyzing test suite results. - name: compress build artifact if: matrix.msystem == 'MINGW64' continue-on-error: true run: | cd /c/octave/pkg tar -cvzf octave.tar.gz * - name: upload build artifact if: matrix.msystem == 'MINGW64' continue-on-error: true uses: actions/upload-artifact@v6 with: name: ${{ matrix.mingw-prefix }}-octave-${{ steps.ccache-prepare.outputs.timestamp }} path: C:\octave\pkg\octave.tar.gz retention-days: 7 ================================================ FILE: .github/workflows/make-ubuntu.yaml ================================================ name: make-ubuntu on: workflow_dispatch: push: concurrency: ci-ubuntu-${{ github.ref }} jobs: ubuntu: runs-on: ${{ matrix.os }} strategy: # Allow other runners in the matrix to continue if some fail fail-fast: false matrix: # For available GitHub-hosted runners, see: # https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners os: [ubuntu-22.04, ubuntu-24.04, ubuntu-24.04-arm] compiler: [gcc, clang] include: - compiler: gcc compiler-pkgs: "g++ gcc" cc: "gcc" cxx: "g++" extra-config-flags: "" - compiler: clang compiler-pkgs: "clang libc++-dev libc++abi-dev" cc: "clang" cxx: "clang++ -stdlib=libc++" extra-config-flags: "--without-spqr --without-magick" # Clang seems to generally require less cache size (smaller object files?). - ccache-max: 1.2G - os: ubuntu-24.04 compiler: gcc ccache-max: 1.2G - os: ubuntu-22.04 compiler: gcc ccache-max: 1.2G - os: ubuntu-24.04-arm compiler: gcc ccache-max: 1.2G - os: ubuntu-24.04 compiler: clang ccache-max: 400M - os: ubuntu-22.04 compiler: clang ccache-max: 400M - os: ubuntu-24.04-arm compiler: clang ccache-max: 400M name: ${{ matrix.os }} ${{ matrix.compiler }} env: CC: ${{ matrix.cc }} CXX: ${{ matrix.cxx }} steps: - name: get CPU information run: lscpu - name: checkout repository uses: actions/checkout@v6 - name: install dependencies env: COMPILER_PKGS: ${{ matrix.compiler-pkgs }} run: | sudo apt -qq update sudo apt install -y $COMPILER_PKGS autoconf automake bison ccache \ dvipng epstool fig2dev flex gfortran gnuplot-x11 gperf gzip \ icoutils libarpack2-dev libblas-dev libcurl4-gnutls-dev \ libfftw3-dev libfltk1.3-dev libfontconfig1-dev libfreetype6-dev \ libgl1-mesa-dev libgl2ps-dev libglpk-dev libgraphicsmagick++1-dev \ libhdf5-dev liblapack-dev libosmesa6-dev libpcre2-dev \ libqhull-dev libqscintilla2-qt5-dev libqrupdate-dev \ libreadline-dev librsvg2-bin libsndfile1-dev libsuitesparse-dev \ libsundials-dev libtool libxft-dev make openjdk-8-jdk \ perl portaudio19-dev pstoedit qtbase5-dev qttools5-dev \ qttools5-dev-tools rapidjson-dev rsync tar texinfo \ texlive-latex-extra xvfb zlib1g-dev \ ${{ (matrix.os != 'ubuntu-22.04' && matrix.compiler == 'clang') && 'libfast-float-dev' || '' }} - name: prepare ccache # create key with human readable timestamp # used in action/cache/restore and action/cache/save steps id: ccache-prepare run: | echo "key=ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ github.ref }}:$(date +"%Y-%m-%d_%H-%M-%S"):${{ github.sha }}" >> $GITHUB_OUTPUT - name: restore ccache # setup the github cache used to maintain the ccache from one job to the next uses: actions/cache/restore@v5 with: path: ~/.ccache key: ${{ steps.ccache-prepare.outputs.key }} restore-keys: | ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ github.ref }} ccache:${{ matrix.os }}:${{ matrix.compiler }}:refs/heads/default - name: configure ccache env: CCACHE_MAX: ${{ matrix.ccache-max }} run: | test -d ~/.ccache || mkdir ~/.ccache echo "max_size = $CCACHE_MAX" >> ~/.ccache/ccache.conf ccache -s echo "/usr/lib/ccache" >> $GITHUB_PATH - name: build fast-float # There is no fast-float package for Ubuntu 22.04. # We need it as a fallback for LLVM libc++ before version 20. if: matrix.os == 'ubuntu-22.04' && matrix.compiler == 'clang' run: | mkdir -p fast-float && cd fast-float printf "::group::\033[0;32m==>\033[0m Download tarball\n" wget -O fast-float-8.1.0.tar.gz https://github.com/fastfloat/fast_float/archive/refs/tags/v8.1.0.tar.gz echo "::endgroup::" printf "::group::\033[0;32m==>\033[0m Unpack tarball\n" tar zxvf fast-float-8.1.0.tar.gz echo "::endgroup::" printf "::group::\033[0;32m==>\033[0m Configure\n" mkdir -p build && cd build cmake -DCMAKE_BUILD_TYPE=Release ../fast_float-8.1.0 echo "::endgroup::" printf "::group::\033[0;32m==>\033[0m Build\n" cmake --build . echo "::endgroup::" printf "::group::\033[0;32m==>\033[0m Install\n" sudo cmake --install . echo "::endgroup::" - name: bootstrap run: GNULIB_URL=https://github.com/coreutils/gnulib.git ./bootstrap - name: configure id: configure timeout-minutes: 30 run: | echo $PATH echo which ccache which ccache which $CC echo $CC --version $CC --version which ${CXX% *} echo ${CXX% *} --version ${CXX% *} --version which gfortran echo gfortran --version gfortran --version mkdir .build echo "::group::Run configure script" cd .build && ../configure \ CPPFLAGS="-I/usr/include/hdf5/serial -I/usr/include/suitesparse" \ LDFLAGS="-L/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)/hdf5/serial" \ ${{ matrix.extra-config-flags }} echo "::endgroup::" - name: display config.log if: always() && (steps.configure.outcome != 'skipped') continue-on-error: true # Displaying the log shouldn't take long. Cancel the step if it does. timeout-minutes: 5 run: cat ./.build/config.log - name: build # Parallel make seems to fail intermittently when creating the figures # for the manual. The error message says it fails to connect to a # display. Maybe an xvfb issue? # Use single job make for now which seems to work more reliably. run: XDG_RUNTIME_DIR=$RUNNER_TEMP xvfb-run -a make -C ./.build all V=1 - name: ccache status run: ccache -s - name: save ccache # Save the cache after we are done (successfully) building uses: actions/cache/save@v5 with: path: ~/.ccache key: ${{ steps.ccache-prepare.outputs.key }} - name: check id: run-test-suite timeout-minutes: 60 run: | ./.build/run-octave --no-init-file --no-history --eval "version -blas, version -lapack" XDG_RUNTIME_DIR=$RUNNER_TEMP \ xvfb-run -a make -C ./.build check | tee ./test-suite.log - name: display test suite log if: always() && (steps.run-test-suite.outcome != 'skipped') continue-on-error: true # Displaying the log shouldn't take long. Cancel the step if it does. timeout-minutes: 5 run: cat ./.build/test/fntests.log - name: test history file creation # see bug #62365 # Pipe to an interactive session to trigger appending the command to # the history. This will trigger the creation of a history file. run: | echo "history_file (make_absolute_filename ('./a/b/c/history')); disp ('test')" | ./.build/run-octave -i [ -f ./a/b/c/history ] || echo "::warning::Creating history file failed" - name: install run: | sudo make -C ./.build install - name: test stand-alone executable run: | unset CC unset CXX cd examples/code mkoctfile --link-stand-alone embedded.cc -o embedded LD_LIBRARY_PATH="/usr/local/lib/octave/$(octave --eval "disp(version())")" \ ./embedded - name: test Octave packages env: # colon separated list of packages # reasons for including these packages in the CI tests: # * control: builds .oct files from C++ and Fortran sources # * stk: builds .mex files from C sources PACKAGE_NAMES: "control:stk" run: | unset CC unset CXX IFS=':' read -r -a packages <<< "${PACKAGE_NAMES}" for package in "${packages[@]}"; do printf " \033[0;32m==>\033[0m Octave package \033[0;32m${package}\033[0m\n" echo "::group::Install ${package}" octave --eval "pkg install -verbose -forge ${package}" echo "::endgroup::" echo "::group::Test ${package}" octave --eval "pkg test ${package}" echo "::endgroup::" echo "::group::Test log for ${package}" cat ${GITHUB_WORKSPACE}/fntests.log echo "::endgroup::" done - name: analyze test suite results # Make sure the test summary lists 0 "FAIL"s and no "REGRESSION" run: | [ -n "$(grep -e "FAIL\s*0" ./test-suite.log)" ] || exit 1 [ -z "$(grep -e "REGRESSION" ./test-suite.log)" ] || exit 1 echo No unknown failing tests. ================================================ FILE: .hgignore ================================================ syntax: regexp ## The recurrent (^|/) idiom in the regexps below should be understood ## to mean "at any directory" while the ^ idiom means "from the ## project's top-level directory". ## gnulib related files (^|/)gnulib$ # This directory gets created by gnulib during the build. (^|/)libgnu$ # gnulib makes these silly backup files. .~$ ## m4 related files # This directory mostly contains cruft during build time, but it does # contain some Octave code, so be more careful about what we ignore here. ^m4/(?!ax_).+\.m4$ ## Autoconf, Automake automatically generated files ^aclocal\.m4$ ^autom4te\.cache$ ^config\.in\.h$ ^configure$ (^|/)config.cache$ (^|/)config.h$ (^|/)config.log$ (^|/)config.status$ (^|/)Makefile\.in$ ^INSTALL$ ## CMake associated files # Octave doesn't use CMake, but some IDEs use this index file to indicate # what files are part of a project (e.g., CLion). Ignore it (bug #55901). ^CMakeLists.txt$ ## Emacs associated files (^|/)TAGS$ (^|/)semantic.cache$ ## Scripts associated with building Octave ^build-aux/config\.(guess|rpath|sub)$ (^|/)build-aux/check-subst-vars\.sh$ ^build-aux/compile$ ^build-aux/depcomp$ (^|/)build-aux/find-defun-files\.sh$ (^|/)build-aux/find-files-with-tests\.sh$ ^build-aux/install-sh$ ^build-aux/ltmain\.sh$ ^build-aux/mdate-sh$ ^build-aux/missing$ ^build-aux/move-if-change$ (^|/)build-aux/subst-config-vals\.sh$ (^|/)build-aux/subst-cross-config-vals\.sh$ (^|/)build-aux/subst-script-vals\.sh$ ^build-aux/texinfo\.tex$ ^build-aux/ylwrap$ ## Mercurial associated files (^|/)HG-ID$ ## Timestamp files used in build process .*/\.dirstamp$ .*/\.octave-dirstamp$ ## Intermediate compilation results for libraries \.la$ .*/\.libs/ \.Plo$ \.Po$ ## DLDFCN associated files ^libinterp/dldfcn/module\.mk$ (^|/)libinterp/dldfcn/PKG_ADD$ (^|/)libinterp/dldfcn/.*\.oct$ ## liboctave/ directory associated patterns # E.g., liboctave/operators/smx-op-inc.mk ^liboctave/operators/\w+-op-\w+\.mk$ ## scripts/ directory associated patterns # Package files (^|/)scripts/.*/PKG_ADD$ # Java files (^|/)scripts/java/octave\.jar$ (^|/)scripts/java/org/octave/.*\.class$ ## libgui/ directory associated patterns # Files generated by moc tool (^|/)libgui/.*/moc-.*\.(cc|h)$ (^|/)libgui/languages/.*\.qm$ (^|/)libgui/languages/__octave_temp_gui_sources__/* ## Ignore patterns associated with documentation # Info generated files # E.g., doc/faq/OctaveFAQ.info, doc/interpreter/octave.info-4 ^doc/\w+/\w+\.info(-\d+)?$ # Texinfo created temporary directories (^|/)doc/(interpreter|liboctave)/(octave|liboctave)\.t2(d|p)/ # Texinfo created files (^|/)doc/interpreter/.*\.texi$ # DOCSTRINGS files built in the source tree (^|/)(libinterp|scripts)/DOCSTRINGS$ # Generated HTML directories (^|/)doc/interpreter/octave\.html/ (^|/)doc/liboctave/liboctave\.html/ # Miscellaneous auto-generated files (^|/)doc/interpreter/octave\.dvi$ (^|/)doc/interpreter/octave\.ps$ (^|/)doc/interpreter/doc-cache$ (^|/)doc/interpreter/octave_interpreter\.q(ch|hc)$ # Images and scripts for documentation ^doc/interpreter/images\.mk$ (^|/)doc/interpreter/.*\.eps$ (^|/)doc/interpreter/.*\.pdf$ (^|/)doc/interpreter/.*\.png$ (^|/)doc/interpreter/.*\.txt$ # timestamps for doc directory ^doc/\w+/stamp-(vti|\d+)$ ^doc/\w+/version-\w+\.texi$ ## Test associated patterns -tst$ ^.build/* ================================================ FILE: .hgtags ================================================ d56e0d75e7c9760f2a3e750c2d71a5c52bb76b98 ss-2-1-45 dece11da64ed86ac2347f48ffa13fd046bef7de3 ss-2-1-52 e759d01692dbb69ff28b6d70940239d93ff77a9d ss-2-1-53 adf8d68d71438b8b394cbbce59e817a557db5ecd ss-2-1-54 6279796dc2b9ee28e0624b4b91bba1eec6ed292d ss-2-1-55 d0aa1a59b73b879fe18eafb8df54e451f870058c ss-2-1-56 c1cdf2a32cdbf4e0d68aead4bfa597106e844989 ss-2-1-57 ce01dbd7e026c095d9e50beac529e8e955a303f8 ss-2-1-58 1c65a8e44ef95fd4b2b11eb19071e3ecbbe77b76 ss-2-1-59 1e6f653ef1e332fbaab48ac44149b0eb2d3bcfc8 ss-2-1-61 1bf9abc0256be1800b553acdb30b099b4c2a3abb ss-2-1-62 8386cf9811ee90243a965a3782b1b4f6cb107845 ss-2-1-63 5a92c3177fc6c038bc93745f6ebc6a055e602b96 before-gnuplot-split e2ed74b9bfa052ce499b7f419e8d204123c49af0 after-gnuplot-split 996a08a3eb068ce8002f54170fae755f9142d9a4 ss-2-9-0 5c2f5830179082f18658d5a9e68087938444581e ss-2-9-1 57b5030f5737ef9a1ac588b32e6c828358fac801 before-64-bit-merge 9302581b820d71e6e3ae722b68e5923aebd46157 ss-2-9-2 06585668a971b21818cacedbab1e11a98c11c5a0 ss-2-9-3 f16c05db625059770b94eec0af027bbe74d2ce62 ss-2-9-4 cda6a105ae9a30f9cd8032b1f49c2cfecfc04f6c before-ov-branch acb4a1e0b311c47bc957a48bf6af7f77e9c80fab ss-2-9-6 b2e1be30c8e94902e6557c1edba2c4f37ff7bdf8 ss-2-9-7 d542d919783961dce51ee8fc06f65b8f2cfe4156 ss-2-9-8 60f9ced8ab534e65f27d95a712d97ba6add6cd8d ss-2-9-9 12b676a0b18395af2fa0ccceb516447d8be6ad03 before-graphics-branch a848b846cb3ac279782b7fef8270a62ca4578539 ss-2-9-10 3e2cfed6c87e2019cb1584211068b9c581331ccb before-object-branch 10da0f6d85c260bb5f640436e42d633a57ccda9b ss-2-9-11 db6d908e8a03a42760a45c7fd29eae074e505f7c ss-2-9-12 afbd31bb7b4e001c6c16d41eb908aa66bed64352 ss-2-9-13 fc55a5e1760b832a672d9de3b53888a3d6793d21 ss-2-9-14 0b91144f9533b05d14fb5692ed67d8c6f500230f ss-2-9-15 5608935ff5228a90d34fa80dce3dab2462d20fd3 ss-2-9-16 77de8319c337b39a477d5433348e4597ad61abe0 ss-2-9-17 9f02c32eb70d3e6d0c42a2fd5f3b862f4d6c6bcc ss-2-9-18 89d546610556ee47ec634ab8c3e441e1db248873 ss-2-9-19 274d9642ac1032fcc4996a3cac80cfe5fd20f8a4 release-3-0-0 af10baa6391596c3713385d7b6c66c93ee935e87 ss-3-1-50 a5d1e27ee1f4c3fd66c489e83fdb40f92bf1bf43 ss-3-1-51 739141cde75a22b9ac9b5b327ea30c61fd357748 ss-3-1-52 bd1b1fe9c6e952202bf5878cd042a168f6df6ddd ss-3-1-53 3c3cbe8f18e03c73cc34494c8037d8a45a30bf7d ss-3-1-54 5e276a0b999747b72af34e72eb63f64640da6399 ss-3-1-55 a1d20052517a950033896f5a876de8f3ee520138 release-3-2-0 74be4b7273e43952e1afcd9ad979d35667c7f82e ss-3-3-50 79a56d0a6a0d693ebf461c456951b20dfbcde140 ss-3-3-51 229675bb7647f7e7e499bcb5acacc8eabe7f3697 ss-3-3-52 6c69a7c39039bccd5a2fe481fcc7f896c82b160b ss-3-3-53 3cbc0d77db48aec32bcb202d09a036d2cb9cc3b9 ss-3-3-53 bd2643f0ce57d070963bedd48857405f6924aa85 ss-3-3-54 695141f1c05cf1b240592bdd18e7a1503bb2a539 ss-3-3-55 901d466ee55ac902a875ec0ade6f1eccef0841dc release-3-4-1 3666e8e6f96e6899b8306d6ea9614aadf0500d67 release-3-4-2 b0e70a71647b671ebcfa7a79af1ae6d3c0f52065 release-3-4-3 3781981be535e80d44c85373b8fdaa60ca5cd097 ss-3-5-90 ff5588774680d4f54567311fc109c8e351950f1c ss-3-5-91 a737b3fb9c4d89d3694da6b4e623aeee64b212e1 ss-3-5-92 72aebe6196414e38ef802469ff6e238f914f04c9 rc-3-6-0-0 64d9f33313cc8c691974bcd123357e24bccbabdc rc-3-6-0-1 704f7895eef03008dd79848eb9da4bfb40787d73 release-3.6.0 95c43fc8dbe1a07a46fefb3372df5b2309d874fd rc-3-6-1-0 0000000000000000000000000000000000000000 release-3-2-4 e320928eeb3aa2370b792e83dafc3e0ddecdc871 release-3-2-4 ba4d6343524b406b0d15aee34579f80783581c54 release-3-6-1 704f7895eef03008dd79848eb9da4bfb40787d73 release-3-6-0 f947d2922febf12dcd1fb6e21b356756ecb54e55 rc-3-6-2-0 4460c4fb20e6a5d3b1972fa737d4e00eb921545a rc-3-6-2-2 551566201318bf615b27c60ccf9368f4844008bd release-3-6-2 a95432e7309ca6fc776c02939264bb6d443f3525 release-3-6-3 2e8eb9ac43a5f8cfaf0423814a312ed47cb80485 rc-3-6-4-0 df1aceb8f0bc6b5b5062907931cc663467f57d93 ss-3-7-1 858cbf6fc2ec1c232f5cf1d75dc344439b39a89c rc-3-6-4-1 faefa1bea8ddae3cab170afdeab68d3d15c4e623 ss-3-7-2 0000000000000000000000000000000000000000 ss-3-7-2 23a7661e529ae9bfc91693618f8c314c31f695ca ss-3-7-2 cc5a7d1233f3acea85648baeb754fc0e8f225225 rc-3-6-4-2 b29b10fbb7448cdfe29322446e1a589e7fe1a40a release-3-6-4 4e50bd2946d8563d3e201cc04b3ba0720c991b06 ss-3-7-4 608e307b49149b32a6d09c2f06493d04d3af9be4 ss-3-7-5 3a9efb68272df556dccb84c87933dd8238e88902 ss-3-7-6 cc13924a4266fb0359f59fabdce11071e6051d48 ss-3-7-7 d734216aa2b1022c190e6b07d7ccdd59fe15678f rc-3-8-0-1 f1fa148766d623f7f24cf541ea8b88d8c1b63d33 rc-3-8-0-2 b72bcf5f78cc2231e9bf2735d3b8d92779fc4dff release-3-8-0 85d31344fb23725791bc687337295d47416b9c17 rc-3-8-1-2 02ce68d63fba31cd14ac060c087212a032ae3202 rc-3-8-1-3 dd669c2ae76c167613f54d6f4db0130fa2124cac rc-3-8-1-4 43cc202335dc4a53a3d8fc9ca90acaa81d2e63d3 release-3-8-1 492c5614953571a0b07f4c1621cc7bc5c85c0251 rc-3-8-2-1 46df2c7b8f4dec400ce353370f2e47a02926026d rc-3-8-2-2 a66548dc07b0fc9b7d37a4be065aa15e8243c96a release-3-8-2 52d2bbf49c922440621b42b1c1679f0e55462485 rc-4-0-0-1 eba80000fa0dad32ba0f1cd767dd826d1ce1aba6 rc-4-0-0-2 065f933ef08318e40b81f7fe75236e6175088117 rc-4-0-0-3 42bb3a776c9fcc008669f382d2409297c4a901b3 rc-4-0-0-4 3ccc2d02e64b61c6827009d42e5b12274e7ba5fc release-4-0-0 20b17dda0e0c838646dfdccec153ec8cdf6d3c37 rc-4-0-1-1 0cfcc178432bfc7cfdef5dca96e74ec5884ba752 rc-4-0-1-2 a58d5e6df908199c4aea83f78077b81289d2a0ad rc-4-0-1-3 2b66f30a0de7a09801c2a3566021cde7e194d3d3 rc-4-0-1-4 5162cdfb56d8e31ad00dc260a26d1c92c69c2acf release-4-0-1 acaf1e137c5e6f201a6689a99a6568d0dfe9e9ed release-4-0-2 00f7b278defd1b6b911cde1ff20390fb298f4c5b release-4-0-3 b8eeca55fa8113853a19b1b1ab4d0bb6471dea18 rc-4-2-0-1 9d50627498141d150755d18ab8e71a3220e40147 rc-4-2-0-2 96817eafc7997e19a1f89873c05098e08fea1c02 rc-4-2-0-3 69ac19073ae630b276ff7788b78f72782f281657 rc-4-2-0-4 708a4fcb73820484a3af94dd4d18453c4d9b29c9 release-4-2-0 1327ea4f5a931a6cc2a6d4790af58cf16de4702b release-4-2-1 94f8e2b5a88b79974084c0ae541cacbcc62d64f6 release-4-2-2 a5ad9c053e41ed39a8c69ff99936cbcf18256abf rc-4-3-90 ff59be58f0282e418fb3447d5442fa1d618cfe10 rc-4-3-91 4c14c002cabeb60cf693d5a032b6285f92804643 rc-4-3-92 cf84db75ab57d4fc5d18682c6ecf9d2e1f66ea94 release-4-4-0 1f46d371968c5c2e9d5fac537046db8005b71e41 release-4-4-1 82865ccb62c2aa2f1273683b8343a80e2e6a0e83 rc-5-0-90 af47f245a2ada829fa87f339bbe8e7c64a189bda rc-5-0-91 d05d6eebde105895c0972d8bb8bc7f090295cb86 release-5-1-0 ec0690a6955c8d5236b29b975c09a1f2a5a1559c rc-5-1-90 eb46a9f471647626d3a199e40d0c235d54e2b256 release-5-2-0 844b3b9bab7a137c08cbec7cb0ae3bca2ae0b70d rc-6-0-90 c67f39732d1441a685a524586ebcf2246641b4f5 rc-6-0-92 9f39338a23cbbff9bb2681d536451340cb08df12 release-6-1-0 5cfdf97c5350d41018311dace50e3486176eefa6 release-6-2-0 55008004bb9a6e95256d57e882e3716ac45b15ee rc-6-1-90 9d70a797d54a194b185f89829b0d9cefb93e58ff rc-6-2-90 754013c3658760136fe473911ba96165a07cb1f5 release-6-3-0 3dc9decc98f97d0b05fff9dbb66b2400d6139830 rc-6-3-90 8d7671609955afabf79ceff678cc41eea61583f2 release-6-4-0 347dbc9049d55b63435d710e1d9d826cbfe5e54c rc-7-0-90 266610d855194b2a55e6b501ccc302e6c0d8f6d0 rc-7-0-92 04120d65778a403e11ac4280bf53f330eded75e3 release-7-1-0 48fcfbaea2cdcfffaf1058c95832a33f70419a6f rc-7-1-90 6c1e310b223029c3a21abe9629f4200560024c3a release-7-2-0 2c037ce004502260228925e651dc077573366ba2 release-7-3-0 74aa32d5fd08ec0398ac8261d4bf5dbd75e8f6a4 rc-8-0-90 75b1efe727d495ae579b9e27a620219dc72d9205 release-8-1-0 fdadf31961bb5b089f5a2b7cd660351434b31de0 release-8-2-0 6fc591af58baccd1f9be398245eda017374d3283 release-8-3-0 78c13a2594f359474f28a93e43b288c9b40afa2c release-8-4-0 99d90c3bd48561b7de68077ac1e116f196f4dd4b rc-9-0-90 d0c18b1446dfce3dd2c9953fb8d51341b680f384 release-9-1-0 75ef583dd829d9190a90295b7e530364c3ff0ed7 rc-9-1-90 f7f956555e4ab8a05d52a9be4c24209670b870d2 release-9-2-0 5854a65df8f59c0071eea5c51ed386ab779729bc release-9-3-0 df465cbba05afa74d56e66204badaff3c50fd503 release-9-4-0 520f82ccab593e1d1c63c1319ab0ee08ecc5f382 rc-10-0-90 417c47651ed55ca2c397500f7a598ab583bc38a2 release-10-1-0 8d42ee70e124180e1ef00e9be2e080b71fd92099 release-10-2-0 8ee1afeed21ef0e5995416e41348457d966abe2a release-10-3-0 1b2865990371a5896f337cb51c3b45a5538b2807 rc-11-0-90 0f2de96b6e238a85b8c277a8ca63786abbf3203e rc-11-0-91 8d2d7049b8a9c51023dc665c17e2c26323db55d0 rc-11-0-92 fa4747e9b5c0790d5c647bf3106a1b76753e9e93 remove 0f2de96b6e238a85b8c277a8ca63786abbf3203e rc-11-0-91 fa4747e9b5c0790d5c647bf3106a1b76753e9e93 rc-11-0-91 fa4747e9b5c0790d5c647bf3106a1b76753e9e93 remove 0000000000000000000000000000000000000000 remove fa4747e9b5c0790d5c647bf3106a1b76753e9e93 rc-11-0-91 0000000000000000000000000000000000000000 rc-11-0-91 4fde0ba0d88a06e97d5f6befa235f006de64c9fd release-11-1-0 ================================================ FILE: CITATION ================================================ To cite GNU Octave in publications use: John W. Eaton, David Bateman, Søren Hauberg, Rik Wehbring (2026). GNU Octave version 11.1.0 manual: a high-level interactive language for numerical computations. URL https://www.gnu.org/software/octave/doc/v11.1.0/ A BibTeX entry for LaTeX users is: @manual{, title = {{GNU Octave} version 11.1.0 manual: a high-level interactive language for numerical computations}, author = {John W. Eaton and David Bateman and S{\o}ren Hauberg and Rik Wehbring}, year = {2026}, url = {https://www.gnu.org/software/octave/doc/v11.1.0/}, } We have invested a lot of time and effort in creating GNU Octave, please cite it when using it. See also 'citation pkgname' for citing Octave packages. ================================================ FILE: COPYING ================================================ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ================================================ FILE: COPYRIGHT.md ================================================ Octave is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Octave is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Octave; see the file COPYING. If not, see . Copyright: - 1987-1988, 1991-1997, 2003-2018 Free Software Foundation - 1992-2024 John W. Eaton - 1993 Fook Fah Yap - 1993 Friedrich Leisch - 1993 Gerhard Kircher - 1993 John C. Campbell - 1993 Per Bothner - 1993 R. Bruce Tenison - 1993 Teresa Twaroch - 1993, 1995 Auburn University - 1993, 1995, 1998-2002, 2004, 2006-2007 A. Scottedward Hodel - 1993, 1996-1999, 2001-2002, 2005-2006 Kurt Hornik - 1993-1997 O. Weber - 1993-1998 Karl Berry - 1994 Castor Fu - 1994 Mark Odegard - 1994 Romolo Manfredini - 1994, 2009 Anthony Richardson - 1994-1995 David Clem - 1994-1997 Frederick (Rick) A Niles - 1995 Paul Eggert - 1995 Thomas Baier - 1995 Vinayak Dutt - 1995, 1997 Klaus Gebhardt - 1997 Ram'on Garc'ia Fern'andez - 1997 Rex A. Dieter - 1997, 1999-2000, 2008 Rolf Fabian - 1997-1999, 2001-2003 Mumit Khan - 1998 Eric Norum - 1998 Philippe Defert - 1998 Richard Allan Holcombe - 1998 Roman Hodek - 1998 Tomislav Goles - 1998, 2000 Georg Thimm - 1998, 2000 John Smith - 1998-2000, 2002-2006, 2012 Andy Adler - 1999 Daniel Calvelo - 1999 Eduardo Gallestey - 1999 Geoff Jacobsen - 1999 James B. Rawlings - 1999 James Macnicol - 1999 Massimo Lorenzin - 1999-2000 Joao Cardoso - 1999-2000 Stephen Eglen - 1999-2002 Ben Sapp - 2000 Joerg Specht - 2000 Marcus Brinkmann - 2000 Michael Reifenberger - 2000 Thomas Walter - 2000, 2002, 2012 Steven G. Johnson - 2000, 2002-2004 Teemu Ikonen - 2000, 2003 Cyril Humbert - 2000, 2003, 2005 Mats Jansson - 2000, 2003, 2007-2008 Gabriele Pannocchia - 2000, 2004, 2006 Etienne Grossmann - 2000, 2005, 2021 James R. Van Zandt - 2000-2001 Matthew W. Roberts - 2000-2002 Cai Jianming - 2000-2002, 2007-2011 Kai Habel - 2000-2007 Paul Kienzle - 2001 Albert Chin-A-Young - 2001 Christoph Spiel - 2001 David Livings - 2001 Heinz Bauschke - 2001 Ondrej Popp - 2001 Ross Lippert - 2001 Thomas Stuart - 2001, 2005-2009, 2012-2016, 2022 Rafael Laboissiere - 2001, 2007 Jean-Francois Cardoso - 2001-2003 Python Software Foundation - 2002 David Billinghurst - 2002 Dirk Laurie - 2002 JD Cole - 2002 Jeff Cunningham - 2002 Matt Tenny - 2002 Nicholas Piper - 2002 Nix - 2002 Peter Van Wieren - 2002, 2006-2009 Francesco Potortì - 2002, 2017 Andreas Stahel - 2002, 2017 Bill Lash - 2002-2003 Dirk Eddelbuettel - 2002-2003, 2007 Joseph P. Skudlarek - 2002-2004 Per Persson - 2003 Aaron A. King - 2003 Danilo Piazzalunga - 2003 David Castelow - 2003 Duncan Temple Lang - 2003 Eric S. Raymond - 2003 Heine Kolltveit - 2003 Lute Kamstra - 2003 Melqart - 2003 Richard Stallman - 2003 Roger Banks - 2003 Russell Standish - 2003 Stefan Monnier - 2003 Thorsten Ohl - 2003, 2005 Arno J. Klaassen - 2003, 2008, 2010-2011 Alois Schlögl - 2003, 2008-2010, 2012, 2014-2015, 2018-2019 Doug Stewart - 2003-2004 Al Niessner - 2003-2004 Petter Risholm - 2003-2007 Quentin H. Spencer - 2003-2013, 2015 David Bateman - 2004 Balint Reczey - 2004 Claude Lacoursiere - 2004 David Hoover - 2004 Federico Zenith - 2004 Fredrik Lingvall - 2004 Glenn Golden - 2004 Hans Ekkehard Plesser - 2004 Heikki Junes - 2004 Jakub Bogusz - 2004 Martin Dalecki - 2004 Oyvind Kristiansen - 2004 Volker Kuhlmann - 2004, 2007-2010 Shai Ayal - 2004, 2011, 2015, 2018 Orion Poplawski - 2004-2005 Stefan van der Walt - 2004-2006 Keith Goodman - 2004-2006, 2008, 2010-2012 Pascal A. Dupuis - 2005 Antoine Moreau - 2005 Benjamin Hall - 2005 Clinton Chee - 2005 Daniel - 2005 Driss Ghaddab - 2005 Erik de Castro Lopo - 2005 Ivana Varekova - 2005 Joel Andersson - 2005 Julius Smith - 2005 Kevin Ruland - 2005 Ludwig Schwardt - 2005 Miroslaw Kwasniak - 2005 Mohamed Kamoun - 2005 Nicolo' Giorgetti - 2005 Orestes Mas - 2005 Shan G. Smith - 2005 Todd Neal - 2005 Tom Holroyd - 2005 Toni Saarela - 2005 Walter Landry - 2005 cctsim - 2005, 2007 Michael Zeising - 2005, 2007-2009, 2012-2018, 2020 Daniel J. Sebald - 2005, 2010 Ben Barrowes - 2005-2006 Jorge Barros de Abreu - 2005-2006 William Poetra Yoga Hadisoeseno - 2005-2006, 2008, 2012 Dmitri A. Sergatskov - 2005-2008 Bill Denney - 2005-2010 Søren Hauberg - 2006 Atsushi Kajita - 2006 Christopher Hulbert - 2006 Don Bindner - 2006 Geoffrey Knauth - 2006 Henry Mollet - 2006 Jim Peterson - 2006 Kai Labusch - 2006 Ken Kouno - 2006 Larrie Carr - 2006 Martin Costabel - 2006 Stephen Fegan - 2006 Yozo Hida - 2006, 2011 Michael Creel - 2006-2007 Arno Onken - 2006-2007 Bob Weigel - 2006-2007 Luis F. Ortiz - 2006-2007, 2009 Olli Saarela - 2006-2008 Juhani Saastamoinen - 2006-2008, 2010 Kim Hansen - 2006-2009 Alexander Barth - 2006-2009 Thomas Treichl - 2006-2009, 2011 Benjamin Lindner - 2006-2011 Thomas Weber - 2006-2015 Michael Goffioul - 2007 Alex Zvoleff - 2007 Alexander Klimov - 2007 Aquil H. Abdullah - 2007 Baylis Shanks - 2007 Christian Cornelssen - 2007 Christof Zeile - 2007 Christoph Mayer - 2007 Claudio Belotti - 2007 D. Martin - 2007 Donald Parsons - 2007 Geordie McBain - 2007 Jim Langston - 2007 Kristan Onu - 2007 Laurent Mazet - 2007 Luther Tychonievich - 2007 Marcus W. Reble - 2007 Matthias Drochner - 2007 Michael Weitzel - 2007 Moritz Borgmann - 2007 Peter A. Gustafson - 2007 Sebastian Schubert - 2007 Steve M. Robbins - 2007 Steven Mestdagh - 2007 Tarmigan Casebolt - 2007 Thomas Kasper - 2007 Ulrich Tipp - 2007 Utkarsh Upadhyay - 2007 Vittoria Rezzonico - 2007 Zhi Wang - 2007, 2009 Joel Keay - 2007, 2009-2015, 2017-2018, 2022 Olaf Till - 2007-2008 Muthiah Annamalai - 2007-2009 Brian Gough - 2007-2009 Jason Riedy - 2007-2013, 2015-2019, 2023 Marco Caliari - 2007-2013, 2018 John P. Swensen - 2007-2016, 2018-2020 Carlo de Falco - 2007-2016, 2019 Ben Abbott - 2008 Emil Lucretiu - 2008 G. (Gert) van Antwerpen - 2008 James Packer - 2008 Jarkko Kaleva - 2008 Jonathan Stickel - 2008 Julian Schnidder - 2008 Julien Pommier - 2008 Krzesimir Nowak - 2008 Maciek Gajewski - 2008 Mark van Rossum - 2008 Martin Weiser - 2008 Primozz Peterlin - 2008 Richard Bovey - 2008 Ryan Hinton - 2008 Sebastien Loisel - 2008 Tetsuro KURITA - 2008 Thomas L. Scofield - 2008 Timo Lindfors - 2008, 2010 Brett Stewart - 2008, 2010-2012 Konstantinos Poulios - 2008, 2011, 2013-2019 Andreas Weber - 2008, 2011-2012 Kris Thielemans - 2008, 2018 Dave Goel - 2008-2009 Ivan Sutoris - 2008-2009 Radek Salac - 2008-2010 Ryan Rusaw - 2008-2010 VZLU Prague - 2008-2011 Jaroslav Hajek - 2008-2011 Thorsten Meyer - 2008-2011, 2015-2016, 2018-2019 Tatsuro Matsuoka - 2008-2013, 2018 Marco Atzeri - 2008-2015, 2017 Michael D. Godfrey - 2009 Aleksej Saushev - 2009 Alexander Mamonov - 2009 Ansgar Burchardt - 2009 Aravindh Krishnamoorthy - 2009 Bernard Desgraups - 2009 Bertrand Roessli - 2009 Carmine Paolino - 2009 Carsten Clark - 2009 Christophe Tournery - 2009 Daniel Gualberto - 2009 E. Joshua Rigler - 2009 Eric Chassande-Mottin - 2009 Frederick Umminger - 2009 Joe Rothweiler - 2009 Kacper Kowalik - 2009 Kai NODA - 2009 Kristian Rumberg - 2009 Nokia Corporation and/or its subsidiary(-ies). - 2009 Peter L. Søndergaard - 2009 Peter O'Gorman - 2009 Pieter Eendebak - 2009 Rob Mahurin - 2009 Robert Millan - 2009 Stefan Hepp - 2009 Steffen Groot - 2009 Steven Verstoep - 2009 Thomas D. Dean - 2009, 2011 Lukas Reichlin - 2009, 2011-2012 Robert T. Short - 2009-2010, 2012 Martin Helm - 2009-2011 David Grundberg - 2009-2011 Petr Mikulik - 2009-2024 Rik Wehbring - 2010 Brad Froehle - 2010 Christos Dimitrakakis - 2010 Daisuke TAKAGO - 2010 David Gesswein - 2010 Gunnar Farnebäck - 2010 Joshua Redstone - 2010 Judd Storrs - 2010 Jyh-Miin Lin - 2010 Liam Groener - 2010 Marc Vinyals - 2010 Pedro Gonnet - 2010 Peter van den Biggelaar - 2010 Qianqian Fang - 2010-2012 Iain Murray - 2010-2017 Jordi Gutiérrez Hermoso - 2010 Nicholas J. Higham - 2010 Awad H. Al-Mohy - 2011 Alexander Klein - 2011 Andriy Shinkarchuck - 2011 Andy Buckle - 2011 David Finkel - 2011 David Wells - 2011 Fabian Deutsch - 2011 Giles Anderson - 2011 Hannes Müller - 2011 John Bradshaw - 2011 Karsten Trulsen - 2011 Matthias Jüschke - 2011 Patrick Häcker - 2011 Paul Boven - 2011 Richard Campbell - 2011 Roman Belov - 2011 Sean Young - 2011 Vanya Sergeev - 2011-2012 Fotios Kasolis - 2011-2012 Jacob Dawid - 2011-2012 Jarno Rajahalme - 2011-2012 John Hunt - 2011-2012, 2014, 2016 Daniel Kraft - 2011-2013 Júlio Hoffimann Mendes - 2011-2018, 2020, 2024 David Miguel Susano Pinto (carandraug) - 2011-2023 Philip Nienhuis - 2011-2025 Torsten Lilge - 2012 Alexander Graf - 2012 Alexander Hansen - 2012 Corbin Champion - 2012 Elias Pipping - 2012 Fabio Rossi - 2012 Garrett G Euler - 2012 Israel Herraiz - 2012 Jen Stewart - 2012 Melvin Robinson - 2012 Miguel Bazdresch - 2012 Nicholas Musolino - 2012 Ronald van der Meer - 2012 Ryan Starret - 2012 Sergey Dudoladov - 2012 Stefan Husmann - 2012 Sunghyun Cho - 2012 Vivek Dogra - 2012, 2014-2019, 2022 Colin Macdonald - 2012-2013 Axel Mathéi - 2012-2013 Ed Meyer - 2012-2013 Erik Kjellson - 2012-2013 Max Brister - 2012-2013 Muhali - 2012-2013 Richard Crozier - 2012-2013 Thorsten Liebig - 2012-2016, 2018-2019, 2024 Juan Pablo Carbajal - 2012-2024 Pantxo Diribarne - 2012-2021 Mike Miller - 2013 Adam H Aitkenhead - 2013 Amod Mulay - 2013 Andre da Costa Barros - 2013 Andy Register - 2013 Artem Krosheninnikov - 2013, 2021-2025 Arun Giridhar - 2013, 2023 Ben Kurtz - 2013 Carl Osterwisch - 2013 Catalin Codreanu - 2013 Clemens Buchacher - 2013 Corey Thomasson - 2013 Craig Hudson - 2013 David Turner - 2013 FZI Forschungszentrum Informatik Karlsruhe - 2013 Falk Tannhäuser - 2013 Janne Olavi Paanajärvi - 2013 Jens Restemeier - 2013 Leopoldo Cerbaro - 2013 Marco Cecchetti - 2013 Patrick Noffke - 2013 Risto Vanhanen - 2013 Rüdiger Sonderfeld - 2013 Serhiy Zahoriya - 2013 Vytautas Jančauskas - 2013, 2015-2019, 2023-2024 Sébastien Villemot - 2013, 2016 Sander van Rijn - 2013, 2018, 2020 Valentin Ortega - 2013-2014 Kyle Guinn - 2013-2014 LYH - 2013-2014 Markus Appel - 2013-2014 Mike Sander - 2013-2014 Philipp Kutin - 2013-2014 PrasannaKumar Muralidharan - 2013-2014, 2016-2017, 2022 Nir Krakauer - 2013-2014, 2016-2019, 2022 Julien Bect - 2013-2015 Stefan Mahr - 2013-2015, 2018, 2022 Felipe G. Nievinski - 2013-2022 Kai T. Ohlhus - 2013-2020, 2022-2023 John Donoghue - 2014 Ahsan Ali Shahid - 2014 Branden Archer - 2014 Colin Foster - 2014 David Spies - 2014 Drew Abbot - 2014 Edmund Grimley Evans - 2014 Eduardo Ramos Fernández - 2014 Endre Kozma - 2014 Jason Alan Palmer - 2014 Joachim Wiesemann - 2014 Johannes Zarl - 2014 José Vallet - 2014 Lasse Schuirmann - 2014 Marco Vitetta - 2014 Marko Seric - 2014 Markus Bergholz - 2014 Nathan Podlich - 2014 Pedro Angelo - 2014 Pooja Rao - 2014 Rolando Pereira - 2014 Sergey Plotnikov - 2014 Serviscope Minor - 2014 Stefan Beller - 2014 Vaibhav Gupta - 2014 Willem Atsma - 2014, 2019 Michael C. Grant - 2014-2015 Allan Jacobs - 2014-2016 Eugenio Gianniti - 2014-2016 Stefan Miereis - 2014-2016, 2018 Massimiliano Fasi - 2015 Akira Noda - 2015 Amro - 2015 Armin Müller - 2015 Bernardo Sulzbach - 2015 Cillian O'Driscoll - 2015 Claudius Zingerli - 2015 Ederag - 2015 Ethan Biery - 2015 Ilya Kurdyukov - 2015 Johannes Leuschner - 2015, 2022 Ken Marek - 2015 Michele Zaffalon - 2015 Rafael Monteiro - 2015 Sahil Badyal - 2015 Yu Liu - 2015, 2017 Michael Barnes - 2015, 2017 Piotr Held - 2015-2016 Dmitry Roshchin - 2015-2016 Jacapo Corno - 2015-2016, 2021-2023 José Luis García Pallero - 2015-2016 Oliver Heimlich - 2015-2016, 2018 Sebastian Schöps - 2015-2016, 2019 Hartmut Gimpel - 2015-2017 Avinoam Kalma - 2015-2017 Lachlan Andrew - 2015-2025 Nicholas R. Jankowski - 2015 Mudit Sharma - 2016 Abhinav Tripathi - 2016 Andrew Thornton - 2016 Atri Bhattacharya - 2016 Barbara Lócsi - 2016 Damjan Angelovski - 2016 Francesco Faccio - 2016 Garrett Euler - 2016 Joakim Andén - 2016 NVS Abhilash - 2016, 2021 Robert Jenssen - 2016 Stephen Montgomery-Smith - 2016-2017 Ernst Reissner - 2016-2020, 2022 Lars Kindermann - 2016-2025 Markus Mützel - 2017 Brad Kennedy - 2017, 2022 Georg Wiora - 2017 Hugo Raguet - 2017 Lasse Kliemann - 2017 Richard Zweig - 2017 Tejaswi D Prakash - 2017 Victor Norton - 2017-2019, 2023 Alexander Wilms - 2017-2023 Guillaume Flandin - 2017-2019, 2021-2022 Michael Leitner - 2017-2019, 2021 Michele Ginesi - 2017-2019 Sahil Yadav - 2018 Avlas - 2018 Cristiano Dorigo - 2018 Dildar Sk - 2018, 2021 Gene Harvey - 2018 Joe Winegarden - 2018 Maor Shutman - 2018 Ronny Standtke - 2018 Stefan Schlögl - 2018 Stevie Schraudner - 2018-2024 Antonius R. Burgers - 2018-2021 Andrew Janke - 2018-2019, 2022-2023 Jun Wang - 2019 Anthony Morast - 2019 Bill Greene - 2019, 2021 Christian Himpe - 2019 Daniel Davis - 2019 Eddy Xiao - 2019 Juho Iipponen - 2019 Nguyễn Gia Phong - 2019 Tomi Pannila - 2019 William Greene - 2019-2021, 2024 Markus Meisinger - 2020-2021 Abdallah Elshamy - 2020 Dmitry Astankov - 2020-2024 Fernando Alvarruiz - 2020 Marcel Jacobse - 2020 Martin Köhler - 2020 Michael Witten - 2020 Simon Hau - 2020 Valdas - 2021-2022 Stefan Brüns - 2021, 2023-2024 Petter Tomner - 2021, 2023 Óvári - 2021, 2023 Serkan Önder - 2021 Stefano Guidoni - 2021 Steven Waldrip - 2022-2023 Reinhard Resch - 2022 Adam Dodd - 2022 Andreas Bertsatos - 2022 Christof Kaufmann - 2022 Farid Partonia - 2022 Gaël Bonithon - 2022 Kasper H. Filtenborg - 2022 Luis Eduardo Ribeiro Guerra - 2022 Maged Rifaat - 2022 Remi Thebault - 2022 Shreya Gupta - 2022 Tommi Höynälänmaa - 2023-2024 Hendrik Koerner - 2023 Johannes Pfeifer - 2023 Leonardo - 2023 Linton Miller - 2023 paulo - 2023 Peter Konowski - 2024 Helmut Podhaisky - 2024 Jörg Sommrey See also the list of contributors in the Octave manual (the file doc/interpreter/contributors.in in the sources). ================================================ FILE: Makefile.am ================================================ # Makefile for Octave ######################################################################## ## ## Copyright (C) 1993-2026 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## distribution or . ## ## This file is part of Octave. ## ## Octave is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## . ## ######################################################################## # This Makefile requires GNU Make features. export AWK export GREP export FIND export SED export SHELL export PERL export TAR_OPTIONS version := ${OCTAVE_VERSION} api_version := ${OCTAVE_API_VERSION} # Lex flags AM_LFLAGS = @LFLAGS@ # Until modern Bison rules are handled by autoconf/automake. AM_V_BISON = $(am__v_BISON_$(V)) am__v_BISON_ = $(am__v_BISON_$(AM_DEFAULT_VERBOSITY)) am__v_BISON_0 = @echo " BISON " $@; am__v_BISON_1 = BISON = @BISON@ BISONCOMPILE = $(BISON) $(AM_BISONFLAGS) $(BISONFLAGS) # Define YACC to pacify automake YACC = $(BISON) if AMCOND_LIB_VISIBILITY_FLAGS OCTAVE_VISIBILITY_FLAGS = ${CFLAG_VISIBILITY} endif # Fortran compiler flags. AM_FFLAGS = ${FPICFLAG} @FFLAGS@ $(OCTAVE_VISIBILITY_FLAGS) # C compiler flags. AM_CFLAGS = ${CPICFLAG} ${XTRA_CFLAGS} ${WARN_CFLAGS} $(OCTAVE_VISIBILITY_FLAGS) # ifeq (${INCLUDE_DEPS},no) # omit_deps = true; # endif # C++ compiler flags. AM_CXXFLAGS = ${CXXPICFLAG} ${XTRA_CXXFLAGS} ${WARN_CXXFLAGS} $(OCTAVE_VISIBILITY_FLAGS) ADDRESS_SANITIZER_ENABLED = @ADDRESS_SANITIZER_ENABLED@ ADDRESS_SANITIZER_OPTIONS = @ADDRESS_SANITIZER_OPTIONS@ FFTW_XCPPFLAGS = @FFTW_XCPPFLAGS@ FFTW_XLDFLAGS = @FFTW_XLDFLAGS@ FFTW_XLIBS = @FFTW_XLIBS@ SPARSE_XCPPFLAGS = @SPARSE_XCPPFLAGS@ SPARSE_XLDFLAGS = @SPARSE_XLDFLAGS@ SPARSE_XLIBS = @SPARSE_XLIBS@ # Linker flags and dependencies if AMCOND_CLANG_PTHREAD_WARNING AM_LDFLAGS = -Wc,-Qunused-arguments endif GNULIB_LINK_DEPS = @GNULIB_LINK_DEPS@ LIBOCTAVE_LINK_DEPS = @LIBOCTAVE_LINK_DEPS@ LIBOCTAVE_LINK_OPTS = @LIBOCTAVE_LINK_OPTS@ LIBOCTINTERP_LINK_DEPS = @LIBOCTINTERP_LINK_DEPS@ LIBOCTINTERP_LINK_OPTS = @LIBOCTINTERP_LINK_OPTS@ OCTAVE_LINK_DEPS = @OCTAVE_LINK_DEPS@ OCTAVE_LINK_OPTS = @OCTAVE_LINK_OPTS@ OCT_LINK_DEPS = @OCT_LINK_DEPS@ OCT_LINK_OPTS = @OCT_LINK_OPTS@ LIBOCTGUI_LINK_DEPS = @LIBOCTGUI_LINK_DEPS@ LIBOCTGUI_LINK_OPTS = @LIBOCTGUI_LINK_OPTS@ OCTAVE_GUI_LINK_DEPS = @OCTAVE_GUI_LINK_DEPS@ OCTAVE_GUI_LINK_OPTS = @OCTAVE_GUI_LINK_OPTS@ # Options used for creating the source distribution. GZIP_ENV = '--best --no-name' SOURCE_MTIME := \ $(shell $(SHELL) $(top_srcdir)/build-aux/get-source-mtime.sh "$(srcdir)") TAR_OPTIONS = $(REPRODUCIBLE_TAR_FLAGS) --mtime=@$(SOURCE_MTIME) # The arguments passed to configure. CONFIG_SUBDIRS = @subdirs@ null = ldpreloadsep = ${null}@ldpreloadsep@${null} image_DATA = octdata_DATA = octdoc_DATA = octetc_DATA = octfonts_DATA = octlocale_DATA = OCT_FILES = OCT_FILE_LIBS = OCT_FILE_PKG_ADD_FILES = DOC_TARGETS = BUILT_DISTFILES = BUILT_NODISTFILES = EXTRA_DIST = GEN_CONFIG_SHELL = BUILT_DISTFILES += \ AUTHORS \ BUGS \ ChangeLog \ HG-ID \ INSTALL.OCTAVE \ NEWS if AMCOND_ENABLE_HG_ID DISABLE_HG_ID_OPTION := else DISABLE_HG_ID_OPTION := --disable endif ## The mk-hg-id.sh script will be executed each time Make runs to ## update the HG-ID file in the build tree if it is out of date. HG-ID: $(AM_V_GEN)$(SHELL) $(top_srcdir)/build-aux/mk-hg-id.sh "$(srcdir)" $(DISABLE_HG_ID_OPTION) > $@-t && \ $(simple_move_if_change_rule) .PHONY: HG-ID HG_ID_VAR = $(shell cat ${top_builddir}/HG-ID) EXTRA_DIST += \ CITATION \ COPYING \ INSTALL \ README \ octave.doap \ run-octave.in \ $(BUILT_DISTFILES) AUTOCONF_SUBST_VARS = @AUTOCONF_SUBST_VARS@ ALL_SUBST_VARS = \ $(AUTOCONF_SUBST_VARS) \ abs_top_builddir \ abs_top_srcdir \ api_version \ version DIRSTAMP_FILES = octave_dirstamp = $(am__leading_dot)octave-dirstamp $(DIRSTAMP_FILES): $(AM_V_GEN)$(MKDIR_P) $(@D) && \ : > $@ CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = info_TEXINFOS = BUILT_SOURCES = TEST_FILES = noinst_TEST_FILES = DOC_IMAGES_SRC = BUILT_DOC_IMAGES = BUILT_DOC_IMAGES_EPS = BUILT_DOC_IMAGES_PDF = BUILT_DOC_IMAGES_PNG = BUILT_DOC_IMAGES_TXT = DOC_IMAGES = DOC_IMAGES_EPS = DOC_IMAGES_PDF = DOC_IMAGES_PNG = DOC_IMAGES_TXT = FCN_FILE_DIRS = FCN_FILES = GEN_FCN_FILES = PKG_ADD_FILES = SCRIPTS_IMAGES = JAR_FILES = DOCSTRING_FILES = bin_PROGRAMS = archlib_PROGRAMS = noinst_HEADERS = nodist_noinst_HEADERS = OCTAVE_VERSION_LINKS = OCTAVE_CROSS_TOOLS = OCTAVE_INTERPRETER_TARGETS = octlib_LTLIBRARIES = noinst_LTLIBRARIES = octinclude_HEADERS = nodist_octinclude_HEADERS = DIST_SRC = ALL_LOCAL_TARGETS = # Subdirectories in which to run make recursively. # Other directories are handled directly from this Makefile, # but also review the included module.mk makefile fragments. SUBDIRS = libgnu test # All of build depends on having libgnu. # Add the library to BUILT_SOURCES so it is created early in the build process # This is only a partial solution which works when 'make all' is used. # See bug #45578. BUILT_SOURCES += libgnu/libgnu.la libgnu/libgnu.la: oct-conf-post-private.h oct-conf-post-public.h cd libgnu && $(MAKE) $(AM_MAKEFLAGS) all include liboctave/module.mk include libinterp/module.mk include libmex/module.mk include libgui/module.mk include src/module.mk include scripts/module.mk include doc/module.mk include etc/module.mk include examples/module.mk include m4/module.mk include build-aux/module.mk DIST_HOOKS := \ doc-interpreter-dist-hook \ docs-dist-hook \ fix-file-perms-dist-hook \ hg-id-dist-hook \ metainfo-dist-hook \ icons-dist-hook \ scripts-dist-hook dist-hook: $(DIST_HOOKS) if AMCOND_BUILD_DOCS docs-dist-hook: else docs-dist-hook: @echo "Documentation disabled. Cannot package distribution!" ; exit 1; endif ## Ensure file permissions are consistent on all files included in the ## distribution. Automake takes care of normalizing some permissions of ## normal files and directories. Automake does not ensure that files don't ## have unnecessarily lax write permissions. It also does not ensure that ## executable permissions are set for group and other users. fix-file-perms-dist-hook: -chmod -R go-w "$(distdir)" -find "$(distdir)" -type f -perm -100 -exec chmod a+rx {} \; .PHONY: fix-file-perms-dist-hook if AMCOND_ENABLE_HG_ID hg-id-dist-hook: @test x"$(DIST_IGNORE_HG_STATE)" != x \ || echo $(HG_ID_VAR) | $(GREP) '^[0-9a-f]\{12\}$$' >/dev/null 2>&1 \ || { echo ; \ echo "Packaging distribution requires a clean hg working tree with no uncommitted changes." ; \ echo "Please commit or revert your changes first, or pass DIST_IGNORE_HG_STATE=1." ; \ echo "Cannot package distribution!" ; \ echo ; exit 1; } else hg-id-dist-hook: @echo "Octave was configured with --disable-hg-id. Cannot package distribution!" 1>&2 ; exit 1; endif .PHONY: hg-id-dist-hook if AMCOND_HAVE_ICON_TOOLS icons-dist-hook: else icons-dist-hook: @echo "Packaging distribution requires icotool and rsvg-convert." ; exit 1; endif BUILT_SOURCES += \ oct-conf-post-private.h \ oct-conf-post-public.h \ octave-config.h \ run-octave \ $(DIRSTAMP_FILES) noinst_SCRIPTS = run-octave CLEANFILES += \ config-vars \ make-vars \ oct-file-pkg-add \ octave-config.h \ run-octave DISTCLEANFILES += \ $(DIRSTAMP_FILES) \ $(GEN_CONFIG_INC) \ $(GEN_CONFIG_SHELL) \ .gdbinit MAINTAINERCLEANFILES += \ $(BUILT_DISTFILES) CONFIG_FILES = @ac_config_headers@ @ac_config_files@ nodist_octinclude_HEADERS += \ oct-conf-post-public.h \ octave-config.h OCTAVE_INTERPRETER_TARGETS += \ $(OCT_FILE_PKG_ADD_FILES) ALL_LOCAL_TARGETS += \ $(OCTAVE_INTERPRETER_TARGETS) \ .gdbinit \ $(DOC_TARGETS) all-local: $(ALL_LOCAL_TARGETS) @echo "" @echo "Octave successfully built. Now choose from the following:" @echo "" @echo " ./run-octave - to run in place to test before installing" @echo " make check - to run the tests" @echo " make install - to install (PREFIX=$(prefix))" @echo "" @echo " HG ID for this build is \"$(HG_ID_VAR)\"" @echo "" run-octave: run-octave.in build-aux/subst-script-vals.sh $(AM_V_GEN)$(call simple-filter-rule,build-aux/subst-script-vals.sh) && \ chmod a+rx $@ octave-config.h: config.h build-aux/mk-octave-config-h.sh $(AM_V_GEN)$(SHELL) $(srcdir)/build-aux/mk-octave-config-h.sh $< > $@-t && \ $(simple_move_if_change_rule) config-vars: $(GEN_CONFIG_SHELL) $(AM_V_GEN)rm -f $@-t $@ && \ $(SED) -n 's/ *"$$/"/; s/^\([A-Za-z_][A-Za-z0-9_]*\)=" *\(.*\)" *$$/\1 \2/p' $^ | sort -u > $@-t && \ mv $@-t $@ ## We always have to create this file because values for Make variables ## may be passed on the command line. make-vars: $(file >$@-t) $(foreach v, $(ALL_SUBST_VARS), $(file >>$@-t,$(v) $(value $(v)))) $(AM_V_GEN)mv $@-t $@ .PHONY: make-vars check-subst-vars: build-aux/check-subst-vars.sh make-vars config-vars @$(SHELL) -f build-aux/check-subst-vars.sh make-vars config-vars .PHONY: check-subst-vars .gdbinit: etc/gdbinit $(AM_V_GEN)$(gdbinit-install-rule) NEWS: etc/NEWS.$(OCTAVE_MAJOR_VERSION).md $(AM_V_GEN)rm -f $@ && \ cp $< $@ define changelog-from-hg-log rm -f $@-t && \ if [ -d $(srcdir)/.hg ]; then \ ( cd $(srcdir); \ hg log --no-graph --style=build-aux/changelog.tmpl --prune=b0e60ad4ae26 --only-branch=`hg branch`; \ echo ""; \ echo "See the files in the directory etc/OLD-ChangeLogs for changes before 2011-04-19"; \ ) > $@-t && \ mv $@-t $@; \ elif [ ! -f $@ ] && [ ! -f $(srcdir)/$@ ]; then \ echo "Empty ChangeLog generated because no hg log available" > $@-t && \ mv $@-t $@; \ fi endef ChangeLog: $(AM_V_GEN)$(changelog-from-hg-log) .PHONY: ChangeLog octetc_DATA += \ CITATION \ NEWS if AMCOND_INSTALL_BUILD_LOGS octetc_DATA += config.log endif DIRS_TO_MAKE = \ $(localfcnfiledir) \ $(localapifcnfiledir) \ $(localapipkgdir) \ $(localverfcnfiledir) \ $(localoctfiledir) \ $(localapioctfiledir) \ $(localveroctfiledir) \ $(localarchlibdir) \ $(localapiarchlibdir) \ $(localverarchlibdir) installdirs-local: $(MKDIR_P) $(addprefix $(DESTDIR), $(DIRS_TO_MAKE)) install-data-local: installdirs-local oct-file-pkg-add: $(OCT_FILE_PKG_ADD_FILES) cat $(OCT_FILE_PKG_ADD_FILES) > $@-t \ && mv $@-t $@ install-oct: oct-file-pkg-add $(MKDIR_P) $(DESTDIR)$(octfiledir) if [ -n "`cat $(OCT_FILE_PKG_ADD_FILES)`" ]; then \ $(INSTALL_DATA) oct-file-pkg-add $(DESTDIR)$(octfiledir)/PKG_ADD; \ fi top_build_dir=`pwd` && \ cd $(DESTDIR)$(octlibdir) && \ for ltlib in $(OCT_FILE_LIBS); do \ f=`echo $$ltlib | $(SED) 's,.*/,,'`; \ dl=`$(SED) -n -e "s/dlname='\([^']*\)'/\1/p" < $$top_build_dir/$$ltlib`; \ if [ -n "$$dl" ]; then \ $(INSTALL_PROGRAM) $$dl $(DESTDIR)$(octfiledir)/`echo $$f | $(SED) 's,^lib,,; s,\.la$$,.oct,'`; \ else \ echo "error: dlname is empty in $$ltlib!"; \ exit 1; \ fi; \ lnames=`$(SED) -n -e "s/library_names='\([^']*\)'/\1/p" < $$top_build_dir/$$ltlib`; \ if [ -n "$$lnames" ]; then \ rm -f $$f $$lnames $$dl; \ fi \ done .PHONY: install-oct uninstall-oct: for f in $(notdir $(OCT_FILES)); do \ rm -f $(DESTDIR)$(octfiledir)/$$f; \ done rm -f $(DESTDIR)$(octfiledir)/PKG_ADD .PHONY: uninstall-oct clean-local: doc-clean distclean-local: if [ "x${srcdir}" != "x." ]; then rm -f HG-ID; fi maintainer-clean-local: doc-maintainer-clean ## The 'clean-aminfo' target is defined by Automake >= 1.11. We want to ## distribute all Texinfo docs with the source distribution and not delete ## them on 'clean', so we override this target to do nothing by default. clean-aminfo: define move_if_change_rule if [ -s $(1) ]; then \ ${SHELL} ${top_srcdir}/build-aux/move-if-change $(1) $(2); \ else \ echo "$(1) is empty!" 1>&2; \ rm -f $(1); \ exit 1; \ fi endef define simple_move_if_change_rule $(call move_if_change_rule,$@-t,$@) endef define build-info-commands rm -f $@-t && \ $(SED) \ -e "s|%NO_EDIT_WARNING%|DO NOT EDIT! Generated automatically by Makefile|" \ -e "s|%OCTAVE_HG_ID%|$(HG_ID_VAR)|" $< > $@-t && \ $(simple_move_if_change_rule) endef define simple-filter-rule rm -f $@-t $@ && \ ${SHELL} $(1) < $< > $@-t && \ mv $@-t $@ endef define gdbinit-install-rule if [ -f $@ ] && ! cmp -s $< $@; then \ echo "refusing to overwrite $@ with newer version from $<" 1>&2; \ else \ cp $< $@; \ fi endef define test-file-commands rm -f $@-t $@ && \ ( echo "## DO NOT EDIT! Generated automatically from $( $@-t && \ mv $@-t $@ endef %.cc-tst : %.cc $(AM_V_GEN)$(test-file-commands) %.yy-tst : %.yy $(AM_V_GEN)$(test-file-commands) %.ll-tst : %.ll $(AM_V_GEN)$(test-file-commands) ================================================ FILE: README ================================================ GNU Octave -- a high-level language for numerical computations ============================================================== Copyright (C) 1996-2026 The Octave Project Developers See the file COPYRIGHT.md in the top-level directory of this distribution or . Overview -------- GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems, and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. GNU Octave is normally used through its interactive interface (CLI and GUI), but it can also be used to write non-interactive programs. The GNU Octave language is quite similar to Matlab so that most programs are easily portable. GNU Octave is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. GNU Octave is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Octave; see the file COPYING. If not, see . Availability ------------ The latest released version of Octave is always available from and many mirror sites around the world. You may also find links to binary distributions at . The current development sources may be found under the Source Code tab on [Savannah](https://savannah.gnu.org/projects/octave/). You are encouraged to verify the Octave installation file you download (such as `octave-11.1.0.tar.xz`) as follows: * First, ensure that you are downloading from the official Octave website, or from a GNU mirror linked from the official Octave website. * Next, download the corresponding signature file for the installation file you downloaded, for example `octave-11.1.0.tar.xz.sig`. * Next, run the command ``` gpg --keyserver hkps://keys.gnupg.net --recv-keys B05F05B75D36644B ``` to import John W. Eaton's public key (this needs to be done only once). * Verify the integrity of the file you downloaded with a command like ``` gpg --verify octave-11.1.0.tar.xz.sig ``` * If all is well, then the output should say ``` gpg: Good signature from "John W. Eaton ``` * If the file you downloaded was corrupted or changed by anyone else, then the output will say ``` gpg: BAD signature from "John W. Eaton " ``` If so, you should not install Octave from that file, but should start over. Installation ------------ Building Octave from source requires approximately 475 MB of disk space (or approximately 3.8 GB with debugging symbols). Once installed, Octave uses approximately 75 MB of disk space (or approximately 415 MB if shared libraries are not built or binaries include debugging symbols). To compile Octave, you will need a recent version of: - [GNU Make](https://www.gnu.org/software/make/) - [GNU G++](https://gcc.gnu.org/) or a different C++17 compiler - [GNU Fortran](https://gcc.gnu.org/fortran/), a different Fortran 77 compiler, or [f2c](http://www.netlib.org/f2c/) Octave's Makefiles use features of GNU Make that are not present in other versions of make. If you use `f2c`, you will need a script like `fort77` that works like a normal Fortran compiler by combining `f2c` with your C compiler in a single script. See the file `INSTALL.OCTAVE` or the wiki at for more detailed installation instructions. Bugs and Patches ---------------- The files `BUGS` and `doc/interpreter/bugs.txi` explain the recommended procedure for reporting bugs on the [bug tracker](https://bugs.octave.org) or contributing patches; online resources are also available [here](https://octave.org/support). Documentation ------------- * [Octave's manual](https://docs.octave.org/interpreter/) is a comprehensive user guide covering introductive and more advanced topics. * [Octave's wiki](https://wiki.octave.org) is a user community page, covering various topics and answering [FAQ](https://wiki.octave.org/FAQ). * [Octave's Doxygen](https://docs.octave.org/doxygen/) documentation explains the C++ class libraries. If you notice omissions or inconsistencies in the documentation, please report them at our bug tracker. Specific suggestions for ways to improve Octave and its documentation are always welcome. Reports with patches are even more welcome. Additional Information ---------------------- The Octave website is , and there is a forum at . ================================================ FILE: autogen.sh ================================================ #!/bin/sh # Convenience script for regenerating all autogeneratable files that are # omitted from the version control repository. In particular, this script # also regenerates all aclocal.m4, config.h.in, Makefile.in, configure files # with new versions of autoconf or automake. # Copyright (C) 2003-2025 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Originally written by Paul Eggert. The canonical version of this # script is maintained as top/autogen.sh in gnulib. However, to be # useful to your package, you should place a copy of it under version # control in the top-level directory of your package. The intent is # that all customization can be done with a bootstrap.conf file also # maintained in your version control; gnulib comes with a template # build-aux/bootstrap.conf to get you started. # # Alternatively, you can use an autogen.sh script that is specific # to your package. me="$0" medir=`dirname "$me"` # Read the function library and the configuration. . "$medir"/bootstrap-funclib.sh autogen "$@" ================================================ FILE: autopull.sh ================================================ #!/bin/sh # Convenience script for fetching auxiliary files that are omitted from # the version control repository of this package. # Copyright (C) 2003-2025 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Originally written by Paul Eggert. The canonical version of this # script is maintained as top/autopull.sh in gnulib. However, to be # useful to your package, you should place a copy of it under version # control in the top-level directory of your package. The intent is # that all customization can be done with a bootstrap.conf file also # maintained in your version control; gnulib comes with a template # build-aux/bootstrap.conf to get you started. # # Alternatively, you can use an autopull.sh script that is specific # to your package. me="$0" medir=`dirname "$me"` # Read the function library and the configuration. . "$medir"/bootstrap-funclib.sh autopull "$@" ================================================ FILE: bootstrap ================================================ #! /bin/sh # Bootstrap this package from checked-out sources. scriptversion=2025-06-10.02; # UTC # Copyright (C) 2003-2025 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Originally written by Paul Eggert. The canonical version of this # script is maintained as top/bootstrap in gnulib. However, to be # useful to your package, you should place a copy of it under version # control in the top-level directory of your package. The intent is # that all customization can be done with a bootstrap.conf file also # maintained in your version control; gnulib comes with a template # build-aux/bootstrap.conf to get you started. # Please report bugs or propose patches to bug-gnulib@gnu.org. me="$0" medir=`dirname "$me"` # Read the function library and the configuration. . "$medir"/bootstrap-funclib.sh usage() { cat <. # Originally written by Paul Eggert. The canonical version of this # script is maintained as top/bootstrap-funclib.sh in gnulib. However, # to be useful to your package, you should place a copy of it under # version control in the top-level directory of your package. The # intent is that all customization can be done with a bootstrap.conf # file also maintained in your version control; gnulib comes with a # template build-aux/bootstrap.conf to get you started. nl=' ' # Ensure file names are sorted consistently across platforms. LC_ALL=C export LC_ALL # Honor $PERL, but work even if there is none. PERL="${PERL-perl}" default_gnulib_url=https://https.git.savannah.gnu.org/git/gnulib.git # Copyright year, for the --version output. copyright_year=`echo "$scriptlibversion" | sed -e 's/[^0-9].*//'` copyright="Copyright (C) ${copyright_year} Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later . This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law." # warnf_ FORMAT-STRING ARG1... warnf_ () { warnf_format_=$1 shift nl=' ' case $* in *$nl*) me_=$(printf "$me"|tr "$nl|" '??') printf "$warnf_format_" "$@" | sed "s|^|$me_: |" ;; *) printf "$me: $warnf_format_" "$@" ;; esac >&2 } # warn_ WORD1... warn_ () { # If IFS does not start with ' ', set it and emit the warning in a subshell. case $IFS in ' '*) warnf_ '%s\n' "$*";; *) (IFS=' '; warn_ "$@");; esac } # die WORD1... die() { warn_ "$@"; exit 1; } # ------------------------------ Configuration. ------------------------------ # Directory that contains package-specific gnulib modules and/or overrides. local_gl_dir=gl # Name of the Makefile.am # XXX Not used. gnulib_mk=gnulib.mk # List of gnulib modules needed. gnulib_modules= # Any gnulib files needed that are not in modules. gnulib_files= # A function to be called for each unrecognized option. Returns 0 if # the option in $1 has been processed by the function. Returns 1 if # the option has not been processed by the function. Override it via # your own definition in bootstrap.conf bootstrap_option_hook() { return 1; } # A function to be called in order to print the --help information # corresponding to user-defined command-line options. bootstrap_print_option_usage_hook() { :; } # A function to be called at the end of autopull.sh. # Override it via your own definition in bootstrap.conf. bootstrap_post_pull_hook() { :; } # A function to be called right after gnulib-tool is run. # Override it via your own definition in bootstrap.conf. bootstrap_post_import_hook() { :; } # A function to be called after everything else in this script. # Override it via your own definition in bootstrap.conf. bootstrap_epilogue() { :; } # The command to download all .po files for a specified domain into a # specified directory. Fill in the first %s with the destination # directory and the second with the domain name. po_download_command_format=\ "wget --mirror --level=1 -nd -nv -A.po -P '%s' \ https://translationproject.org/latest/%s/" # When extracting the package name from an AC_INIT invocation, # prefer a non-empty tarname (4th argument of AC_INIT if given), else # fall back to the package name (1st argument with munging). extract_package_name=' /^AC_INIT(\[*/{ s/// /^[^,]*,[^,]*,[^,]*,[ []*\([^][ ,)]\)/{ s//\1/ s/[],)].*// p q } s/[],)].*// p } ' normalize_package_name=' s/^GNU // y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ s/[^abcdefghijklmnopqrstuvwxyz0123456789_]/-/g ' package=$(${AUTOCONF:-autoconf} --trace 'AC_INIT:$4' configure.ac 2>/dev/null) if test -z "$package"; then package=$(sed -n "$extract_package_name" configure.ac) \ || die 'cannot find package name in configure.ac' fi package=$(echo "$package" | sed "$normalize_package_name") gnulib_name=lib$package build_aux=build-aux source_base=lib m4_base=m4 doc_base=doc tests_base=tests gnulib_extra_files=" build-aux/install-sh build-aux/mdate-sh build-aux/texinfo.tex build-aux/depcomp build-aux/config.guess build-aux/config.sub doc/INSTALL " # Additional gnulib-tool options to use. Use "\newline" to break lines. gnulib_tool_option_extras= # Other locale categories that need message catalogs. EXTRA_LOCALE_CATEGORIES= # Additional xgettext options to use. Use "\\\newline" to break lines. XGETTEXT_OPTIONS='\\\ --flag=_:1:pass-c-format\\\ --flag=N_:1:pass-c-format\\\ --flag=error:3:c-format --flag=error_at_line:5:c-format\\\ ' # Package bug report address and copyright holder for gettext files COPYRIGHT_HOLDER='Free Software Foundation, Inc.' MSGID_BUGS_ADDRESS=bug-$package@gnu.org # Files we don't want to import. # XXX Not used. excluded_files= # File that should exist in the top directory of a checked out hierarchy, # but not in a distribution tarball. checkout_only_file=README-hacking # Set this to '.cvsignore .gitignore' in bootstrap.conf if you want # those files to be generated in directories like lib/, m4/, and po/. # Or set it to 'auto' to make this script select which to use based # on which version control system (if any) is used in the source directory. vc_ignore=auto # Set this to true in bootstrap.conf to enable --bootstrap-sync by # default. bootstrap_sync=false # Override the default configuration, if necessary. # Make sure that bootstrap.conf is sourced from the current directory # if we were invoked as "sh bootstrap". conffile=`dirname "$me"`/bootstrap.conf test -r "$conffile" && . "$conffile" # ------------------------- Build-time prerequisites ------------------------- check_exists() { if test "$1" = "--verbose"; then ($2 --version /dev/null 2>&1 if test $? -ge 126; then # If not found, run with diagnostics as one may be # presented with env variables to set to find the right version ($2 --version /dev/null 2>&1 fi test $? -lt 126 } # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. sort_ver() { # sort -V is not generally available ver1="$1" ver2="$2" # split on '.' and compare each component i=1 while : ; do p1=$(echo "$ver1" | cut -d. -f$i) p2=$(echo "$ver2" | cut -d. -f$i) if [ ! "$p1" ]; then echo "$1 $2" break elif [ ! "$p2" ]; then echo "$2 $1" break elif [ ! "$p1" = "$p2" ]; then if [ "$p1" -gt "$p2" ] 2>/dev/null; then # numeric comparison echo "$2 $1" elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison echo "$1 $2" else # numeric, then lexicographic comparison lp=$(printf "%s\n%s\n" "$p1" "$p2" | LANG=C sort -n | tail -n1) if [ "$lp" = "$p2" ]; then echo "$1 $2" else echo "$2 $1" fi fi break fi i=$(($i+1)) done } get_version_sed=' # Move version to start of line. s/.*[v ]\([0-9]\)/\1/ # Skip lines that do not start with version. /^[0-9]/!d # Remove characters after the version. s/[^.a-z0-9-].*// # The first component must be digits only. s/^\([0-9]*\)[a-z-].*/\1/ #the following essentially does s/5.005/5.5/ s/\.0*\([1-9]\)/.\1/g p q' get_version() { app=$1 $app --version >/dev/null 2>&1 || { $app --version; return 1; } $app --version 2>&1 | sed -n "$get_version_sed" } check_versions() { ret=0 while read app req_ver; do # We only need libtoolize from the libtool package. if test "$app" = libtool; then app=libtoolize fi # Exempt git if git is not needed. if test "$app" = git; then $check_git || continue fi # Honor $APP variables ($TAR, $AUTOCONF, etc.) appvar=$(echo $app | LC_ALL=C tr '[a-z]-' '[A-Z]_') test "$appvar" = TAR && appvar=AMTAR case $appvar in GZIP) ;; # Do not use $GZIP: it contains gzip options. PERL::*) ;; # Keep perl modules as-is *) eval "app=\${$appvar-$app}" ;; esac # Handle the still-experimental Automake-NG programs specially. # They remain named as the mainstream Automake programs ("automake", # and "aclocal") to avoid gratuitous incompatibilities with # preexisting usages (by, say, autoreconf, or custom autogen.sh # scripts), but correctly identify themselves (as being part of # "GNU automake-ng") when asked their version. case $app in automake-ng|aclocal-ng) app=${app%-ng} ($app --version | grep '(GNU automake-ng)') >/dev/null 2>&1 || { warn_ "Error: '$app' not found or not from Automake-NG" ret=1 continue } ;; # Another check is for perl modules. These can be written as # e.g. perl::XML::XPath in case of XML::XPath module, etc. perl::*) # Extract module name app="${app#perl::}" if ! $PERL -m"$app" -e 'exit 0' >/dev/null 2>&1; then warn_ "Error: perl module '$app' not found" ret=1 fi continue ;; esac if [ "$req_ver" = "-" ]; then # Merely require app to exist; not all prereq apps are well-behaved # so we have to rely on $? rather than get_version. if ! check_exists --verbose $app; then warn_ "Error: '$app' not found" ret=1 fi else # Require app to produce a new enough version string. inst_ver=$(get_version $app) if [ ! "$inst_ver" ]; then warn_ "Error: '$app' not found" ret=1 else latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2) if [ ! "$latest_ver" = "$inst_ver" ]; then warnf_ '%s\n' \ "Error: '$app' version == $inst_ver is too old" \ " '$app' version >= $req_ver is required" ret=1 fi fi fi done return $ret } print_versions() { echo "Program Min_version" echo "----------------------" printf %s "$buildreq" echo "----------------------" # can't depend on column -t } # check_build_prerequisites check_git check_build_prerequisites() { check_git="$1" # gnulib-tool requires at least automake and autoconf. # If either is not listed, add it (with minimum version) as a prerequisite. case $buildreq in *automake*) ;; *) buildreq="automake 1.9 $buildreq" ;; esac case $buildreq in *autoconf*) ;; *) buildreq="autoconf 2.59 $buildreq" ;; esac # When we can deduce that gnulib-tool will require patch, # and when patch is not already listed as a prerequisite, add it, too. if test -d "$local_gl_dir" \ && ! find "$local_gl_dir" -name '*.diff' -exec false {} +; then case $buildreq in *patch*) ;; *) buildreq="patch - $buildreq" ;; esac fi if ! printf '%s' "$buildreq" | check_versions; then echo >&2 if test -f README-prereq; then die "See README-prereq for how to get the prerequisite programs" else die "Please install the prerequisite programs" fi fi # Warn the user if autom4te appears to be broken; this causes known # issues with at least gettext 0.18.3. probe=$(echo 'm4_quote([hi])' | autom4te -l M4sugar -t 'm4_quote:$%' -) if test "x$probe" != xhi; then warn_ "WARNING: your autom4te wrapper eats stdin;" warn_ "if bootstrap fails, consider upgrading your autotools" fi } # find_tool ENVVAR NAMES... # ------------------------- # Search for a required program. Use the value of ENVVAR, if set, # otherwise find the first of the NAMES that can be run. # If found, set ENVVAR to the program name, die otherwise. # # FIXME: code duplication, see also gnu-web-doc-update. find_tool () { find_tool_envvar=$1 shift find_tool_names=$@ eval "find_tool_res=\$$find_tool_envvar" if test x"$find_tool_res" = x; then for i; do if check_exists $i; then find_tool_res=$i break fi done fi if test x"$find_tool_res" = x; then warn_ "one of these is required: $find_tool_names;" die "alternatively set $find_tool_envvar to a compatible tool" fi eval "$find_tool_envvar=\$find_tool_res" eval "export $find_tool_envvar" } # --------------------- Preparing GNULIB_SRCDIR for use. --------------------- # This is part of autopull.sh, but bootstrap needs it too, for self-upgrading. # cleanup_gnulib fails, removing the directory $gnulib_path first. cleanup_gnulib() { status=$? rm -fr "$gnulib_path" exit $status } git_modules_config () { test -f .gitmodules && git config --file .gitmodules "$@" } prepare_GNULIB_SRCDIR () { if test -n "$GNULIB_SRCDIR"; then # Use GNULIB_SRCDIR directly. # We already checked that $GNULIB_SRCDIR references a directory. # Verify that it contains a gnulib checkout. test -f "$GNULIB_SRCDIR/gnulib-tool" \ || die "Error: --gnulib-srcdir or \$GNULIB_SRCDIR is specified," \ "but does not contain gnulib-tool" if test -n "$GNULIB_REVISION" && $use_git; then # The 'git checkout "$GNULIB_REVISION"' command succeeds if the # GNULIB_REVISION is a commit hash that exists locally, or if it is # branch name that can be fetched from origin. It fails, however, # if the GNULIB_REVISION is a commit hash that only exists in # origin. In this case, we need a 'git fetch' and then retry # 'git checkout "$GNULIB_REVISION"'. git -C "$GNULIB_SRCDIR" checkout "$GNULIB_REVISION" 2>/dev/null \ || { git -C "$GNULIB_SRCDIR" fetch origin \ && git -C "$GNULIB_SRCDIR" checkout "$GNULIB_REVISION"; } \ || exit $? fi else if ! $use_git; then die "Error: --no-git is specified," \ "but neither --gnulib-srcdir nor \$GNULIB_SRCDIR is specified" fi if git submodule -h | grep -- --reference > /dev/null; then : else die "git version is too old, git >= 1.6.4 is required" fi gnulib_path=$(git_modules_config submodule.gnulib.path) if test -n "$gnulib_path"; then # A submodule 'gnulib' is configured. # Get gnulib files. Populate $gnulib_path, updating the submodule. if test -n "$GNULIB_REFDIR" && test -d "$GNULIB_REFDIR"/.git; then # Use GNULIB_REFDIR as a reference. echo "$0: getting gnulib files..." git submodule update --init --reference "$GNULIB_REFDIR" "$gnulib_path"\ || exit $? else # GNULIB_REFDIR is not set or not usable. Ignore it. if git_modules_config submodule.gnulib.url >/dev/null; then echo "$0: getting gnulib files..." git submodule init -- "$gnulib_path" || exit $? git submodule update -- "$gnulib_path" || exit $? else die "Error: submodule 'gnulib' has no configured url" fi fi else gnulib_path='gnulib' if test ! -d "$gnulib_path"; then # The subdirectory 'gnulib' does not yet exist. Clone into it. echo "$0: getting gnulib files..." trap cleanup_gnulib HUP INT PIPE TERM gnulib_url=${GNULIB_URL:-$default_gnulib_url} if test -n "$GNULIB_REFDIR" && test -d "$GNULIB_REFDIR"/.git; then # Use GNULIB_REFDIR as a reference. git clone "$GNULIB_REFDIR" "$gnulib_path" \ && git -C "$gnulib_path" remote set-url origin "$gnulib_url" \ && if test -z "$GNULIB_REVISION"; then git -C "$gnulib_path" pull origin \ && { # We want the default branch of "$gnulib_url" (since that's # the behaviour if GNULIB_REFDIR is not specified), not the # current branch of "$GNULIB_REFDIR". default_branch=`LC_ALL=C git -C "$gnulib_path" \ remote show origin \ | sed -n -e 's/^ *HEAD branch: //p'` test -n "$default_branch" || default_branch='master' git -C "$gnulib_path" checkout "$default_branch" } else # The 'git checkout "$GNULIB_REVISION"' command succeeds if the # GNULIB_REVISION is a commit hash that exists locally, or if it # is a branch name that can be fetched from origin. It fails, # however, if the GNULIB_REVISION is a commit hash that only # exists in origin. In this case, we need a 'git fetch' and then # retry 'git checkout "$GNULIB_REVISION"'. git -C "$gnulib_path" checkout "$GNULIB_REVISION" 2>/dev/null \ || { git -C "$gnulib_path" fetch origin \ && git -C "$gnulib_path" checkout "$GNULIB_REVISION"; } fi \ || cleanup_gnulib else # GNULIB_REFDIR is not set or not usable. Ignore it. shallow='--depth 2' if test -z "$GNULIB_REVISION"; then git clone $shallow "$gnulib_url" "$gnulib_path" \ || cleanup_gnulib else # Only want a shallow checkout of $GNULIB_REVISION, but git does not # support cloning by commit hash. So attempt a shallow fetch by # commit hash to minimize the amount of data downloaded and changes # needed to be processed, which can drastically reduce download and # processing time for checkout. If the fetch by commit fails, a # shallow fetch cannot be performed because we do not know what the # depth of the commit is without fetching all commits. So fall back # to fetching all commits. # $GNULIB_REVISION can be a commit id, a tag name, or a branch name. mkdir -p "$gnulib_path" # Use a -c option to silence an annoying message # "hint: Using 'master' as the name for the initial branch." # (cf. ). git -C "$gnulib_path" -c init.defaultBranch=master init git -C "$gnulib_path" remote add origin "$gnulib_url" if git -C "$gnulib_path" fetch $shallow origin "$GNULIB_REVISION" then # "git fetch" of the specific commit succeeded. git -C "$gnulib_path" reset --hard FETCH_HEAD \ || cleanup_gnulib # "git fetch" does not fetch tags (at least in git version 2.43). # If $GNULIB_REVISION is a tag (not a commit id or branch name), # add the tag explicitly. revision=`git -C "$gnulib_path" log -1 --pretty=format:%H` branch=`LC_ALL=C git -C "$gnulib_path" remote show origin \ | sed -n -e 's/^ \([^ ]*\) * tracked$/\1/p'` test "$revision" = "$GNULIB_REVISION" \ || test "$branch" = "$GNULIB_REVISION" \ || git -C "$gnulib_path" tag "$GNULIB_REVISION" else # Fetch the entire repository. git -C "$gnulib_path" fetch origin \ || cleanup_gnulib git -C "$gnulib_path" checkout "$GNULIB_REVISION" \ || cleanup_gnulib fi fi fi trap - HUP INT PIPE TERM else # The subdirectory 'gnulib' already exists. if test -n "$GNULIB_REVISION"; then if test -d "$gnulib_path/.git"; then # The 'git checkout "$GNULIB_REVISION"' command succeeds if the # GNULIB_REVISION is a commit hash that exists locally, or if it # is a branch name that can be fetched from origin. It fails, # however, if the GNULIB_REVISION is a commit hash that only # exists in origin. In this case, we need a 'git fetch' and then # retry 'git checkout "$GNULIB_REVISION"'. git -C "$gnulib_path" checkout "$GNULIB_REVISION" 2>/dev/null \ || { git -C "$gnulib_path" fetch origin \ && git -C "$gnulib_path" checkout "$GNULIB_REVISION"; } \ || exit $? else die "Error: GNULIB_REVISION is specified in bootstrap.conf," \ "but '$gnulib_path' contains no git history" fi fi fi fi # Verify that $gnulib_path contains a gnulib checkout. test -f "$gnulib_path/gnulib-tool" \ || die "Error: '$gnulib_path' is supposed to contain a gnulib checkout," \ "but does not contain gnulib-tool" GNULIB_SRCDIR=$gnulib_path fi # $GNULIB_SRCDIR now points to the version of gnulib to use, and # we no longer need to use git or $gnulib_path below here. } # -------- Upgrading bootstrap to the version found in GNULIB_SRCDIR. -------- upgrade_bootstrap () { if test -f "$medir"/bootstrap-funclib.sh; then update_lib=true { cmp -s "$medir"/bootstrap "$GNULIB_SRCDIR/top/bootstrap" \ && cmp -s "$medir"/bootstrap-funclib.sh \ "$GNULIB_SRCDIR/top/bootstrap-funclib.sh" \ && cmp -s "$medir"/autopull.sh "$GNULIB_SRCDIR/top/autopull.sh" \ && cmp -s "$medir"/autogen.sh "$GNULIB_SRCDIR/top/autogen.sh"; \ } else update_lib=false cmp -s "$medir"/bootstrap "$GNULIB_SRCDIR/build-aux/bootstrap" fi || { if $update_lib; then echo "$0: updating bootstrap & companions and restarting..." else echo "$0: updating bootstrap and restarting..." fi case $(sh -c 'echo "$1"' -- a) in a) ignored=--;; *) ignored=ignored;; esac u=$update_lib exec sh -c \ '{ if '$u' && test -f "$1"; then cp "$1" "$3"; else cp "$2" "$3"; fi; } && { if '$u' && test -f "$4"; then cp "$4" "$5"; else rm -f "$5"; fi; } && { if '$u' && test -f "$6"; then cp "$6" "$7"; else rm -f "$7"; fi; } && { if '$u' && test -f "$8"; then cp "$8" "$9"; else rm -f "$9"; fi; } && shift && shift && shift && shift && shift && shift && shift && shift && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \ $ignored \ "$GNULIB_SRCDIR/top/bootstrap" "$GNULIB_SRCDIR/build-aux/bootstrap" \ "$medir/bootstrap" \ "$GNULIB_SRCDIR/top/bootstrap-funclib.sh" "$medir/bootstrap-funclib.sh" \ "$GNULIB_SRCDIR/top/autopull.sh" "$medir/autopull.sh" \ "$GNULIB_SRCDIR/top/autogen.sh" "$medir/autogen.sh" \ "$0" "$@" --no-bootstrap-sync } } # ---------------------------------------------------------------------------- if test x"$gnulib_modules$gnulib_files$gnulib_extra_files" = x; then use_gnulib=false else use_gnulib=true fi # -------- Fetch auxiliary files from the network. -------------------------- autopull_usage() { cat </dev/null 2>&1 && unset CDPATH # Parse options. # Use git to update gnulib sources use_git=true for option do case $option in --help) autopull_usage return;; --version) set -e echo "autopull.sh $scriptlibversion" echo "$copyright" return 0 ;; --skip-po) SKIP_PO=t;; --force) checkout_only_file=;; --bootstrap-sync) bootstrap_sync=true;; --no-bootstrap-sync) bootstrap_sync=false;; --no-git) use_git=false;; *) bootstrap_option_hook $option || die "$option: unknown option";; esac done $use_git || test -n "$GNULIB_SRCDIR" \ || die "Error: --no-git requires \$GNULIB_SRCDIR environment variable" \ "or --gnulib-srcdir option" test -z "$GNULIB_SRCDIR" || test -d "$GNULIB_SRCDIR" \ || die "Error: \$GNULIB_SRCDIR environment variable" \ "or --gnulib-srcdir option is specified," \ "but does not denote a directory" if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then die "Running this script from a non-checked-out distribution is risky." fi check_build_prerequisites $use_git if $use_gnulib || $bootstrap_sync; then prepare_GNULIB_SRCDIR if $bootstrap_sync; then upgrade_bootstrap "$@" fi fi # Find sha1sum, named gsha1sum on MacPorts, shasum on Mac OS X 10.6. # Also find the compatible sha1 utility on the BSDs if test x"$SKIP_PO" = x; then find_tool SHA1SUM sha1sum gsha1sum shasum sha1 fi # See if we can use gnulib's git-merge-changelog merge driver. if $use_git && test -d .git && check_exists git; then if git config merge.merge-changelog.driver >/dev/null ; then : elif check_exists git-merge-changelog; then echo "$0: initializing git-merge-changelog driver" git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver' git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B "%Y"' else echo "$0: consider installing git-merge-changelog from gnulib" fi fi case $SKIP_PO in '') if test -d po; then update_po_files po $package || return fi if test -d runtime-po; then update_po_files runtime-po $package-runtime || return fi;; esac # --------------------------------------------------------------------------- bootstrap_post_pull_hook \ || die "bootstrap_post_pull_hook failed" # Don't proceed if there are uninitialized submodules. In particular, # autogen.sh will remove dangling links, which might be links into # uninitialized submodules. # But it's OK if the 'gnulib' submodule is uninitialized, as long as # GNULIB_SRCDIR is set. if $use_git; then # Uninitialized submodules are listed with an initial dash. uninitialized=`git submodule | grep '^-' | awk '{ print $2 }'` if test -n "$GNULIB_SRCDIR"; then uninitialized=`echo "$uninitialized" | grep -v '^gnulib$'` fi if test -n "$uninitialized"; then uninit_comma=`echo "$uninitialized" | tr '\n' ',' | sed -e 's|,$|.|'` die "Some git submodules are not initialized: "$uninit_comma \ "Either use option '--no-git'," \ "or run 'git submodule update --init' and bootstrap again." fi fi if test -f "$medir"/autogen.sh; then echo "$0: done. Now you can run '$medir/autogen.sh'." fi } # ----------------------------- Get translations. ----------------------------- download_po_files() { subdir=$1 domain=$2 echo "$me: getting translations into $subdir for $domain..." cmd=$(printf "$po_download_command_format" "$subdir" "$domain") eval "$cmd" } # Mirror .po files to $po_dir/.reference and copy only the new # or modified ones into $po_dir. Also update $po_dir/LINGUAS. # Note po files that exist locally only are left in $po_dir but will # not be included in LINGUAS and hence will not be distributed. update_po_files() { # Directory containing primary .po files. # Overwrite them only when we're sure a .po file is new. po_dir=$1 domain=$2 # Mirror *.po files into this dir. # Usually contains *.s1 checksum files. ref_po_dir="$po_dir/.reference" test -d $ref_po_dir || mkdir $ref_po_dir || return download_po_files $ref_po_dir $domain \ && ls "$ref_po_dir"/*.po 2>/dev/null | sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return for po in x $(ls $ref_po_dir | sed -n 's/\.po$//p'); do case $po in x) continue;; esac new_po="$ref_po_dir/$po.po" cksum_file="$ref_po_dir/$po.s1" if ! test -f "$cksum_file" || ! test -f "$po_dir/$po.po" || ! $SHA1SUM -c "$cksum_file" < "$new_po" > /dev/null 2>&1; then echo "$me: updated $po_dir/$po.po..." cp "$new_po" "$po_dir/$po.po" \ && $SHA1SUM < "$new_po" > "$cksum_file" || return fi done } # -------- Generate files automatically from existing sources. -------------- autogen_usage() { cat < /dev/null 2>&1 elif test -d .svn; then svn log -r HEAD "$file" > /dev/null 2>&1 elif test -d CVS; then grep -F "/${file##*/}/" "$parent/CVS/Entries" 2>/dev/null | grep '^/[^/]*/[0-9]' > /dev/null else warn_ "no version control for $file?" false fi } # Strip blank and comment lines to leave significant entries. gitignore_entries() { sed '/^#/d; /^$/d' "$@" } # If $STR is not already on a line by itself in $FILE, insert it at the start. # Entries are inserted at the start of the ignore list to ensure existing # entries starting with ! are not overridden. Such entries support # whitelisting exceptions after a more generic blacklist pattern. insert_if_absent() { file=$1 str=$2 test -f $file || touch $file test -r $file || die "Error: failed to read ignore file: $file" duplicate_entries=$(gitignore_entries $file | sort | uniq -d) if [ "$duplicate_entries" ] ; then die "Error: Duplicate entries in $file: " $duplicate_entries fi linesold=$(gitignore_entries $file | wc -l) linesnew=$( { echo "$str"; cat $file; } | gitignore_entries | sort -u | wc -l) if [ $linesold != $linesnew ] ; then { echo "$str" | cat - $file > $file.bak && mv $file.bak $file; } \ || die "insert_if_absent $file $str: failed" fi } # Adjust $PATTERN for $VC_IGNORE_FILE and insert it with # insert_if_absent. insert_vc_ignore() { vc_ignore_file="$1" pattern="$2" case $vc_ignore_file in *.gitignore) # A .gitignore entry that does not start with '/' applies # recursively to subdirectories, so prepend '/' to every # .gitignore entry. pattern=$(echo "$pattern" | sed s,^,/,);; esac insert_if_absent "$vc_ignore_file" "$pattern" } symlink_to_dir() { src=$1/$2 dst=${3-$2} test -f "$src" && { # If the destination directory doesn't exist, create it. # This is required at least for "lib/uniwidth/cjk.h". dst_dir=$(dirname "$dst") if ! test -d "$dst_dir"; then mkdir -p "$dst_dir" # If we've just created a directory like lib/uniwidth, # tell version control system(s) it's ignorable. # FIXME: for now, this does only one level parent=$(dirname "$dst_dir") for dot_ig in x $vc_ignore; do test $dot_ig = x && continue ig=$parent/$dot_ig insert_vc_ignore $ig "${dst_dir##*/}/" done fi if $copy; then { test ! -h "$dst" || { echo "$me: rm -f $dst" && rm -f "$dst" } } && test -f "$dst" && cmp -s "$src" "$dst" || { echo "$me: cp -fp $src $dst" && cp -fp "$src" "$dst" } else # Leave any existing symlink alone, if it already points to the source, # so that broken build tools that care about symlink times # aren't confused into doing unnecessary builds. Conversely, if the # existing symlink's timestamp is older than the source, make it afresh, # so that broken tools aren't confused into skipping needed builds. See # . test -h "$dst" && src_ls=$(ls -diL "$src" 2>/dev/null) && set $src_ls && src_i=$1 && dst_ls=$(ls -diL "$dst" 2>/dev/null) && set $dst_ls && dst_i=$1 && test "$src_i" = "$dst_i" && both_ls=$(ls -dt "$src" "$dst") && test "X$both_ls" = "X$dst$nl$src" || { dot_dots= case $src in /*) ;; *) case /$dst/ in *//* | */../* | */./* | /*/*/*/*/*/) die "invalid symlink calculation: $src -> $dst";; /*/*/*/*/) dot_dots=../../../;; /*/*/*/) dot_dots=../../;; /*/*/) dot_dots=../;; esac;; esac echo "$me: ln -fs $dot_dots$src $dst" && ln -fs "$dot_dots$src" "$dst" } fi } } # Regenerate all autogeneratable files that are omitted from the # version control repository. In particular, regenerate all # aclocal.m4, config.h.in, Makefile.in, configure files with new # versions of autoconf or automake. autogen() { # Ensure that CDPATH is not set. Otherwise, the output from cd # would cause trouble in at least one use below. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Environment variables that may be set by the user. : "${AUTOPOINT=autopoint}" : "${AUTORECONF=autoreconf}" if test "$vc_ignore" = auto; then vc_ignore= test -d .git && vc_ignore=.gitignore test -d CVS && vc_ignore="$vc_ignore .cvsignore" fi # Parse options. # Whether to use copies instead of symlinks. copy=false for option do case $option in --help) autogen_usage return;; --version) set -e echo "autogen.sh $scriptlibversion" echo "$copyright" return 0 ;; --force) checkout_only_file=;; --copy) copy=true;; *) bootstrap_option_hook $option || die "$option: unknown option";; esac done test -z "$GNULIB_SRCDIR" || test -d "$GNULIB_SRCDIR" \ || die "Error: \$GNULIB_SRCDIR environment variable or --gnulib-srcdir" \ "option is specified, but does not denote a directory" if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then die "Running this script from a non-checked-out distribution is risky." fi if $use_gnulib; then if test -z "$GNULIB_SRCDIR"; then gnulib_path=$(test -f .gitmodules && git config --file .gitmodules submodule.gnulib.path) test -z "$gnulib_path" && gnulib_path=gnulib GNULIB_SRCDIR=$gnulib_path fi fi # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac. found_aux_dir=no grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'])' configure.ac \ >/dev/null && found_aux_dir=yes grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \ >/dev/null && found_aux_dir=yes test $found_aux_dir = yes \ || die "configure.ac lacks 'AC_CONFIG_AUX_DIR([$build_aux])'; add it" # If $build_aux doesn't exist, create it now, otherwise some bits # below will malfunction. If creating it, also mark it as ignored. if test ! -d $build_aux; then mkdir $build_aux for dot_ig in x $vc_ignore; do test $dot_ig = x && continue insert_vc_ignore $dot_ig $build_aux/ done fi check_build_prerequisites false use_libtool=0 # We'd like to use grep -E, to see if any of LT_INIT, # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac, # but that's not portable enough (e.g., for Solaris). grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \ && use_libtool=1 grep '^[ ]*LT_INIT' configure.ac >/dev/null \ && use_libtool=1 if test $use_libtool = 1; then find_tool LIBTOOLIZE glibtoolize libtoolize fi if $use_gnulib; then gnulib_tool=$GNULIB_SRCDIR/gnulib-tool <$gnulib_tool || return fi # NOTE: we have to be careful to run both autopoint and libtoolize # before gnulib-tool, since gnulib-tool is likely to provide newer # versions of files "installed" by these two programs. # Then, *after* gnulib-tool (see below), we have to be careful to # run autoreconf in such a way that it does not run either of these # two just-pre-run programs. # Import from gettext. with_gettext=yes grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \ with_gettext=no if test $with_gettext = yes || test $use_libtool = 1; then tempbase=.bootstrap$$ trap "rm -f $tempbase.0 $tempbase.1" HUP INT PIPE TERM > $tempbase.0 > $tempbase.1 && find . ! -type d -print | sort > $tempbase.0 || return if test $with_gettext = yes; then # Released autopoint has the tendency to install macros that have been # obsoleted in current gnulib, so run this before gnulib-tool. echo "$0: $AUTOPOINT --force" $AUTOPOINT --force || return fi # Autoreconf runs aclocal before libtoolize, which causes spurious # warnings if the initial aclocal is confused by the libtoolized # (or worse out-of-date) macro directory. # libtoolize 1.9b added the --install option; but we support back # to libtoolize 1.5.22, where the install action was default. if test $use_libtool = 1; then install= case $($LIBTOOLIZE --help) in *--install*) install=--install ;; esac echo "running: $LIBTOOLIZE $install --copy" $LIBTOOLIZE $install --copy fi find . ! -type d -print | sort >$tempbase.1 old_IFS=$IFS IFS=$nl for file in $(comm -13 $tempbase.0 $tempbase.1); do IFS=$old_IFS parent=${file%/*} version_controlled_file "$parent" "$file" || { for dot_ig in x $vc_ignore; do test $dot_ig = x && continue ig=$parent/$dot_ig insert_vc_ignore "$ig" "${file##*/}" done } done IFS=$old_IFS rm -f $tempbase.0 $tempbase.1 trap - HUP INT PIPE TERM fi # Import from gnulib. if $use_gnulib; then gnulib_tool_options="\ --no-changelog\ --aux-dir=$build_aux\ --doc-base=$doc_base\ --lib=$gnulib_name\ --m4-base=$m4_base/\ --source-base=$source_base/\ --tests-base=$tests_base\ --local-dir=$local_gl_dir\ $gnulib_tool_option_extras\ " if test $use_libtool = 1; then case "$gnulib_tool_options " in *' --libtool '*) ;; *) gnulib_tool_options="$gnulib_tool_options --libtool" ;; esac fi echo "$0: $gnulib_tool $gnulib_tool_options --import ..." $gnulib_tool $gnulib_tool_options --import $gnulib_modules \ || die "gnulib-tool failed" if test $with_gettext = yes && test ! -f $m4_base/gettext.m4; then # The gnulib-tool invocation has removed $m4_base/gettext.m4, that the # AUTOPOINT invocation had installed. This can occur when the gnulib # module 'gettext' was previously present but is now not present any more. # Repeat the AUTOPOINT invocation and the gnulib-tool invocation. echo "$0: $AUTOPOINT --force" $AUTOPOINT --force || return echo "$0: $gnulib_tool $gnulib_tool_options --import ..." $gnulib_tool $gnulib_tool_options --import $gnulib_modules \ || die "gnulib-tool failed" fi for file in $gnulib_files; do symlink_to_dir "$GNULIB_SRCDIR" $file \ || die "failed to symlink $file" done fi bootstrap_post_import_hook \ || die "bootstrap_post_import_hook failed" # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some # gnulib-populated directories. Such .m4 files would cause aclocal to fail. # The following requires GNU find 4.2.3 or newer. Considering the usual # portability constraints of this script, that may seem a very demanding # requirement, but it should be ok. Ignore any failure, which is fine, # since this is only a convenience to help developers avoid the relatively # unusual case in which a symlinked-to .m4 file is git-removed from gnulib # between successive runs of this script. find "$m4_base" "$source_base" \ -depth \( -name '*.m4' -o -name '*.[ch]' \) \ -type l -xtype l -delete > /dev/null 2>&1 # Invoke autoreconf with --force --install to ensure upgrades of tools # such as ylwrap. AUTORECONFFLAGS="--verbose --install --force $ACLOCAL_FLAGS" AUTORECONFFLAGS="$AUTORECONFFLAGS --no-recursive" # Tell autoreconf not to invoke autopoint or libtoolize; they were run above. echo "running: AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS" AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS \ || die "autoreconf failed" # Get some extra files from gnulib, overriding existing files. for file in $gnulib_extra_files; do case $file in */INSTALL) dst=INSTALL;; build-aux/*) dst=$build_aux/${file#build-aux/};; *) dst=$file;; esac symlink_to_dir "$GNULIB_SRCDIR" $file $dst \ || die "failed to symlink $file" done if test $with_gettext = yes; then # Create gettext configuration. echo "$0: Creating po/Makevars from po/Makevars.template ..." rm -f po/Makevars sed ' /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/ /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'| /^XGETTEXT_OPTIONS *=/{ s/$/ \\/ a\ '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} } ' po/Makevars.template >po/Makevars \ || die 'cannot generate po/Makevars' # If the 'gettext' module is in use, grab the latest Makefile.in.in. # If only the 'gettext-h' module is in use, assume autopoint already # put the correct version of this file into place. case $gnulib_modules in *gettext-h*) ;; *gettext*) cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in \ || die "cannot create po/Makefile.in.in" ;; esac if test -d runtime-po; then # Similarly for runtime-po/Makevars, but not quite the same. rm -f runtime-po/Makevars sed ' /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/ /^subdir *=.*/s/=.*/= runtime-po/ /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ /^XGETTEXT_OPTIONS *=/{ s/$/ \\/ a\ '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+} } ' po/Makevars.template >runtime-po/Makevars \ || die 'cannot generate runtime-po/Makevars' # Copy identical files from po to runtime-po. cp -p po/Makefile.in.in po/*-quot po/*.header po/*.sed po/*.sin runtime-po fi fi bootstrap_epilogue echo "$0: done. Now you can run './configure'." } # ---------------------------------------------------------------------------- # Local Variables: # eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "scriptlibversion=" # time-stamp-format: "%Y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ================================================ FILE: bootstrap.conf ================================================ # Bootstrap configuration. ######################################################################## ## ## Copyright (C) 2009-2026 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## or . ## ## This file is part of Octave. ## ## Octave is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## . ## ######################################################################## # gnulib modules used by this package. gnulib_modules=" _Exit access areadlink base64 bison canonicalize chdir close closedir crypto/md2-buffer crypto/md4-buffer crypto/md5-buffer crypto/sha1-buffer crypto/sha256-buffer crypto/sha512-buffer dup dup2 execl execv execvp fcntl fflush filemode fnmatch fpucw frexp frexpf fseeko ftello ftruncate getcwd gethostname gethrxtime getopt-gnu getrusage gettimeofday glob intprops isatty largefile lib-symbol-visibility link localcharset lstat malloc-gnu memcpy mkdir mkfifo mkostemp mkostemps mktime nanosleep nproc nstrftime open opendir perror pipe-posix progname raise readdir readline rewinddir rmdir select setenv setlocale sigaction signal-h sigprocmask stat stat-time stddef-h stdio-h strcase strdup-posix strerror strptime strsignal symlink sys_stat-h sys_time-h sys_times-h sys_wait-h tempname uname unicase/u8-tolower unicase/u8-toupper uniconv/u16-conv-from-enc uniconv/u16-conv-to-enc uniconv/u32-conv-to-enc uniconv/u8-conv-from-enc uniconv/u8-conv-to-enc unictype/ctype-alnum unictype/ctype-alpha unictype/ctype-blank unictype/ctype-cntrl unictype/ctype-digit unictype/ctype-graph unictype/ctype-lower unictype/ctype-print unictype/ctype-punct unictype/ctype-space unictype/ctype-upper unictype/ctype-xdigit unistd-h unistr/u16-to-u8 unistr/u32-to-u8 unistr/u8-check unistr/u8-mbsnlen unistr/u8-strmblen unistr/u8-strmbtouc unistr/u8-to-u16 unistr/u8-to-u32 unlink unsetenv vasprintf waitpid windows-spawn " # Additional gnulib files and scripts used by Octave's buildsystem. gnulib_files=" build-aux/move-if-change " # Additional xgettext options to use. Use "\\\newline" to break lines. XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\ --from-code=UTF-8\\\ --flag=asprintf:2:c-format --flag=vasprintf:2:c-format\\\ --flag=asnprintf:3:c-format --flag=vasnprintf:3:c-format\\\ --flag=wrapf:1:c-format\\\ ' # If "AM_GNU_GETTEXT(external" or "AM_GNU_GETTEXT([external]" # appears in configure.ac, exclude some unnecessary files. # Without grep's -E option (not portable enough, pre-configure), # the following test is ugly. Also, this depends on the existence # of configure.ac, not the obsolescent-named configure.in. But if # you're using this infrastructure, you should care about such things. gettext_external=0 grep '^[ ]*AM_GNU_GETTEXT(external\>' configure.ac > /dev/null && gettext_external=1 grep '^[ ]*AM_GNU_GETTEXT(\[external\]' configure.ac > /dev/null && gettext_external=1 if test $gettext_external = 1; then # Gettext supplies these files, but we don't need them since # we don't have an intl subdirectory. excluded_files=' m4/glibc2.m4 m4/intdiv0.m4 m4/lcmessage.m4 m4/lock.m4 m4/printf-posix.m4 m4/size_max.m4 m4/uintmax_t.m4 m4/ulonglong.m4 m4/visibility.m4 m4/xsize.m4 ' fi # Build prerequisites buildreq="\ autoconf 2.59 automake 1.9.6 git 1.5.5 tar - " checkout_only_file=etc/HACKING.md gnulib_tool_option_extras="--libtool" gnulib_name="libgnu" source_base="libgnu" # Go to https://git.savannah.gnu.org/cgit/gnulib.git to find out the latest # revision ID. Paste it below and then run # # ./bootstrap --bootstrap-sync # # to update the ./bootstrap file from the selected gnulib revision. # # See also: https://lists.gnu.org/archive/html/bug-gnulib/2020-08/msg00150.html : ${GNULIB_REVISION=8e0af4b8fcba7e38c06af5db29030715189a102b} # Don't check for translations since we don't have any in Octave yet. # This avoids the need for sha1sum or compatible utility in bootstrap. SKIP_PO=true bootstrap_post_import_hook () { SHELL=${CONFIG_SHELL-/bin/sh} export SHELL ## Check for files that automake --gnu would normally look for, except ## AUTHORS, which we autogenerate from the documentation files along ## with building the rest of Octave, and INSTALL, which is linked from ## gnulib/doc/INSTALL by the bootstrap script. NEWS is autogenerated ## from etc/NEWS.x. for f in README COPYING CITATION; do if ! test -f $f; then echo "required file $f is missing" 2>&1 exit 1 fi done echo "generating source lists for liboctave/operators/module.mk..." rm -f liboctave/operators/*-op-*.mk (cd liboctave/operators && $SHELL config-ops.sh) echo "generating doc/interpreter/images.mk..." rm -f doc/interpreter/images.mk (cd doc/interpreter && $SHELL config-images.sh) echo "generating libinterp/dldfcn/module.mk..." rm -f libinterp/dldfcn/module.mk (cd libinterp/dldfcn && $SHELL config-module.sh) } ================================================ FILE: build-aux/OctJavaQry.java ================================================ // Copyright (C) 2012-2026 The Octave Project Developers // // See the file COPYRIGHT.md in the top-level directory of this // distribution or . // // This file is part of Octave. // // Octave is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Octave is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Octave; see the file COPYING. If not, see // . // Code used by configure script to locate Java installation variables. // Only compiled code, OctJavaQry.class, is distributed. public class OctJavaQry { public static void main (String[] args) { if (args.length > 0) { if (args[0].equals ("JAVA_HOME")) { System.out.println (System.getProperty ("java.home")); } else if (args[0].equals ("JAVA_LDPATH")) { System.out.println (System.getProperty ("java.library.path")); } else if (args[0].equals ("JAVA_BOOTPATH")) { System.out.println (System.getProperty ("sun.boot.library.path")); } } } } ================================================ FILE: build-aux/changelog.tmpl ================================================ ######################################################################## ## ## Copyright (C) 2011-2026 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## distribution or . ## ## This file is part of Octave. ## ## Octave is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## . ## ######################################################################## header = '{date|shortdate} {author|person} <{author|email}>\n\n' changeset = '\t{desc|tabindent|strip}\n\n\tFiles: {files|stringify|fill68|tabindent|strip}\n\n' ================================================ FILE: build-aux/check-subst-vars.in.sh ================================================ #! /bin/sh ######################################################################## ## ## Copyright (C) 2016-2026 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## distribution or . ## ## This file is part of Octave. ## ## Octave is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## . ## ######################################################################## : ${AWK=@AWK@} : ${SED=@SED@} if test $# -ne 2; then echo "usage: check-subst-vars.sh make-vars-file config-vars-file" 2>&1 exit 1 fi awk_script="check-subst-vars-$$.awk" trap "rm -f $awk_script; exit 1" 1 2 15 make_vars="$1" config_vars="$2" ## Generate awk script to check variable consistency. cat << EOF > $awk_script BEGIN { status = 0; EOF while read var val; do val=`echo "$val" | $SED 's/"/\\\\"/g'` echo "make_vars[\"$var\"] = \"$val\";" >> $awk_script done < $make_vars cat << EOF >> $awk_script } { line = \$0; idx = index (line, " "); var = substr (line, 1, idx-1); val = substr (line, idx+1); if (val != make_vars[var]) { printf ("error: mismatch for configuration variable '%s'\n", var); printf (" value set in configuration files: %s\n", val); printf (" value set in Make: %s\n", make_vars[var]); status = 1; } } END { exit status; } EOF ## Execute it. $AWK -f $awk_script $config_vars 1>&2 rm -f $awk_script ================================================ FILE: build-aux/find-defun-files.in.sh ================================================ #! /bin/sh ######################################################################## ## ## Copyright (C) 2009-2026 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## distribution or . ## ## This file is part of Octave. ## ## Octave is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## . ## ######################################################################## set -e : ${SED=@SED@} : ${EGREP=@EGREP@} # Some stupid egreps don't like empty elements in alternation patterns, # so we have to repeat ourselves because some stupid egreps don't like # empty elements in alternation patterns. DEFUN_PATTERN="^[ \t]*DEF(CONSTFUN|CONSTMETHOD|METHOD|METHOD(_|_STATIC_)DLD|METHODX|METHODX(_|_STATIC_)DLD|UN|UN(_|_STATIC_)DLD|UNX|UNX(_|_STATIC_)DLD)[ \t]*\\(" srcdir="$1" if [ "$1" ]; then shift fi for arg do if [ -f "$arg" ]; then file="$arg" else file="$srcdir/$arg" fi if [ -f "$file" ]; then if [ "`$EGREP -l "$DEFUN_PATTERN" $file`" ]; then echo "$file" | $SED "s,\\$srcdir/,," fi fi done ================================================ FILE: build-aux/find-files-with-tests.in.sh ================================================ #! /bin/sh ######################################################################## ## ## Copyright (C) 2013-2026 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## distribution or . ## ## This file is part of Octave. ## ## Octave is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## . ## ######################################################################## set -e : ${GREP=@GREP@} : ${SED=@SED@} srcdir="$1" if [ "$1" ]; then shift fi for arg do if [ -f "$arg" ]; then file="$arg" else file="$srcdir/$arg" fi if [ -f "$file" ]; then if [ "`$GREP -l '^%!' $file`" ]; then echo "$file" | $SED "s,\\$srcdir/,," fi fi done ================================================ FILE: build-aux/get-source-mtime.sh ================================================ #! /bin/sh ######################################################################## ## ## Copyright (C) 2017-2026 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## distribution or . ## ## This file is part of Octave. ## ## Octave is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## . ## ######################################################################## # Generate a timestamp that best represents the last modification time # of this source tree. The time value is printed on stdout in units of # time_t. If a reasonable representation of the source tree last # modification time can't be determined, then the current system time is # printed instead. A valid time_t value is always printed on stdout. set -e PERL=${PERL:-perl} SED=${SED:-sed} if [ $# -ne 1 ]; then echo "usage: get-source-mtime.sh SRCDIR" 1>&2 exit 1 fi srcdir="$1" ## A user's ~/.hgrc may redefine or add default options to any hg subcommand, ## potentially altering its behavior and possibly its standard output. Always ## run hg subcommands with configuration variables set to ensure that the ## user's preferences do not influence the expected behavior. hg_safe () { cmd=$1; shift hg --config alias.${cmd}=${cmd} --config defaults.${cmd}= ${cmd} "$@" } if [ x"$SOURCE_DATE_EPOCH" != x ]; then # Allow the source modification time to be overridden by SOURCE_DATE_EPOCH t=$SOURCE_DATE_EPOCH elif [ -d $srcdir/.hg ]; then t=$( cd $srcdir && hg_safe log --rev . --template '{date|hgdate}' ) t=$( echo $t | $SED -n 's/^\([0-9]\+\) .*/\1/p' ) elif [ -f $srcdir/HG-ID ]; then t=$( $PERL -e '@s = stat($ARGV[0]); print($s[9]) if @s;' $srcdir/HG-ID ) elif [ -f $srcdir/configure ]; then t=$( $PERL -e '@s = stat($ARGV[0]); print($s[9]) if @s;' $srcdir/configure ) fi if [ x"$t" = x ]; then t=$( date +%s ) fi echo $t ================================================ FILE: build-aux/inplace-edit.pl ================================================ #!/usr/bin/perl -w ################################################################################ ## File: inplace-edit.pl ## Usage: perl inplace-edit.pl 'PERL_CODE' file1 [file2] [...] ## Purpose: Run snippet of PERL_CODE on each line in a file and replace ## existing line with the results of running the code. ## This replaces perl -i -pe 'PERL_CODE' file1 [file2] ... ## due to a problem in Perl 5.28 which restricts the number of files ################################################################################ ## Create Perl code from first argument (-e CODE) eval "sub per_line_code { $ARGV[0]; }"; shift @ARGV; ## Loop over each file foreach $fname (@ARGV) { rename ($fname, "$fname.$$") or die "Rename failed:$fname:$!"; open (my $FHI, "<", "$fname.$$") or die "Open failed:$fname.$$:$!"; open (my $FHO, ">", "$fname") or die "Open failed:$fname:$!"; ## Loop over each line while (<$FHI>) { per_line_code (); print $FHO $_; } close ($FHI); close ($FHO); unlink "$fname.$$" or die "Delete failed:$fname.$$:$!"; } ================================================ FILE: build-aux/make-gnu-dist-files ================================================ #! /bin/bash ################################################################################ # USAGE: make-gnu-dist-files DIRECTORY1 DIRECTORY2 ... ################################################################################ set -e # The GPG ID used to sign the distribution. Currently, this is jwe's ID. gpg_id=0x5D36644B for arg do subdir=$(dirname $arg) if [ "$subdir" = "." ]; then dir="octave" else dir="octave/$subdir" fi cat << EOF > $arg.directive version: 1.2 directory: $dir filename: $(basename $arg) EOF gpg --local-user $gpg_id -b $arg gpg --local-user $gpg_id --clearsign $arg.directive rm -f $arg.directive done cat << EOF *** *** Upload the files to the incoming/ftp directory on ftp-upload.gnu.org. *** (or incoming/alpha, for snapshots). *** EOF ================================================ FILE: build-aux/mk-hg-id.sh ================================================ #! /bin/sh ######################################################################## ## ## Copyright (C) 2016-2026 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## distribution or . ## ## This file is part of Octave. ## ## Octave is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## . ## ######################################################################## ## Display the Mercurial ID of the current revision. If the source tree ## does not appear to be a Mercurial repo but does contain a file named ## HG-ID, display the contents of that file. If that file does not ## exist, or the Mercurial fails to provide the ID, display ## "unknown-hg-id". If invoked with the --disable option, display ## "hg-id-disabled". set -e if [ $# -ne 1 ] && [ $# -ne 2 ]; then echo "usage: mk-hg-id.sh SRCDIR [--disable]" 1>&2 exit 1 fi srcdir="$1" hg_id=HG-ID ## A user's ~/.hgrc may redefine or add default options to any hg subcommand, ## potentially altering its behavior and possibly its standard output. Always ## run hg subcommands with configuration variables set to ensure that the ## user's preferences do not influence the expected behavior. hg_safe () { cmd=$1; shift hg --config alias.${cmd}=${cmd} --config defaults.${cmd}= ${cmd} "$@" } if [ $# -eq 2 ] && [ x"$2" = x--disable ]; then echo "hg-id-disabled" elif [ -d "$srcdir/.hg" ]; then ( cd "$srcdir" && hg_safe identify --id || echo "unknown-hg-id" ) elif [ -d "$srcdir/.git" ]; then ( cd "$srcdir" && echo "git:"$(git rev-parse --short HEAD) || echo "unknown-hg-id" ) elif [ ! -f "$srcdir/$hg_id" ]; then echo "WARNING: $srcdir/$hg_id is missing!" 1>&2 echo "unknown-hg-id" else cat "$srcdir/$hg_id" fi ================================================ FILE: build-aux/mk-octave-config-h.sh ================================================ #! /bin/sh ######################################################################## ## ## Copyright (C) 2016-2026 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## distribution or . ## ## This file is part of Octave. ## ## Octave is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## . ## ######################################################################## # Generate a header file that provides the public symbols from Octave's # autoconf-generated config.h file. See the notes at the top of the # generated octave-config.h file for more details. SED=${SED:-sed} if [ $# -ne 1 ]; then echo "usage: mk-octave-config-h.sh CONFIG-FILE" 1>&2 exit 1 fi config_h_file=$1 cat << EOF // DO NOT EDIT! Generated by mk-octave-config-h.sh. //////////////////////////////////////////////////////////////////////// // // Copyright (C) 2016-2026 The Octave Project Developers // // See the file COPYRIGHT.md in the top-level directory of this // distribution or . // // This file is part of Octave. // // Octave is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Octave is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Octave; see the file COPYING. If not, see // . // //////////////////////////////////////////////////////////////////////// // All Octave source files should begin with // // #if defined (HAVE_CONFIG_H) // # include "config.h" // #endif // // All public Octave header files should have the form // // #if ! defined (INCLUSION_GUARD_SYMBOL) // #define INCLUSION_GUARD_SYMBOL 1 // // #include "octave-config.h" // // ... Contents of header file ... // // #endif // In Octave source files, INCLUSION_GUARD_SYMBOL should have the form // // octave_NAME_h // // with NAME formed from the header file name with '-' replaced by '_'. // // It is safe to include octave-config.h unconditionally since it will // expand to an empty file if it is included after Octave's // autoconf-generated config.h file. // // Users of Octave's libraries should not need to include octave-config.h // since all of Octave's header files already include it. #if ! defined (octave_octave_config_h) #define octave_octave_config_h 1 #if ! defined (OCTAVE_AUTOCONFIG_H_INCLUDED) EOF $SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_64.*$\)/# \1/p' $config_h_file $SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_BOUNDS_CHECK.*$\)/# \1/p' $config_h_file $SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_INTERNAL_CHECKS.*$\)/# \1/p' $config_h_file $SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_LIB_VISIBILITY_FLAGS.*$\)/# \1/p' $config_h_file $SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_OPENMP.*$\)/# \1/p' $config_h_file $SED -n 's/#\(\(undef\|define\) OCTAVE_F77_INT_TYPE.*$\)/# \1/p' $config_h_file $SED -n 's/#\(\(undef\|define\) OCTAVE_HAVE_LONG_LONG_INT.*$\)/# \1/p' $config_h_file $SED -n 's/#\(\(undef\|define\) OCTAVE_HAVE_OVERLOAD_CHAR_INT8_TYPES.*$\)/# \1/p' $config_h_file $SED -n 's/#\(\(undef\|define\) OCTAVE_HAVE_STD_PMR_POLYMORPHIC_ALLOCATOR.*$\)/# \1/p' $config_h_file $SED -n 's/#\(\(undef\|define\) OCTAVE_HAVE_UNSIGNED_LONG_LONG_INT.*$\)/# \1/p' $config_h_file $SED -n 's/#\(\(undef\|define\) OCTAVE_IDX_TYPE.*$\)/# \1/p' $config_h_file $SED -n 's/#\(\(undef\|define\) OCTAVE_SIZEOF_F77_INT_TYPE.*$\)/# \1/p' $config_h_file $SED -n 's/#\(\(undef\|define\) OCTAVE_SIZEOF_IDX_TYPE.*$\)/# \1/p' $config_h_file $SED -n 's/#\(\(undef\|define\) OCTAVE_SIZEOF_INT.*$\)/# \1/p' $config_h_file $SED -n 's/#\(\(undef\|define\) gid_t.*$\)/# \1/p' $config_h_file $SED -n 's/#\(\(undef\|define\) uid_t.*$\)/# \1/p' $config_h_file $SED -n 's/#\(\(undef\|define\) nlink_t.*$\)/# \1/p' $config_h_file if grep "#undef HAVE_DEV_T" $config_h_file > /dev/null; then cat << EOF typedef short dev_t; EOF else cat << EOF /* typedef short dev_t; */ EOF fi if grep "#undef HAVE_INO_T" $config_h_file > /dev/null; then cat << EOF typedef unsigned long ino_t; EOF else cat << EOF /* typedef unsigned long ino_t; */ EOF fi echo "" have_roundl=no if grep "#define HAVE_ROUNDL" $config_h_file > /dev/null; then have_roundl=yes fi sizeof_long_double="`$SED -n 's/#define SIZEOF_LONG_DOUBLE \([0-9]*\)/\1/p' $config_h_file`" if test -z "$sizeof_long_double"; then echo "mk-octave-config-h.sh: failed to find SIZEOF_LONG_DOUBLE in $config_h_file" 1>&2 exit 1 fi if test $sizeof_long_double -ge 10 && test $have_roundl = yes; then echo "# define OCTAVE_INT_USE_LONG_DOUBLE 1" if test $sizeof_long_double -lt 16; then cat << EOF # if (defined (__i386__) || defined (__x86_64__)) && defined (__GNUC__) # define OCTAVE_ENSURE_LONG_DOUBLE_OPERATIONS_ARE_NOT_TRUNCATED 1 # endif EOF else cat << EOF /* # undef OCTAVE_ENSURE_LONG_DOUBLE_OPERATIONS_ARE_NOT_TRUNCATED */ EOF fi else cat << EOF /* # undef OCTAVE_INT_USE_LONG_DOUBLE */ /* # undef OCTAVE_ENSURE_LONG_DOUBLE_OPERATIONS_ARE_NOT_TRUNCATED */ EOF fi echo "" $SED -n 's/#\(\(undef\|define\) F77_USES_.*$\)/# \1/p' $config_h_file echo "" $SED -n 's/#\(\(undef\|define\) F77_FUNC.*$\)/# \1/p' $config_h_file cat << EOF /* Enable inline functions or typedefs that provide access to symbols that have been moved to the octave namespace so that users of Octave may continue to access symbols using the deprecated names. */ # define OCTAVE_PROVIDE_DEPRECATED_SYMBOLS 1 # include "oct-conf-post-public.h" #endif #endif EOF ================================================ FILE: build-aux/mk-opts.pl ================================================ #! /usr/bin/perl -w ######################################################################## ## ## Copyright (C) 2002-2026 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## distribution or . ## ## This file is part of Octave. ## ## Octave is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## . ## ######################################################################## # Generate option handling code from a simpler input files for # Octave's functions like lsode, dassl, etc. # FIXME: # # * Improve default documentation and/or individual documentation # in data files. # # * Fix print/show code to display/return something more informative # for special values (for example, -1 ==> infinite in some cases). # Probably need more information in the data files for this. # Input file format: # # CLASS = string # FCN_NAME = string # INCLUDE = file # DOC_STRING doc END_DOC_STRING # OPTION # NAME = string # DOC_ITEM doc END_DOC_ITEM # TYPE = string # SET_ARG_TYPE = string (optional, defaults to TYPE) # INIT_VALUE = string | INIT_BODY code END_INIT_BODY # SET_EXPR = string | SET_BODY code END_SET_BODY | SET_CODE code END_SET_CODE # END_OPTION # # END_* must appear at beginning of line (whitespace ignored). ################################################################################ # Load packages to # 1) process command line options ################################################################################ use Getopt::Long; ################################################################################ # Extract command line arguments &parse_options; $DEFN_FILE = shift @ARGV; open (DEFN_FILE) or die "unable to open input definition file $DEFN_FILE"; ################################################################################ # Initialize variables $BLANK_LINE = qr/^\s*$/; $COMMENT = qr/^\s*#/; ################################################################################ # Process file $OPT_NUM = 0; &parse_input; &process_data; # Produce desired style of output &emit_opt_class_header if $opt_class_header; &emit_opt_handler_fcns if $opt_handler_fcns; &emit_options_debug if $opt_debug; # End of main code ################################################################################ # Subroutines ################################################################################ sub parse_input { LINE: while () { next LINE if /$BLANK_LINE/; next LINE if /$COMMENT/; if (/^\s*OPTION\s*$/) { &parse_option_block; } elsif (/^\s*CLASS\s*=\s*"(\w+)"\s*$/) { die "duplicate CLASS" if defined $CLASS; $CLASS = $1; $CLASS_NAME = "${CLASS}_options"; $STRUCT_NAME = "${CLASS_NAME}_struct"; $STATIC_TABLE_NAME = "${CLASS_NAME}_table"; } elsif (/^\s*FCN_NAME\s*=\s*"(\w+)"\s*$/) { die "duplicate FCN_NAME" if defined $FCN_NAME; $FCN_NAME = $1; } elsif (/^\s*INCLUDE\s*=\s*"(\S+)"\s*$/) { $INCLUDE .= qq (#include "$1"\n); } elsif (/^\s*DOC_STRING\s*$/) { die "duplicate DOC_STRING" if defined $DOC_STRING; while (defined ($_ = ) and not /^\s*END_DOC_STRING\s*$/) { $DOC_STRING .= $_; } $DOC_STRING =~ s/\n/\\n\\\n/g; } else { die "mk-opts.pl: unknown command: $_\n" } } $INCLUDE = "" if not defined $INCLUDE; # Initialize value if required } sub parse_option_block { while () { next if /$BLANK_LINE/; die "missing END_OPTION" if /^\s*OPTION\s*$/; last if /^\s*END_OPTION\s*$/; if (/^\s*NAME\s*=\s*"(.*)"\s*$/) { die "duplicate NAME" if defined $NAME[$OPT_NUM]; $NAME[$OPT_NUM] = $1; ($OPT[$OPT_NUM] = $NAME[$OPT_NUM]) =~ s/\s+/_/g; $OPTVAR[$OPT_NUM] = 'm_' . $OPT[$OPT_NUM]; $KW_TOK[$OPT_NUM] = [ split (' ', $NAME[$OPT_NUM]) ]; $N_TOKS[$OPT_NUM] = @{$KW_TOK[$OPT_NUM]}; } elsif (/^\s*DOC_ITEM\s*$/) { die "duplicate DOC_ITEM" if defined $DOC_ITEM[$OPT_NUM]; while (defined ($_ = ) and not /^\s*END_DOC_ITEM\s*$/) { $DOC_ITEM[$OPT_NUM] .= $_; } } elsif (/^\s*TYPE\s*=\s*"(.*)"\s*$/) { die "duplicate TYPE" if defined $TYPE[$OPT_NUM]; $TYPE[$OPT_NUM] = $1; } elsif (/^\s*SET_ARG_TYPE\s*=\s*"(.*)"\s*$/) { die "duplicate SET_ARG_TYPE" if defined $SET_ARG_TYPE[$OPT_NUM]; $SET_ARG_TYPE[$OPT_NUM] = $1; } elsif (/^\s*INIT_VALUE\s*=\s*"(.*)"\s*$/) { die "duplicate INIT_VALUE" if defined $INIT_VALUE[$OPT_NUM]; $INIT_VALUE[$OPT_NUM] = $1; } elsif (/^\s*SET_EXPR\s*=\s*"(.*)"\s*$/) { die "duplicate SET_EXPR" if defined $SET_EXPR[$OPT_NUM]; $SET_EXPR[$OPT_NUM] = $1; } elsif (/^\s*INIT_BODY\s*$/) { die "duplicate INIT_BODY" if defined $INIT_BODY[$OPT_NUM]; while (defined ($_ = ) and not /^\s*END_INIT_BODY\s*$/) { $INIT_BODY[$OPT_NUM] .= $_; } } elsif (/^\s*SET_BODY\s*$/) { die "duplicate SET_BODY" if defined $INIT_BODY[$OPT_NUM]; while (defined ($_ = ) and not /^\s*END_SET_BODY\s*$/) { $SET_BODY[$OPT_NUM] .= $_; } } elsif (/^\s*SET_CODE\s*$/) { die "duplicate SET_CODE" if defined $SET_CODE[$OPT_NUM]; while (defined ($_ = ) and not /^\s*END_SET_CODE\s*$/) { $SET_CODE[$OPT_NUM] .= $_; } } } if (not defined $SET_ARG_TYPE[$OPT_NUM]) { $SET_ARG_TYPE[$OPT_NUM] = $TYPE[$OPT_NUM]; } else { $SET_ARG_TYPE[$OPT_NUM] = substopt ($SET_ARG_TYPE[$OPT_NUM], $OPTVAR[$OPT_NUM], $OPT[$OPT_NUM], $TYPE[$OPT_NUM]); } $OPT_NUM++; } sub process_data { $MAX_TOKENS = max (@N_TOKS); &get_min_match_len_info; $FCN_NAME = lc ($CLASS) if not defined $FCN_NAME; $OPT_FCN_NAME = "${FCN_NAME}_options" if not defined $OPT_FCN_NAME; $STATIC_OBJECT_NAME = "${FCN_NAME}_opts"; if (not defined $DOC_STRING) { $DOC_STRING = "Query or set options for the function \@code{$FCN_NAME}. When called with no arguments, the names of all available options and their current values are displayed. Given one argument, return the value of the option \@var{opt}. When called with two arguments, \@code{$OPT_FCN_NAME} sets the option \@var{opt} to value \@var{val}."; } } ## FIXME: What does this routine do? And can it be simpler to understand? sub get_min_match_len_info { my ($i, $j, $k); for ($i = 0; $i < $OPT_NUM; $i++) { for ($j = 0; $j < $MAX_TOKENS; $j++) { $MIN_TOK_LEN_TO_MATCH[$i][$j] = 0; } $MIN_TOKS_TO_MATCH[$i] = 1; L1: for ($k = 0; $k < $OPT_NUM; $k++) { my $duplicate = 1; if ($i != $k) { L2: for ($j = 0; $j < $MAX_TOKENS; $j++) { if ($j < $N_TOKS[$i]) { if ($KW_TOK[$i][$j] eq $KW_TOK[$k][$j]) { if ($MIN_TOK_LEN_TO_MATCH[$i][$j] == 0) { $MIN_TOK_LEN_TO_MATCH[$i][$j] = 1; } $MIN_TOKS_TO_MATCH[$i]++; } else { $duplicate = 0; if ($MIN_TOK_LEN_TO_MATCH[$i][$j] == 0) { $MIN_TOK_LEN_TO_MATCH[$i][$j] = 1; } my @s = split (//, $KW_TOK[$i][$j]); my @t = split (//, $KW_TOK[$k][$j]); my ($n, $ii); $n = scalar (@s); $n = scalar (@t) if (@t < $n); for ($ii = 0; $ii < $n; $ii++) { if ("$s[$ii]" eq "$t[$ii]") { if ($ii + 2 > $MIN_TOK_LEN_TO_MATCH[$i][$j]) { $MIN_TOK_LEN_TO_MATCH[$i][$j]++; } } else { last L2; } } last L1; } } else { die qq|ambiguous options "$NAME[$i]" and "$NAME[$k]"| if $duplicate; } } } } } } # end of get_min_match_len_info sub emit_copy_body { my ($pfx, $var) = @_; for (my $i = 0; $i < $OPT_NUM; $i++) { print "${pfx}$OPTVAR[$i] = ${var}.$OPTVAR[$i];\n"; } print "${pfx}m_reset = ${var}.m_reset;\n"; } ## To silence GCC warnings, we create an initialization list even ## though the init function actually does the work of initialization. sub emit_default_init_list { my ($prefix) = @_; print "$OPTVAR[0] (),\n" unless ($OPT_NUM == 0); for (my $i = 1; $i < $OPT_NUM; $i++) { print "${prefix}$OPTVAR[$i] (),\n"; } print "${prefix}m_reset ()\n"; } sub emit_copy_ctor_init_list { my ($prefix, $var) = @_; print "$OPTVAR[0] ($var.$OPTVAR[0]),\n" unless ($OPT_NUM == 0); for (my $i = 1; $i < $OPT_NUM; $i++) { print "${prefix}$OPTVAR[$i] ($var.$OPTVAR[$i]),\n"; } print "${prefix}m_reset ($var.m_reset)\n"; } sub emit_opt_class_header { my ($i, $s); print <<"_END_EMIT_OPT_CLASS_HEADER_"; // DO NOT EDIT! // Generated automatically from $DEFN_FILE. #if ! defined (octave_${CLASS_NAME}_h) #define octave_${CLASS_NAME}_h 1 #include #include $INCLUDE class $CLASS_NAME { public: $CLASS_NAME () _END_EMIT_OPT_CLASS_HEADER_ print ' : '; emit_default_init_list (" "); print " { init (); } $CLASS_NAME (const ${CLASS_NAME}& opt) : "; emit_copy_ctor_init_list (" ", "opt"); print " { } ${CLASS_NAME}& operator = (const ${CLASS_NAME}& opt) { if (this != &opt) {\n"; emit_copy_body (' ', 'opt'); print " } return *this; } ~$CLASS_NAME () { }\n"; print "\n void init ()\n {\n"; for ($i = 0; $i < $OPT_NUM; $i++) { if (defined $INIT_VALUE[$i]) { print " $OPTVAR[$i] = $INIT_VALUE[$i];\n"; } elsif ($INIT_BODY[$i]) { $s = substopt ($INIT_BODY[$i], $OPTVAR[$i], $OPT[$i], $TYPE[$i]); chomp ($s); $s =~ s/^\s*/ /g; $s =~ s/\n\s*/\n /g; print $s,"\n"; } } print " m_reset = true;\n", " }\n"; ## For backward compatibility and because set_options is probably ## a better name in some contexts: print "\n void set_options (const ${CLASS_NAME}& opt)\n", " {\n"; emit_copy_body (' ', 'opt'); print " }\n\n void set_default_options () { init (); }\n"; for ($i = 0; $i < $OPT_NUM; $i++) { if ($SET_EXPR[$i]) { emit_set_decl ($i); print "\n { $OPTVAR[$i] = $SET_EXPR[$i]; m_reset = true; }\n"; } elsif ($SET_BODY[$i]) { emit_set_decl ($i); $s = substopt ($SET_BODY[$i], $OPTVAR[$i], $OPT[$i], $TYPE[$i]); chomp ($s); $s = ' ' . $s; $s =~ s/\n/\n /g; print "\n {\n$s\n m_reset = true;\n }\n"; } elsif ($SET_CODE[$i]) { $s = substopt ($SET_CODE[$i], $OPTVAR[$i], $OPT[$i], $TYPE[$i]); chomp ($s); $s =~ s/^ //g; $s =~ s/\n /\n/g; print "\n",$s,"\n"; } } for ($i = 0; $i < $OPT_NUM; $i++) { print " $TYPE[$i] $OPT[$i] () const\n { return $OPTVAR[$i]; }\n\n"; } print "private:\n\n"; for ($i = 0; $i < $OPT_NUM; $i++) { print " $TYPE[$i] $OPTVAR[$i];\n"; } print "\nprotected:\n\n bool m_reset;\n};\n\n#endif\n"; } sub emit_set_decl { my ($i) = @_; print "\n void set_$OPT[$i] ($SET_ARG_TYPE[$i] val)"; } sub emit_opt_handler_fcns { my $header = $DEFN_FILE; $header =~ s/[.]\w*$/.h/; # replace .in with .h $header =~ s|^.*/([^/]*)$|$1|; # strip directory part print <<"_END_EMIT_OPT_HANDLER_FCNS_"; // DO NOT EDIT! // Generated automatically from $DEFN_FILE. // This file should not include config.h. It is only included in other // C++ source files that should have included config.h before including // this file. #include #include #include #include "$header" #include "defun.h" #include "pr-output.h" #include "ovl.h" #include "utils.h" #include "pager.h" static $CLASS_NAME $STATIC_OBJECT_NAME; _END_EMIT_OPT_HANDLER_FCNS_ &emit_struct_decl; &emit_struct_def; &emit_print_function; &emit_set_functions; &emit_show_function; &emit_options_function; } sub emit_struct_decl { print <<"_END_PRINT_STRUCT_DECL_"; #define MAX_TOKENS $MAX_TOKENS struct $STRUCT_NAME { const char *keyword; const char *kw_tok[MAX_TOKENS + 1]; int min_len[MAX_TOKENS + 1]; int min_toks_to_match; }; _END_PRINT_STRUCT_DECL_ } sub emit_struct_def { my $i; print "#define NUM_OPTIONS $OPT_NUM\n\n"; print "static $STRUCT_NAME $STATIC_TABLE_NAME [] =\n{\n"; for ($i = 0; $i < ($OPT_NUM - 1); $i++) { emit_option_table_entry ($i, 0); print "\n"; } emit_option_table_entry ($i, 0); print "};\n\n"; } sub emit_option_table_entry { my ($i, $empty) = @_; my $k; if ($empty) { print " { nullptr,\n"; } else { print " { \"$NAME[$i]\",\n"; } my $n = scalar $#{$KW_TOK[$i]}; print " {"; for $k (0 .. $MAX_TOKENS) { if ($empty or $k > $n) { print " nullptr,"; } else { print " \"$KW_TOK[$i][$k]\","; } } print " },\n"; print " {"; for $k (0 .. $MAX_TOKENS) { if ($empty or $k > $n) { print " 0,"; } else { print " $MIN_TOK_LEN_TO_MATCH[$i][$k],"; } } print " }, $MIN_TOKS_TO_MATCH[$i], "; print "},\n"; } sub emit_print_function { ## FIXME: determine the width of the table automatically. print qq|static void print_$CLASS_NAME (std::ostream& os) { std::ostringstream buf; os << "\\n" << "Options for $CLASS include:\\n\\n" << " keyword value\\n" << " ------- -----\\n"; $STRUCT_NAME *list = $STATIC_TABLE_NAME;\n\n|; for (my $i = 0; $i < $OPT_NUM; $i++) { print qq| {\n os << " " << std::setiosflags (std::ios::left) << std::setw (50) << list[$i].keyword << std::resetiosflags (std::ios::left) << " ";\n\n|; if ($TYPE[$i] eq "double") { print qq| double val = $STATIC_OBJECT_NAME.$OPT[$i] ();\n\n|; print qq| os << val << "\\n";\n|; } elsif ($TYPE[$i] eq "float") { print qq| float val = $STATIC_OBJECT_NAME.$OPT[$i] ();\n\n|; print qq| os << val << "\\n";\n|; } elsif ($TYPE[$i] eq "int" or $TYPE[$i] eq "octave_idx_type") { print qq| int val = $STATIC_OBJECT_NAME.$OPT[$i] ();\n\n|; print qq| os << val << "\\n";\n|; } elsif ($TYPE[$i] eq "std::string") { print qq| os << $STATIC_OBJECT_NAME.$OPT[$i] () << "\\n";\n|; } elsif ($TYPE[$i] eq "Array" or $TYPE[$i] eq "Array") { my $elt_type; if ($TYPE[$i] eq "Array") { $elt_type = "int"; } else { $elt_type = "octave_idx_type"; } print qq| Array<$elt_type> val = $STATIC_OBJECT_NAME.$OPT[$i] ();\n\n|; print qq| if (val.numel () == 1) { os << val(0) << "\\n"; } else { os << "\\n\\n"; octave_idx_type len = val.numel (); Matrix tmp (len, 1); for (octave_idx_type i = 0; i < len; i++) tmp(i,0) = val(i); octave_print_internal (os, tmp, false, 2); os << "\\n\\n"; }\n|; } elsif ($TYPE[$i] eq "Array") { print qq| Array val = $STATIC_OBJECT_NAME.$OPT[$i] ();\n\n|; print qq| if (val.numel () == 1) { os << val(0) << "\\n"; } else { os << "\\n\\n"; Matrix tmp = Matrix (ColumnVector (val)); octave_print_internal (os, tmp, false, 2); os << "\\n\\n"; }\n|; } elsif ($TYPE[$i] eq "Array") { print qq| Array val = $STATIC_OBJECT_NAME.$OPT[$i] ();\n\n|; print qq| if (val.numel () == 1) { os << val(0) << "\\n"; } else { os << "\\n\\n"; FloatMatrix tmp = FloatMatrix (FloatColumnVector (val)); octave_print_internal (os, tmp, false, 2); os << "\\n\\n"; }\n|; } else { die ("unknown type $TYPE[$i]"); } print " }\n\n"; } print qq| os << "\\n";\n}\n\n|; } sub emit_set_functions { print "static void set_$CLASS_NAME (const std::string& keyword, const octave_value& val) { $STRUCT_NAME *list = $STATIC_TABLE_NAME;\n\n"; my $iftok = "if"; for (my $i = 0; $i < $OPT_NUM; $i++) { $iftok = "else if" if ($i > 0); print " $iftok (octave::keyword_almost_match (list[$i].kw_tok, list[$i].min_len, keyword, list[$i].min_toks_to_match, MAX_TOKENS)) {\n"; if ($TYPE[$i] eq "double") { print " double tmp = val.double_value ();\n\n"; print " $STATIC_OBJECT_NAME.set_$OPT[$i] (tmp);\n"; } elsif ($TYPE[$i] eq "float") { print " float tmp = val.float_value ();\n\n"; print " $STATIC_OBJECT_NAME.set_$OPT[$i] (tmp);\n"; } elsif ($TYPE[$i] eq "int" or $TYPE[$i] eq "octave_idx_type") { print " int tmp = val.int_value ();\n\n"; print " $STATIC_OBJECT_NAME.set_$OPT[$i] (tmp);\n"; } elsif ($TYPE[$i] eq "std::string") { print " std::string tmp = val.string_value ();\n\n"; print " $STATIC_OBJECT_NAME.set_$OPT[$i] (tmp);\n"; } elsif ($TYPE[$i] eq "Array" or $TYPE[$i] eq "Array") { print " Array tmp = val.int_vector_value ();\n\n"; print " $STATIC_OBJECT_NAME.set_$OPT[$i] (tmp);\n"; } elsif ($TYPE[$i] eq "Array") { print " Array tmp = val.vector_value ();\n\n"; print " $STATIC_OBJECT_NAME.set_$OPT[$i] (tmp);\n"; } elsif ($TYPE[$i] eq "Array") { print " Array tmp = val.float_vector_value ();\n\n"; print " $STATIC_OBJECT_NAME.set_$OPT[$i] (tmp);\n"; } else { die ("unknown type $TYPE[$i]"); } print " }\n"; } print qq| else { warning ("$OPT_FCN_NAME: no match for `%s'", keyword.c_str ()); } }\n\n|; } sub emit_show_function { print "static octave_value_list show_$CLASS_NAME (const std::string& keyword) { octave_value retval; $STRUCT_NAME *list = $STATIC_TABLE_NAME;\n\n"; my $iftok = "if"; for (my $i = 0; $i < $OPT_NUM; $i++) { $iftok = "else if" if ($i > 0); print " $iftok (octave::keyword_almost_match (list[$i].kw_tok, list[$i].min_len, keyword, list[$i].min_toks_to_match, MAX_TOKENS)) {\n"; if ($TYPE[$i] eq "double") { print " double val = $STATIC_OBJECT_NAME.$OPT[$i] ();\n\n"; print " retval = val;\n"; } elsif ($TYPE[$i] eq "float") { print " float val = $STATIC_OBJECT_NAME.$OPT[$i] ();\n\n"; print " retval = val;\n"; } elsif ($TYPE[$i] eq "int" or $TYPE[$i] eq "octave_idx_type") { print " int val = $STATIC_OBJECT_NAME.$OPT[$i] ();\n\n"; print " retval = static_cast (val);\n"; } elsif ($TYPE[$i] eq "std::string") { print " retval = $STATIC_OBJECT_NAME.$OPT[$i] ();\n"; } elsif ($TYPE[$i] eq "Array" or $TYPE[$i] eq "Array") { my $elt_type; if ($TYPE[$i] eq "Array") { $elt_type = "int"; } else { $elt_type = "octave_idx_type"; } print " Array<$elt_type> val = $STATIC_OBJECT_NAME.$OPT[$i] ();\n\n"; print " if (val.numel () == 1) { retval = static_cast (val(0)); } else { octave_idx_type len = val.numel (); ColumnVector tmp (len); for (octave_idx_type i = 0; i < len; i++) tmp(i) = val(i); retval = tmp; }\n"; } elsif ($TYPE[$i] eq "Array") { print " Array val = $STATIC_OBJECT_NAME.$OPT[$i] ();\n\n"; print " if (val.numel () == 1) { retval = val(0); } else { retval = ColumnVector (val); }\n"; } elsif ($TYPE[$i] eq "Array") { print " Array val = $STATIC_OBJECT_NAME.$OPT[$i] ();\n\n"; print " if (val.numel () == 1) { retval = val(0); } else { retval = FloatColumnVector (val); }\n"; } else { die ("unknown type $TYPE[$i]"); } print " }\n"; } print qq| else { warning ("$OPT_FCN_NAME: no match for `%s'", keyword.c_str ()); } return retval;\n}\n\n|; } sub emit_options_function { print <<"_END_EMIT_OPTIONS_FUNCTION_HDR_"; OCTAVE_BEGIN_NAMESPACE(octave) DEFUN ($OPT_FCN_NAME, args, , doc: /* -*- texinfo -*- \@deftypefn {} {} $OPT_FCN_NAME () \@deftypefnx {} {val =} $OPT_FCN_NAME (\@var{opt}) \@deftypefnx {} {} $OPT_FCN_NAME (\@var{opt}, \@var{val}) $DOC_STRING Options include \@table \@asis _END_EMIT_OPTIONS_FUNCTION_HDR_ # FIXME: Add extra newline above for (my $i = 0; $i < $OPT_NUM; $i++) { print '@item @qcode{"', $NAME[$i], '"}', "\n"; print $DOC_ITEM[$i] if $DOC_ITEM[$i]; } print <<"_END_EMIT_OPTIONS_FUNCTION_BODY_"; \@end table \@end deftypefn */) { octave_value_list retval; int nargin = args.length (); if (nargin > 2) print_usage (); if (nargin == 0) { print_$CLASS_NAME (octave_stdout); } else { std::string keyword = args(0).xstring_value ("$OPT_FCN_NAME: expecting keyword as first argument"); if (nargin == 1) retval = show_$CLASS_NAME (keyword); else set_$CLASS_NAME (keyword, args(1)); } return retval; } OCTAVE_END_NAMESPACE(octave) _END_EMIT_OPTIONS_FUNCTION_BODY_ } sub emit_options_debug { print qq|CLASS = "$CLASS"\n|; for (my $i = 0; $i < $OPT_NUM; $i++) { print "\nOPTION\n"; print qq| NAME = "$NAME[$i]"\n|; print qq| TYPE = "$TYPE[$i]"\n|; if ($SET_ARG_TYPE[$i]) { print eval ("\" SET_ARG_TYPE = \\\"$SET_ARG_TYPE[$i]\\\"\"") . "\n"; } if ($INIT_VALUE[$i]) { print qq| INIT_VALUE = "$INIT_VALUE[$i]"\n|; } if ($INIT_BODY[$i]) { print " INIT_BODY\n"; print &substopt ($INIT_BODY[$i]); print " END_INIT_BODY\n"; } if ($SET_EXPR[$i]) { print qq| SET_EXPR = "$SET_EXPR[$i]"\n|; } if ($SET_BODY[$i]) { print " SET_BODY\n"; print &substopt ($SET_BODY[$i]); print " END_SET_BODY\n"; } if ($SET_CODE[$i]) { print " SET_CODE\n"; print &substopt ($SET_CODE[$i]); print " END_SET_CODE\n"; } print "END_OPTION\n"; } } sub substopt { my ($string, $optvar, $opt, $type) = @_; $string =~ s/\$OPTVAR/$optvar/g; $string =~ s/\$OPT/$opt/g; $string =~ s/\$TYPE/$type/g; return $string; } sub max { my $max = shift; foreach (@_) { $max = $_ if $max < $_; } return $max; } ################################################################################ # Subroutine processes any command line arguments ################################################################################ sub parse_options { my $result; $opt_help = 0; $opt_class_header = 0; $opt_handler_fcns = 0; $opt_debug = 0; $result = GetOptions ("opt-class-header" => \$opt_class_header, "opt-handler-fcns" => \$opt_handler_fcns, "debug" => \$opt_debug, "help" => \$opt_help); # give user info if options incorrect or -h(elp) given &usage_info if (!$result or (@ARGV != 1) or $opt_help); if ($opt_class_header and $opt_handler_fcns) { die "Only one of [-opt-class-header | -opt-handler-fcns ] may be specified"; } } ################################################################################ # Subroutine displays usage information ################################################################################ sub usage_info { warn <<_END_OF_USAGE_; ////////////////////////////////////////////////////////////////////////////// USAGE : mk-opts.pl -opt-class-header|-opt-handler-fcns [-debug] [-help] DEFN_FILE ////////////////////////////////////////////////////////////////////////////// Automatically generate C++ code for option handling code (DASSL, DASRT, etc.) from definition file. See the head of mk-opts.pl for a description of the format that is parsed. _END_OF_USAGE_ exit(1); # exit with error code } ================================================ FILE: build-aux/mk-pkg-add.sh ================================================ #! /bin/sh ######################################################################## ## ## Copyright (C) 2005-2026 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## distribution or . ## ## This file is part of Octave. ## ## Octave is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## . ## ######################################################################## ## Attempt to get traditional sort behavior based on byte values. LC_ALL=C export LC_ALL set -e SED=${SED:-sed} srcdir="$1" shift for arg do src_file="$srcdir/$arg" if [ -f "$src_file" ]; then ## Compute and print the autoloads. base=`basename "$src_file" | $SED 's/\.cc$//'` fcns=`$SED -n \ -e 's/^ *DEF\(METHOD\|UN\)_\(\|STATIC_\)DLD *( *\([^, ]*\) *,.*$/\3/p' \ -e 's/^ *DEF\(METHOD\|UN\)X_\(\|STATIC_\)DLD *( *"\([^"]*\)".*$/\3/p' \ "$src_file" | \ sort -u` if [ -n "$fcns" ]; then for n in $fcns; do if [ "$n" = "$base" ]; then true else echo "autoload (\"$n\", \"$base.oct\");" 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' "$src_file" fi done exit $? ================================================ FILE: build-aux/module.mk ================================================ EXTRA_DIST += \ %reldir%/OctJavaQry.class \ %reldir%/OctJavaQry.java \ %reldir%/changelog.tmpl \ %reldir%/check-subst-vars.in.sh \ %reldir%/find-defun-files.in.sh \ %reldir%/find-files-with-tests.in.sh \ %reldir%/get-source-mtime.sh \ %reldir%/inplace-edit.pl \ %reldir%/mk-hg-id.sh \ %reldir%/mk-octave-config-h.sh \ %reldir%/mk-opts.pl \ %reldir%/mk-pkg-add.sh \ %reldir%/move-if-change \ %reldir%/subst-config-vals.in.sh \ %reldir%/subst-cross-config-vals.in.sh \ %reldir%/subst-script-vals.in.sh \ %reldir%/update-bug-status.sh GEN_CONFIG_SHELL += \ %reldir%/subst-config-vals.sh \ %reldir%/subst-cross-config-vals.sh \ %reldir%/subst-script-vals.sh $(GEN_CONFIG_SHELL) : %.sh : %.in.sh config.status $(AM_V_GEN)$(SHELL) config.status $@-tmp $@ GEN_CONFIG_INC = \ oct-conf-post-private.h \ oct-conf-post-public.h $(GEN_CONFIG_INC) : %.h : %.in.h config.status $(AM_V_GEN)$(SHELL) config.status $@-tmp $@ ### utility rules to aid development ALL_TEST_FILES = \ $(addprefix $(srcdir)/, $(LIBOCTAVE_TST_FILES_SRC)) \ $(addprefix $(srcdir)/, $(LIBINTERP_TST_FILES_SRC)) \ $(addprefix $(srcdir)/, $(FCN_FILES_WITH_TESTS)) \ $(addprefix $(srcdir)/, $(TEST_FILES)) ## Tag bug IDs in tests as fixed update-bug-status: $(SHELL) $(srcdir)/%reldir%/update-bug-status.sh $(ALL_TEST_FILES) .PHONY: update-bug-status ================================================ FILE: build-aux/subst-config-vals.in.sh ================================================ #! /bin/sh ######################################################################## ## ## Copyright (C) 2016-2026 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## distribution or . ## ## This file is part of Octave. ## ## Octave is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## . ## ######################################################################## : ${SED=@SED@} canonical_host_type="@canonical_host_type@" DEFAULT_PAGER="@DEFAULT_PAGER@" EXEEXT="@EXEEXT@" man1ext="@man1ext@" api_version="@OCTAVE_API_VERSION@" OCTAVE_RELEASE="" version="@PACKAGE_VERSION@" prefix="@prefix@" exec_prefix="@exec_prefix@" archlibdir=`echo "@archlibdir@" | $SED "s|^${exec_prefix}/\\+||"` bindir=`echo "@bindir@" | $SED "s|^${exec_prefix}/\\+||"` libdir=`echo "@libdir@" | $SED "s|^${exec_prefix}/\\+||"` libexecdir=`echo "@libexecdir@" | $SED "s|^${exec_prefix}/\\+||"` localapiarchlibdir=`echo "@localapiarchlibdir@" | $SED "s|^${exec_prefix}/\\+||"` localapioctfiledir=`echo "@localapioctfiledir@" | $SED "s|^${exec_prefix}/\\+||"` localarchlibdir=`echo "@localarchlibdir@" | $SED "s|^${exec_prefix}/\\+||"` localoctfiledir=`echo "@localoctfiledir@" | $SED "s|^${exec_prefix}/\\+||"` localverarchlibdir=`echo "@localverarchlibdir@" | $SED "s|^${exec_prefix}/\\+||"` localveroctfiledir=`echo "@localveroctfiledir@" | $SED "s|^${exec_prefix}/\\+||"` octfiledir=`echo "@octfiledir@" | $SED "s|^${exec_prefix}/\\+||"` octlibdir=`echo "@octlibdir@" | $SED "s|^${exec_prefix}/\\+||"` datadir=`echo "@datadir@" | $SED "s|^${prefix}/\\+||"` datarootdir=`echo "@datarootdir@" | $SED "s|^${prefix}/\\+||"` doc_cache_file=`echo "@doc_cache_file@" | $SED "s|^${prefix}/\\+||"` exec_prefix=`echo "@exec_prefix@" | $SED "s|^${prefix}/\\+||"` fcnfiledir=`echo "@fcnfiledir@" | $SED "s|^${prefix}/\\+||"` imagedir=`echo "@imagedir@" | $SED "s|^${prefix}/\\+||"` includedir=`echo "@includedir@" | $SED "s|^${prefix}/\\+||"` infodir=`echo "@infodir@" | $SED "s|^${prefix}/\\+||"` infofile=`echo "@infofile@" | $SED "s|^${prefix}/\\+||"` localapifcnfiledir=`echo "@localapifcnfiledir@" | $SED "s|^${prefix}/\\+||"` localapipkgdir=`echo "@localapipkgdir@" | $SED "s|^${prefix}/\\+||"` localfcnfiledir=`echo "@localfcnfiledir@" | $SED "s|^${prefix}/\\+||"` localstartupfiledir=`echo "@localstartupfiledir@" | $SED "s|^${prefix}/\\+||"` localapiarchlibdir=`echo "@localapiarchlibdir@" | $SED "s|^${prefix}/\\+||"` localverfcnfiledir=`echo "@localverfcnfiledir@" | $SED "s|^${prefix}/\\+||"` man1dir=`echo "@man1dir@" | $SED "s|^${prefix}/\\+||"` mandir=`echo "@mandir@" | $SED "s|^${prefix}/\\+||"` octdatadir=`echo "@octdatadir@" | $SED "s|^${prefix}/\\+||"` octdocdir=`echo "@octdocdir@" | $SED "s|^${prefix}/\\+||"` octetcdir=`echo "@octetcdir@" | $SED "s|^${prefix}/\\+||"` octfontsdir=`echo "@octfontsdir@" | $SED "s|^${prefix}/\\+||"` octincludedir=`echo "@octincludedir@" | $SED "s|^${prefix}/\\+||"` octlocaledir=`echo "@octlocaledir@" | $SED "s|^${prefix}/\\+||"` octtestsdir=`echo "@octtestsdir@" | $SED "s|^${prefix}/\\+||"` startupfiledir=`echo "@startupfiledir@" | $SED "s|^${prefix}/\\+||"` texi_macros_file=`echo "@texi_macros_file@" | $SED "s|^${prefix}/\\+||"` ## FIXME: Some of these flags might contain double quotes. ## Is it ok to use single quotes here? if [ "x@OCTAVE_RELOCATE_ALL@" = "xyes" ]; then ## Replace portions of compiler flags that depend on prefix on target if [ "x@OCTAVE_RELOCATE_WITH_CYGPATH@" = "xyes" ]; then ## Replace all path forms of the prefix cppflags=`echo '@CPPFLAGS@' | sed "s|$(@CYGPATH@ -m @prefix@)|\$\{prefix}|g" | sed "s|$(echo $(@CYGPATH@ -w @prefix@) | sed 's|\\\\|\\\\\\\\|g')|\$\{prefix}|g" | sed "s|$(@CYGPATH@ -u @prefix@)|\$\{prefix}|g" | $SED "s|(@prefix@)|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` fftw3f_ldflags=`echo '@FFTW3F_LDFLAGS@' | sed "s|$(@CYGPATH@ -m @prefix@)|\$\{prefix}|g" | sed "s|$(echo $(@CYGPATH@ -w @prefix@) | sed 's|\\\\|\\\\\\\\|g')|\$\{prefix}|g" | sed "s|$(@CYGPATH@ -u @prefix@)|\$\{prefix}|g" | $SED "s|(@prefix@)|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` fftw3_ldflags=`echo '@FFTW3_LDFLAGS@' | sed "s|$(@CYGPATH@ -m @prefix@)|\$\{prefix}|g" | sed "s|$(echo $(@CYGPATH@ -w @prefix@) | sed 's|\\\\|\\\\\\\\|g')|\$\{prefix}|g" | sed "s|$(@CYGPATH@ -u @prefix@)|\$\{prefix}|g" | $SED "s|(@prefix@)|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` flibs=`echo '@FLIBS@' | sed "s|$(@CYGPATH@ -m @prefix@)|\$\{prefix}|g" | sed "s|$(echo $(@CYGPATH@ -w @prefix@) | sed 's|\\\\|\\\\\\\\|g')|\$\{prefix}|g" | sed "s|$(@CYGPATH@ -u @prefix@)|\$\{prefix}|g" | $SED "s|(@prefix@)|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` ldflags=`echo '@LDFLAGS@' | sed "s|$(@CYGPATH@ -m @prefix@)|\$\{prefix}|g" | sed "s|$(echo $(@CYGPATH@ -w @prefix@) | sed 's|\\\\|\\\\\\\\|g')|\$\{prefix}|g" | sed "s|$(@CYGPATH@ -u @prefix@)|\$\{prefix}|g" | $SED "s|(@prefix@)|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` oct_link_opts=`echo '@OCT_LINK_OPTS@' | sed "s|$(@CYGPATH@ -m @prefix@)|\$\{prefix}|g" | sed "s|$(echo $(@CYGPATH@ -w @prefix@) | sed 's|\\\\|\\\\\\\\|g')|\$\{prefix}|g" | sed "s|$(@CYGPATH@ -u @prefix@)|\$\{prefix}|g" | $SED "s|(@prefix@)|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` mkoctfile_octave_link_deps=`echo '@MKOCTFILE_OCTAVE_LINK_DEPS@' | sed "s|$(@CYGPATH@ -m @prefix@)|\$\{prefix}|g" | sed "s|$(echo $(@CYGPATH@ -w @prefix@) | sed 's|\\\\|\\\\\\\\|g')|\$\{prefix}|g" | sed "s|$(@CYGPATH@ -u @prefix@)|\$\{prefix}|g" | $SED "s|(@prefix@)|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` mkoctfile_oct_link_deps=`echo '@MKOCTFILE_OCT_LINK_DEPS@' | sed "s|$(@CYGPATH@ -m @prefix@)|\$\{prefix}|g" | sed "s|$(echo $(@CYGPATH@ -w @prefix@) | sed 's|\\\\|\\\\\\\\|g')|\$\{prefix}|g" | sed "s|$(@CYGPATH@ -u @prefix@)|\$\{prefix}|g" | $SED "s|(@prefix@)|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` else cppflags=`echo '@CPPFLAGS@' | $SED "s|@prefix@|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` fftw3f_ldflags=`echo '@FFTW3F_LDFLAGS@' | $SED "s|@prefix@|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` fftw3_ldflags=`echo '@FFTW3_LDFLAGS@' | $SED "s|@prefix@|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` flibs=`echo '@FLIBS@' | $SED "s|@prefix@|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` ldflags=`echo '@LDFLAGS@' | $SED "s|@prefix@|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` oct_link_opts=`echo '@OCT_LINK_OPTS@' | $SED "s|@prefix@|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` mkoctfile_octave_link_deps=`echo '@MKOCTFILE_OCTAVE_LINK_DEPS@' | $SED "s|@prefix@|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` mkoctfile_oct_link_deps=`echo '@MKOCTFILE_OCT_LINK_DEPS@' | $SED "s|@prefix@|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` fi else cppflags=`echo '@CPPFLAGS@' | $SED 's|\"|\\\\\\\"|g'` fftw3f_ldflags=`echo '@FFTW3F_LDFLAGS@' | $SED 's|\"|\\\\\\\"|g'` fftw3_ldflags=`echo '@FFTW3_LDFLAGS@' | $SED 's|\"|\\\\\\\"|g'` flibs=`echo '@FLIBS@' | $SED 's|\"|\\\\\\\"|g'` ldflags=`echo '@LDFLAGS@' | $SED 's|\"|\\\\\\\"|g'` oct_link_opts=`echo '@OCT_LINK_OPTS@' | $SED 's|\"|\\\\\\\"|g'` mkoctfile_octave_link_deps=`echo '@MKOCTFILE_OCTAVE_LINK_DEPS@' | $SED 's|\"|\\\\\\\"|g'` mkoctfile_oct_link_deps=`echo '@MKOCTFILE_OCT_LINK_DEPS@' | $SED 's|\"|\\\\\\\"|g'` fi srcdir="@srcdir@" top_srcdir="@top_srcdir@" abs_srcdir="@abs_srcdir@" abs_top_srcdir="@abs_top_srcdir@" NO_OCT_FILE_STRIP="@NO_OCT_FILE_STRIP@" AMD_CPPFLAGS="@AMD_CPPFLAGS@" AMD_LDFLAGS="@AMD_LDFLAGS@" AMD_LIBS="@AMD_LIBS@" AR="@AR@" ARFLAGS="@ARFLAGS@" ARPACK_CPPFLAGS="@ARPACK_CPPFLAGS@" ARPACK_LDFLAGS="@ARPACK_LDFLAGS@" ARPACK_LIBS="@ARPACK_LIBS@" BLAS_LIBS="@BLAS_LIBS@" CAMD_CPPFLAGS="@CAMD_CPPFLAGS@" CAMD_LDFLAGS="@CAMD_LDFLAGS@" CAMD_LIBS="@CAMD_LIBS@" CARBON_LIBS="@CARBON_LIBS@" CC="@CC@" CCOLAMD_CPPFLAGS="@CCOLAMD_CPPFLAGS@" CCOLAMD_LDFLAGS="@CCOLAMD_LDFLAGS@" CCOLAMD_LIBS="@CCOLAMD_LIBS@" CFLAGS="@CFLAGS@" CHOLMOD_CPPFLAGS="@CHOLMOD_CPPFLAGS@" CHOLMOD_LDFLAGS="@CHOLMOD_LDFLAGS@" CHOLMOD_LIBS="@CHOLMOD_LIBS@" COLAMD_CPPFLAGS="@COLAMD_CPPFLAGS@" COLAMD_LDFLAGS="@COLAMD_LDFLAGS@" COLAMD_LIBS="@COLAMD_LIBS@" CPICFLAG="@CPICFLAG@" CURL_CPPFLAGS="@CURL_CPPFLAGS@" CURL_LDFLAGS="@CURL_LDFLAGS@" CURL_LIBS="@CURL_LIBS@" CXSPARSE_CPPFLAGS="@CXSPARSE_CPPFLAGS@" CXSPARSE_LDFLAGS="@CXSPARSE_LDFLAGS@" CXSPARSE_LIBS="@CXSPARSE_LIBS@" CXX="@CXX@" CXXCPP="@CXXCPP@" CXXFLAGS="@CXXFLAGS@" CXXPICFLAG="@CXXPICFLAG@" DEFAULT_PAGER="@DEFAULT_PAGER@" DEFS="@DEFS@" DEPEND_FLAGS="@DEPEND_FLAGS@" DEPEND_EXTRA_SED_PATTERN="@DEPEND_EXTRA_SED_PATTERN@" DL_LDFLAGS="@DL_LDFLAGS@" EXEEXT="@EXEEXT@" GCC_VERSION="@GCC_VERSION@" GXX_VERSION="@GXX_VERSION@" F77="@F77@" F77_FLOAT_STORE_FLAG="@F77_FLOAT_STORE_FLAG@" F77_INTEGER_8_FLAG="@F77_INTEGER_8_FLAG@" FFLAGS="@FFLAGS@" FFTW3_CPPFLAGS="@FFTW3_CPPFLAGS@" FFTW3_LIBS="@FFTW3_LIBS@" FFTW3F_CPPFLAGS="@FFTW3F_CPPFLAGS@" FFTW3F_LIBS="@FFTW3F_LIBS@" FLTK_CPPFLAGS="@FLTK_CPPFLAGS@" FLTK_LDFLAGS="@FLTK_LDFLAGS@" FLTK_LIBS="@FLTK_LIBS@" FONTCONFIG_CPPFLAGS="@FONTCONFIG_CPPFLAGS@" FONTCONFIG_LIBS="@FONTCONFIG_LIBS@" FPICFLAG="@FPICFLAG@" FT2_CPPFLAGS="@FT2_CPPFLAGS@" FT2_LIBS="@FT2_LIBS@" GLPK_CPPFLAGS="@GLPK_CPPFLAGS@" GLPK_LDFLAGS="@GLPK_LDFLAGS@" GLPK_LIBS="@GLPK_LIBS@" GNUPLOT="@GNUPLOT@" HDF5_CPPFLAGS="@HDF5_CPPFLAGS@" HDF5_LDFLAGS="@HDF5_LDFLAGS@" HDF5_LIBS="@HDF5_LIBS@" KLU_CPPFLAGS="@KLU_CPPFLAGS@" KLU_LDFLAGS="@KLU_LDFLAGS@" KLU_LIBS="@KLU_LIBS@" LAPACK_LIBS="@LAPACK_LIBS@" LD_STATIC_FLAG="@LD_STATIC_FLAG@" LEX="@LEX@" LEXLIB="@LEXLIB@" LFLAGS="@LFLAGS@" LIBOCTAVE="@LIBOCTAVE@" LIBOCTINTERP="@LIBOCTINTERP@" LIBS="@LIBS@" LN_S="@LN_S@" MAGICK_CPPFLAGS="@MAGICK_CPPFLAGS@" MAGICK_LDFLAGS="@MAGICK_LDFLAGS@" MAGICK_LIBS="@MAGICK_LIBS@" MKOCTFILE_AR="@MKOCTFILE_AR@" MKOCTFILE_CC="@MKOCTFILE_CC@" MKOCTFILE_CXX="@MKOCTFILE_CXX@" MKOCTFILE_DL_LDFLAGS="@MKOCTFILE_DL_LDFLAGS@" MKOCTFILE_F77="@MKOCTFILE_F77@" MKOCTFILE_RANLIB="@MKOCTFILE_RANLIB@" OCTAVE_LINK_DEPS="@OCTAVE_LINK_DEPS@" OCTAVE_LINK_OPTS="@OCTAVE_LINK_OPTS@" OCT_LINK_DEPS="@OCT_LINK_DEPS@" OPENGL_LIBS="@OPENGL_LIBS@" PCRE_CPPFLAGS="@PCRE_CPPFLAGS@" PCRE_LDFLAGS="@PCRE_LDFLAGS@" PCRE_LIBS="@PCRE_LIBS@" PTHREAD_CFLAGS="@PTHREAD_CFLAGS@" PTHREAD_LIBS="@PTHREAD_LIBS@" QHULL_CPPFLAGS="@QHULL_CPPFLAGS@" QHULL_LDFLAGS="@QHULL_LDFLAGS@" QHULL_LIBS="@QHULL_LIBS@" QRUPDATE_CPPFLAGS="@QRUPDATE_CPPFLAGS@" QRUPDATE_LDFLAGS="@QRUPDATE_LDFLAGS@" QRUPDATE_LIBS="@QRUPDATE_LIBS@" QT_CPPFLAGS="@QT_CPPFLAGS@" QT_LDFLAGS="@QT_LDFLAGS@" QT_LIBS="@QT_LIBS@" RANLIB="@RANLIB@" RDYNAMIC_FLAG="@RDYNAMIC_FLAG@" READLINE_LIBS="@LIBREADLINE@" SHARED_LIBS="@SHARED_LIBS@" SH_LDFLAGS="@SH_LDFLAGS@" STATIC_LIBS="@STATIC_LIBS@" SUITESPARSECONFIG_LIBS="@SUITESPARSECONFIG_LIBS@" SUNDIALS_IDA_CPPFLAGS="@SUNDIALS_IDA_CPPFLAGS@" SUNDIALS_IDA_LDFLAGS="@SUNDIALS_IDA_LDFLAGS@" SUNDIALS_IDA_LIBS="@SUNDIALS_IDA_LIBS@" SUNDIALS_NVECSERIAL_CPPFLAGS="@SUNDIALS_NVECSERIAL_CPPFLAGS@" SUNDIALS_NVECSERIAL_LDFLAGS="@SUNDIALS_NVECSERIAL_LDFLAGS@" SUNDIALS_NVECSERIAL_LIBS="@SUNDIALS_NVECSERIAL_LIBS@" SUNDIALS_SUNLINSOLKLU_CPPFLAGS="@SUNDIALS_SUNLINSOLKLU_CPPFLAGS@" SUNDIALS_SUNLINSOLKLU_LDFLAGS="@SUNDIALS_SUNLINSOLKLU_LDFLAGS@" SUNDIALS_SUNLINSOLKLU_LIBS="@SUNDIALS_SUNLINSOLKLU_LIBS@" UMFPACK_CPPFLAGS="@UMFPACK_CPPFLAGS@" UMFPACK_LDFLAGS="@UMFPACK_LDFLAGS@" UMFPACK_LIBS="@UMFPACK_LIBS@" version="@PACKAGE_VERSION@" WARN_CFLAGS="@WARN_CFLAGS@" WARN_CXXFLAGS="@WARN_CXXFLAGS@" X11_INCFLAGS="@X11_INCFLAGS@" X11_LIBS="@X11_LIBS@" XTRA_CFLAGS="@XTRA_CFLAGS@" XTRA_CXXFLAGS="@XTRA_CXXFLAGS@" YACC="@YACC@" YFLAGS="@YFLAGS@" Z_CPPFLAGS="@Z_CPPFLAGS@" Z_LDFLAGS="@Z_LDFLAGS@" Z_LIBS="@Z_LIBS@" config_opts="@config_opts@" $SED \ -e "s|%NO_EDIT_WARNING%|DO NOT EDIT! Generated automatically by subst-config-vals.|" \ -e "s|%NO_OCT_FILE_STRIP%|${NO_OCT_FILE_STRIP}|" \ -e "s|%OCTAVE_API_VERSION%|\"${api_version}\"|" \ -e "s|%OCTAVE_ARCHLIBDIR%|\"${archlibdir}\"|" \ -e "s|%OCTAVE_BINDIR%|\"${bindir}\"|" \ -e "s|%OCTAVE_BINDIR%|\"${bindir}\"|" \ -e "s|%OCTAVE_CANONICAL_HOST_TYPE%|\"${canonical_host_type}\"|" \ -e "s|%OCTAVE_CONF_AMD_CPPFLAGS%|\"${AMD_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_AMD_LDFLAGS%|\"${AMD_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_AMD_LIBS%|\"${AMD_LIBS}\"|" \ -e "s|%OCTAVE_CONF_AR%|\"${AR}\"|" \ -e "s|%OCTAVE_CONF_ARFLAGS%|\"${ARFLAGS}\"|" \ -e "s|%OCTAVE_CONF_ARPACK_CPPFLAGS%|\"${ARPACK_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_ARPACK_LDFLAGS%|\"${ARPACK_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_ARPACK_LIBS%|\"${ARPACK_LIBS}\"|" \ -e "s|%OCTAVE_CONF_BLAS_LIBS%|\"${BLAS_LIBS}\"|" \ -e "s|%OCTAVE_CONF_CAMD_CPPFLAGS%|\"${CAMD_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CAMD_LDFLAGS%|\"${CAMD_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CAMD_LIBS%|\"${CAMD_LIBS}\"|" \ -e "s|%OCTAVE_CONF_CARBON_LIBS%|\"${CARBON_LIBS}\"|" \ -e "s|%OCTAVE_CONF_CC%|\"${CC}\"|" \ -e "s|%OCTAVE_CONF_CCOLAMD_CPPFLAGS%|\"${CCOLAMD_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CCOLAMD_LDFLAGS%|\"${CCOLAMD_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CCOLAMD_LIBS%|\"${CCOLAMD_LIBS}\"|" \ -e "s|%OCTAVE_CONF_CFLAGS%|\"${CFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CHOLMOD_CPPFLAGS%|\"${CHOLMOD_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CHOLMOD_LDFLAGS%|\"${CHOLMOD_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CHOLMOD_LIBS%|\"${CHOLMOD_LIBS}\"|" \ -e "s|%OCTAVE_CONF_COLAMD_CPPFLAGS%|\"${COLAMD_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_COLAMD_LDFLAGS%|\"${COLAMD_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_COLAMD_LIBS%|\"${COLAMD_LIBS}\"|" \ -e "s|%OCTAVE_CONF_CPICFLAG%|\"${CPICFLAG}\"|" \ -e "s|%OCTAVE_CONF_CPPFLAGS%|\"${cppflags}\"|" \ -e "s|%OCTAVE_CONF_CURL_CPPFLAGS%|\"${CURL_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CURL_LDFLAGS%|\"${CURL_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CURL_LIBS%|\"${CURL_LIBS}\"|" \ -e "s|%OCTAVE_CONF_CXSPARSE_CPPFLAGS%|\"${CXSPARSE_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CXSPARSE_LDFLAGS%|\"${CXSPARSE_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CXSPARSE_LIBS%|\"${CXSPARSE_LIBS}\"|" \ -e "s|%OCTAVE_CONF_CXX%|\"${CXX}\"|" \ -e "s|%OCTAVE_CONF_CXXCPP%|\"${CXXCPP}\"|" \ -e "s|%OCTAVE_CONF_CXXFLAGS%|\"${CXXFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CXXPICFLAG%|\"${CXXPICFLAG}\"|" \ -e "s|%OCTAVE_CONF_DEFAULT_PAGER%|\"${DEFAULT_PAGER}\"|" \ -e "s|%OCTAVE_CONF_DEFS%|\"${DEFS}\"|" \ -e "s|%OCTAVE_CONF_DEPEND_EXTRA_SED_PATTERN%|\"${DEPEND_EXTRA_SED_PATTERN}\"|" \ -e "s|%OCTAVE_CONF_DEPEND_FLAGS%|\"${DEPEND_FLAGS}\"|" \ -e "s|%OCTAVE_CONF_DL_LDFLAGS%|\"${DL_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_EXEC_PREFIX%|\"${exec_prefix}\"|" \ -e "s|%OCTAVE_CONF_EXEEXT%|\"${EXEEXT}\"|" \ -e "s|%OCTAVE_CONF_F77%|\"${F77}\"|" \ -e "s|%OCTAVE_CONF_F77_FLOAT_STORE_FLAG%|\"${F77_FLOAT_STORE_FLAG}\"|" \ -e "s|%OCTAVE_CONF_F77_INTEGER_8_FLAG%|\"${F77_INTEGER_8_FLAG}\"|" \ -e "s|%OCTAVE_CONF_FFLAGS%|\"${FFLAGS}\"|" \ -e "s|%OCTAVE_CONF_FFTW3F_CPPFLAGS%|\"${FFTW3F_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_FFTW3F_LDFLAGS%|\"${fftw3f_ldflags}\"|" \ -e "s|%OCTAVE_CONF_FFTW3F_LIBS%|\"${FFTW3F_LIBS}\"|" \ -e "s|%OCTAVE_CONF_FFTW3_CPPFLAGS%|\"${FFTW3_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_FFTW3_LDFLAGS%|\"${fftw3_ldflags}\"|" \ -e "s|%OCTAVE_CONF_FFTW3_LIBS%|\"${FFTW3_LIBS}\"|" \ -e "s|%OCTAVE_CONF_FLIBS%|\"${flibs}\"|" \ -e "s|%OCTAVE_CONF_FLTK_CPPFLAGS%|\"${FLTK_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_FLTK_LDFLAGS%|\"${FLTK_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_FLTK_LIBS%|\"${FLTK_LIBS}\"|" \ -e "s|%OCTAVE_CONF_FONTCONFIG_CPPFLAGS%|\"${FONTCONFIG_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_FONTCONFIG_LIBS%|\"${FONTCONFIG_LIBS}\"|" \ -e "s|%OCTAVE_CONF_FPICFLAG%|\"${FPICFLAG}\"|" \ -e "s|%OCTAVE_CONF_FT2_CPPFLAGS%|\"${FT2_CPPFLAGS}\"|" | \ $SED \ -e "s|%OCTAVE_CONF_FT2_LIBS%|\"${FT2_LIBS}\"|" \ -e "s|%OCTAVE_CONF_GCC_VERSION%|\"${GCC_VERSION}\"|" \ -e "s|%OCTAVE_CONF_GLPK_CPPFLAGS%|\"${GLPK_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_GLPK_LDFLAGS%|\"${GLPK_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_GLPK_LIBS%|\"${GLPK_LIBS}\"|" \ -e "s|%OCTAVE_CONF_GNUPLOT%|\"${GNUPLOT}\"|" \ -e "s|%OCTAVE_CONF_GXX_VERSION%|\"${GXX_VERSION}\"|" \ -e "s|%OCTAVE_CONF_HDF5_CPPFLAGS%|\"${HDF5_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_HDF5_LDFLAGS%|\"${HDF5_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_HDF5_LIBS%|\"${HDF5_LIBS}\"|" \ -e "s|%OCTAVE_CONF_INCLUDEDIR%|\"${includedir}\"|" \ -e "s|%OCTAVE_CONF_KLU_CPPFLAGS%|\"${KLU_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_KLU_LDFLAGS%|\"${KLU_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_KLU_LIBS%|\"${KLU_LIBS}\"|" \ -e "s|%OCTAVE_CONF_LAPACK_LIBS%|\"${LAPACK_LIBS}\"|" \ -e "s|%OCTAVE_CONF_LDFLAGS%|\"${ldflags}\"|" \ -e "s|%OCTAVE_CONF_LD_STATIC_FLAG%|\"${LD_STATIC_FLAG}\"|" \ -e "s|%OCTAVE_CONF_LEX%|\"${LEX}\"|" \ -e "s|%OCTAVE_CONF_LEXLIB%|\"${LEXLIB}\"|" \ -e "s|%OCTAVE_CONF_LFLAGS%|\"${LFLAGS}\"|" \ -e "s|%OCTAVE_CONF_LIBDIR%|\"${libdir}\"|" \ -e "s|%OCTAVE_CONF_LIBOCTAVE%|\"${LIBOCTAVE}\"|" \ -e "s|%OCTAVE_CONF_LIBOCTINTERP%|\"${LIBOCTINTERP}\"|" \ -e "s|%OCTAVE_CONF_LIBS%|\"${LIBS}\"|" \ -e "s|%OCTAVE_CONF_LN_S%|\"${LN_S}\"|" \ -e "s|%OCTAVE_CONF_MAGICK_CPPFLAGS%|\"${MAGICK_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_MAGICK_LDFLAGS%|\"${MAGICK_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_MAGICK_LIBS%|\"${MAGICK_LIBS}\"|" \ -e "s|%OCTAVE_CONF_MKOCTFILE_AR%|\"${MKOCTFILE_AR}\"|" \ -e "s|%OCTAVE_CONF_MKOCTFILE_CC%|\"${MKOCTFILE_CC}\"|" \ -e "s|%OCTAVE_CONF_MKOCTFILE_CXX%|\"${MKOCTFILE_CXX}\"|" \ -e "s|%OCTAVE_CONF_MKOCTFILE_DL_LDFLAGS%|\"${MKOCTFILE_DL_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_MKOCTFILE_F77%|\"${MKOCTFILE_F77}\"|" \ -e "s|%OCTAVE_CONF_MKOCTFILE_OCTAVE_LINK_DEPS%|\"${mkoctfile_octave_link_deps}\"|" \ -e "s|%OCTAVE_CONF_MKOCTFILE_OCT_LINK_DEPS%|\"${mkoctfile_oct_link_deps}\"|" \ -e "s|%OCTAVE_CONF_MKOCTFILE_RANLIB%|\"${MKOCTFILE_RANLIB}\"|" \ -e "s|%OCTAVE_CONF_OCTAVE_LINK_DEPS%|\"${OCTAVE_LINK_DEPS}\"|" \ -e "s|%OCTAVE_CONF_OCTAVE_LINK_OPTS%|\"${OCTAVE_LINK_OPTS}\"|" \ -e "s|%OCTAVE_CONF_OCTINCLUDEDIR%|\"${octincludedir}\"|" \ -e "s|%OCTAVE_CONF_OCTLIBDIR%|\"${octlibdir}\"|" \ -e "s|%OCTAVE_CONF_OCT_LINK_DEPS%|\"${OCT_LINK_DEPS}\"|" \ -e "s|%OCTAVE_CONF_OCT_LINK_OPTS%|\"${oct_link_opts}\"|" \ -e "s|%OCTAVE_CONF_OPENGL_LIBS%|\"${OPENGL_LIBS}\"|" \ -e "s|%OCTAVE_CONF_PCRE_CPPFLAGS%|\"${PCRE_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_PCRE_LDFLAGS%|\"${PCRE_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_PCRE_LIBS%|\"${PCRE_LIBS}\"|" \ -e "s|%OCTAVE_CONF_PREFIX%|\"${prefix}\"|" \ -e "s|%OCTAVE_CONF_PTHREAD_CFLAGS%|\"${PTHREAD_CFLAGS}\"|" \ -e "s|%OCTAVE_CONF_PTHREAD_LIBS%|\"${PTHREAD_LIBS}\"|" \ -e "s|%OCTAVE_CONF_QHULL_CPPFLAGS%|\"${QHULL_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_QHULL_LDFLAGS%|\"${QHULL_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_QHULL_LIBS%|\"${QHULL_LIBS}\"|" \ -e "s|%OCTAVE_CONF_QRUPDATE_CPPFLAGS%|\"${QRUPDATE_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_QRUPDATE_LDFLAGS%|\"${QRUPDATE_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_QRUPDATE_LIBS%|\"${QRUPDATE_LIBS}\"|" \ -e "s|%OCTAVE_CONF_QT_CPPFLAGS%|\"${QT_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_QT_LDFLAGS%|\"${QT_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_QT_LIBS%|\"${QT_LIBS}\"|" \ -e "s|%OCTAVE_CONF_RANLIB%|\"${RANLIB}\"|" \ -e "s|%OCTAVE_CONF_RDYNAMIC_FLAG%|\"${RDYNAMIC_FLAG}\"|" \ -e "s|%OCTAVE_CONF_READLINE_LIBS%|\"${READLINE_LIBS}\"|" | \ $SED \ -e "s|%OCTAVE_CONF_SHARED_LIBS%|\"${SHARED_LIBS}\"|" \ -e "s|%OCTAVE_CONF_SH_LDFLAGS%|\"${SH_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_STATIC_LIBS%|\"${STATIC_LIBS}\"|" \ -e "s|%OCTAVE_CONF_SUITESPARSECONFIG_LIBS%|\"${SUITESPARSECONFIG_LIBS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_IDA_CPPFLAGS%|\"${SUNDIALS_IDA_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_IDA_LDFLAGS%|\"${SUNDIALS_IDA_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_IDA_LIBS%|\"${SUNDIALS_IDA_LIBS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_NVECSERIAL_CPPFLAGS%|\"${SUNDIALS_NVECSERIAL_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_NVECSERIAL_LDFLAGS%|\"${SUNDIALS_NVECSERIAL_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_NVECSERIAL_LIBS%|\"${SUNDIALS_NVECSERIAL_LIBS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_SUNLINSOLKLU_CPPFLAGS%|\"${SUNDIALS_SUNLINSOLKLU_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_SUNLINSOLKLU_LDFLAGS%|\"${SUNDIALS_SUNLINSOLKLU_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_SUNLINSOLKLU_LIBS%|\"${SUNDIALS_SUNLINSOLKLU_LIBS}\"|" \ -e "s|%OCTAVE_CONF_UMFPACK_CPPFLAGS%|\"${UMFPACK_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_UMFPACK_LDFLAGS%|\"${UMFPACK_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_UMFPACK_LIBS%|\"${UMFPACK_LIBS}\"|" \ -e "s|%OCTAVE_CONF_VERSION%|\"${version}\"|" \ -e "s|%OCTAVE_CONF_WARN_CFLAGS%|\"${WARN_CFLAGS}\"|" \ -e "s|%OCTAVE_CONF_WARN_CXXFLAGS%|\"${WARN_CXXFLAGS}\"|" \ -e "s|%OCTAVE_CONF_X11_INCFLAGS%|\"${X11_INCFLAGS}\"|" \ -e "s|%OCTAVE_CONF_X11_LIBS%|\"${X11_LIBS}\"|" \ -e "s|%OCTAVE_CONF_XTRA_CFLAGS%|\"${XTRA_CFLAGS}\"|" \ -e "s|%OCTAVE_CONF_XTRA_CXXFLAGS%|\"${XTRA_CXXFLAGS}\"|" \ -e "s|%OCTAVE_CONF_YACC%|\"${YACC}\"|" \ -e "s|%OCTAVE_CONF_YFLAGS%|\"${YFLAGS}\"|" \ -e "s|%OCTAVE_CONF_Z_CPPFLAGS%|\"${Z_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_Z_LDFLAGS%|\"${Z_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_Z_LIBS%|\"${Z_LIBS}\"|" \ -e "s|%OCTAVE_CONF_config_opts%|\"${config_opts}\"|" \ -e "s|%OCTAVE_DATADIR%|\"${datadir}\"|" \ -e "s|%OCTAVE_DATAROOTDIR%|\"${datarootdir}\"|" \ -e "s|%OCTAVE_DEFAULT_PAGER%|\"${DEFAULT_PAGER}\"|" \ -e "s|%OCTAVE_DOCDIR%|\"${docdir}\"|" \ -e "s|%OCTAVE_DOC_CACHE_FILE%|\"${doc_cache_file}\"|" \ -e "s|%OCTAVE_EXEC_PREFIX%|\"${exec_prefix}\"|" \ -e "s|%OCTAVE_EXEEXT%|\"${EXEEXT}\"|" \ -e "s|%OCTAVE_FCNFILEDIR%|\"${fcnfiledir}\"|" \ -e "s|%OCTAVE_IMAGEDIR%|\"${imagedir}\"|" \ -e "s|%OCTAVE_INCLUDEDIR%|\"${includedir}\"|" \ -e "s|%OCTAVE_INFODIR%|\"${infodir}\"|" \ -e "s|%OCTAVE_INFOFILE%|\"${infofile}\"|" \ -e "s|%OCTAVE_LIBDIR%|\"${libdir}\"|" \ -e "s|%OCTAVE_LIBEXECDIR%|\"${libexecdir}\"|" \ -e "s|%OCTAVE_LOCALAPIARCHLIBDIR%|\"${localapiarchlibdir}\"|" \ -e "s|%OCTAVE_LOCALAPIFCNFILEDIR%|\"${localapifcnfiledir}\"|" \ -e "s|%OCTAVE_LOCALAPIOCTFILEDIR%|\"${localapioctfiledir}\"|" \ -e "s|%OCTAVE_LOCALAPIPKGDIR%|\"${localapipkgdir}\"|" \ -e "s|%OCTAVE_LOCALARCHLIBDIR%|\"${localarchlibdir}\"|" \ -e "s|%OCTAVE_LOCALFCNFILEDIR%|\"${localfcnfiledir}\"|" \ -e "s|%OCTAVE_LOCALOCTFILEDIR%|\"${localoctfiledir}\"|" \ -e "s|%OCTAVE_LOCALSTARTUPFILEDIR%|\"${localstartupfiledir}\"|" \ -e "s|%OCTAVE_LOCALVERARCHLIBDIR%|\"${localverarchlibdir}\"|" \ -e "s|%OCTAVE_LOCALVERFCNFILEDIR%|\"${localverfcnfiledir}\"|" \ -e "s|%OCTAVE_LOCALVEROCTFILEDIR%|\"${localveroctfiledir}\"|" \ -e "s|%OCTAVE_MAN1DIR%|\"${man1dir}\"|" \ -e "s|%OCTAVE_MAN1EXT%|\"${man1ext}\"|" \ -e "s|%OCTAVE_MANDIR%|\"${mandir}\"|" \ -e "s|%OCTAVE_OCTDATADIR%|\"${octdatadir}\"|" \ -e "s|%OCTAVE_OCTDOCDIR%|\"${octdocdir}\"|" \ -e "s|%OCTAVE_OCTETCDIR%|\"${octetcdir}\"|" \ -e "s|%OCTAVE_OCTFILEDIR%|\"${octfiledir}\"|" \ -e "s|%OCTAVE_OCTFONTSDIR%|\"${octfontsdir}\"|" \ -e "s|%OCTAVE_OCTINCLUDEDIR%|\"${octincludedir}\"|" \ -e "s|%OCTAVE_OCTLIBDIR%|\"${octlibdir}\"|" \ -e "s|%OCTAVE_OCTLOCALEDIR%|\"${octlocaledir}\"|" \ -e "s|%OCTAVE_OCTTESTSDIR%|\"${octtestsdir}\"|" \ -e "s|%OCTAVE_PREFIX%|\"${prefix}\"|" \ -e "s|%OCTAVE_RELEASE%|\"${OCTAVE_RELEASE}\"|" \ -e "s|%OCTAVE_STARTUPFILEDIR%|\"${startupfiledir}\"|" \ -e "s|%OCTAVE_TEXI_MACROS_FILE%|\"${texi_macros_file}\"|" \ -e "s|%OCTAVE_VERSION%|\"${version}\"|" ================================================ FILE: build-aux/subst-cross-config-vals.in.sh ================================================ #! /bin/sh ######################################################################## ## ## Copyright (C) 2016-2026 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## distribution or . ## ## This file is part of Octave. ## ## Octave is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## . ## ######################################################################## : ${SED=@SED@} ## The subst-config-vals and subst-cross-config-vals scripts differ only ## in the definitions of the following variables. ## ## OCTAVE_CONF_MKOCTFILE_AR ## OCTAVE_CONF_MKOCTFILE_CC ## OCTAVE_CONF_MKOCTFILE_CXX ## OCTAVE_CONF_MKOCTFILE_DL_LDFLAGS ## OCTAVE_CONF_MKOCTFILE_F77 ## OCTAVE_CONF_MKOCTFILE_RANLIB canonical_host_type="@canonical_host_type@" DEFAULT_PAGER="@DEFAULT_PAGER@" EXEEXT="@EXEEXT@" man1ext="@man1ext@" api_version="@OCTAVE_API_VERSION@" OCTAVE_RELEASE="" version="@PACKAGE_VERSION@" prefix="@prefix@" exec_prefix="@exec_prefix@" archlibdir=`echo "@archlibdir@" | $SED "s|^${exec_prefix}/\\+||"` bindir=`echo "@bindir@" | $SED "s|^${exec_prefix}/\\+||"` libdir=`echo "@libdir@" | $SED "s|^${exec_prefix}/\\+||"` libexecdir=`echo "@libexecdir@" | $SED "s|^${exec_prefix}/\\+||"` localapiarchlibdir=`echo "@localapiarchlibdir@" | $SED "s|^${exec_prefix}/\\+||"` localapioctfiledir=`echo "@localapioctfiledir@" | $SED "s|^${exec_prefix}/\\+||"` localarchlibdir=`echo "@localarchlibdir@" | $SED "s|^${exec_prefix}/\\+||"` localoctfiledir=`echo "@localoctfiledir@" | $SED "s|^${exec_prefix}/\\+||"` localverarchlibdir=`echo "@localverarchlibdir@" | $SED "s|^${exec_prefix}/\\+||"` localveroctfiledir=`echo "@localveroctfiledir@" | $SED "s|^${exec_prefix}/\\+||"` octfiledir=`echo "@octfiledir@" | $SED "s|^${exec_prefix}/\\+||"` octlibdir=`echo "@octlibdir@" | $SED "s|^${exec_prefix}/\\+||"` datadir=`echo "@datadir@" | $SED "s|^${prefix}/\\+||"` datarootdir=`echo "@datarootdir@" | $SED "s|^${prefix}/\\+||"` doc_cache_file=`echo "@doc_cache_file@" | $SED "s|^${prefix}/\\+||"` exec_prefix=`echo "@exec_prefix@" | $SED "s|^${prefix}/\\+||"` fcnfiledir=`echo "@fcnfiledir@" | $SED "s|^${prefix}/\\+||"` imagedir=`echo "@imagedir@" | $SED "s|^${prefix}/\\+||"` includedir=`echo "@includedir@" | $SED "s|^${prefix}/\\+||"` infodir=`echo "@infodir@" | $SED "s|^${prefix}/\\+||"` infofile=`echo "@infofile@" | $SED "s|^${prefix}/\\+||"` localapifcnfiledir=`echo "@localapifcnfiledir@" | $SED "s|^${prefix}/\\+||"` localapipkgdir=`echo "@localapipkgdir@" | $SED "s|^${prefix}/\\+||"` localfcnfiledir=`echo "@localfcnfiledir@" | $SED "s|^${prefix}/\\+||"` localstartupfiledir=`echo "@localstartupfiledir@" | $SED "s|^${prefix}/\\+||"` localapiarchlibdir=`echo "@localapiarchlibdir@" | $SED "s|^${prefix}/\\+||"` localverfcnfiledir=`echo "@localverfcnfiledir@" | $SED "s|^${prefix}/\\+||"` man1dir=`echo "@man1dir@" | $SED "s|^${prefix}/\\+||"` mandir=`echo "@mandir@" | $SED "s|^${prefix}/\\+||"` octdatadir=`echo "@octdatadir@" | $SED "s|^${prefix}/\\+||"` octdocdir=`echo "@octdocdir@" | $SED "s|^${prefix}/\\+||"` octetcdir=`echo "@octetcdir@" | $SED "s|^${prefix}/\\+||"` octfontsdir=`echo "@octfontsdir@" | $SED "s|^${prefix}/\\+||"` octincludedir=`echo "@octincludedir@" | $SED "s|^${prefix}/\\+||"` octlocaledir=`echo "@octlocaledir@" | $SED "s|^${prefix}/\\+||"` octtestsdir=`echo "@octtestsdir@" | $SED "s|^${prefix}/\\+||"` startupfiledir=`echo "@startupfiledir@" | $SED "s|^${prefix}/\\+||"` texi_macros_file=`echo "@texi_macros_file@" | $SED "s|^${prefix}/\\+||"` ## FIXME: Some of these flags might contain double quotes. ## Is it ok to use single quotes here? if [ "x@OCTAVE_RELOCATE_ALL@" = "xyes" ]; then ## Replace portions of compiler flags that depend on prefix on target if [ "x@OCTAVE_RELOCATE_WITH_CYGPATH@" = "xyes" ]; then ## Replace all path forms of the prefix cppflags=`echo '@CPPFLAGS@' | sed "s|$(@CYGPATH@ -m @prefix@)|\$\{prefix}|g" | sed "s|$(echo $(@CYGPATH@ -w @prefix@) | sed 's|\\\\|\\\\\\\\|g')|\$\{prefix}|g" | sed "s|$(@CYGPATH@ -u @prefix@)|\$\{prefix}|g" | $SED "s|(@prefix@)|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` fftw3f_ldflags=`echo '@FFTW3F_LDFLAGS@' | sed "s|$(@CYGPATH@ -m @prefix@)|\$\{prefix}|g" | sed "s|$(echo $(@CYGPATH@ -w @prefix@) | sed 's|\\\\|\\\\\\\\|g')|\$\{prefix}|g" | sed "s|$(@CYGPATH@ -u @prefix@)|\$\{prefix}|g" | $SED "s|(@prefix@)|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` fftw3_ldflags=`echo '@FFTW3_LDFLAGS@' | sed "s|$(@CYGPATH@ -m @prefix@)|\$\{prefix}|g" | sed "s|$(echo $(@CYGPATH@ -w @prefix@) | sed 's|\\\\|\\\\\\\\|g')|\$\{prefix}|g" | sed "s|$(@CYGPATH@ -u @prefix@)|\$\{prefix}|g" | $SED "s|(@prefix@)|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` flibs=`echo '@FLIBS@' | sed "s|$(@CYGPATH@ -m @prefix@)|\$\{prefix}|g" | sed "s|$(echo $(@CYGPATH@ -w @prefix@) | sed 's|\\\\|\\\\\\\\|g')|\$\{prefix}|g" | sed "s|$(@CYGPATH@ -u @prefix@)|\$\{prefix}|g" | $SED "s|(@prefix@)|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` ldflags=`echo '@LDFLAGS@' | sed "s|$(@CYGPATH@ -m @prefix@)|\$\{prefix}|g" | sed "s|$(echo $(@CYGPATH@ -w @prefix@) | sed 's|\\\\|\\\\\\\\|g')|\$\{prefix}|g" | sed "s|$(@CYGPATH@ -u @prefix@)|\$\{prefix}|g" | $SED "s|(@prefix@)|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` oct_link_opts=`echo '@OCT_LINK_OPTS@' | sed "s|$(@CYGPATH@ -m @prefix@)|\$\{prefix}|g" | sed "s|$(echo $(@CYGPATH@ -w @prefix@) | sed 's|\\\\|\\\\\\\\|g')|\$\{prefix}|g" | sed "s|$(@CYGPATH@ -u @prefix@)|\$\{prefix}|g" | $SED "s|(@prefix@)|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` mkoctfile_octave_link_deps=`echo '@MKOCTFILE_OCTAVE_LINK_DEPS@' | sed "s|$(@CYGPATH@ -m @prefix@)|\$\{prefix}|g" | sed "s|$(echo $(@CYGPATH@ -w @prefix@) | sed 's|\\\\|\\\\\\\\|g')|\$\{prefix}|g" | sed "s|$(@CYGPATH@ -u @prefix@)|\$\{prefix}|g" | $SED "s|(@prefix@)|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` mkoctfile_oct_link_deps=`echo '@MKOCTFILE_OCT_LINK_DEPS@' | sed "s|$(@CYGPATH@ -m @prefix@)|\$\{prefix}|g" | sed "s|$(echo $(@CYGPATH@ -w @prefix@) | sed 's|\\\\|\\\\\\\\|g')|\$\{prefix}|g" | sed "s|$(@CYGPATH@ -u @prefix@)|\$\{prefix}|g" | $SED "s|(@prefix@)|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` else cppflags=`echo '@CPPFLAGS@' | $SED "s|@prefix@|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` fftw3f_ldflags=`echo '@FFTW3F_LDFLAGS@' | $SED "s|@prefix@|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` fftw3_ldflags=`echo '@FFTW3_LDFLAGS@' | $SED "s|@prefix@|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` flibs=`echo '@FLIBS@' | $SED "s|@prefix@|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` ldflags=`echo '@LDFLAGS@' | $SED "s|@prefix@|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` oct_link_opts=`echo '@OCT_LINK_OPTS@' | $SED "s|@prefix@|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` mkoctfile_octave_link_deps=`echo '@MKOCTFILE_OCTAVE_LINK_DEPS@' | $SED "s|@prefix@|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` mkoctfile_oct_link_deps=`echo '@MKOCTFILE_OCT_LINK_DEPS@' | $SED "s|@prefix@|\$\{prefix\}|g" | $SED 's|\"|\\\\\\\"|g'` fi else cppflags=`echo '@CPPFLAGS@' | $SED 's|\"|\\\\\\\"|g'` fftw3f_ldflags=`echo '@FFTW3F_LDFLAGS@' | $SED 's|\"|\\\\\\\"|g'` fftw3_ldflags=`echo '@FFTW3_LDFLAGS@' | $SED 's|\"|\\\\\\\"|g'` flibs=`echo '@FLIBS@' | $SED 's|\"|\\\\\\\"|g'` ldflags=`echo '@LDFLAGS@' | $SED 's|\"|\\\\\\\"|g'` oct_link_opts=`echo '@OCT_LINK_OPTS@' | $SED 's|\"|\\\\\\\"|g'` mkoctfile_octave_link_deps=`echo '@MKOCTFILE_OCTAVE_LINK_DEPS@' | $SED 's|\"|\\\\\\\"|g'` mkoctfile_oct_link_deps=`echo '@MKOCTFILE_OCT_LINK_DEPS@' | $SED 's|\"|\\\\\\\"|g'` fi srcdir="@srcdir@" top_srcdir="@top_srcdir@" abs_srcdir="@abs_srcdir@" abs_top_srcdir="@abs_top_srcdir@" NO_OCT_FILE_STRIP="@NO_OCT_FILE_STRIP@" AMD_CPPFLAGS="@AMD_CPPFLAGS@" AMD_LDFLAGS="@AMD_LDFLAGS@" AMD_LIBS="@AMD_LIBS@" AR="@AR@" ARFLAGS="@ARFLAGS@" ARPACK_CPPFLAGS="@ARPACK_CPPFLAGS@" ARPACK_LDFLAGS="@ARPACK_LDFLAGS@" ARPACK_LIBS="@ARPACK_LIBS@" BLAS_LIBS="@BLAS_LIBS@" CAMD_CPPFLAGS="@CAMD_CPPFLAGS@" CAMD_LDFLAGS="@CAMD_LDFLAGS@" CAMD_LIBS="@CAMD_LIBS@" CARBON_LIBS="@CARBON_LIBS@" CC="@CC@" CCOLAMD_CPPFLAGS="@CCOLAMD_CPPFLAGS@" CCOLAMD_LDFLAGS="@CCOLAMD_LDFLAGS@" CCOLAMD_LIBS="@CCOLAMD_LIBS@" CFLAGS="@CFLAGS@" CHOLMOD_CPPFLAGS="@CHOLMOD_CPPFLAGS@" CHOLMOD_LDFLAGS="@CHOLMOD_LDFLAGS@" CHOLMOD_LIBS="@CHOLMOD_LIBS@" COLAMD_CPPFLAGS="@COLAMD_CPPFLAGS@" COLAMD_LDFLAGS="@COLAMD_LDFLAGS@" COLAMD_LIBS="@COLAMD_LIBS@" CPICFLAG="@CPICFLAG@" CURL_CPPFLAGS="@CURL_CPPFLAGS@" CURL_LDFLAGS="@CURL_LDFLAGS@" CURL_LIBS="@CURL_LIBS@" CXSPARSE_CPPFLAGS="@CXSPARSE_CPPFLAGS@" CXSPARSE_LDFLAGS="@CXSPARSE_LDFLAGS@" CXSPARSE_LIBS="@CXSPARSE_LIBS@" CXX="@CXX@" CXXCPP="@CXXCPP@" CXXFLAGS="@CXXFLAGS@" CXXPICFLAG="@CXXPICFLAG@" DEFAULT_PAGER="@DEFAULT_PAGER@" DEFS="@DEFS@" DEPEND_FLAGS="@DEPEND_FLAGS@" DEPEND_EXTRA_SED_PATTERN="@DEPEND_EXTRA_SED_PATTERN@" DL_LDFLAGS="@DL_LDFLAGS@" EXEEXT="@EXEEXT@" GCC_VERSION="@GCC_VERSION@" GXX_VERSION="@GXX_VERSION@" F77="@F77@" F77_FLOAT_STORE_FLAG="@F77_FLOAT_STORE_FLAG@" F77_INTEGER_8_FLAG="@F77_INTEGER_8_FLAG@" FFLAGS="@FFLAGS@" FFTW3_CPPFLAGS="@FFTW3_CPPFLAGS@" FFTW3_LIBS="@FFTW3_LIBS@" FFTW3F_CPPFLAGS="@FFTW3F_CPPFLAGS@" FFTW3F_LIBS="@FFTW3F_LIBS@" FLTK_CPPFLAGS="@FLTK_CPPFLAGS@" FLTK_LDFLAGS="@FLTK_LDFLAGS@" FLTK_LIBS="@FLTK_LIBS@" FONTCONFIG_CPPFLAGS="@FONTCONFIG_CPPFLAGS@" FONTCONFIG_LIBS="@FONTCONFIG_LIBS@" FPICFLAG="@FPICFLAG@" FT2_CPPFLAGS="@FT2_CPPFLAGS@" FT2_LIBS="@FT2_LIBS@" GLPK_CPPFLAGS="@GLPK_CPPFLAGS@" GLPK_LDFLAGS="@GLPK_LDFLAGS@" GLPK_LIBS="@GLPK_LIBS@" GNUPLOT="@GNUPLOT@" HDF5_CPPFLAGS="@HDF5_CPPFLAGS@" HDF5_LDFLAGS="@HDF5_LDFLAGS@" HDF5_LIBS="@HDF5_LIBS@" KLU_CPPFLAGS="@KLU_CPPFLAGS@" KLU_LDFLAGS="@KLU_LDFLAGS@" KLU_LIBS="@KLU_LIBS@" LAPACK_LIBS="@LAPACK_LIBS@" LD_STATIC_FLAG="@LD_STATIC_FLAG@" LEX="@LEX@" LEXLIB="@LEXLIB@" LFLAGS="@LFLAGS@" LIBOCTAVE="@LIBOCTAVE@" LIBOCTINTERP="@LIBOCTINTERP@" LIBS="@LIBS@" LN_S="@LN_S@" MAGICK_CPPFLAGS="@MAGICK_CPPFLAGS@" MAGICK_LDFLAGS="@MAGICK_LDFLAGS@" MAGICK_LIBS="@MAGICK_LIBS@" OCTAVE_LINK_DEPS="@OCTAVE_LINK_DEPS@" OCTAVE_LINK_OPTS="@OCTAVE_LINK_OPTS@" OCT_LINK_DEPS="@OCT_LINK_DEPS@" OPENGL_LIBS="@OPENGL_LIBS@" PCRE_CPPFLAGS="@PCRE_CPPFLAGS@" PCRE_LDFLAGS="@PCRE_LDFLAGS@" PCRE_LIBS="@PCRE_LIBS@" PTHREAD_CFLAGS="@PTHREAD_CFLAGS@" PTHREAD_LIBS="@PTHREAD_LIBS@" QHULL_CPPFLAGS="@QHULL_CPPFLAGS@" QHULL_LDFLAGS="@QHULL_LDFLAGS@" QHULL_LIBS="@QHULL_LIBS@" QRUPDATE_CPPFLAGS="@QRUPDATE_CPPFLAGS@" QRUPDATE_LDFLAGS="@QRUPDATE_LDFLAGS@" QRUPDATE_LIBS="@QRUPDATE_LIBS@" QT_CPPFLAGS="@QT_CPPFLAGS@" QT_LDFLAGS="@QT_LDFLAGS@" QT_LIBS="@QT_LIBS@" RANLIB="@RANLIB@" RDYNAMIC_FLAG="@RDYNAMIC_FLAG@" READLINE_LIBS="@LIBREADLINE@" SHARED_LIBS="@SHARED_LIBS@" SH_LDFLAGS="@SH_LDFLAGS@" STATIC_LIBS="@STATIC_LIBS@" SUITESPARSECONFIG_LIBS="@SUITESPARSECONFIG_LIBS@" SUNDIALS_IDA_CPPFLAGS="@SUNDIALS_IDA_CPPFLAGS@" SUNDIALS_IDA_LDFLAGS="@SUNDIALS_IDA_LDFLAGS@" SUNDIALS_IDA_LIBS="@SUNDIALS_IDA_LIBS@" SUNDIALS_NVECSERIAL_CPPFLAGS="@SUNDIALS_NVECSERIAL_CPPFLAGS@" SUNDIALS_NVECSERIAL_LDFLAGS="@SUNDIALS_NVECSERIAL_LDFLAGS@" SUNDIALS_NVECSERIAL_LIBS="@SUNDIALS_NVECSERIAL_LIBS@" SUNDIALS_SUNLINSOLKLU_CPPFLAGS="@SUNDIALS_SUNLINSOLKLU_CPPFLAGS@" SUNDIALS_SUNLINSOLKLU_LDFLAGS="@SUNDIALS_SUNLINSOLKLU_LDFLAGS@" SUNDIALS_SUNLINSOLKLU_LIBS="@SUNDIALS_SUNLINSOLKLU_LIBS@" UMFPACK_CPPFLAGS="@UMFPACK_CPPFLAGS@" UMFPACK_LDFLAGS="@UMFPACK_LDFLAGS@" UMFPACK_LIBS="@UMFPACK_LIBS@" version="@PACKAGE_VERSION@" WARN_CFLAGS="@WARN_CFLAGS@" WARN_CXXFLAGS="@WARN_CXXFLAGS@" X11_INCFLAGS="@X11_INCFLAGS@" X11_LIBS="@X11_LIBS@" XTRA_CFLAGS="@XTRA_CFLAGS@" XTRA_CXXFLAGS="@XTRA_CXXFLAGS@" YACC="@YACC@" YFLAGS="@YFLAGS@" Z_CPPFLAGS="@Z_CPPFLAGS@" Z_LDFLAGS="@Z_LDFLAGS@" Z_LIBS="@Z_LIBS@" config_opts="@config_opts@" $SED \ -e "s|%NO_EDIT_WARNING%|DO NOT EDIT! Generated automatically by subst-cross-config-vals.|" \ -e "s|%NO_OCT_FILE_STRIP%|${NO_OCT_FILE_STRIP}|" \ -e "s|%OCTAVE_API_VERSION%|\"${api_version}\"|" \ -e "s|%OCTAVE_ARCHLIBDIR%|\"${archlibdir}\"|" \ -e "s|%OCTAVE_BINDIR%|\"${bindir}\"|" \ -e "s|%OCTAVE_BINDIR%|\"${bindir}\"|" \ -e "s|%OCTAVE_CANONICAL_HOST_TYPE%|\"${canonical_host_type}\"|" \ -e "s|%OCTAVE_CONF_AMD_CPPFLAGS%|\"${AMD_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_AMD_LDFLAGS%|\"${AMD_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_AMD_LIBS%|\"${AMD_LIBS}\"|" \ -e "s|%OCTAVE_CONF_AR%|\"${AR}\"|" \ -e "s|%OCTAVE_CONF_ARFLAGS%|\"${ARFLAGS}\"|" \ -e "s|%OCTAVE_CONF_ARPACK_CPPFLAGS%|\"${ARPACK_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_ARPACK_LDFLAGS%|\"${ARPACK_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_ARPACK_LIBS%|\"${ARPACK_LIBS}\"|" \ -e "s|%OCTAVE_CONF_BLAS_LIBS%|\"${BLAS_LIBS}\"|" \ -e "s|%OCTAVE_CONF_CAMD_CPPFLAGS%|\"${CAMD_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CAMD_LDFLAGS%|\"${CAMD_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CAMD_LIBS%|\"${CAMD_LIBS}\"|" \ -e "s|%OCTAVE_CONF_CARBON_LIBS%|\"${CARBON_LIBS}\"|" \ -e "s|%OCTAVE_CONF_CC%|\"${CC}\"|" \ -e "s|%OCTAVE_CONF_CCOLAMD_CPPFLAGS%|\"${CCOLAMD_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CCOLAMD_LDFLAGS%|\"${CCOLAMD_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CCOLAMD_LIBS%|\"${CCOLAMD_LIBS}\"|" \ -e "s|%OCTAVE_CONF_CFLAGS%|\"${CFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CHOLMOD_CPPFLAGS%|\"${CHOLMOD_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CHOLMOD_LDFLAGS%|\"${CHOLMOD_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CHOLMOD_LIBS%|\"${CHOLMOD_LIBS}\"|" \ -e "s|%OCTAVE_CONF_COLAMD_CPPFLAGS%|\"${COLAMD_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_COLAMD_LDFLAGS%|\"${COLAMD_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_COLAMD_LIBS%|\"${COLAMD_LIBS}\"|" \ -e "s|%OCTAVE_CONF_CPICFLAG%|\"${CPICFLAG}\"|" \ -e "s|%OCTAVE_CONF_CPPFLAGS%|\"${cppflags}\"|" \ -e "s|%OCTAVE_CONF_CURL_CPPFLAGS%|\"${CURL_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CURL_LDFLAGS%|\"${CURL_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CURL_LIBS%|\"${CURL_LIBS}\"|" \ -e "s|%OCTAVE_CONF_CXSPARSE_CPPFLAGS%|\"${CXSPARSE_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CXSPARSE_LDFLAGS%|\"${CXSPARSE_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CXSPARSE_LIBS%|\"${CXSPARSE_LIBS}\"|" \ -e "s|%OCTAVE_CONF_CXX%|\"${CXX}\"|" \ -e "s|%OCTAVE_CONF_CXXCPP%|\"${CXXCPP}\"|" \ -e "s|%OCTAVE_CONF_CXXFLAGS%|\"${CXXFLAGS}\"|" \ -e "s|%OCTAVE_CONF_CXXPICFLAG%|\"${CXXPICFLAG}\"|" \ -e "s|%OCTAVE_CONF_DEFAULT_PAGER%|\"${DEFAULT_PAGER}\"|" \ -e "s|%OCTAVE_CONF_DEFS%|\"${DEFS}\"|" \ -e "s|%OCTAVE_CONF_DEPEND_EXTRA_SED_PATTERN%|\"${DEPEND_EXTRA_SED_PATTERN}\"|" \ -e "s|%OCTAVE_CONF_DEPEND_FLAGS%|\"${DEPEND_FLAGS}\"|" \ -e "s|%OCTAVE_CONF_DL_LDFLAGS%|\"${DL_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_EXEC_PREFIX%|\"${exec_prefix}\"|" \ -e "s|%OCTAVE_CONF_EXEEXT%|\"${EXEEXT}\"|" \ -e "s|%OCTAVE_CONF_F77%|\"${F77}\"|" \ -e "s|%OCTAVE_CONF_F77_FLOAT_STORE_FLAG%|\"${F77_FLOAT_STORE_FLAG}\"|" \ -e "s|%OCTAVE_CONF_F77_INTEGER_8_FLAG%|\"${F77_INTEGER_8_FLAG}\"|" \ -e "s|%OCTAVE_CONF_FFLAGS%|\"${FFLAGS}\"|" \ -e "s|%OCTAVE_CONF_FFTW3F_CPPFLAGS%|\"${FFTW3F_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_FFTW3F_LDFLAGS%|\"${fftw3f_ldflags}\"|" \ -e "s|%OCTAVE_CONF_FFTW3F_LIBS%|\"${FFTW3F_LIBS}\"|" \ -e "s|%OCTAVE_CONF_FFTW3_CPPFLAGS%|\"${FFTW3_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_FFTW3_LDFLAGS%|\"${fftw3_ldflags}\"|" \ -e "s|%OCTAVE_CONF_FFTW3_LIBS%|\"${FFTW3_LIBS}\"|" \ -e "s|%OCTAVE_CONF_FLIBS%|\"${flibs}\"|" \ -e "s|%OCTAVE_CONF_FLTK_CPPFLAGS%|\"${FLTK_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_FLTK_LDFLAGS%|\"${FLTK_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_FLTK_LIBS%|\"${FLTK_LIBS}\"|" \ -e "s|%OCTAVE_CONF_FONTCONFIG_CPPFLAGS%|\"${FONTCONFIG_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_FONTCONFIG_LIBS%|\"${FONTCONFIG_LIBS}\"|" \ -e "s|%OCTAVE_CONF_FPICFLAG%|\"${FPICFLAG}\"|" \ -e "s|%OCTAVE_CONF_FT2_CPPFLAGS%|\"${FT2_CPPFLAGS}\"|" | \ $SED \ -e "s|%OCTAVE_CONF_FT2_LIBS%|\"${FT2_LIBS}\"|" \ -e "s|%OCTAVE_CONF_GCC_VERSION%|\"${GCC_VERSION}\"|" \ -e "s|%OCTAVE_CONF_GLPK_CPPFLAGS%|\"${GLPK_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_GLPK_LDFLAGS%|\"${GLPK_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_GLPK_LIBS%|\"${GLPK_LIBS}\"|" \ -e "s|%OCTAVE_CONF_GNUPLOT%|\"${GNUPLOT}\"|" \ -e "s|%OCTAVE_CONF_GXX_VERSION%|\"${GXX_VERSION}\"|" \ -e "s|%OCTAVE_CONF_HDF5_CPPFLAGS%|\"${HDF5_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_HDF5_LDFLAGS%|\"${HDF5_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_HDF5_LIBS%|\"${HDF5_LIBS}\"|" \ -e "s|%OCTAVE_CONF_INCLUDEDIR%|\"${includedir}\"|" \ -e "s|%OCTAVE_CONF_KLU_CPPFLAGS%|\"${KLU_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_KLU_LDFLAGS%|\"${KLU_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_KLU_LIBS%|\"${KLU_LIBS}\"|" \ -e "s|%OCTAVE_CONF_LAPACK_LIBS%|\"${LAPACK_LIBS}\"|" \ -e "s|%OCTAVE_CONF_LDFLAGS%|\"${ldflags}\"|" \ -e "s|%OCTAVE_CONF_LD_STATIC_FLAG%|\"${LD_STATIC_FLAG}\"|" \ -e "s|%OCTAVE_CONF_LEX%|\"${LEX}\"|" \ -e "s|%OCTAVE_CONF_LEXLIB%|\"${LEXLIB}\"|" \ -e "s|%OCTAVE_CONF_LFLAGS%|\"${LFLAGS}\"|" \ -e "s|%OCTAVE_CONF_LIBDIR%|\"${libdir}\"|" \ -e "s|%OCTAVE_CONF_LIBOCTAVE%|\"${LIBOCTAVE}\"|" \ -e "s|%OCTAVE_CONF_LIBOCTINTERP%|\"${LIBOCTINTERP}\"|" \ -e "s|%OCTAVE_CONF_LIBS%|\"${LIBS}\"|" \ -e "s|%OCTAVE_CONF_LN_S%|\"${LN_S}\"|" \ -e "s|%OCTAVE_CONF_MAGICK_CPPFLAGS%|\"${MAGICK_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_MAGICK_LDFLAGS%|\"${MAGICK_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_MAGICK_LIBS%|\"${MAGICK_LIBS}\"|" \ -e "s|%OCTAVE_CONF_MKOCTFILE_AR%|\"${AR}\"|" \ -e "s|%OCTAVE_CONF_MKOCTFILE_CC%|\"${CC}\"|" \ -e "s|%OCTAVE_CONF_MKOCTFILE_CXX%|\"${CXX}\"|" \ -e "s|%OCTAVE_CONF_MKOCTFILE_DL_LDFLAGS%|\"${DL_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_MKOCTFILE_F77%|\"${F77}\"|" \ -e "s|%OCTAVE_CONF_MKOCTFILE_OCTAVE_LINK_DEPS%|\"${mkoctfile_octave_link_deps}\"|" \ -e "s|%OCTAVE_CONF_MKOCTFILE_OCT_LINK_DEPS%|\"${mkoctfile_oct_link_deps}\"|" \ -e "s|%OCTAVE_CONF_MKOCTFILE_RANLIB%|\"${RANLIB}\"|" \ -e "s|%OCTAVE_CONF_OCTAVE_LINK_DEPS%|\"${OCTAVE_LINK_DEPS}\"|" \ -e "s|%OCTAVE_CONF_OCTAVE_LINK_OPTS%|\"${OCTAVE_LINK_OPTS}\"|" \ -e "s|%OCTAVE_CONF_OCTINCLUDEDIR%|\"${octincludedir}\"|" \ -e "s|%OCTAVE_CONF_OCTLIBDIR%|\"${octlibdir}\"|" \ -e "s|%OCTAVE_CONF_OCT_LINK_DEPS%|\"${OCT_LINK_DEPS}\"|" \ -e "s|%OCTAVE_CONF_OCT_LINK_OPTS%|\"${oct_link_opts}\"|" \ -e "s|%OCTAVE_CONF_OPENGL_LIBS%|\"${OPENGL_LIBS}\"|" \ -e "s|%OCTAVE_CONF_PCRE_CPPFLAGS%|\"${PCRE_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_PCRE_LDFLAGS%|\"${PCRE_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_PCRE_LIBS%|\"${PCRE_LIBS}\"|" \ -e "s|%OCTAVE_CONF_PREFIX%|\"${prefix}\"|" \ -e "s|%OCTAVE_CONF_PTHREAD_CFLAGS%|\"${PTHREAD_CFLAGS}\"|" \ -e "s|%OCTAVE_CONF_PTHREAD_LIBS%|\"${PTHREAD_LIBS}\"|" \ -e "s|%OCTAVE_CONF_QHULL_CPPFLAGS%|\"${QHULL_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_QHULL_LDFLAGS%|\"${QHULL_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_QHULL_LIBS%|\"${QHULL_LIBS}\"|" \ -e "s|%OCTAVE_CONF_QRUPDATE_CPPFLAGS%|\"${QRUPDATE_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_QRUPDATE_LDFLAGS%|\"${QRUPDATE_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_QRUPDATE_LIBS%|\"${QRUPDATE_LIBS}\"|" \ -e "s|%OCTAVE_CONF_QT_CPPFLAGS%|\"${QT_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_QT_LDFLAGS%|\"${QT_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_QT_LIBS%|\"${QT_LIBS}\"|" \ -e "s|%OCTAVE_CONF_RANLIB%|\"${RANLIB}\"|" \ -e "s|%OCTAVE_CONF_RDYNAMIC_FLAG%|\"${RDYNAMIC_FLAG}\"|" \ -e "s|%OCTAVE_CONF_READLINE_LIBS%|\"${READLINE_LIBS}\"|" | \ $SED \ -e "s|%OCTAVE_CONF_SHARED_LIBS%|\"${SHARED_LIBS}\"|" \ -e "s|%OCTAVE_CONF_SH_LDFLAGS%|\"${SH_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_STATIC_LIBS%|\"${STATIC_LIBS}\"|" \ -e "s|%OCTAVE_CONF_SUITESPARSECONFIG_LIBS%|\"${SUITESPARSECONFIG_LIBS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_IDA_CPPFLAGS%|\"${SUNDIALS_IDA_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_IDA_LDFLAGS%|\"${SUNDIALS_IDA_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_IDA_LIBS%|\"${SUNDIALS_IDA_LIBS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_NVECSERIAL_CPPFLAGS%|\"${SUNDIALS_NVECSERIAL_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_NVECSERIAL_LDFLAGS%|\"${SUNDIALS_NVECSERIAL_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_NVECSERIAL_LIBS%|\"${SUNDIALS_NVECSERIAL_LIBS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_SUNLINSOLKLU_CPPFLAGS%|\"${SUNDIALS_SUNLINSOLKLU_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_SUNLINSOLKLU_LDFLAGS%|\"${SUNDIALS_SUNLINSOLKLU_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_SUNDIALS_SUNLINSOLKLU_LIBS%|\"${SUNDIALS_SUNLINSOLKLU_LIBS}\"|" \ -e "s|%OCTAVE_CONF_UMFPACK_CPPFLAGS%|\"${UMFPACK_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_UMFPACK_LDFLAGS%|\"${UMFPACK_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_UMFPACK_LIBS%|\"${UMFPACK_LIBS}\"|" \ -e "s|%OCTAVE_CONF_VERSION%|\"${version}\"|" \ -e "s|%OCTAVE_CONF_WARN_CFLAGS%|\"${WARN_CFLAGS}\"|" \ -e "s|%OCTAVE_CONF_WARN_CXXFLAGS%|\"${WARN_CXXFLAGS}\"|" \ -e "s|%OCTAVE_CONF_X11_INCFLAGS%|\"${X11_INCFLAGS}\"|" \ -e "s|%OCTAVE_CONF_X11_LIBS%|\"${X11_LIBS}\"|" \ -e "s|%OCTAVE_CONF_XTRA_CFLAGS%|\"${XTRA_CFLAGS}\"|" \ -e "s|%OCTAVE_CONF_XTRA_CXXFLAGS%|\"${XTRA_CXXFLAGS}\"|" \ -e "s|%OCTAVE_CONF_YACC%|\"${YACC}\"|" \ -e "s|%OCTAVE_CONF_YFLAGS%|\"${YFLAGS}\"|" \ -e "s|%OCTAVE_CONF_Z_CPPFLAGS%|\"${Z_CPPFLAGS}\"|" \ -e "s|%OCTAVE_CONF_Z_LDFLAGS%|\"${Z_LDFLAGS}\"|" \ -e "s|%OCTAVE_CONF_Z_LIBS%|\"${Z_LIBS}\"|" \ -e "s|%OCTAVE_CONF_config_opts%|\"${config_opts}\"|" \ -e "s|%OCTAVE_DATADIR%|\"${datadir}\"|" \ -e "s|%OCTAVE_DATAROOTDIR%|\"${datarootdir}\"|" \ -e "s|%OCTAVE_DEFAULT_PAGER%|\"${DEFAULT_PAGER}\"|" \ -e "s|%OCTAVE_DOCDIR%|\"${docdir}\"|" \ -e "s|%OCTAVE_DOC_CACHE_FILE%|\"${doc_cache_file}\"|" \ -e "s|%OCTAVE_EXEC_PREFIX%|\"${exec_prefix}\"|" \ -e "s|%OCTAVE_EXEEXT%|\"${EXEEXT}\"|" \ -e "s|%OCTAVE_FCNFILEDIR%|\"${fcnfiledir}\"|" \ -e "s|%OCTAVE_IMAGEDIR%|\"${imagedir}\"|" \ -e "s|%OCTAVE_INCLUDEDIR%|\"${includedir}\"|" \ -e "s|%OCTAVE_INFODIR%|\"${infodir}\"|" \ -e "s|%OCTAVE_INFOFILE%|\"${infofile}\"|" \ -e "s|%OCTAVE_LIBDIR%|\"${libdir}\"|" \ -e "s|%OCTAVE_LIBEXECDIR%|\"${libexecdir}\"|" \ -e "s|%OCTAVE_LOCALAPIARCHLIBDIR%|\"${localapiarchlibdir}\"|" \ -e "s|%OCTAVE_LOCALAPIFCNFILEDIR%|\"${localapifcnfiledir}\"|" \ -e "s|%OCTAVE_LOCALAPIOCTFILEDIR%|\"${localapioctfiledir}\"|" \ -e "s|%OCTAVE_LOCALAPIPKGDIR%|\"${localapipkgdir}\"|" \ -e "s|%OCTAVE_LOCALARCHLIBDIR%|\"${localarchlibdir}\"|" \ -e "s|%OCTAVE_LOCALFCNFILEDIR%|\"${localfcnfiledir}\"|" \ -e "s|%OCTAVE_LOCALOCTFILEDIR%|\"${localoctfiledir}\"|" \ -e "s|%OCTAVE_LOCALSTARTUPFILEDIR%|\"${localstartupfiledir}\"|" \ -e "s|%OCTAVE_LOCALVERARCHLIBDIR%|\"${localverarchlibdir}\"|" \ -e "s|%OCTAVE_LOCALVERFCNFILEDIR%|\"${localverfcnfiledir}\"|" \ -e "s|%OCTAVE_LOCALVEROCTFILEDIR%|\"${localveroctfiledir}\"|" \ -e "s|%OCTAVE_MAN1DIR%|\"${man1dir}\"|" \ -e "s|%OCTAVE_MAN1EXT%|\"${man1ext}\"|" \ -e "s|%OCTAVE_MANDIR%|\"${mandir}\"|" \ -e "s|%OCTAVE_OCTDATADIR%|\"${octdatadir}\"|" \ -e "s|%OCTAVE_OCTDOCDIR%|\"${octdocdir}\"|" \ -e "s|%OCTAVE_OCTETCDIR%|\"${octetcdir}\"|" \ -e "s|%OCTAVE_OCTFILEDIR%|\"${octfiledir}\"|" \ -e "s|%OCTAVE_OCTFONTSDIR%|\"${octfontsdir}\"|" \ -e "s|%OCTAVE_OCTINCLUDEDIR%|\"${octincludedir}\"|" \ -e "s|%OCTAVE_OCTLIBDIR%|\"${octlibdir}\"|" \ -e "s|%OCTAVE_OCTLOCALEDIR%|\"${octlocaledir}\"|" \ -e "s|%OCTAVE_OCTTESTSDIR%|\"${octtestsdir}\"|" \ -e "s|%OCTAVE_PREFIX%|\"${prefix}\"|" \ -e "s|%OCTAVE_RELEASE%|\"${OCTAVE_RELEASE}\"|" \ -e "s|%OCTAVE_STARTUPFILEDIR%|\"${startupfiledir}\"|" \ -e "s|%OCTAVE_TEXI_MACROS_FILE%|\"${texi_macros_file}\"|" \ -e "s|%OCTAVE_VERSION%|\"${version}\"|" ================================================ FILE: build-aux/subst-script-vals.in.sh ================================================ #! /bin/sh ######################################################################## ## ## Copyright (C) 2016-2026 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## distribution or . ## ## This file is part of Octave. ## ## Octave is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## . ## ######################################################################## : ${SED=@SED@} AWK="@AWK@" FIND="@FIND@" SED="@SED@" ADDRESS_SANITIZER_ENABLED="@ADDRESS_SANITIZER_ENABLED@" ADDRESS_SANITIZER_OPTIONS="@ADDRESS_SANITIZER_OPTIONS@" abs_top_srcdir="@abs_top_srcdir@" abs_top_builddir="@abs_top_builddir@" host_os="@host_os@" $SED \ -e "s|%AWK%|${AWK}|g" \ -e "s|%FIND%|${FIND}|g" \ -e "s|%SED%|${SED}|g" \ -e "s|%ADDRESS_SANITIZER_ENABLED%|${ADDRESS_SANITIZER_ENABLED}|g" \ -e "s|%ADDRESS_SANITIZER_OPTIONS%|${ADDRESS_SANITIZER_OPTIONS}|g" \ -e "s|%abs_top_srcdir%|${abs_top_srcdir}|" \ -e "s|%builddir%|${abs_top_builddir}|" \ -e "s|%host_os%|${host_os}|" ================================================ FILE: build-aux/update-bug-status.sh ================================================ #! /bin/sh ######################################################################## ## ## Copyright (C) 2017-2026 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## distribution or . ## ## This file is part of Octave. ## ## Octave is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## . ## ######################################################################## bug_numbers=$(for file in "$@"; do sed -n "s/.*<\([0-9][0-9][0-9][0-9]*\)>.*/\1/p" "$file" done | sort -u) fixed_bug_numbers=$(for num in $bug_numbers; do status=$(wget -q -O - https://octave.org/testfailure/?$num | tr -d '\n' | sed -n 's/.*>Status:<\/span><\/span> <\/td> *\([^<]*\)<.*/\1/p'); if [ "$status" = "Fixed" ]; then echo "$num"; fi done) if [ -z "$fixed_bug_numbers" ]; then echo "no change in bug status" exit 0; fi fixed_bug_pattern=`echo $fixed_bug_numbers | sed 's/ /\\\\|/g; s/^/<\\\\(/; s/$/\\\\)>/'` for file in "$@"; do sed -i "s/$fixed_bug_pattern/<*\1>/" "$file" done ================================================ FILE: configure.ac ================================================ dnl Process this file with autoconf to produce a configure script. dnl ######################################################################## ## ## Copyright (C) 1993-2026 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## distribution or . ## ## This file is part of Octave. ## ## Octave is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## . ## ######################################################################## ### Initialize Autoconf AC_PREREQ([2.65]) AC_INIT([GNU Octave], [12.0.0], [https://bugs.octave.org], [octave], [https://www.octave.org]) AC_CONFIG_MACRO_DIRS([m4]) AC_CONFIG_AUX_DIR([build-aux]) ### Declare version numbers dnl Note that the version number is duplicated here and in AC_INIT because dnl AC_INIT requires it to be static, not computed from shell variables. ## The description of the Octave version number in the etc/HACKING.md ## explains how to update these numbers for release and development ## versions. OCTAVE_MAJOR_VERSION=12 OCTAVE_MINOR_VERSION=0 OCTAVE_PATCH_VERSION=0 dnl PACKAGE_VERSION is set by the AC_INIT VERSION argument. OCTAVE_VERSION="$PACKAGE_VERSION" OCTAVE_COPYRIGHT="Copyright (C) 1993-2026 The Octave Project Developers." OCTAVE_RELEASE_DATE="2026-02-03" ## The "API version" is used as a way of checking that interfaces in the ## liboctave and libinterp libraries haven't changed in a backwardly ## incompatible way when loading .oct files. A better way to do this is with ## library versioning, but not all systems support it. ## ## NOTE: This macro will be removed in a future version of Octave! ## If you insist on checking for features using a version number, use the ## OCTAVE_MAJOR_VERSION, OCTAVE_MINOR_VERSION, and OCTAVE_PATCH_VERSION ## macros instead. dnl dnl FIXME: Since we also set libtool versions for liboctave and libinterp, dnl perhaps we should be computing the "api version" from those versions numbers dnl in some way instead of setting it independently here. OCTAVE_API_VERSION="api-v61" AC_SUBST(OCTAVE_MAJOR_VERSION) AC_SUBST(OCTAVE_MINOR_VERSION) AC_SUBST(OCTAVE_PATCH_VERSION) AC_SUBST(OCTAVE_VERSION) AC_SUBST(OCTAVE_COPYRIGHT) AC_SUBST(OCTAVE_RELEASE_DATE) AC_SUBST(OCTAVE_API_VERSION) dnl FIXME: We should auto-insert the Mercurial changeset ID into the dnl AC_REVISION field whenever configure.ac is modified. dnl AC_REVISION($Revision: 1.603 $) AC_CONFIG_SRCDIR([libinterp/octave.cc]) AC_CONFIG_HEADERS([config.h:config.in.h]) ### Initialize Automake AM_INIT_AUTOMAKE([1.14 -Wno-portability -Wno-override subdir-objects info-in-builddir tar-ustar dist-lzip dist-xz]) ## Add option to enable silent rules and make silent the default behavior. AM_SILENT_RULES([yes]) OCTAVE_CANONICAL_HOST AC_DEFINE(OCTAVE_SOURCE, 1, [Define to 1 if this is Octave.]) AC_USE_SYSTEM_EXTENSIONS ### Make configure args available in variable form for other uses. config_opts=$ac_configure_args AC_SUBST(config_opts) ### Set default file locations. ## Where to install libraries like liboctave.a, liboctinterp.a, and other ## architecture-dependent binaries. OCTAVE_SET_DEFAULT([octlibdir], '${libdir}/octave/${version}') ## Where to put executables to be run by Octave, rather than the user. ## This path usually includes the Octave version and configuration name, so ## that configurations for multiple versions of Octave may be installed at once. ## Windows search paths and relocation oddities require all binaries must be ## installed in the same directory. case $host_os in mingw* | msdosmsvc) OCTAVE_SET_DEFAULT([archlibdir], '${bindir}') ;; *) OCTAVE_SET_DEFAULT([archlibdir], '${libexecdir}/octave/${version}/exec/${canonical_host_type}') ;; esac ## Where to put executables to be run by Octave, rather than the user, that ## are specific to this site. OCTAVE_SET_DEFAULT([localarchlibdir], '${libexecdir}/octave/site/exec/${canonical_host_type}') OCTAVE_SET_DEFAULT([localapiarchlibdir], '${libexecdir}/octave/${api_version}/site/exec/${canonical_host_type}') OCTAVE_SET_DEFAULT([localverarchlibdir], '${libexecdir}/octave/${version}/site/exec/${canonical_host_type}') ## Where to put object files that will by dynamically loaded. ## This path includes the Octave version and configuration name, so that ## configurations for multiple versions of Octave may be installed at once. OCTAVE_SET_DEFAULT([octfiledir], '${libdir}/octave/${version}/oct/${canonical_host_type}') ## Directories that Octave should search for object files that will be ## dynamically loaded and that are specific to this site (i.e., customizations), ## before consulting ${octfiledir}. This should be a colon-separated list of ## directories. OCTAVE_SET_DEFAULT([localoctfiledir], '${libdir}/octave/site/oct/${canonical_host_type}') OCTAVE_SET_DEFAULT([localapioctfiledir], '${libdir}/octave/site/oct/${api_version}/${canonical_host_type}') OCTAVE_SET_DEFAULT([localveroctfiledir], '${libdir}/octave/${version}/site/oct/${canonical_host_type}') ## Where to install Octave's include files. OCTAVE_SET_DEFAULT([octincludedir], '${includedir}/octave-${version}/octave') ## Where to install the function files distributed with Octave. ## This includes the Octave version, so that the function files for different ## versions of Octave will be installed in separate directories. OCTAVE_SET_DEFAULT([fcnfiledir], '${datadir}/octave/${version}/m') ## Directories that Octave should search for function files specific to this ## site (i.e., customizations), before consulting ${fcnfiledir}. ## This should be a colon-separated list of directories. OCTAVE_SET_DEFAULT([localfcnfiledir], '${datadir}/octave/site/m') OCTAVE_SET_DEFAULT([localapifcnfiledir], '${datadir}/octave/site/${api_version}/m') OCTAVE_SET_DEFAULT([localverfcnfiledir], '${datadir}/octave/${version}/site/m') ## Where to install extra files like NEWS and doc-cache. OCTAVE_SET_DEFAULT([octetcdir], '${datadir}/octave/${version}/etc') ## Where to install the language files for the GUI. OCTAVE_SET_DEFAULT([octlocaledir], '${datadir}/octave/${version}/locale') ## The full path to the default doc-cache file. OCTAVE_SET_DEFAULT([doc_cache_file], '${octetcdir}/doc-cache') ## Where to install test files. OCTAVE_SET_DEFAULT([octtestsdir], '${octetcdir}/tests') ## The full path to the default texi macros file. OCTAVE_SET_DEFAULT([texi_macros_file], '${octetcdir}/macros.texi') ## Where Octave will search to find image files. OCTAVE_SET_DEFAULT([imagedir], '${datadir}/octave/${version}/imagelib') ## Where Octave will search for example data files shipped with distribution. OCTAVE_SET_DEFAULT([octdatadir], '${datadir}/octave/${version}/data') ## Where Octave will search for Qt help files shipped with distribution. OCTAVE_SET_DEFAULT([octdocdir], '${datadir}/octave/${version}/doc') ## Where Octave will search for fallback font files shipped with distribution. OCTAVE_SET_DEFAULT([octfontsdir], '${datadir}/octave/${version}/fonts') ## Where Octave will look for startup files. OCTAVE_SET_DEFAULT([startupfiledir], '${fcnfiledir}/startup') OCTAVE_SET_DEFAULT([localstartupfiledir], '${localfcnfiledir}/startup') ## Directory where site-wide (global) list of installed packages is kept OCTAVE_SET_DEFAULT([localapipkgdir], '${datadir}/octave/site/${api_version}') ## Where Octave will look for man and info files. OCTAVE_SET_DEFAULT([man1dir], '${mandir}/man1') OCTAVE_SET_DEFAULT([man1ext], '.1') OCTAVE_SET_DEFAULT([infofile], '${infodir}/octave.info') ### Check for programs used in building, installing, and running Octave. ## Programs used in configuring Octave. dnl Find pkg-config executable (sets $PKG_CONFIG) PKG_PROG_PKG_CONFIG ## And where we will install our own .pc files. PKG_INSTALLDIR AC_SUBST([liboctave_pkgconfigdir], [$pkgconfigdir]) AC_SUBST([libinterp_pkgconfigdir], [$pkgconfigdir]) AC_SUBST([libmex_pkgconfigdir], [$pkgconfigdir]) ## Programs used in Makefiles. AC_PROG_AWK AC_PROG_GREP AC_PROG_EGREP OCTAVE_PROG_FIND OCTAVE_PROG_SED OCTAVE_PROG_PERL ## Programs used to build parts of Octave. OCTAVE_PROG_GPERF OCTAVE_PROG_FLEX AC_SUBST([LEX_OUTPUT_ROOT], [lex.octave_]) OCTAVE_PROG_BISON OCTAVE_PROG_MAKEINFO OCTAVE_PROG_TEXI2DVI OCTAVE_PROG_TEXI2PDF OCTAVE_PROG_TAR_REPRODUCIBLE ## Programs used when installing Octave. AC_PROG_LN_S AC_PROG_MKDIR_P AC_PROG_INSTALL INSTALL_SCRIPT="${INSTALL}" AC_SUBST(INSTALL_SCRIPT) ## Programs used when running Octave. OCTAVE_PROG_GHOSTSCRIPT OCTAVE_PROG_GNUPLOT OCTAVE_PROG_PAGER OCTAVE_PROG_PYTHON ## Programs used to generate icons file formats. OCTAVE_PROG_ICOTOOL OCTAVE_PROG_RSVG_CONVERT AM_CONDITIONAL([AMCOND_HAVE_ICON_TOOLS], [test -n "$ICOTOOL" && test -n "$RSVG_CONVERT"]) ### Determine path separator. sepchar=':' AC_ARG_WITH([sepchar], [AS_HELP_STRING([--with-sepchar=], [use as the path separation character])]) case $with_sepchar in yes | "") case $host_os in mingw* | msdosmsvc) sepchar=';' ;; esac ;; no) AC_MSG_ERROR([You are required to define a path separation character]) ;; *) sepchar=$with_sepchar ;; esac AC_SUBST(sepchar) AC_DEFINE_UNQUOTED(SEPCHAR, ['$sepchar'], [Define this to be the path separator for your system, as a character constant.]) AC_DEFINE_UNQUOTED(SEPCHAR_STR, ["$sepchar"], [Define this to be the path separator for your system, as a string.]) ### Define the path to the shell on the host system. dnl Most systems will ensure /bin/sh is the default shell so this can be safely dnl ignored by almost everyone. However, there are exceptions, such as dnl Android, where this will need to be set. SHELL_PATH=/bin/sh AC_ARG_WITH([shell], [AS_HELP_STRING([--with-shell=SHELL], [use SHELL as the shell interpreter (default: /bin/sh)])]) case $with_shell in no) AC_MSG_ERROR([A shell interpreter is required]) ;; yes | "") ;; *) SHELL_PATH=$with_shell ;; esac AC_DEFINE_UNQUOTED([SHELL_PATH], ["$SHELL_PATH"], [Define this to be the path to the shell command interpreter.]) ### Determine which C++ compiler to use (we expect to find g++ or clang++). # AC_PROG_CXX attempts to find the compiler flags for activating support for # C++11. As of autoconf version 2.71, the source code that it uses for that # test includes parts that are invalid in C++20. # We are using AX_CXX_COMPILE_STDCXX to determine the potentially needed flags # for the C++ version that Octave requires. So, skip the (unnecessary and # broken) test for C++11 in AC_PROG_CXX by setting the following (undocumented) # flag: ac_cv_prog_cxx_cxx11="" AC_PROG_CXX AC_PROG_CXXCPP ## Ensure that the C++ compiler fully supports C++17. ## Preferably with GNU extensions if flags are required. AX_CXX_COMPILE_STDCXX(17, [], mandatory) ENABLE_STD_PMR_POLYMORPHIC_ALLOCATOR=yes AC_ARG_ENABLE(std-pmr-polymorphic-allocator, [AS_HELP_STRING([--disable-std-pmr-polymorphic-allocator], [build libraries without support for std::pmr::polymorphic_allocator, less efficient transfer of arrays to external MEX files])], [case $enableval in yes) ENABLE_STD_PMR_POLYMORPHIC_ALLOCATOR=yes ;; no) ENABLE_STD_PMR_POLYMORPHIC_ALLOCATOR=no ;; *) AC_MSG_ERROR([bad value $enableval for --enable-std-pmr-polymorphic-allocator]) ;; esac]) AC_ARG_WITH([qt], [AS_HELP_STRING([--with-qt=VER], [use the Qt major version VER]) dnl Second help string must not be indented for correct alignment AS_HELP_STRING([--without-qt], [don't use Qt libraries, disable Qt GUI])], [case $withval in yes | "") ;; no) QT_VERSIONS= ;; *) QT_VERSIONS="$withval" ;; esac]) ### Determine C++ compiler capabilities. if test $ENABLE_STD_PMR_POLYMORPHIC_ALLOCATOR = yes; then OCTAVE_CHECK_STD_PMR_POLYMORPHIC_ALLOCATOR else HAVE_STD_PMR_POLYMORPHIC_ALLOCATOR="no" fi ### Determine which C compiler to use (we expect to find gcc or clang). AC_PROG_CC AC_PROG_CPP ## Save and restore CFLAGS and CXXFLAGS globally. dnl These variables are for users, so we shouldn't be touching them. dnl Instead, we should set the corresponding AM_ flags (currently by way of the dnl XTRA_ variables). However, for the duration of the configure script, we dnl may set CFLAGS and CXXFLAGS so that subsequent tests succeed. Temporary dnl settings like this are currently done for pthreads and openmp, for example. original_octave_configure_CFLAGS="$CFLAGS" original_octave_configure_CXXFLAGS="$CXXFLAGS" ## Check for MSVC have_msvc=no case $host_os in msdosmsvc) have_msvc=yes ;; mingw*) AC_MSG_CHECKING([for MSVC compiler]) AC_PREPROC_IFELSE([AC_LANG_SOURCE([[ #if ! defined (_MSC_VER) #error "Not MSVC compiler" #endif ]])], have_msvc=yes, have_msvc=no) AC_MSG_RESULT([$have_msvc]) ;; esac ### gnulib initialization: part 1 dnl Must take place immediately after a compiler is determined gl_EARLY ### Record version number when using g++. GXX_VERSION= if test "$GXX" = yes; then AC_CACHE_CHECK([g++ compiler version number], [octave_cv_gxx_version], [octave_cv_gxx_version=[`$CXX -v 2>&1 | $GREP "^.*g.. version" | $SED -e 's/^.*g.. version *//' -e 's/cygnus-//' -e 's/egcs-//' -e 's/ .*//'`] ]) GXX_VERSION=$octave_cv_gxx_version fi AC_SUBST(GXX_VERSION) ### Record version number when using gcc. dnl It might be different from the g++ version number. GCC_VERSION= if test "$GCC" = yes; then AC_CACHE_CHECK([gcc compiler version number], [octave_cv_gcc_version], [octave_cv_gcc_version=[`$CC -v 2>&1 | $GREP "^.*gcc version" | $SED -e 's/^.*g.. version *//' -e 's/cygnus-//' -e 's/egcs-//' -e 's/ .*//'`] ]) GCC_VERSION=$octave_cv_gcc_version fi AC_SUBST(GCC_VERSION) ## It seems that there are some broken inline assembly functions in GNU libc. ## Since it is uncertain how to test whether Octave is linked against GNU libc, ## just disable them for all platforms. AC_MSG_NOTICE([defining __NO_MATH_INLINES avoids buggy GNU libc exp function]) AC_DEFINE(__NO_MATH_INLINES, 1, [Define to 1 if your version of GNU libc has buggy inline assembly code for math functions like exp.]) ### Determine the compiler flag necessary to create dependencies. ## Assume GCC. INCLUDE_DEPS=yes DEPEND_FLAGS="-M" DEPEND_EXTRA_SED_PATTERN="" if test "$GCC" != yes; then case $canonical_host_type in sparc-sun-solaris2* | i386-pc-solaris2*) DEPEND_FLAGS="-xM1" DEPEND_EXTRA_SED_PATTERN="-e '/\/opt\/SUNWspro/d'" ;; *-*-msdosmsvc) ;; *-*-mingw*) if test $have_msvc = no; then INCLUDE_DEPS=no fi ;; *) INCLUDE_DEPS=no ;; esac fi AC_SUBST(INCLUDE_DEPS) AC_SUBST(DEPEND_FLAGS) AC_SUBST(DEPEND_EXTRA_SED_PATTERN) ### Check for math library. dnl If found, this will add -lm to LIBS. dnl Keep this check before the check for the Fortran compiler, dnl in case -lm is needed to compile Fortran programs. AC_CHECK_LIB(m, sin) ### Determine the Fortran compiler and how to invoke it. ## Prefer gfortran, but the user's F77 environment variable will override. AC_PROG_F77([gfortran]) if test -z "$F77"; then ## No gfortran found, search for any other installed compiler. AC_PROG_F77 fi if test "$F77" = g77; then AC_MSG_ERROR([g77 is not a supported Fortran compiler. Select another compiler by setting the environment variable F77 and re-running configure.]) fi AC_MSG_CHECKING([whether a usable Fortran compiler was found]) if test -n "$F77"; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) AC_MSG_ERROR([a Fortran compiler is required to build Octave]) fi AC_F77_LIBRARY_LDFLAGS AC_F77_DUMMY_MAIN AC_F77_WRAPPERS ## Must appear after checks for Fortran compiler. OCTAVE_CHECK_FORTRAN_SYMBOL_AND_CALLING_CONVENTIONS ## Must appear after checks for all compilers. OCTAVE_DEFINE_MKOCTFILE_DYNAMIC_LINK_OPTIONS ### Use a 64-bit integer type for array dimensions and indexing, if possible. AC_CHECK_SIZEOF([int]) AC_DEFINE_UNQUOTED(OCTAVE_SIZEOF_INT, [$ac_cv_sizeof_int], [Define to the size of int.]) AC_CHECK_SIZEOF([void *]) if test $ac_cv_sizeof_void_p -ge 8; then ENABLE_64=yes else ENABLE_64=no fi AC_ARG_ENABLE(64, [AS_HELP_STRING([--disable-64], [don't use 64-bit integers for array dimensions and indexing])], [case $enableval in yes) ENABLE_64=yes ;; no) ENABLE_64=no ;; *) AC_MSG_ERROR([bad value $enableval for --enable-64]) ;; esac]) if test $ENABLE_64 = yes; then if test $ac_cv_sizeof_void_p -ge 8; then OCTAVE_IDX_TYPE=int64_t else warn_64_bit="--enable-64 option given but pointers are less than 64-bits wide; disabling 64-bit indexing" OCTAVE_CONFIGURE_WARNING([warn_64_bit]) OCTAVE_IDX_TYPE=int32_t ENABLE_64=no fi else OCTAVE_IDX_TYPE=int32_t fi AC_SUBST(ENABLE_64) if test $ENABLE_64 = yes; then octave_sizeof_octave_idx_type=8 AC_DEFINE(OCTAVE_ENABLE_64, 1, [Define to 1 to use 64-bit integers for array dimensions and indexing.]) else octave_sizeof_octave_idx_type=4 fi AC_DEFINE_UNQUOTED(OCTAVE_SIZEOF_IDX_TYPE, [$octave_sizeof_octave_idx_type], [Define to the size of the octave_idx_type (8 or 4).]) AC_SUBST(OCTAVE_IDX_TYPE) AC_DEFINE_UNQUOTED(OCTAVE_IDX_TYPE, [$OCTAVE_IDX_TYPE], [Define to the type of octave_idx_type (64 or 32 bit signed integer).]) ### Check for LLVM or Apple libc++ library. OCTAVE_LLVM_LIBCXX ### Check for BSD or Apple libc library. OCTAVE_BSD_LIBC ### Check for pthread library. AX_PTHREAD dnl Include pthread libs and flags early in case other config tests need them. dnl They seem to be required for the OpenGL tests on Debian systems. LIBS="$PTHREAD_LIBS $LIBS" XTRA_CFLAGS="$XTRA_CFLAGS $PTHREAD_CFLAGS" XTRA_CXXFLAGS="$XTRA_CXXFLAGS $PTHREAD_CFLAGS" dnl Set these for any other tests that may require them. dnl They will be reset before output files are generated. CFLAGS="$CFLAGS $PTHREAD_CFLAGS" CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS" dnl Clang compiler will produce bogus warning during linking only. AM_CONDITIONAL([AMCOND_CLANG_PTHREAD_WARNING], [test $ax_cv_PTHREAD_CLANG = yes]) dnl Check if glibc uses wrong stack size OCTAVE_CHECK_BROKEN_PTHREAD_STACKSIZE AM_CONDITIONAL([OCTAVE_CHECK_BROKEN_PTHREAD_STACKSIZE], [test $octave_cv_broken_pthread_stacksize = yes]) ### Test whether the compiler supports OpenMP. dnl This is enabled by default to allow the option of using OpenMP in dnl loadable modules. ENABLE_OPENMP=no check_for_openmp=yes AC_ARG_ENABLE([openmp], [AS_HELP_STRING([--disable-openmp], [disable OpenMP SMP multi-threading])], [if test "$enableval" = no; then check_for_openmp=no; fi], []) if test $check_for_openmp = yes; then AC_LANG_PUSH(C) AX_OPENMP([XTRA_CFLAGS="$XTRA_CFLAGS $OPENMP_CFLAGS"; ENABLE_OPENMP=yes], []) AC_LANG_POP(C) AC_LANG_PUSH(C++) AX_OPENMP([XTRA_CXXFLAGS="$XTRA_CXXFLAGS $OPENMP_CXXFLAGS"; ENABLE_OPENMP=yes], []) AC_LANG_POP(C++) fi dnl Set these for any other tests that may require them. dnl They will be reset before output files are generated. CFLAGS="$CFLAGS $OPENMP_CFLAGS" CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" dnl Define here since it is skipped if the first argument to AX_OPENMP dnl is not empty. if test $ENABLE_OPENMP = yes; then AC_CHECK_HEADERS([omp.h]) AC_CHECK_FUNCS([omp_get_num_threads]) AC_DEFINE(OCTAVE_ENABLE_OPENMP, 1, [Define to 1 if OpenMP is enabled]) fi ### Start determination of shared vs. static libraries. ## Use -static if compiling on Alpha OSF/1 1.3 systems. case $canonical_host_type in alpha*-dec-osf1.3) LD_STATIC_FLAG=-static ;; esac if test -n "$LD_STATIC_FLAG"; then AC_MSG_NOTICE([defining LD_STATIC_FLAG to be $LD_STATIC_FLAG]) fi AC_SUBST(LD_STATIC_FLAG) ## Check for programs necessary for shared libraries (ar, libtool) OCTAVE_PROG_AR ifdef([LT_INIT], [], [ errprint([error: you must have libtool 2.2.2 or a more recent version ]) m4exit([1])]) LT_PREREQ([2.2.2]) LT_INIT([disable-static dlopen win32-dll]) if test $enable_shared = yes; then SHARED_LIBS=yes else SHARED_LIBS=no # Note: Octave doesn't build currently without shared libraries. And it # might not work or make sense at all to build static Octave libraries. # All existing logic for this use-case is still in place in case # someone would like to base on that to build static versions of the # libraries. AC_MSG_ERROR([Building shared libraries is required!]) fi AC_SUBST(SHARED_LIBS) if test $enable_static = yes; then STATIC_LIBS=yes else STATIC_LIBS=no fi AC_SUBST(STATIC_LIBS) XTRA_EXTERNAL_SH_LDFLAGS= case $host_os in msdosmsvc | mingw* | cygwin*) FLIBS="$FLIBS -lkernel32" XTRA_EXTERNAL_SH_LDFLAGS="-Wl,liboctave/external/external.def" ;; esac AC_SUBST(XTRA_EXTERNAL_SH_LDFLAGS) if test $STATIC_LIBS = no && test $SHARED_LIBS = no; then AC_MSG_ERROR([You can't disable building both static AND shared libraries!]) fi ### More configure argument checking related to linking case $host_os in msdosmsvc | mingw* | cygwin* | AIX | BeOS | OS/2 ) DEFAULT_NO_UNDEFINED_LDFLAG="-no-undefined" ;; *) DEFAULT_NO_UNDEFINED_LDFLAG="" ;; esac AC_ARG_ENABLE([no-undefined], [AS_HELP_STRING([--enable-no-undefined], [pass -no-undefined to libtool when linking Octave and its shared libraries. This is done by default for msdosmsvc, mingw*, cygwin*, AIX, BeOS, or OS/2 hosts.])], [case $enableval in yes) NO_UNDEFINED_LDFLAG="-no-undefined" ;; no) NO_UNDEFINED_LDFLAG="" ;; *) AC_MSG_ERROR([bad value $enableval for --enable-no-undefined]) ;; esac], [NO_UNDEFINED_LDFLAG="$DEFAULT_NO_UNDEFINED_LDFLAG"]) AC_SUBST(NO_UNDEFINED_LDFLAG) case $host_os in cygwin* ) DEFAULT_LINK_ALL_DEPS="yes" ;; *) DEFAULT_LINK_ALL_DEPS="no" ;; esac AC_ARG_ENABLE([link-all-dependencies], [AS_HELP_STRING([--enable-link-all-dependencies], [link Octave and its shared libraries with all dependencies, not just those immediately referenced (should not be needed on most systems). This is done by default for cygwin* hosts.])], [case $enableval in yes) link_all_deps=yes ;; no) link_all_deps=no ;; *) AC_MSG_ERROR([bad value $enableval for --enable-link-all-dependencies]) ;; esac], [link_all_deps="$DEFAULT_LINK_ALL_DEPS"]) AM_CONDITIONAL([AMCOND_LINK_ALL_DEPS], [test $link_all_deps = yes]) AC_ARG_VAR([OCTAVE_CLI_LTLDFLAGS], [additional flags when linking octave-cli with libtool]) AC_ARG_VAR([OCTAVE_GUI_LTLDFLAGS], [additional flags when linking octave-gui with libtool]) ### Check for BLAS and LAPACK libraries. ## Need to adjust FFLAGS to include correct integer size. save_FFLAGS="$FFLAGS" FFLAGS="$FFLAGS $F77_INTEGER_8_FLAG" OCTAVE_BLAS AX_LAPACK ## Restore FFLAGS. FFLAGS="$save_FFLAGS" ## If necessary, try again with -ff2c in FFLAGS if test $ax_blas_ok = no; then save_FFLAGS="$FFLAGS" FFLAGS="-ff2c $FFLAGS $F77_INTEGER_8_FLAG" OCTAVE_BLAS AX_LAPACK ## Restore FFLAGS, with -ff2c if that was helpful if test $ax_blas_ok = yes; then FFLAGS="-ff2c $save_FFLAGS" else FFLAGS="$save_FFLAGS" fi fi ## On OSX, try again with a wrapper library (without -ff2c!) if test $ax_blas_ok = no; then case $host_os in darwin*) ## test if wrapper functions help octave_blaswrap_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -DUSE_BLASWRAP" AC_LANG_PUSH(C) AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ #include "liboctave/util/blaswrap.c" ]])], [mv conftest.$ac_objext blaswrap.$ac_objext octave_blaswrap_save_BLAS_LIBS="$BLAS_LIBS" BLAS_LIBS="blaswrap.$ac_objext -framework vecLib" save_FFLAGS="$FFLAGS" FFLAGS="$FFLAGS $F77_INTEGER_8_FLAG" OCTAVE_BLAS AX_LAPACK ## Restore FFLAGS. FFLAGS="$save_FFLAGS" dnl remove temp file rm -f blaswrap.$ac_objext], [AC_MSG_FAILURE([cannot compile liboctave/util/blaswrap.c])]) AC_LANG_POP(C) CFLAGS="$octave_blaswrap_save_CFLAGS" if test $ax_blas_ok = no; then BLAS_LIBS="$octave_blaswrap_save_BLAS_LIBS" else ## wrapper in liboctave/util, remove from BLAS_LIBS BLAS_LIBS=`echo $BLAS_LIBS | $SED -e 's/blaswrap.[[^ ]]* //g'` AC_DEFINE(USE_BLASWRAP, 1, [Define to 1 if BLAS functions need to be wrapped (potentially needed for 64-bit OSX only).]) fi ;; esac fi if test $ax_blas_ok = no || test $ax_lapack_ok = no; then AC_MSG_ERROR([BLAS and LAPACK libraries are required]) fi case $ax_cv_blas_integer_size in 4) HAVE_64_BIT_BLAS=no ;; 8) HAVE_64_BIT_BLAS=yes ;; *) AC_MSG_ERROR([unrecognized BLAS library integer size]) ;; esac OCTAVE_CHECK_SIZEOF_FORTRAN_INTEGER if test $octave_cv_sizeof_fortran_integer -ne $ax_cv_blas_integer_size; then if test $ax_cv_blas_integer_size -eq 8; then case $F77 in *gfortran*) case $F77_INTEGER_8_FLAG in *-fdefault-integer-8*) ;; *) case $FFLAGS in *-fdefault-integer-8*) AC_MSG_NOTICE([setting -fdefault-integer-8 in F77_INTEGER_8_FLAG instead of FFLAGS]) FFLAGS=`echo $FFLAGS | $SED 's/-fdefault-integer-8//g'` F77_INTEGER_8_FLAG="-fdefault-integer-8" ;; *) AC_MSG_NOTICE([adding -fdefault-integer-8 to F77_INTEGER_8_FLAG]) F77_INTEGER_8_FLAG="-fdefault-integer-8" ## Invalidate the cache and try again. $as_unset octave_cv_sizeof_fortran_integer ;; esac ;; esac ;; esac if test -z "$octave_cv_sizeof_fortran_integer"; then OCTAVE_CHECK_SIZEOF_FORTRAN_INTEGER fi fi ## We intentionally don't attempt to fix things up if the default ## Fortran integer size is 8 but BLAS appears to use 4-byte integers. if test $octave_cv_sizeof_fortran_integer -ne $ax_cv_blas_integer_size; then AC_MSG_ERROR([your Fortran compiler must have an option for setting the default integer size to be the same size as your BLAS library uses ($ax_cv_blas_integer_size bytes). See the file INSTALL for more information.]) fi fi AC_SUBST(F77_INTEGER_8_FLAG) case $octave_cv_sizeof_fortran_integer in 8) OCTAVE_F77_INT_TYPE=int64_t ;; 4) OCTAVE_F77_INT_TYPE=int32_t ;; esac AC_SUBST(OCTAVE_F77_INT_TYPE) AC_DEFINE_UNQUOTED(OCTAVE_F77_INT_TYPE, [$OCTAVE_F77_INT_TYPE], [Define to the type of octave_f77_int_type (64 or 32 bit signed integer).]) AC_DEFINE_UNQUOTED(OCTAVE_SIZEOF_F77_INT_TYPE, [$octave_cv_sizeof_fortran_integer], [Define to the size of the octave_f77_int_type (8 or 4).]) OCTAVE_F77_FLAG([-ffloat-store], [ AC_MSG_RESULT([setting F77_FLOAT_STORE_FLAG to -ffloat-store]) F77_FLOAT_STORE_FLAG=-ffloat-store AC_SUBST(F77_FLOAT_STORE_FLAG) ]) if test $ac_cv_f77_compiler_gnu = yes; then OCTAVE_F77_FLAG([-std=legacy]) fi BUILD_EXTERNAL_LIBXERBLA= case $host_os in msdosmsvc | mingw*) BUILD_EXTERNAL_LIBXERBLA=yes ;; esac AM_CONDITIONAL([AMCOND_BUILD_EXTERNAL_LIBXERBLA], [test -n "$BUILD_EXTERNAL_LIBXERBLA"]) ### Set options for dynamic linking if enabled. dnl Options set only if we are building shared libs and some API for dnl dynamic linking has been detected. dnl FIXME: A lot of the following duplicates the functionality of dnl code generated by the dlopen option for LT_INIT. RDYNAMIC_FLAG= DL_API_MSG="" dlopen_api=no loadlibrary_api=no case $lt_cv_dlopen in dlopen) dlopen_api=yes DL_API_MSG="dlopen" AC_DEFINE(HAVE_DLOPEN_API, 1, [Define to 1 if system has dlopen, dlsym, dlerror, and dlclose for dynamic linking.]) OCTAVE_CXX_FLAG([-rdynamic], [RDYNAMIC_FLAG=-rdynamic]) ;; LoadLibrary) loadlibrary_api=yes DL_API_MSG="LoadLibrary" AC_DEFINE(HAVE_LOADLIBRARY_API, 1, [Define to 1 if system has LoadLibrary for dynamic linking.]) ;; *) AC_MSG_ERROR([Octave requires some way to perform dynamic linking.]) ;; esac DL_LIBS="$lt_cv_dlopen_libs" if test $SHARED_LIBS = yes; then LIBOCTINTERP="-loctinterp" LIBOCTAVE="-loctave" LIBOCTMEX="-loctmex" else LIBOCTINTERP="${top_builddir}/libinterp/liboctinterp.a" LIBOCTAVE="${top_builddir}/liboctave/liboctave.a" LIBOCTMEX="${top_builddir}/liboctave/liboctmex.a" fi AC_SUBST(RDYNAMIC_FLAG) AC_SUBST(LIBOCTINTERP) AC_SUBST(LIBOCTAVE) AC_SUBST(LIBOCTMEX) if test "$cross_compiling" = yes && test -n "$ac_tool_prefix"; then CROSS_TOOL_PREFIX="$ac_tool_prefix" MKOCTFILE_AR=`echo "$AR" | $SED "s,$CROSS_TOOL_PREFIX,,"` MKOCTFILE_CC=`echo "$CC" | $SED "s,$CROSS_TOOL_PREFIX,,"` MKOCTFILE_CXX=`echo "$CXX" | $SED "s,$CROSS_TOOL_PREFIX,,"` MKOCTFILE_F77=`echo "$F77" | $SED "s,$CROSS_TOOL_PREFIX,,"` MKOCTFILE_RANLIB=`echo "$RANLIB" | $SED "s,$CROSS_TOOL_PREFIX,,"` else MKOCTFILE_AR="$AR" MKOCTFILE_CC="$CC" MKOCTFILE_CXX="$CXX" MKOCTFILE_F77="$F77" MKOCTFILE_RANLIB="$RANLIB" fi AC_MSG_NOTICE([defining CROSS_TOOL_PREFIX to be $CROSS_TOOL_PREFIX]) AC_MSG_NOTICE([defining MKOCTFILE_AR to be $MKOCTFILE_AR]) AC_MSG_NOTICE([defining MKOCTFILE_CC to be $MKOCTFILE_CC]) AC_MSG_NOTICE([defining MKOCTFILE_CXX to be $MKOCTFILE_CXX]) AC_MSG_NOTICE([defining MKOCTFILE_F77 to be $MKOCTFILE_F77]) AC_MSG_NOTICE([defining MKOCTFILE_RANLIB to be $MKOCTFILE_RANLIB]) AC_SUBST(CROSS_TOOL_PREFIX) AC_SUBST(MKOCTFILE_AR) AC_SUBST(MKOCTFILE_CC) AC_SUBST(MKOCTFILE_CXX) AC_SUBST(MKOCTFILE_F77) AC_SUBST(MKOCTFILE_RANLIB) ### Enable internal checks ## The checks slow down the execution and are redundant, ## but useful for debugging or verifying GNU Octave. ENABLE_INTERNAL_CHECKS=no AC_ARG_ENABLE([internal-checks], [AS_HELP_STRING([--enable-internal-checks], [Enable internal checks that are redundant but useful to debug or verify GNU Octave])], [if test "$enableval" = yes; then ENABLE_INTERNAL_CHECKS=yes; fi], []) if test $ENABLE_INTERNAL_CHECKS = yes; then AC_DEFINE(OCTAVE_ENABLE_INTERNAL_CHECKS, 1, [Define to 1 to enable internal checks.]) fi ### Determine extra CFLAGS, CXXFLAGS that may be necessary for Octave. ## On Intel systems with gcc, we need to compile with -mieee-fp to get full ## support for IEEE floating point. ## ## On Alpha/OSF systems, we require -mieee or -ieee for full support. ieee_fp_flag= case $canonical_host_type in i[[3456789]]86-*-*) if test "$GCC" = yes; then OCTAVE_CC_FLAG([-mieee-fp], [ ieee_fp_flag=-mieee-fp XTRA_CFLAGS="$XTRA_CFLAGS -mieee-fp" AC_MSG_NOTICE([adding -mieee-fp to XTRA_CFLAGS])]) fi if test "$GXX" = yes; then OCTAVE_CXX_FLAG([-mieee-fp], [ ieee_fp_flag=-mieee-fp XTRA_CXXFLAGS="$XTRA_CXXFLAGS -mieee-fp" AC_MSG_NOTICE([adding -mieee-fp to XTRA_CXXFLAGS])]) fi ;; alpha*-*-*) if test "$GCC" = yes; then OCTAVE_CC_FLAG([-mieee], [ ieee_fp_flag=-mieee XTRA_CFLAGS="$XTRA_CFLAGS -mieee" AC_MSG_NOTICE([adding -mieee to XTRA_CFLAGS])]) else OCTAVE_CC_FLAG([-ieee], [ ieee_fp_flag=-ieee XTRA_CFLAGS="$XTRA_CFLAGS -ieee" AC_MSG_NOTICE([adding -ieee to XTRA_CFLAGS])]) fi if test "$GXX" = yes; then OCTAVE_CXX_FLAG([-mieee], [ ieee_fp_flag=-mieee XTRA_CXXFLAGS="$XTRA_CXXFLAGS -mieee" AC_MSG_NOTICE([adding -mieee to XTRA_CXXFLAGS])]) else OCTAVE_CXX_FLAG([-ieee], [ ieee_fp_flag=-ieee XTRA_CXXFLAGS="$XTRA_CXXFLAGS -ieee" AC_MSG_NOTICE([adding -ieee to XTRA_CXXFLAGS])]) fi ;; *ibm-aix4*) OCTAVE_CC_FLAG([-mminimal-toc], [ XTRA_CFLAGS="$XTRA_CFLAGS -mminimal-toc"]) OCTAVE_CXX_FLAG([-mminimal-toc], [ XTRA_CXXFLAGS="$XTRA_CXXFLAGS -mminimal-toc"]) ;; esac ## Check if C and Fortran compilers support -fexceptions to support unwinding ## the stack for C++ exceptions through frames in C or Fortran code. # CFLAGS are used only in the configure script. # XTRA_CFLAGS are used only after the configure script. OCTAVE_CC_FLAG([-fexceptions], [ CFLAGS="$CFLAGS -fexceptions" XTRA_CFLAGS="$XTRA_CFLAGS -fexceptions" AC_MSG_NOTICE([adding -fexceptions to XTRA_CFLAGS])]) OCTAVE_F77_FLAG([-fexceptions]) AC_SUBST(XTRA_CFLAGS) AC_SUBST(XTRA_CXXFLAGS) AC_SUBST(XTRA_LDFLAGS) ### Defaults for cross compiling. dnl BUILD_CC and BUILD_CXX are the compilers that we use for building tools dnl on the build system. For now, we assume that the only cross compiling we dnl can do is with gcc on a Unixy system, but the dedicated hacker can dnl override these. if test "$cross_compiling" = yes; then BUILD_CC="gcc" BUILD_CFLAGS="-O2 -g" BUILD_CXX="g++ -std=gnu++17" BUILD_CXXFLAGS="-O2 -g" BUILD_LDFLAGS="" BUILD_EXEEXT="" else BUILD_CC="${CC}" BUILD_CFLAGS="${CFLAGS}" BUILD_CXX="${CXX}" BUILD_CXXFLAGS="${CXXFLAGS}" BUILD_LDFLAGS="${LDFLAGS}" BUILD_EXEEXT="${EXEEXT}" fi AC_ARG_VAR([BUILD_CC], [build system C compiler (used if cross compiling)]) AC_ARG_VAR([BUILD_CFLAGS], [build system C compiler flags (used if cross compiling)]) AC_ARG_VAR([BUILD_CXX], [build system C++ compiler (used if cross compiling)]) AC_ARG_VAR([BUILD_CXXFLAGS], [build system C++ compiler flags (used if cross compiling)]) AC_ARG_VAR([BUILD_LDFLAGS], [build system C++ compiler link flags (used if cross compiling)]) AC_ARG_VAR([BUILD_EXEEXT], [build system executable extension (used if cross compiling)]) ### Determine whether to create cross-mkoctfile and other cross-tools. cross_tools=no AC_ARG_ENABLE([cross-tools], [AS_HELP_STRING([--enable-cross-tools], [build cross tools (mkoctfile, octave-config) if cross compiling])], [if test "$enableval" = yes; then cross_tools=yes; fi]) if test "$cross_tools" = yes; then if test "$cross_compiling" = no; then AC_MSG_WARN([ignoring --enable-cross-tools when not cross compiling]) cross_tools=no fi fi AM_CONDITIONAL([AMCOND_CROSS_TOOLS], [test $cross_tools = yes]) ### Check compiler characteristics. dnl FIXME: How many of these are necessary now that C++11 is required? ## Check if C++ compiler can auto allocate variable sized arrays. OCTAVE_CXX_DYNAMIC_AUTO_ARRAYS ## Check that C compiler and libraries support IEEE754 data format. OCTAVE_IEEE754_DATA_FORMAT ## Are bit_and, bit_or, and bit_xor defined as templated operators? OCTAVE_CXX_BITWISE_OP_TEMPLATES ## Can complex class set components independently? OCTAVE_CXX_COMPLEX_SETTERS ## Are there functions to access real/imag parts of numbers via references? OCTAVE_CXX_COMPLEX_REFERENCE_ACCESSORS ## Does the C compiler handle alloca and const correctly? AC_FUNC_ALLOCA ## Does the C compiler support Automake subdir-objects option? AM_PROG_CC_C_O ## Set the target Windows version early so that gnulib can use all functions ## that are available in that version. case $host_os in msdosmsvc | mingw*) AC_MSG_CHECKING([for required _WIN32_WINNT]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #if _WIN32_WINNT < 0x0601 #error "Wrong version" #endif ]], [])], [AC_MSG_RESULT([none])], [AC_DEFINE(_WIN32_WINNT, 0x0601, [Define to 0x0601 to access SetCurrentProcessExplicitAppUserModelID.]) AC_MSG_RESULT([0x0601])]) ;; esac ### gnulib initialization: part 2 dnl Must take place after part 1, and after standard compiler options and dnl search paths have been established, and at the same priority level as dnl system library function and header checks, but before checks for all dnl external library dependencies. gl_SET_CRYPTO_CHECK_DEFAULT([auto-gpl-compat]) gl_INIT ### Checks for header files. AC_HEADER_SYS_WAIT ## C headers dnl Use multiple AC_CHECKs to avoid line continuations '\' in list. AC_CHECK_HEADERS([dlfcn.h floatingpoint.h fpu_control.h grp.h]) AC_CHECK_HEADERS([ieeefp.h pthread.h pwd.h sys/ioctl.h]) AC_CHECK_HEADERS([stropts.h sys/stropts.h]) ## Find a termio header to include. AC_CHECK_HEADERS([termios.h], have_termios_h=yes, have_termios_h=no) AC_CHECK_HEADERS([termio.h], have_termio_h=yes, have_termio_h=no) AC_CHECK_HEADERS([sgtty.h], have_sgtty_h=yes, have_sgtty_h=no) AC_CHECK_HEADERS([conio.h], have_conio_h=yes, have_conio_h=no) if test $have_termios_h != yes \ && test $have_termio_h != yes \ && test $have_sgtty_h != yes; then AC_MSG_WARN([couldn't find one of termios.h, termio.h, or sgtty.h!]) fi ## For MSVC compilers, avoid #define of min/max from windows.h header. if test $have_msvc = yes; then AC_DEFINE(NOMINMAX, 1, [Define to 1 to avoid min/max macro definition in Windows headers.]) fi ### Determine types and size of types. AC_TYPE_INT64_T AC_TYPE_MODE_T AC_TYPE_OFF_T AC_TYPE_PID_T AC_TYPE_SIZE_T AC_TYPE_SSIZE_T AC_TYPE_UID_T AC_TYPE_UINT64_T AC_CHECK_TYPES([dev_t, ino_t]) AC_CHECK_TYPES([ptrdiff_t]) AC_CHECK_TYPES([long long int]) if test $ac_cv_type_long_long_int = yes; then AC_DEFINE(OCTAVE_HAVE_LONG_LONG_INT, 1, [Define to 1 if the system has the type 'long long int'.]) fi AC_CHECK_TYPES([unsigned long long int]) if test $ac_cv_type_unsigned_long_long_int = yes; then AC_DEFINE(OCTAVE_HAVE_UNSIGNED_LONG_LONG_INT, 1, [Define to 1 if the system has the type 'unsigned long long int'.]) fi ## Check for long double type (may be used for 64-bit integer computations). AC_CHECK_SIZEOF([long double]) ### Check structures and existence of necessary members. AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_blocks, struct stat.st_rdev]) AC_CHECK_MEMBERS([struct group.gr_passwd]) AC_STRUCT_TIMEZONE ## Check if C++ compiler allows overload of char, int8_t, and uint8_t. AC_CACHE_CHECK([whether ${CXX-g++} allows overload of char, int8_t, and uint8_t], [octave_cv_overload_char_int8_t], [AC_LANG_PUSH(C++) AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ #include void somefunc(char x) {}; void somefunc(int8_t x) {}; void somefunc(uint8_t x) {}; ]])], octave_cv_overload_char_int8_t=yes, octave_cv_overload_char_int8_t=no) AC_LANG_POP(C++) ]) if test $octave_cv_overload_char_int8_t = yes; then AC_DEFINE(OCTAVE_HAVE_OVERLOAD_CHAR_INT8_TYPES, 1, [Define to 1 if C++ allows overload of char, int8_t, and uint8_t types.]) fi ## Check whether encoding of quiet NaN value is conformant to IEEE 754-2008 OCTAVE_IEEE754_QNAN ## Check whether quiet NaN values retain their payload on arithmetic operations OCTAVE_QNAN_WITH_PAYLOAD ## Check whether the C++ STL supports std::from_chars for double precision ## floating-point AC_CACHE_CHECK([whether C++ STL supports std::from_chars for double precision floating-point], [octave_cv_std_from_chars_double], [AC_LANG_PUSH(C++) AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ #include #include void test_from_chars_double () { double num = 0.0; std::string str = "3.14"; const char *chars_start = str.data (); const char *chars_end = chars_start + str.size (); auto [ptr, ec] = std::from_chars (chars_start, chars_end, num); } ]], [[ test_from_chars_double (); ]])], octave_cv_std_from_chars_double=yes, octave_cv_std_from_chars_double=no) AC_LANG_POP(C++) ]) if test $octave_cv_std_from_chars_double = yes; then AC_DEFINE(OCTAVE_HAVE_STD_FROM_CHARS_DOUBLE, 1, [Define to 1 if C++ STL supports std::from_chars for double precision floating-point.]) else ## Check whether fast-float header-only library is available AC_LANG_PUSH(C++) AC_CHECK_HEADER([fast_float/fast_float.h], [have_fast_float=yes], [have_fast_float=no]) AC_LANG_POP(C++) if test $have_fast_float = yes; then AC_DEFINE(OCTAVE_HAVE_FAST_FLOAT, 1, [Define to 1 if fast-float header-only library is available.]) else AC_MSG_ERROR([If the C++ STL does not support std::from_chars for double precision floating-point, the fast-float header-only library needs to be installed.]) fi fi ### Checks for functions and variables. dnl The list of functions is short because we use gnulib to guarantee dnl valid implementations for many common problematic functions. dnl These checks define/undefine HAVE_FUNCNAME in config.h. dnl Code tests HAVE_FUNCNAME and either uses function or provides workaround. dnl Use multiple AC_CHECKs to avoid line continuations '\' in list AC_CHECK_FUNCS([ctermid dup2]) AC_CHECK_FUNCS([endgrent endpwent execvp fork]) AC_CHECK_FUNCS([getegid geteuid getgid getgrent getgrgid getgrnam]) AC_CHECK_FUNCS([getpgrp getpid getppid getpwent getpwuid getuid]) AC_CHECK_FUNCS([isascii kill]) AC_CHECK_FUNCS([lgamma_r lgammaf_r]) AC_CHECK_FUNCS([realpath resolvepath]) AC_CHECK_FUNCS([select setgrent setpwent setsid siglongjmp strsignal]) AC_CHECK_FUNCS([tcgetattr tcsetattr toascii]) AC_CHECK_FUNCS([umask waitpid]) AC_CHECK_FUNCS([_getch _kbhit]) ## Check for math defines such as M_LN2 in math.h AC_CACHE_CHECK([for MATH DEFINES in math.h], [octave_cv_header_math_defines], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[ double x = M_LN2;]])], octave_cv_header_math_defines=yes, octave_cv_header_math_defines=no) ]) if test $octave_cv_header_math_defines = no; then ## Check again and try defining _USE_MATH_DEFINES AC_CACHE_CHECK([whether _USE_MATH_DEFINES needs to be defined], [octave_cv_header__use_math_defines], [save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_USE_MATH_DEFINES" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[ double x = M_LN2;]])], octave_cv_header__use_math_defines=yes, octave_cv_header__use_math_defines=no) CPPFLAGS="$save_CPPFLAGS" ]) if test $octave_cv_header__use_math_defines = yes; then octave_cv_header_math_defines=yes AC_DEFINE(_USE_MATH_DEFINES, 1, [Define to 1 if _USE_MATH_DEFINES is required to get math constants like M_LN2.]) CPPFLAGS="$CPPFLAGS -D_USE_MATH_DEFINES" fi fi if test $octave_cv_header_math_defines = yes; then AC_DEFINE(HAVE_MATH_DEFINES, 1, [Define to 1 if defines such as M_PI are available in math.h]) else AC_MSG_ERROR([MATH DEFINES in math.h such as M_PI are required to build Octave]) fi ## Use Unicode aware functions on Windows case $host_os in msdosmsvc | mingw*) AC_DEFINE(_UNICODE, 1, [Use Unicode CRT functions on Windows by default.]) AC_DEFINE(UNICODE, 1, [Use Windows Unicode API by default.]) ;; esac OCTAVE_UNICODE_EXE_LDFLAGS="" case $host_os in mingw*) OCTAVE_UNICODE_EXE_LDFLAGS="-municode" ;; esac AC_SUBST(OCTAVE_UNICODE_EXE_LDFLAGS) case $host_os in msdosmsvc | mingw*) AC_CACHE_CHECK([whether locale can be set to UTF-8], [octave_cv_windows_utf8_locale], [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ #if defined (__MINGW32__) /* We need to include this header or __MSVCRT_VERSION__ might not be defined to the correct value */ # include <_mingw.h> #endif /* Windows supports UTF-8 locales when using UCRT */ #if ! ((defined (__MSVCRT_VERSION__) && __MSVCRT_VERSION__ == 0x0E00) \ || (defined (_MSC_VER) && _MSC_VER >= 1900)) # error "UTF-8 locale is unsupported" #endif ]])], octave_cv_windows_utf8_locale=yes, octave_cv_windows_utf8_locale=no) ]) if test $octave_cv_windows_utf8_locale = yes; then AC_DEFINE(OCTAVE_HAVE_WINDOWS_UTF8_LOCALE, 1, [Define to 1 if Windows supports UTF-8 locales.]) fi ;; esac ## Windows-specific use of functions case $host_os in msdosmsvc | mingw*) AC_CHECK_FUNCS([setvbuf], [], [AC_MSG_ERROR([Missing function required to build Octave])]) ## We need this for GetDeviceCaps. Should we actually check for ## the function and library? LIBS="-lgdi32 $LIBS" ;; esac ## Windows-specific module used for winqueryreg function case $host_os in msdosmsvc | mingw*) AC_CHECK_HEADERS([psapi.h], [CPPFLAGS="-DPSAPI_VERSION=2 $CPPFLAGS"], [AC_MSG_ERROR([Missing PSAPI required to build for Windows target.])], [#include ]) ;; esac ## Windows-specific module used for canonical UNC paths case $host_os in msdosmsvc | mingw*) AC_CHECK_HEADERS([shlwapi.h], [LIBS="-lshlwapi $LIBS"], [AC_MSG_ERROR([Missing SHLWAPI required to build for Windows target.])], [#include ]) ;; esac ## Cygwin kluge for getrusage. AC_CHECK_FUNCS([getrusage]) case $host_os in cygwin*) AC_DEFINE(RUSAGE_TIMES_ONLY, 1, [Define to 1 if the struct rusage only has time information.]) ;; esac AC_CHECK_FUNCS([getpwnam], [], [AC_CHECK_LIB([sun], [getpwnam])]) AC_FUNC_CLOSEDIR_VOID ## Check return type of matherr AC_CACHE_CHECK([for struct exception in math.h], [octave_cv_func_matherr_type], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[ struct exception *x; x->type; x->name; ]])], octave_cv_func_matherr_type=yes, octave_cv_func_matherr_type=no) ]) if test $octave_cv_func_matherr_type = yes; then AC_DEFINE(EXCEPTION_IN_MATH, 1, [Define to 1 if math.h declares struct exception for matherr.]) fi ## Signal stuff. AC_CHECK_DECLS([sys_siglist], [], [], [[#include /* NetBSD declares sys_siglist in unistd.h. */ #if HAVE_UNISTD_H # include #endif ]]) ### Configure Bison as push or pull parser. ENABLE_COMMAND_LINE_PUSH_PARSER=yes AC_ARG_ENABLE([command-line-push-parser], [AS_HELP_STRING([--disable-command-line-push-parser], [don't use Bison's push parser interface in the command line REPL])], [if test "$enableval" = no; then ENABLE_COMMAND_LINE_PUSH_PARSER=no; fi], []) if test $ENABLE_COMMAND_LINE_PUSH_PARSER = yes; then AC_DEFINE(OCTAVE_ENABLE_COMMAND_LINE_PUSH_PARSER, 1, [Define to 1 to use Bison's push parser interface in the command line REPL.]) fi ### Check for PCRE2 or PCRE regex library, requiring one to exist. have_pcre2=no have_pcre=no save_CPPLAGS="$CPPFLAGS" CPPFLAGS="-DPCRE2_CODE_UNIT_WIDTH=8 $CPPFLAGS" OCTAVE_CHECK_LIB(pcre2, PCRE2, [], [pcre2.h pcre2/pcre2.h], [pcre2_compile_8], [], [], [OCTAVE_CHECK_LIB_PCRE2_OK([have_pcre2=yes], [AC_MSG_ERROR([PCRE2 library must be built with UTF support (--enable-utf)])])], [libpcre2-8]) CPPFLAGS="$save_CPPFLAGS" if test $have_pcre2 = no; then OCTAVE_CHECK_LIB(pcre, PCRE, [], [pcre.h pcre/pcre.h], [pcre_compile], [], [], [OCTAVE_CHECK_LIB_PCRE_OK([have_pcre=yes], [AC_MSG_ERROR([PCRE library must be built with UTF support (--enable-utf)])])], [libpcre]) fi if test $have_pcre2 = yes; then AC_DEFINE(HAVE_PCRE2, 1, [Define to 1 if PCRE2 is available.]) ## Only one of PCRE2 or PCRE is used, so avoid having to define and use ## both PCRE2_* and PCRE_* variables everywhere. PCRE_CPPFLAGS="$PCRE2_CPPFLAGS" PCRE_LDFLAGS="$PCRE2_LDFLAGS" PCRE_LIBS="$PCRE2_LIBS" elif test $have_pcre = yes; then AC_DEFINE(HAVE_PCRE, 1, [Define to 1 if PCRE is available.]) else AC_MSG_ERROR([to build Octave, you must have the PCRE or PCRE2 library and header files installed]) fi ### Check for Qhull library. QHULL_CPPFLAGS= QHULL_LDFLAGS= QHULL_LIBS= OCTAVE_CHECK_LIB(qhull_r, QHull, [Qhull library not found. This will result in loss of functionality for some geometry functions.], [libqhull_r/libqhull_r.h libqhull_r.h], [qh_qhull], [], [], [warn_qhull_r= OCTAVE_CHECK_QHULL_VERSION OCTAVE_CHECK_LIB_QHULL_OK( [AC_DEFINE(HAVE_QHULL, 1, [Define to 1 if Qhull is available.]) QHULL_CPPFLAGS="$QHULL_R_CPPFLAGS" QHULL_LDFLAGS="$QHULL_R_LDFLAGS" QHULL_LIBS="$QHULL_R_LIBS"], [warn_qhull_r="Qhull library found, but does not seem to work properly. This will result in loss of functionality for some geometry functions. Please try recompiling the library with -fno-strict-aliasing."])]) AC_SUBST(QHULL_CPPFLAGS) AC_SUBST(QHULL_LDFLAGS) AC_SUBST(QHULL_LIBS) ### Check for RapidJSON header-only library. check_for_rapidjson=yes AC_ARG_ENABLE([rapidjson], [AS_HELP_STRING([--disable-rapidjson], [disable RapidJSON])], [if test "$enableval" = no; then check_for_rapidjson=no; fi], []) warn_rapidjson= if test $check_for_rapidjson = yes; then AC_LANG_PUSH(C++) AC_CHECK_HEADER([rapidjson/rapidjson.h], [have_rapidjson=yes], [have_rapidjson=no warn_rapidjson="RapidJSON library not found. Octave will not be able to read or write JSON files."]) if test $have_rapidjson = yes; then AC_DEFINE(HAVE_RAPIDJSON, 1, [Define to 1 if RapidJSON is available.]) ## Additional check on RapidJSON library that was found ## Some features of the version of RapidJSON that is packaged in many ## distributions do not build correctly with newer compilers. ## See also: ## https://github.com/Tencent/rapidjson/issues/909 ## https://github.com/Tencent/rapidjson/issues/1718 AC_CACHE_CHECK([for working PrettyWriter in RapidJSON], [octave_cv_rapidjson_has_prettywriter], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[ rapidjson::StringBuffer json; rapidjson::PrettyWriter, rapidjson::UTF8<>, rapidjson::CrtAllocator, rapidjson::kWriteNanAndInfFlag> writer (json); ]])], [octave_cv_rapidjson_has_prettywriter=yes], [octave_cv_rapidjson_has_prettywriter=no]) ]) if test $octave_cv_rapidjson_has_prettywriter = yes; then AC_DEFINE(HAVE_RAPIDJSON_PRETTYWRITER, 1, [Define to 1 if the RapidJSON PrettyWriter function is available.]) else warn_rapidjson='RapidJSON library found, but some features do not seem to work properly. The "PrettyWriter" option in jsonencode will be disabled.' fi fi AC_LANG_POP([C++]) fi if test -n "$warn_rapidjson"; then OCTAVE_CONFIGURE_WARNING([warn_rapidjson]) fi ### Check for readline library. OCTAVE_ENABLE_READLINE ### Check whether functions from libiconv are available. OCTAVE_CHECK_ICONVLIST OCTAVE_CHECK_ICONV_CANONICALIZE ### Check for ZLIB library. OCTAVE_CHECK_LIB(z, ZLIB, [ZLIB library not found. Octave will not be able to load or save compressed data files or HDF5 files.], [zlib.h], [gzclearerr]) ## Also define HAVE_ZLIB if libz is found. if test -n "$Z_LIBS"; then AC_DEFINE(HAVE_ZLIB, 1, [Define to 1 if ZLIB is available.]) fi ### Check for BZIP2 library. OCTAVE_CHECK_LIB(bz2, BZIP2, [BZIP2 library not found. Octave will not be able to compress or decompress bzip2 files.], [bzlib.h], [BZ2_bzCompressInit], [], [], [], [bzip2]) ### Check for HDF5 library. save_CPPFLAGS="$CPPFLAGS" save_LIBS="$LIBS" CPPFLAGS="$Z_CPPFLAGS $CPPFLAGS" LIBS="$Z_LDFLAGS $Z_LIBS $LIBS" OCTAVE_CHECK_LIB(hdf5, HDF5, [HDF5 library not found. Octave will not be able to load or save HDF5 data files.], [hdf5.h], [H5Gget_num_objs], [], [], [warn_hdf5= OCTAVE_CHECK_HDF5_HAS_VER_16_API OCTAVE_CHECK_HDF5_HAS_UTF8_API AC_DEFINE(HAVE_HDF5, 1, [Define to 1 if HDF5 is available and newer than version 1.6.]) if test $have_msvc = yes; then OCTAVE_CHECK_LIB_HDF5_DLL fi ]) CPPFLAGS="$save_CPPFLAGS" LIBS="$save_LIBS" dnl FIXME: Should we check for this now, or wait until some version of HDF5 dnl actually supports this feature? have_hdf5_int2float_conversions=no if test $have_hdf5_int2float_conversions = yes; then AC_DEFINE(HAVE_HDF5_INT2FLOAT_CONVERSIONS, 1, [Define to 1 if/when HDF5 supports automatic conversion between integer and floating-point binary data.]) fi ### Check for FFTW library. dnl Default to Fortran FFTPACK if it is not available. ## Check for FFTW header and library. OCTAVE_CHECK_LIB(fftw3, FFTW3, [FFTW3 library not found. Octave will not be able to perform fft calculations.], [fftw3.h], [fftw_plan_dft_1d]) OCTAVE_CHECK_LIB(fftw3f, FFTW3F, [FFTW3F library not found. Octave will not be able to perform fft calculations.], [fftw3.h], [fftwf_plan_dft_1d]) ## Check command line for the option to disable multi-threaded FFTW. build_fftw_threads=yes AC_ARG_ENABLE([fftw-threads], [AS_HELP_STRING([--disable-fftw-threads], [disable Multi-threaded FFTW])], [if test "$enableval" = no; then build_fftw_threads=no fi], []) dnl Octave is currently unable to use FFTW unless both float and double dnl versions are available. AM_CONDITIONAL([AMCOND_HAVE_FFTW], [test -n "$FFTW3_LIBS" && test -n "$FFTW3F_LIBS"]) if test -n "$FFTW3_LIBS" && test -n "$FFTW3F_LIBS"; then AC_DEFINE(HAVE_FFTW, 1, [Define to 1 if both FFTW3 and FFTW3F libraries are available.]) else dnl --without-fftw3 given, or one of the FFTW3 libs not installed. dnl Don't check for FFTW threads as this is now pointless. build_fftw_threads=no fi ## Check for multithreaded FFTW library. ## Fallback to singlethreaded if not found or disabled. if test $build_fftw_threads = yes; then OCTAVE_CHECK_FFTW_THREADS(fftw3, fftw_plan_with_nthreads) OCTAVE_CHECK_FFTW_THREADS(fftw3f, fftwf_plan_with_nthreads) fi ## Collections of flags. dnl These are here instead of just in the Makefile.am file because we dnl substitute some of them into other source files like mkoctfile. ## Order matters, at least on some systems (Cygwin, for example). FFTW_XCPPFLAGS="$FFTW3_CPPFLAGS $FFTW3F_CPPFLAGS" FFTW_XLDFLAGS="$FFTW3_LDFLAGS $FFTW3F_LDFLAGS" FFTW_XLIBS="$FFTW3_LIBS $FFTW3F_LIBS" AC_SUBST(FFTW_XCPPFLAGS) AC_SUBST(FFTW_XLDFLAGS) AC_SUBST(FFTW_XLIBS) ## Subdirectory of liboctave/external to build if FFTW is not found. FFT_DIR="fftpack" AC_SUBST(FFT_DIR) ### Check for GLPK library and header. save_CPPFLAGS="$CPPFLAGS" save_LIBS="$LIBS" CPPFLAGS="$Z_CPPFLAGS $CPPFLAGS" LIBS="$Z_LDFLAGS $Z_LIBS $LIBS" OCTAVE_CHECK_LIB(glpk, GLPK, [GLPK library not found. The glpk function for solving linear programs will be disabled.], [glpk.h glpk/glpk.h], [glp_simplex], [], [], [warn_glpk= OCTAVE_CHECK_LIB_GLPK_OK( [AC_DEFINE(HAVE_GLPK, 1, [Define to 1 if GLPK is available.])], [warn_glpk="GLPK library found, but does not seem to work properly; disabling glpk function"])]) LIBS="$save_LIBS" CPPFLAGS="$save_CPPFLAGS" ### Check for cURL library existence and functionality. save_CPPFLAGS="$CPPFLAGS" save_LIBS="$LIBS" CPPFLAGS="$Z_CPPFLAGS $CPPFLAGS" LIBS="$Z_LDFLAGS $Z_LIBS $LIBS" OCTAVE_CHECK_LIB(curl, cURL, [cURL library not found. The ftp objects, urlread, and urlwrite functions will be disabled.], [curl/curl.h], [curl_easy_escape], [], [], [], [libcurl]) if test -n "$CURL_LIBS"; then ## Additional check on cURL library that was found AC_CACHE_CHECK([for CURLOPT_DIRLISTONLY in curl/curl.h], [octave_cv_curl_has_curlopt_dirlistonly], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[ curl_easy_setopt ((CURL*)NULL, CURLOPT_DIRLISTONLY, 0); ]])], [octave_cv_curl_has_curlopt_dirlistonly=yes], [octave_cv_curl_has_curlopt_dirlistonly=no]) ]) if test $octave_cv_curl_has_curlopt_dirlistonly = no; then AC_DEFINE(CURLOPT_DIRLISTONLY, CURLOPT_FTPLISTONLY, [Define to the legacy option name if using an older version of cURL.]) fi fi LIBS="$save_LIBS" CPPFLAGS="$save_CPPFLAGS" ### Check for sndfile library. OCTAVE_CHECK_LIB(sndfile, sndfile, [sndfile library not found. The audioinfo, audioread, and audiowrite functions will be disabled.], [sndfile.h], [sf_open], [], [don't use sndfile library, disable audio file I/O], [warn_sndfile= OCTAVE_CHECK_LIB_SNDFILE_OK( [AC_DEFINE(HAVE_SNDFILE, 1, [Define to 1 if sndfile is available.]) OCTAVE_CHECK_LIB_SNDFILE_FORMATS], [warn_sndfile="sndfile library found, but does not seem to work properly; disabling audio file I/O functions"])]) ### Check for PortAudio library. OCTAVE_CHECK_LIB(portaudio, PortAudio, [PortAudio library not found. The audioplayer, audiorecorder, and audiodevinfo functions will be disabled.], [portaudio.h], [Pa_GetDeviceCount], [], [don't use PortAudio library, disable audio playback and recording], [], [portaudio-2.0]) ### Check for either of GraphicsMagick++/ImageMagick++ libraries. check_magick=yes use_magick=no AC_ARG_WITH([magick], [AS_HELP_STRING([--with-magick=LIB], [select library to use for image I/O (options: GraphicsMagick++ (default) or ImageMagick++)]) dnl Second help string must not be indented for correct alignment AS_HELP_STRING([--without-magick], [don't use Magick library, disable imread, imwrite, imformats, imfinfo])], [case $withval in yes | "") magick="GraphicsMagick++" ;; no) check_magick=no ;; *) magick="$withval" ;; esac], [magick="GraphicsMagick++"]) if test $check_magick = yes; then MAGICK_CPPFLAGS= MAGICK_LDFLAGS= MAGICK_LIBS= PKG_CHECK_EXISTS([$magick], [ dnl We are using --cflags now instead of --cflags-only-I because some dnl Graphics/ImageMagick++ packages will provide -D options for dnl MAGICKCORE_HDRI_ENABLE and MAGICKCORE_QUANTUM_DEPTH that are needed dnl for building with a particular verison of the library. If there dnl are other flags in the output from pkg-config --cflags that cause dnl trouble, then we may need to go back to using --cflags-only-I and dnl have a configure test to determine the proper definitions of dnl MAGICKCORE_HDRI_ENABLE and MAGICKCORE_QUANTUM_DEPTH. dnl See also bug #49563. MAGICK_CPPFLAGS="$($PKG_CONFIG --cflags $magick | $SED -e 's/^ *$//')" MAGICK_LDFLAGS="$($PKG_CONFIG --libs-only-L $magick | $SED -e 's/^ *$//')" MAGICK_LIBS="$($PKG_CONFIG --libs-only-l $magick | $SED -e 's/^ *$//')" warn_magick="$magick library fails tests. The imread, imwrite, and imfinfo functions for reading and writing image files will not be fully functional." save_CPPFLAGS="$CPPFLAGS" save_LIBS="$LIBS" CPPFLAGS="$MAGICK_CPPFLAGS $CPPFLAGS" LIBS="$MAGICK_LDFLAGS $MAGICK_LIBS $LIBS" AC_LANG_PUSH(C++) AC_CHECK_HEADER([Magick++.h], [ AC_CACHE_CHECK([for Magick::ColorRGB and Magick::PixelPacket in Magick++.h], [octave_cv_func_magick], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[ Magick::ColorRGB c; Magick::PixelPacket pix; ]])], octave_cv_func_magick=yes, octave_cv_func_magick=no) ]) if test $octave_cv_func_magick = yes; then use_magick=yes warn_magick= fi ]) AC_LANG_POP(C++) CPPFLAGS="$save_CPPFLAGS" LIBS="$save_LIBS" ], [use_magick=no warn_magick="$magick library not found. The imread, imwrite, and imfinfo functions for reading and writing image files will not be fully functional."]) fi if test $use_magick = yes; then AC_DEFINE(HAVE_MAGICK, 1, [Define to 1 if Graphics/ImageMagick++ is available.]) else if test -n "$warn_magick"; then OCTAVE_CONFIGURE_WARNING([warn_magick]) fi MAGICK_CPPFLAGS= MAGICK_LDFLAGS= MAGICK_LIBS= fi AC_SUBST(MAGICK_CPPFLAGS) AC_SUBST(MAGICK_LDFLAGS) AC_SUBST(MAGICK_LIBS) ### Check for X11 libraries. AC_PATH_X if test "$have_x" = yes; then AC_DEFINE(HAVE_X_WINDOWS, 1, [Define to 1 if X11 is available.]) if test "$x_includes" != "NONE"; then X11_INCFLAGS="$x_includes" fi AC_SUBST(X11_INCFLAGS) if test -z "$x_libraries"; then AC_CHECK_LIB([X11], XrmInitialize, [X11_LIBS="-lX11"], [X11_LIBS=]) elif test "$x_libraries" != "NONE"; then AC_CHECK_LIB([X11], XrmInitialize, [X11_LIBS="-L$x_libraries -lX11"], [X11_LIBS=], "-L$x_libraries") fi AC_SUBST(X11_LIBS) fi ### Check for Wayland client library octave_cv_no_window_manager_warn= case $host_os in msdosmsvc | mingw* | cygwin* | darwin*) # do not warn about missing X11 or Wayland client on Windows or macOS ;; *) if test "$have_x" != yes; then # do not warn about Wayland client if the X11 libraries have been found octave_cv_no_window_manager_warn="Neither X11 nor Wayland client libraries found." fi ;; esac OCTAVE_CHECK_LIB(wayland-client, Wayland client, [$octave_cv_no_window_manager_warn], [wayland-client.h], [wl_display_connect]) ### Check for the Carbon framework on macOS systems. OCTAVE_HAVE_FRAMEWORK([Carbon], [[#include ]], [[CGMainDisplayID ()]], [have_framework_carbon=yes], [have_framework_carbon=no]) if test $have_framework_carbon = yes; then AC_DEFINE(HAVE_FRAMEWORK_CARBON, 1, [Define to 1 if framework CARBON is available.]) CARBON_LIBS="-framework Carbon" AC_MSG_NOTICE([adding -framework Carbon to CARBON_LIBS]) AC_SUBST(CARBON_LIBS) fi ## Check for the CGDisplayBitsPerPixel function. if test $have_framework_carbon = yes; then OCTAVE_CARBON_CGDISPLAYBITSPERPIXEL fi ### Check for OpenGL and helper libraries used by OpenGL graphics renderer. check_opengl=yes AC_ARG_WITH([opengl], [AS_HELP_STRING([--without-opengl], [don't use OpenGL libraries, disable OpenGL graphics])], [if test x"$withval" = xno; then check_opengl=no fi]) ## Check for OpenGL library if test $check_opengl = yes; then OCTAVE_CHECK_LIB_OPENGL if test -z "$OPENGL_LIBS"; then warn_opengl_libs="OpenGL libs (GL and GLU) not found. OpenGL graphics will be disabled." OCTAVE_CONFIGURE_WARNING([warn_opengl_libs]) fi fi ## Check for FreeType 2 library check_freetype=yes warn_freetype= AC_ARG_WITH([freetype], [AS_HELP_STRING([--without-freetype], [don't use FreeType library, OpenGL graphics will not be fully functional])], [if test x"$withval" = xno; then check_freetype=no fi]) if test $check_freetype = yes; then PKG_CHECK_MODULES([FT2], [freetype2], [ min_ft2_version=9.03 AC_MSG_CHECKING([for FreeType2 version >= $min_ft2_version]) $PKG_CONFIG freetype2 --atleast-version=$min_ft2_version ac_status=$? if test "$ac_status" = 0; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_FREETYPE, 1, [Define to 1 if Freetype is available.]) save_LIBS="$LIBS" LIBS="$FT2_LIBS $LIBS" AC_CHECK_FUNCS([FT_Reference_Face]) LIBS="$save_LIBS" else AC_MSG_RESULT(no) warn_freetype="FreeType library >= 9.03 not found. OpenGL graphics will not be fully functional." fi], [warn_freetype="FreeType library not found. OpenGL graphics will not be fully functional."]) fi if test -n "$warn_freetype"; then FT2_CFLAGS= FT2_LIBS= OCTAVE_CONFIGURE_WARNING([warn_freetype]) else dnl Alias CPPFLAGS to CFLAGS. This is closer to the true meaning dnl of `pkg-config --cflags` output. FT2_CPPFLAGS="$FT2_CFLAGS" AC_SUBST(FT2_CPPFLAGS) fi ## Check for fontconfig library OCTAVE_CHECK_LIB(fontconfig, fontconfig, [Fontconfig library not found. OpenGL graphics will not be fully functional.], [fontconfig.h fontconfig/fontconfig.h], [FcInit], [], [don't use fontconfig library, OpenGL graphics will not be fully functional]) ### GUI/Qt related tests. if test -z ${QT_VERSIONS+x}; then ## If QT_VERSIONS is unset, choose default depending on compiler support. if test $HAVE_CXX17 = 0; then dnl Qt6 requires support for C++17. QT_VERSIONS="5" else QT_VERSIONS="6 5" fi fi check_qscintilla=yes AC_ARG_WITH([qscintilla], [AS_HELP_STRING([--without-qscintilla], [disable QScintilla editor])], [if test x"$withval" = xno; then check_qscintilla=no fi]) OCTAVE_CHECK_QT([$QT_VERSIONS]) ## Default terminal font for the GUI. case $host_os in mingw* | msdosmsvc) DEFAULT_TERMINAL_FONT="Lucida Console" ;; *) DEFAULT_TERMINAL_FONT="Courier" ;; esac DEFAULT_TERMINAL_FONT_SIZE=10 AC_SUBST(DEFAULT_TERMINAL_FONT) AC_SUBST(DEFAULT_TERMINAL_FONT_SIZE) ### Check for FLTK library. check_fltk=yes build_fltk_graphics=no AC_ARG_WITH([fltk], [AS_HELP_STRING([--without-fltk], [don't use FLTK libraries, disable OpenGL graphics with FLTK widgets])], [if test x"$withval" = xno; then check_fltk=no fi]) FLTK_CPPFLAGS= FLTK_LDFLAGS= FLTK_LIBS= if test $check_fltk = yes; then AC_ARG_WITH([fltk-prefix], [AS_HELP_STRING([--with-fltk-prefix=PFX], [prefix where FLTK is installed])], [fltk_prefix="$withval"], [fltk_prefix=""]) AC_ARG_WITH([fltk-exec-prefix], [AS_HELP_STRING([--with-fltk-exec-prefix=PFX], [exec prefix where FLTK is installed])], [fltk_exec_prefix="$withval"], [fltk_exec_prefix=""]) if test "x$fltk_exec_prefix" != x; then fltk_args="$fltk_args --exec-prefix=$fltk_exec_prefix" if test "x${FLTK_CONFIG+set}" != xset ; then FLTK_CONFIG="$fltk_exec_prefix/bin/fltk-config" fi fi if test "x$fltk_prefix" != x; then fltk_args="$fltk_args --prefix=$fltk_prefix" if test x${FLTK_CONFIG+set} != xset ; then FLTK_CONFIG="$fltk_prefix/bin/fltk-config" fi fi AC_PATH_PROG([FLTK_CONFIG], [fltk-config], [no]) warn_fltk_config= warn_fltk_opengl= if test "$FLTK_CONFIG" = no; then warn_fltk_config="FLTK config script not found. FLTK toolkit will be disabled." OCTAVE_CONFIGURE_WARNING([warn_fltk_config]) else ## Only include -I options in FLTK_CPPFLAGS fltk_cflags=`$FLTK_CONFIG $fltkconf_args --use-gl --cflags` for fltk_option in $fltk_cflags; do case $fltk_option in -I*) FLTK_CPPFLAGS="$FLTK_CPPFLAGS $fltk_option" ;; esac done FLTK_CPPFLAGS=`echo "$FLTK_CPPFLAGS" | $SED -e 's/^ \+//'` ## Split -L and -l options into FLTK_LDFLAGS and FLTK_LIBS fltk_ldflags=`$FLTK_CONFIG $fltkconf_args --use-gl --ldflags` for fltk_option in $fltk_ldflags; do case $fltk_option in -l*) FLTK_LIBS="$FLTK_LIBS $fltk_option" ;; *) FLTK_LDFLAGS="$FLTK_LDFLAGS $fltk_option" ;; esac done FLTK_LIBS=`echo "$FLTK_LIBS" | $SED -e 's/^ \+//'` FLTK_LDFLAGS=`echo "$FLTK_LDFLAGS" | $SED -e 's/^ \+//'` case $host_os in mingw*) FLTK_LDFLAGS=`echo $FLTK_LDFLAGS | $SED -e 's/-mwindows//g'` ;; esac AC_LANG_PUSH(C++) AC_CACHE_CHECK([for OpenGL support in FLTK], [octave_cv_fltk_opengl_support], [save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CFLAGS $FLTK_CPPFLAGS" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[ int nothing = 0; ]])], octave_cv_fltk_opengl_support=yes, octave_cv_fltk_opengl_support=no) CPPFLAGS="$save_CPPFLAGS" ]) if test $octave_cv_fltk_opengl_support = no; then warn_fltk_opengl="FLTK does not have OpenGL support. OpenGL graphics with FLTK widgets will be disabled." else build_fltk_graphics=yes AC_DEFINE(HAVE_FLTK, 1, [Define to 1 if FLTK is available.]) fi AC_LANG_POP(C++) if test -n "$warn_fltk_opengl"; then OCTAVE_CONFIGURE_WARNING([warn_fltk_opengl]) fi fi fi AC_SUBST(FLTK_CPPFLAGS) AC_SUBST(FLTK_LDFLAGS) AC_SUBST(FLTK_LIBS) ### Final determination of whether OpenGL graphics features should ### be built. Note that there is no longer a way to build the Qt GUI ### without also building a Qt widget that uses OpenGL graphics so we ### check $build_qt_gui instead of $build_qt_graphics here. if test $build_qt_gui = no && test $build_fltk_graphics = no; then opengl_graphics=no else opengl_graphics=yes fi ## Check for gl2ps which is required for printing with OpenGL graphics. if test $opengl_graphics = yes; then AC_CHECK_HEADERS([gl2ps.h], [GL2PS_LIBS="-lgl2ps"], [warn_gl2ps="gl2ps library not found. Printing of OpenGL graphics will be disabled."]) if test -n "$warn_gl2ps"; then OCTAVE_CONFIGURE_WARNING([warn_gl2ps]) else save_LIBS="$LIBS" LIBS="$GL2PS_LIBS $LIBS" AC_CHECK_FUNCS([gl2psLineJoin]) LIBS="$save_LIBS" fi AC_SUBST(GL2PS_LIBS) fi ### Use the system-wide installation of GNU FreeFont if the user requests it. dnl By default, Octave includes its own copy of the FreeSans font which it dnl installs in its own directory for use as a fallback default font. If this dnl configuration option is used, then do not install our own copy of the fonts dnl and assume they can be found in the provided system directory. SYSTEM_FREEFONT_DIR= AC_ARG_WITH([system-freefont], [AS_HELP_STRING([--with-system-freefont=DIR], [use FreeSans fonts in DIR (default: install and use internal copy)])]) case $with_system_freefont in no | "") SYSTEM_FREEFONT_DIR= ;; yes) AC_MSG_ERROR([directory argument required for --with-system-freefont]) ;; *) SYSTEM_FREEFONT_DIR=$with_system_freefont ;; esac if test -n "$SYSTEM_FREEFONT_DIR"; then AC_MSG_NOTICE([configuring Octave to use system fonts in $SYSTEM_FREEFONT_DIR]) AC_DEFINE_UNQUOTED([SYSTEM_FREEFONT_DIR], ["$SYSTEM_FREEFONT_DIR"], [Define this to be the system directory containing the GNU FreeFont fonts.]) fi AM_CONDITIONAL([AMCOND_INSTALL_INTERNAL_FONT_FILES], [test -z "$SYSTEM_FREEFONT_DIR"]) ### Check for qrupdate library. dnl No need to adjust FFLAGS because only link is attempted. dnl Must supply proper LIBS, however. save_LIBS="$LIBS" LIBS="$LAPACK_LIBS $BLAS_LIBS $FLIBS $LIBS" OCTAVE_CHECK_LIB(qrupdate, qrupdate, [qrupdate not found. The QR & Cholesky updating functions will be slow.], [], [sqr1up], [Fortran 77], [don't use qrupdate, disable QR & Cholesky updating functions]) ## Additional check to see if qrupdate lib found supports LU updates if test -n "$QRUPDATE_LIBS"; then AC_CACHE_CHECK([for slup1up in $QRUPDATE_LIBS], [octave_cv_func_slup1up], [LIBS="$LIBS $QRUPDATE_LIBS" AC_LANG_PUSH([Fortran 77]) AC_LINK_IFELSE([AC_LANG_CALL([], [slup1up])], octave_cv_func_slup1up=yes, octave_cv_func_slup1up=no) AC_LANG_POP([Fortran 77]) ]) if test $octave_cv_func_slup1up = yes; then AC_DEFINE(HAVE_QRUPDATE_LUU, 1, [Define to 1 if qrupdate supports LU updates.]) fi fi LIBS="$save_LIBS" if test $ENABLE_64 = yes; then CHOLMOD_TAG="_l_" CXSPARSE_TAG="_dl_" UMFPACK_TAG="_zl_" else CHOLMOD_TAG="_" CXSPARSE_TAG="_di_" UMFPACK_TAG="_zi_" fi ## On some systems, explicitly linking with -lsuitesparseconfig is needed ## when using SuiteSparse libraries. If so, the checks below for specific ## SuiteSparse libraries may fail without it. Include LIB_CLOCK_GETTIME (from ## gnulib) on systems where needed. save_LIBS="$LIBS" LIBS="$LIB_CLOCK_GETTIME $LIBS" OCTAVE_CHECK_LIB(suitesparseconfig, SUITESPARSECONFIG, [], [], [SuiteSparse_time], [], [don't link directly with suitesparseconfig library], [], SuiteSparse_config) LIBS="$save_LIBS" if test -n "$SUITESPARSECONFIG_LIBS" && test -n "$LIB_CLOCK_GETTIME"; then SUITESPARSECONFIG_LIBS="$SUITESPARSECONFIG_LIBS $LIB_CLOCK_GETTIME" fi ## Save and restore LIBS after all checks for SuiteSparse libraries. suitesparse_save_LIBS="$LIBS" LIBS="$SUITESPARSECONFIG_LIBS $LIBS" ### Check for AMD library. OCTAVE_CHECK_LIB(amd, AMD, [AMD library not found. This will result in some lack of functionality for sparse matrices.], [amd.h suitesparse/amd.h amd/amd.h], [amd_postorder], [], [don't use AMD library, disable some sparse matrix functionality], [], AMD) ### Check for CAMD library. OCTAVE_CHECK_LIB(camd, CAMD, [CAMD library not found. This will result in some lack of functionality for sparse matrices.], [camd.h suitesparse/camd.h camd/camd.h], [camd_postorder], [], [don't use CAMD library, disable some sparse matrix functionality], [], CAMD) ### Check for COLAMD library. OCTAVE_CHECK_LIB(colamd, COLAMD, [COLAMD library not found. This will result in some lack of functionality for sparse matrices.], [colamd.h suitesparse/colamd.h colamd/colamd.h], [colamd], [], [don't use COLAMD library, disable some sparse matrix functionality], [], COLAMD) ### Check for CCOLAMD library. OCTAVE_CHECK_LIB(ccolamd, CCOLAMD, [CCOLAMD library not found. This will result in some lack of functionality for sparse matrices.], [ccolamd.h suitesparse/ccolamd.h ccolamd/ccolamd.h], [ccolamd], [], [don't use CCOLAMD library, disable some sparse matrix functionality], [], CCOLAMD) ### Check for CHOLMOD library. dnl If your cholmod library requires cblas, then you will need to configure dnl with --with-cholmod="-lcholmod -lcblas". save_LIBS="$LIBS" LIBS="$COLAMD_LDFLAGS $COLAMD_LIBS $AMD_LDFLAGS $AMD_LIBS $LAPACK_LIBS $BLAS_LIBS $FLIBS $LIBS" OCTAVE_CHECK_LIB(cholmod, CHOLMOD, [CHOLMOD library not found. This will result in some lack of functionality for sparse matrices.], [cholmod.h suitesparse/cholmod.h cholmod/cholmod.h], [cholmod${CHOLMOD_TAG}start], [], [don't use CHOLMOD library, disable some sparse matrix functionality], [], CHOLMOD) LIBS="$save_LIBS" ### Check for SPQR library. save_LIBS="$LIBS" LIBS="$CHOLMOD_LIBS $LIBS" OCTAVE_CHECK_LIB(spqr, SPQR, [SPQR library not found. This will result in some lack of functionality for sparse matrices.], [SuiteSparseQR.hpp suitesparse/SuiteSparseQR.hpp], [SuiteSparseQR_C], [C++], [don't use SPQR library, disable some sparse matrix functionality], [], SPQR) LIBS="$save_LIBS" ### Check for CXSparse library. OCTAVE_CHECK_LIB(cxsparse, CXSparse, [CXSparse library not found. This will result in some lack of functionality for sparse matrices.], [cs.h suitesparse/cs.h cxsparse/cs.h], [cs${CXSPARSE_TAG}sqr], [C++], [don't use CXSparse library, disable some sparse matrix functionality], [], CXSparse) if test -n "$CXSPARSE_LIBS"; then ## Additional check for CXSparse version >= 2.2 if test $octave_cv_lib_cxsparse = yes; then OCTAVE_CHECK_CXSPARSE_VERSION_OK if test $octave_cv_cxsparse_version_ok = no; then AC_MSG_ERROR([CXSparse library is too old (< version 2.2). Upgrade CXSparse (SuiteSparse) or configure Octave with --without-cxsparse"]) fi fi fi ### Check for UMFPACK library. save_LIBS="$LIBS" save_CPPFLAGS="$CPPFLAGS" LIBS="$AMD_LDFLAGS $AMD_LIBS $BLAS_LIBS $FLIBS $LIBS" CPPFLAGS="$AMD_CPPFLAGS $CPPFLAGS" OCTAVE_CHECK_LIB([umfpack], UMFPACK, [UMFPACK not found. This will result in some lack of functionality for sparse matrices.], [umfpack.h suitesparse/umfpack.h umfpack/umfpack.h], [umfpack${UMFPACK_TAG}get_determinant], [], [don't use UMFPACK, disable some sparse matrix functionality], [], UMFPACK) CPPFLAGS="$save_CPPFLAGS" LIBS="$save_LIBS" if test -z "$UMFPACK_LIBS"; then ## Invalidate the cache and try again with -lcblas. $as_unset ac_cv_lib_umfpack_umfpack${UMFPACK_TAG}get_determinant $as_unset octave_cv_lib_umfpack save_LIBS="$LIBS" LIBS="-lcblas $AMD_LDFLAGS $AMD_LIBS $BLAS_LIBS $FLIBS $LIBS" OCTAVE_CHECK_LIB([umfpack], UMFPACK, [UMFPACK not found. This will result in some lack of functionality for sparse matrices.], [umfpack.h suitesparse/umfpack.h umfpack/umfpack.h], [umfpack${UMFPACK_TAG}get_determinant], [], [don't use UMFPACK, disable some sparse matrix functionality], [], UMFPACK) if test -n "$UMFPACK_LIBS"; then UMFPACK_LIBS="$UMFPACK_LIBS -lcblas" fi LIBS="$save_LIBS" fi ### Check for KLU library and header. OCTAVE_CHECK_LIB(klu, KLU, [KLU library not found. This will result in some lack of functionality for sparse matrices.], [klu.h suitesparse/klu.h klu/klu.h], [klu_solve], [], [don't use KLU library, disable some sparse matrix functionality], [], KLU) ## Restore LIBS after all suitesparse configuration tests LIBS="$suitesparse_save_LIBS" ## Collections of flags. dnl These are here instead of just in the Makefile.am file because we dnl substitute some of them into other source files like mkoctfile. ## Order matters, at least on some systems (Cygwin, for example). SPARSE_XCPPFLAGS="$CHOLMOD_CPPFLAGS $UMFPACK_CPPFLAGS $AMD_CPPFLAGS $CAMD_CPPFLAGS $COLAMD_CPPFLAGS $CCOLAMD_CPPFLAGS $CXSPARSE_CPPFLAGS $SPQR_CPPFLAGS" SPARSE_XLDFLAGS="$CHOLMOD_LDFLAGS $UMFPACK_LDFLAGS $AMD_LDFLAGS $CAMD_LDFLAGS $COLAMD_LDFLAGS $CCOLAMD_LDFLAGS $CXSPARSE_LDFLAGS $SPQR_LDFLAGS" SPARSE_XLIBS="$CHOLMOD_LIBS $UMFPACK_LIBS $AMD_LIBS $CAMD_LIBS $COLAMD_LIBS $CCOLAMD_LIBS $CXSPARSE_LIBS $SUITESPARSECONFIG_LIBS $SPQR_LIBS" AC_SUBST(SPARSE_XCPPFLAGS) AC_SUBST(SPARSE_XLDFLAGS) AC_SUBST(SPARSE_XLIBS) ### Check sizes of integer types that are used for indexing for SuiteSparse. OCTAVE_CHECK_SUITESPARSE_SIZEOF_IDX_TYPES ## Check for UMFPACK separately split complex matrix and RHS. if test -n "$UMFPACK_LIBS"; then save_CPPFLAGS="$CPPFLAGS" save_LDFLAGS="$LDFLAGS"; save_LIBS="$LIBS"; CPPFLAGS="$SPARSE_XCPPFLAGS $CPPFLAGS" LDFLAGS="$SPARSE_XLDFLAGS $LDFLAGS" LIBS="$SPARSE_XLIBS $LAPACK_LIBS $BLAS_LIBS $FLIBS $LIBS $xtra_libs" OCTAVE_UMFPACK_SEPARATE_SPLIT CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" fi ### Check for SUNDIALS NVECTOR serial library and header. OCTAVE_CHECK_LIB(sundials_nvecserial, [SUNDIALS NVECTOR], [SUNDIALS NVECTOR serial library not found. The solvers ode15i and ode15s will be disabled.], [nvector/nvector_serial.h], [N_VNew_Serial], [C++], [don't use SUNDIALS NVECTOR library, disable solvers ode15i and ode15s]) ### Check for SUNDIALS IDA library and header. if test -n "$SUNDIALS_NVECSERIAL_LIBS"; then save_CPPFLAGS="$CPPFLAGS" save_LDFLAGS="$LDFLAGS" save_LIBS="$LIBS" LIBS="$SUNDIALS_NVECSERIAL_LIBS $KLU_LIBS $BLAS_LIBS $FLIBS $LIBS" LDFLAGS="$SUNDIALS_NVECSERIAL_LDFLAGS $KLU_LDFLAGS $BLAS_LDFLAGS $LDFLAGS" CPPFLAGS="$SUNDIALS_NVECSERIAL_CPPFLAGS $KLU_CPPFLAGS $BLAS_CPPFLAGS $CPPFLAGS" OCTAVE_CHECK_LIB(sundials_ida, [SUNDIALS IDA], [SUNDIALS IDA library not found. The solvers ode15i and ode15s will be disabled.], [ida.h ida/ida.h], [IDAInit], [], [don't use SUNDIALS IDA library, disable solvers ode15i and ode15s]) CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" fi if test -n "$SUNDIALS_IDA_LIBS" \ && test -n "$SUNDIALS_NVECSERIAL_LIBS"; then octave_have_sundials_libs=yes else octave_have_sundials_libs=no fi ### Check for SUNDIALS library features, some required, some optional. if test "x$octave_have_sundials_libs" == xyes; then CPPFLAGS="$SUNDIALS_IDA_CPPFLAGS $SUNDIALS_NVECSERIAL_CPPFLAGS $KLU_CPPFLAGS $BLAS_CPPFLAGS $CPPFLAGS" LDFLAGS="$SUNDIALS_IDA_LDFLAGS $SUNDIALS_NVECSERIAL_LDFLAGS $KLU_LDFLAGS $BLAS_LDFLAGS $LDFLAGS" LIBS="$SUNDIALS_IDA_LIBS $SUNDIALS_NVECSERIAL_LIBS $KLU_LIBS $BLAS_LIBS $FLIBS $LIBS" if test -z "$warn_sundials_nvecserial" && test -z "$warn_sundials_ida"; then dnl Any of the following tests could determine that SUNDIALS is dnl incompatible and should be disabled. In that event, they all populate dnl the same variable with appropriate warning messages, and further tests dnl should be skipped if a warning message has already been generated that dnl SUNDIALS is disabled. warn_sundials_disabled= if test -z "$warn_sundials_disabled"; then OCTAVE_CHECK_SUNDIALS_COMPATIBLE_API fi if test -z "$warn_sundials_disabled"; then OCTAVE_CHECK_SUNDIALS_SUNREALTYPE OCTAVE_CHECK_SUNDIALS_SIZEOF_REALTYPE fi if test -z "$warn_sundials_disabled"; then OCTAVE_CHECK_SUNDIALS_SUNLINSOL_DENSE fi dnl The following tests determine whether certain optional features are dnl present in the SUNDIALS libraries, but will not disable using SUNDIALS. if test -z "$warn_sundials_disabled"; then OCTAVE_CHECK_SUNDIALS_SUNLINSOL_KLU fi fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" fi dnl Define this way instead of with an #if in oct-conf-post-private.h so that dnl the build features script will get the correct value. dnl dnl FIXME: The test on the sunlinsol_klu.h header is a bit of a kluge. dnl How can we do a better job here? Do we need to disable sundials dnl any tests fail, or can we fix __ode15__.cc so that it still partially dnl works when some things are missing (for example, KLU)? if test "x$octave_have_sundials_libs" == xyes; then if test "x$octave_cv_sundials_sunlinsol_dense" = xyes \ && test "x$octave_cv_sundials_realtype_is_double" = xyes \ && test "x$octave_have_sundials_compatible_api" = xyes; then AC_DEFINE(HAVE_SUNDIALS, 1, [Define to 1 if SUNDIALS is available.]) ## Options needed to build with SUNDIALS and its dependencies. SUNDIALS_XCPPFLAGS="$SUNDIALS_IDA_CPPFLAGS $SUNDIALS_SUNLINSOLKLU_CPPFLAGS $SUNDIALS_NVECSERIAL_CPPFLAGS $SUNDIALS_CORE_CPPFLAGS $KLU_CPPFLAGS" SUNDIALS_XLDFLAGS="$SUNDIALS_IDA_LDFLAGS $SUNDIALS_SUNLINSOLKLU_LDFLAGS $SUNDIALS_NVECSERIAL_LDFLAGS $SUNDIALS_CORE_LDFLAGS $KLU_LDFLAGS" SUNDIALS_XLIBS="$SUNDIALS_IDA_LIBS $SUNDIALS_SUNLINSOLKLU_LIBS $SUNDIALS_NVECSERIAL_LIBS $SUNDIALS_CORE_LIBS $KLU_LIBS" else SUNDIALS_IDA_CPPFLAGS= SUNDIALS_IDA_LDFLAGS= SUNDIALS_IDA_LIBS= SUNDIALS_SUNLINSOLKLU_CPPFLAGS= SUNDIALS_SUNLINSOLKLU_LDFLAGS= SUNDIALS_SUNLINSOLKLU_LIBS= SUNDIALS_NVECSERIAL_CPPFLAGS= SUNDIALS_NVECSERIAL_LDFLAGS= SUNDIALS_NVECSERIAL_LIBS= SUNDIALS_CORE_CPPFLAGS= SUNDIALS_CORE_LDFLAGS= SUNDIALS_CORE_LIBS= SUNDIALS_XCPPFLAGS= SUNDIALS_XLDFLAGS= SUNDIALS_XLIBS= dnl Emit a fallback warning message in case SUNDIALS has been disabled for dnl some reason that hasn't already generated one of these known warnings. if test -z "$warn_sundials_nvecserial" && test -z "$warn_sundials_ida" \ && test -z "$warn_sundials_disabled"; then warn_sundials_disabled="SUNDIALS libraries are missing some feature. The solvers ode15i and ode15s will be disabled." OCTAVE_CONFIGURE_WARNING([warn_sundials_disabled]) fi fi fi AC_SUBST(SUNDIALS_XCPPFLAGS) AC_SUBST(SUNDIALS_XLDFLAGS) AC_SUBST(SUNDIALS_XLIBS) ### Check for ARPACK library. save_LIBS="$LIBS" LIBS="$LAPACK_LIBS $BLAS_LIBS $FLIBS $LIBS" OCTAVE_CHECK_LIB([arpack], ARPACK, [ARPACK not found. The eigs function will be disabled.], [], [dseupd], [Fortran 77], [don't use the ARPACK library, disable eigs function], [warn_arpack= OCTAVE_CHECK_LIB_ARPACK_OK_1( [AC_DEFINE(HAVE_ARPACK, 1, [Define to 1 if ARPACK is available.])], [warn_arpack="ARPACK library found, but does not seem to work properly; disabling eigs function"]) if test -n "$ARPACK_LIBS"; then OCTAVE_CHECK_LIB_ARPACK_OK_2([], [AC_MSG_WARN([ARPACK library found, but is buggy; upgrade library (>= v3.3.0) for better results])]) fi ]) LIBS="$save_LIBS" ### Check for Java. build_java=yes AC_ARG_ENABLE([java], [AS_HELP_STRING([--disable-java], [disable Java interface])], [if test "$enableval" = no; then build_java=no fi], []) AC_ARG_WITH([java-homedir], [AS_HELP_STRING([--with-java-homedir=DIR], [Java JDK directory in DIR])], [JAVA_HOMEDIR="$withval"]) AC_ARG_WITH([java-includedir], [AS_HELP_STRING([--with-java-includedir=DIR], [look for java include file in DIR])], [JAVA_CPPFLAGS="$withval"], [JAVA_CPPFLAGS=""]) AC_ARG_WITH([java-libdir], [AS_HELP_STRING([--with-java-libdir=DIR], [look for java library libjvm in DIR])], [JAVA_LDPATH="$withval"], [JAVA_LDPATH=""]) ## Grab JAVA_HOME from environment variable if it exists AC_ARG_VAR([JAVA_HOME], [path to Java JDK installation]) ## But --with-java-homedir option overrides environment variable if test -n "$JAVA_HOMEDIR"; then JAVA_HOME=$JAVA_HOMEDIR fi JAVA= JAVAC= JAR= JAVA_LIBS= dnl Fake loop so that "break" can be used to skip code blocks. warn_java= while test $build_java = yes do ## Unset build_java. Variable is set only if all configuration tests pass. build_java=no ## Warn if JAVA_HOME is unset. It is *strongly* advised to specify JAVA_HOME. if test -z "$JAVA_HOME"; then warn_java_home="JAVA_HOME environment variable not initialized. Auto-detection will proceed but is unreliable." OCTAVE_CONFIGURE_WARNING([warn_java_home]) fi ## Search for a viable Java executable. if test -z "$JAVA_HOME"; then JAVA_PATH="$PATH" else JAVA_PATH="${JAVA_HOME}$PATH_SEPARATOR${JAVA_HOME}/jre/bin$PATH_SEPARATOR${JAVA_HOME}/bin$PATH_SEPARATOR${JAVA_HOME}/../bin$PATH_SEPARATOR${PATH}" fi AC_PATH_PROG(JAVA, java, [], [$JAVA_PATH]) if test -z "$JAVA"; then warn_java="No Java executable found. Octave will not be able to call Java methods." break fi if test -z "$JAVA_HOME"; then ## Find JAVA_HOME for JRE by running java and querying properties. java_tmp_home=`"$JAVA" -classpath ${srcdir}/build-aux OctJavaQry JAVA_HOME` ## Strip directory back to top-level installation dir (JAVA_HOME for JDK). JAVA_HOME=`echo $java_tmp_home | $SED -e 's|[[/\\]]bin[[/\\]]\?$||' | $SED -e 's|[[/\\]]jre[[/\\]]\?$||'` fi case $build_os in mingw* | msdosmsvc) ## Under Win32 platform, we want JAVA_HOME to be in MSYS format; that is, ## without colon and backslashes, as it is also used as path separator. ## Use quoted paths as Java may be installed in a path with whitespaces ## (e.g., C:\Program Files\Java\...). if test -n "$JAVA_HOME"; then JAVA_HOME=`cd "$JAVA_HOME" && pwd` fi ;; esac ## Amend search path for JAVAC and JAR. if test -z "$JAVA_HOME"; then JAVA_PATH="$PATH" else JAVA_PATH="${JAVA_HOME}$PATH_SEPARATOR${JAVA_HOME}/bin$PATH_SEPARATOR${JAVA_HOME}/../bin$PATH_SEPARATOR${PATH}" fi AC_PATH_PROG(JAVAC, javac, [], [$JAVA_PATH]) AC_PATH_PROG(JAR, jar, [], [$JAVA_PATH]) if test -z "$JAVAC" || test -z "$JAR"; then warn_java="No javac compiler or jar executable found. Octave will not be able to call Java methods." break fi ## Check Java version is recent enough. AC_CACHE_CHECK([for Java version], [octave_cv_java_version], [octave_cv_java_version=[`"$JAVA" -version 2>&1 | $SED -n -e 's/^[^ ]* version[^0-9"]*"\([^"]*\)".*/\1/p'`] ]) java_major=[`echo $octave_cv_java_version | $SED -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\..*$/\1/'`] java_minor=[`echo $octave_cv_java_version | $SED -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\..*$/\2/'`] if test $java_major -gt 1 || (test $java_major -eq 1 && test $java_minor -ge 9); then : # Version is OK. Do nothing. else warn_java="Java version is too old (< 1.9). Octave will not be able to call Java methods." break fi ## At this point Win32 systems have enough configuration data. ## We assume that all appropriate variables (e.g., INCLUDE and LIB) already ## contain the required paths to compile and link against JDK. case $host_os in msdosmsvc) build_java=yes JAVA_LIBS=-ladvapi32 AC_DEFINE(HAVE_JAVA, 1, [Define to 1 if Java is available and is at least version 1.5]) break ;; mingw* | cygwin*) build_java=yes JAVA_LIBS=-ladvapi32 if test $have_msvc = no; then if test -n "$JAVA_CPPFLAGS"; then JAVA_CPPFLAGS="-I\"${JAVA_CPPFLAGS}\" -I\"${JAVA_CPPFLAGS}/win32\"" else JAVA_CPPFLAGS="-I\"${JAVA_HOME}/include\" -I\"${JAVA_HOME}/include/win32\"" fi fi AC_DEFINE(HAVE_JAVA, 1, [Define to 1 if Java is available and is at least version 1.5]) break ;; esac ## Determine which library filename to search for. case $host_os in darwin*) jvmlib=libjvm.dylib ;; *) jvmlib=libjvm.so ;; esac AC_MSG_CHECKING([for $jvmlib]) AC_CACHE_VAL([octave_cv_java_ldpath],[ if test -z "$JAVA_LDPATH"; then ## Run Java to try and determine library path to libjvm.so. JAVA_TMP_LDPATH=`$JAVA -classpath ${srcdir}/build-aux OctJavaQry JAVA_LDPATH` JAVA_TMP_LDPATH=`echo $JAVA_TMP_LDPATH | $SED -e "s/${PATH_SEPARATOR}/ /g"` for dir in $JAVA_TMP_LDPATH; do if test -f "$dir/$jvmlib"; then JAVA_LDPATH=$dir break fi done fi if test -z "$JAVA_LDPATH"; then ## Nothing found. Try Java again using bootpath argument. JAVA_TMP_LDPATH=`$JAVA -classpath ${srcdir}/build-aux OctJavaQry JAVA_BOOTPATH` JAVA_TMP_LDPATH="${JAVA_TMP_LDPATH} ${JAVA_TMP_LDPATH}/client ${JAVA_TMP_LDPATH}/server" for dir in $JAVA_TMP_LDPATH; do if test -f "$dir/$jvmlib"; then JAVA_LDPATH=$dir break fi done fi if test -z "$JAVA_LDPATH"; then ## Java failed to find its own library path. Guess wildly. JAVA_TMP_LDPATH=`ls -d $JAVA_HOME/jre/lib/*/client` JAVA_TMP_LDPATH="${JAVA_TMP_LDPATH} `ls -d $JAVA_HOME/jre/lib/*/server`" ## Add some paths that might work on Macs. JAVA_TMP_LDPATH="${JAVA_TMP_LDPATH} ${JAVA_HOME}/../Libraries ${JAVA_HOME}/Libraries" ## Add some paths that might work on MinGW JAVA_TMP_LDPATH="${JAVA_TMP_LDPATH} ${JAVA_HOME}/bin/client ${JAVA_HOME}/bin/server" for dir in $JAVA_TMP_LDPATH; do if test -f "$dir/$jvmlib"; then JAVA_LDPATH=$dir break fi done fi ## Verify value passed in option --with-java-libdir if test -n "$JAVA_LDPATH"; then if test -f "${JAVA_LDPATH}/$jvmlib"; then : # libjvm found else JAVA_LDPATH="" fi fi octave_cv_java_ldpath=$JAVA_LDPATH ]) JAVA_LDPATH=$octave_cv_java_ldpath if test -z "$JAVA_LDPATH"; then AC_MSG_RESULT([not found]) warn_java="Library $jvmlib not found. Octave will not be able to call Java methods." break else AC_MSG_RESULT([$JAVA_LDPATH]) fi AC_MSG_CHECKING([for include file ]) ## Java and JVM found. Set up flags. case $host_os in darwin*) if test -n "$JAVA_CPPFLAGS"; then JAVA_CPPFLAGS="-I${JAVA_CPPFLAGS} -I${JAVA_CPPFLAGS}/darwin" else JAVA_CPPFLAGS="-I${JAVA_HOME}/include -I${JAVA_HOME}/include/darwin" fi ;; freebsd*) if test -n "$JAVA_CPPFLAGS"; then JAVA_CPPFLAGS="-I${JAVA_CPPFLAGS} -I${JAVA_CPPFLAGS}/freebsd" else JAVA_CPPFLAGS="-I${JAVA_HOME}/include -I${JAVA_HOME}/include/freebsd" fi ;; solaris2*) if test -n "$JAVA_CPPFLAGS"; then JAVA_CPPFLAGS="-I${JAVA_CPPFLAGS} -I${JAVA_CPPFLAGS}/solaris" else JAVA_CPPFLAGS="-I${JAVA_HOME}/include -I${JAVA_HOME}/include/solaris" fi ;; *) if test -n "$JAVA_CPPFLAGS"; then JAVA_CPPFLAGS="-I${JAVA_CPPFLAGS} -I${JAVA_CPPFLAGS}/linux" else JAVA_CPPFLAGS="-I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux" fi ;; esac ## Verify jni.h include file exists. AC_CACHE_VAL([octave_cv_java_have_jni],[ JNI_PATH=`echo $JAVA_CPPFLAGS | $SED -e 's/-I//g'` octave_cv_java_have_jni=no for dir in $JNI_PATH; do if test -f "${dir}/jni.h"; then octave_cv_java_have_jni=yes octave_cv_java_jni_h_path=$dir break fi done ]) if test $octave_cv_java_have_jni = yes; then AC_MSG_RESULT([$octave_cv_java_jni_h_path]) else AC_MSG_RESULT([not found]) warn_java="Include file not found. Octave will not be able to call Java methods." break fi ## Test if jar supports --date for reproducible builds AC_CACHE_CHECK([whether jar supports '--date' option], [octave_cv_jar_has_date_option], [octave_cv_jar_has_date_option=no if $JAR --help | $GREP -- '--date=' >/dev/null 2>&1; then octave_cv_jar_has_date_option=yes fi ]) JAR_SUPPORTS_DATE=$octave_cv_jar_has_date_option ## Passed all configuration tests. A workable Java installation was found. build_java=yes AC_DEFINE(HAVE_JAVA, 1, [Define to 1 if Java is available and is at least version 1.5]) break done if test -n "$warn_java"; then OCTAVE_CONFIGURE_WARNING([warn_java]) fi AM_CONDITIONAL([AMCOND_HAVE_JAVA], [test $build_java = yes]) AC_SUBST(JAVA) AC_SUBST(JAVAC) AC_SUBST(JAR) AC_SUBST(JAR_SUPPORTS_DATE) AC_SUBST(JAVA_CPPFLAGS) AC_SUBST(JAVA_LIBS) AC_DEFINE_UNQUOTED([JAVA_HOME], ["$JAVA_HOME"], [Java home (top-level installation dir)]) AC_DEFINE_UNQUOTED([JAVA_LDPATH], ["$JAVA_LDPATH"], [Java library path (libjvm)]) ### Determine if documentation should and can be built. ENABLE_DOCS=yes AC_ARG_ENABLE([docs], [AS_HELP_STRING([--disable-docs], [don't build documentation files])], [if test "$enableval" = no; then ENABLE_DOCS=no warn_docs="building documentation disabled; make dist will fail." OCTAVE_CONFIGURE_WARNING([warn_docs]) fi], []) if test $ENABLE_DOCS = yes; then if test $opengl_graphics = no; then if test -n "$warn_gnuplot"; then ENABLE_DOCS=no warn_docs_graphics="building documentation disabled because no suitable graphics toolkit is available; make dist will fail." OCTAVE_CONFIGURE_WARNING([warn_docs_graphics]) fi fi if test -n "$warn_makeinfo"; then ENABLE_DOCS=no warn_docs_makeinfo="building documentation disabled because makeinfo was not found or does not support @sortas; make dist will fail." OCTAVE_CONFIGURE_WARNING([warn_docs_makeinfo]) fi fi if test $ENABLE_DOCS = yes; then AC_DEFINE(ENABLE_DOCS, 1, [Define to 1 to build Octave documentation files.]) fi AM_CONDITIONAL([AMCOND_BUILD_DOCS], [test $ENABLE_DOCS = yes]) AM_CONDITIONAL([AMCOND_BUILD_QT_DOCS], [test $ENABLE_DOCS = yes && test $build_qt_gui = yes]) OCTAVE_RELOCATE_ALL=no AC_ARG_ENABLE([relocate-all], [AS_HELP_STRING([--enable-relocate-all], [assume that all dependencies that are installed under the same prefix are relocated when Octave is relocated])], [if test "$enableval" = yes; then OCTAVE_RELOCATE_ALL=yes; fi], []) AC_SUBST(OCTAVE_RELOCATE_ALL) if test $OCTAVE_RELOCATE_ALL = yes; then AC_DEFINE(OCTAVE_REPLACE_PREFIX, 1, [Replace prefix in mkoctfile flags.]) fi AM_CONDITIONAL([AMCOND_RELOCATE_ALL], [test $OCTAVE_RELOCATE_ALL = yes]) OCTAVE_RELOCATE_WITH_CYGPATH="no" CYGPATH="" if test $OCTAVE_RELOCATE_ALL = yes; then case $host_os in mingw*) # If this is on MSYS2, paths (including the installation prefix) can be # represented in UNIX or Windows compatible form. The prefix should be # relocated no matter in which form it appears. # Check for the tool "cygpath" that can be used to convert between the # different forms. AC_CHECK_TOOL(CYGPATH, [cygpath]) if test -n "$CYGPATH"; then OCTAVE_RELOCATE_WITH_CYGPATH="yes" fi ;; esac fi AC_SUBST(OCTAVE_RELOCATE_WITH_CYGPATH) AC_SUBST(CYGPATH) ### Determine whether Mercurial ID should be embedded in library binaries. ENABLE_HG_ID=yes AC_ARG_ENABLE([hg-id], [AS_HELP_STRING([--disable-hg-id], [disable embedding of hg id in libraries])], [if test "$enableval" = no; then ENABLE_HG_ID=no; fi], []) AM_CONDITIONAL([AMCOND_ENABLE_HG_ID], [test $ENABLE_HG_ID = yes]) ### Determine whether to install build logs with Octave. install_build_logs=no AC_ARG_ENABLE([install-build-logs], [AS_HELP_STRING([--enable-install-build-logs], [install build logs (i.e., config.log) with Octave])], [if test "$enableval" = yes; then install_build_logs=yes; fi]) AM_CONDITIONAL([AMCOND_INSTALL_BUILD_LOGS], [test $install_build_logs = yes]) ### Determine whether libraries should be linked with visibility attributes. ENABLE_LIB_VISIBILITY_FLAGS=yes AC_ARG_ENABLE(lib-visibility-flags, [AS_HELP_STRING([--disable-lib-visibility-flags], [don't build libraries with visibility flags (export all symbols)])], [case $enableval in yes) ENABLE_LIB_VISIBILITY_FLAGS=yes ;; no) ENABLE_LIB_VISIBILITY_FLAGS=no ;; *) AC_MSG_ERROR([bad value $enableval for --enable-lib-visibility-flags]) ;; esac]) case $host_os in msdosmsvc | mingw* | cygwin*) # Assume that symbol export is working on that platform ;; *) if test $ENABLE_LIB_VISIBILITY_FLAGS = yes && test $HAVE_VISIBILITY = 0; then AC_MSG_NOTICE([cannot build with visibility flags on this platform]) ENABLE_LIB_VISIBILITY_FLAGS=no fi ;; esac if test $ENABLE_LIB_VISIBILITY_FLAGS = yes; then AC_DEFINE(OCTAVE_ENABLE_LIB_VISIBILITY_FLAGS, 1, [Define to 1 if building libraries with visibility flags]) else case $host_os in msdosmsvc | mingw* | cygwin*) LDFLAGS="$LDFLAGS -Wl,--export-all-symbols" ;; esac fi AM_CONDITIONAL([AMCOND_LIB_VISIBILITY_FLAGS], [test $ENABLE_LIB_VISIBILITY_FLAGS = yes]) ### Set flags for symbol visibility. if test $ENABLE_LIB_VISIBILITY_FLAGS = yes; then EXTERNAL_DLL_DEFS="-DEXTERNAL_DLL" OCTAVE_DLL_DEFS="-DOCTAVE_DLL" OCTINTERP_DLL_DEFS="-DOCTINTERP_DLL" OCTMEX_DLL_DEFS="-DOCTMEX_DLL" OCTGUI_DLL_DEFS="-DOCTGUI_DLL" else EXTERNAL_DLL_DEFS= OCTAVE_DLL_DEFS= OCTINTERP_DLL_DEFS= OCTMEX_DLL_DEFS= OCTGUI_DLL_DEFS= fi AC_MSG_NOTICE([defining EXTERNAL_DLL_DEFS to be $EXTERNAL_DLL_DEFS]) AC_MSG_NOTICE([defining OCTAVE_DLL_DEFS to be $OCTAVE_DLL_DEFS]) AC_MSG_NOTICE([defining OCTINTERP_DLL_DEFS to be $OCTINTERP_DLL_DEFS]) AC_MSG_NOTICE([defining OCTMEX_DLL_DEFS to be $OCTMEX_DLL_DEFS]) AC_MSG_NOTICE([defining OCTGUI_DLL_DEFS to be $OCTGUI_DLL_DEFS]) AC_SUBST(EXTERNAL_DLL_DEFS) AC_SUBST(OCTAVE_DLL_DEFS) AC_SUBST(OCTINTERP_DLL_DEFS) AC_SUBST(OCTMEX_DLL_DEFS) AC_SUBST(OCTGUI_DLL_DEFS) ### Add extra compiler flags now that feature testing is complete. ## Add warning flags GCC_EXTRA_FLAGS="-Wall -W -Wshadow -Wformat -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings -Wcast-align -Wcast-qual" GXX_EXTRA_FLAGS="-Wall -W -Wshadow -Woverloaded-virtual -Wold-style-cast -Wformat -Wpointer-arith -Wwrite-strings -Wcast-align -Wcast-qual" try_extra_warning_flags=yes AC_ARG_ENABLE([extra-warning-flags], [AS_HELP_STRING([--disable-extra-warning-flags], [don't add -Wall, -W, -Wformat, -Wold-style-cast, and other warning options to CFLAGS and CXXFLAGS])], [if test "$enableval" = no; then try_extra_warning_flags=no fi], []) if test $try_extra_warning_flags = yes; then for flag in $GCC_EXTRA_FLAGS; do OCTAVE_CC_FLAG([$flag], [ WARN_CFLAGS="$WARN_CFLAGS $flag"; AC_MSG_RESULT([adding $flag to WARN_CFLAGS])]) done for flag in $GXX_EXTRA_FLAGS; do OCTAVE_CXX_FLAG([$flag], [ WARN_CXXFLAGS="$WARN_CXXFLAGS $flag"; AC_MSG_RESULT([adding $flag to WARN_CXXFLAGS])]) done fi ## Add strict warning flags GCC_STRICT_FLAGS="-Wconversion" GXX_STRICT_FLAGS="-Wconversion -Weffc++" try_strict_warning_flags=no AC_ARG_ENABLE([strict-warning-flags], [AS_HELP_STRING([--enable-strict-warning-flags], [add extra strict warning options to CFLAGS and CXXFLAGS])], [if test "$enableval" = yes; then try_strict_warning_flags=yes fi], []) if test $try_strict_warning_flags = yes; then for flag in $GCC_STRICT_FLAGS; do OCTAVE_CC_FLAG([$flag], [ WARN_CFLAGS="$WARN_CFLAGS $flag"; AC_MSG_RESULT([adding $flag to WARN_CFLAGS])]) done for flag in $GXX_STRICT_FLAGS; do OCTAVE_CXX_FLAG([$flag], [ WARN_CXXFLAGS="$WARN_CXXFLAGS $flag"; AC_MSG_RESULT([adding $flag to WARN_CXXFLAGS])]) done fi ## Add sanitizer flags GCC_ADDRESS_SANITIZER_FLAGS="-fsanitize=address -fno-omit-frame-pointer" GXX_ADDRESS_SANITIZER_FLAGS="-fsanitize=address -fno-omit-frame-pointer" LD_ADDRESS_SANITIZER_FLAGS="-fsanitize=address" try_address_sanitizer_flags=no AC_ARG_ENABLE([address-sanitizer-flags], [AS_HELP_STRING([--enable-address-sanitizer-flags], [add extra -fsanitize=address and -fno-omit-frame-pointer options to CFLAGS, CXXFLAGS, and LDFLAGS])], [if test "$enableval" = yes; then try_address_sanitizer_flags=yes fi], []) if test $try_address_sanitizer_flags = yes; then ADDRESS_SANITIZER_OPTIONS="symbolize=1" AC_SUBST(ADDRESS_SANITIZER_OPTIONS) fi AM_CONDITIONAL([AMCOND_ADDRESS_SANITIZER_ENABLED], [test $try_address_sanitizer_flags = yes]) ADDRESS_SANITIZER_ENABLED=no if test $try_address_sanitizer_flags = yes; then ADDRESS_SANITIZER_ENABLED=yes for flag in $GCC_ADDRESS_SANITIZER_FLAGS; do OCTAVE_CC_FLAG([$flag], [ XTRA_CFLAGS="$XTRA_CFLAGS $flag"; AC_MSG_RESULT([adding $flag to XTRA_CFLAGS])]) done for flag in $GXX_ADDRESS_SANITIZER_FLAGS; do OCTAVE_CXX_FLAG([$flag], [ XTRA_CXXFLAGS="$XTRA_CXXFLAGS $flag"; AC_MSG_RESULT([adding $flag to XTRA_CXXFLAGS])]) done dnl FIXME: do we really need an LD-specific test, or is this good enough? for flag in $LD_ADDRESS_SANITIZER_FLAGS; do OCTAVE_CC_FLAG([$flag], [ XTRA_LDFLAGS="$XTRA_LDFLAGS $flag"; AC_MSG_RESULT([adding $flag to XTRA_LDFLAGS])]) done fi AC_SUBST(ADDRESS_SANITIZER_ENABLED) AC_SUBST(WARN_CFLAGS) AC_SUBST(WARN_CXXFLAGS) AC_SUBST(WARN_LDFLAGS) ### Check for GCC-specific pragmas to control warnings. AC_LANG_PUSH(C++) AC_CACHE_CHECK([for @%:@pragma GCC diagnostic push/pop/ignored], [octave_cv_gcc_has_pragma_GCC_diagnostic], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wold-style-cast" int three = (int) 3.1415926; #pragma GCC diagnostic pop ]])], [octave_cv_gcc_has_pragma_GCC_diagnostic=yes], [octave_cv_gcc_has_pragma_GCC_diagnostic=no])], ]) AC_LANG_POP(C++) if test $octave_cv_gcc_has_pragma_GCC_diagnostic = yes; then AC_DEFINE(HAVE_PRAGMA_GCC_DIAGNOSTIC, 1, [Define to 1 if compiler supports @%:@pragma GCC diagnostic ...]) fi AC_CACHE_CHECK([for @%:@pragma GCC visibility push/pop], [octave_cv_gcc_has_pragma_GCC_visiblity], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ #pragma GCC visibility push(default) int three = 3; #pragma GCC visiblity pop(default) ]])], [octave_cv_gcc_has_pragma_GCC_visiblity=yes], [octave_cv_gcc_has_pragma_GCC_visiblity=no])], ]) if test $octave_cv_gcc_has_pragma_GCC_visiblity = yes; then AC_DEFINE(HAVE_PRAGMA_GCC_VISIBILITY, 1, [Define to 1 if compiler supports @%:@pragma GCC visiblity ...]) fi ## Check for one unusual warning used in pragmas that is not always available if test $octave_cv_gcc_has_pragma_GCC_diagnostic = yes; then OCTAVE_CC_FLAG([-Wimplicit-fallthrough], [AC_DEFINE(HAVE_WARN_IMPLICIT_FALLTHROUGH, 1, [Define to 1 if compiler supports -Wimplicit-fallthrough warning])]) fi ### Recommendations from the gnulib bootstrap script. ## Notes ## 1) Because Octave uses libtool the version of the variable for certain ## libraries has the prefix $LT. ## 2) The readline library ($LTLIBREADLINE) is used in liboctinterp, not ## liboctave, and is therefore not in this list. GNULIB_LINK_DEPS="$CLOCK_TIME_LIB $FREXPF_LIBM $FREXP_LIBM $GETHOSTNAME_LIB $GETHRXTIME_LIB $GETLOCALENAME_L_LIB $GETLOGIN_LIB $GETRANDOM_LIB $HARD_LOCALE_LIB $LIBPTHREAD $LIBSOCKET $LIBTHREAD $LIB_CRYPTO $LTLIBC32CONV $LTLIBICONV $LTLIBINTL $LTLIBUNISTRING $MBRTOWC_LIB $NANOSLEEP_LIB $POSIX_SPAWN_LIB $PTHREAD_ONCE_LIB $PTHREAD_SIGMASK_LIB $SELECT_LIB $SETLOCALE_LIB $SETLOCALE_NULL_LIB $INTL_MACOSX_LIBS" ## FIXME: This is a kluge to transform $libdir/libiconv.dll.a to -liconv. ## It would probably be better to fix gnulib to not give us an absolute ## file name... case $host_os in mingw*) ## Don't use $libdir here because that's defined to be ## ${exec_prefix}/lib and at this point, ${exec_prefix} is "NONE"! tmp_libiconv_dll="$LIBICONV_PREFIX/lib/libiconv.dll.a" MKOCTFILE_LIBICONV=`echo $LIBICONV | sed "s|$tmp_libiconv_dll|-liconv|"` ;; *) MKOCTFILE_LIBICONV="$LIBICONV" ;; esac ## The build system does *not* use libtool for building `mkoctfile`. ## Therefore the variable for certain libraries does not use prefix $LT. MKOCTFILE_GNULIB_LINK_DEPS="$CLOCK_TIME_LIB $FREXPF_LIBM $FREXP_LIBM $GETHOSTNAME_LIB $GETHRXTIME_LIB $GETLOCALENAME_L_LIB $GETLOGIN_LIB $GETRANDOM_LIB $HARD_LOCALE_LIB $LIBPTHREAD $LIBSOCKET $LIBTHREAD $LIB_CRYPTO $LIBC32CONV $MKOCTFILE_LIBICONV $LIBINTL $LIBUNISTRING $MBRTOWC_LIB $NANOSLEEP_LIB $POSIX_SPAWN_LIB $PTHREAD_ONCE_LIB $PTHREAD_SIGMASK_LIB $SELECT_LIB $SETLOCALE_LIB $SETLOCALE_NULL_LIB $INTL_MACOSX_LIBS" AC_SUBST(GNULIB_LINK_DEPS) ### Set variables for link dependencies and options. BASE_LIBOCTAVE_LINK_DEPS="$CURL_LIBS $LIBGLOB $PCRE_LIBS $FFTW_XLIBS $ARPACK_LIBS $QRUPDATE_LIBS $SPARSE_XLIBS $LAPACK_LIBS $BLAS_LIBS $DL_LIBS $FLIBS $PTHREAD_LIBS $LIBS" LIBOCTAVE_LINK_DEPS="$BASE_LIBOCTAVE_LINK_DEPS $GNULIB_LINK_DEPS" MKOCTFILE_LIBOCTAVE_LINK_DEPS="$BASE_LIBOCTAVE_LINK_DEPS $MKOCTFILE_GNULIB_LINK_DEPS" LIBOCTAVE_LINK_OPTS="$CURL_LDFLAGS $PCRE_LDFLAGS $FFTW_XLDFLAGS $ARPACK_LDFLAGS $QRUPDATE_LDFLAGS $SPARSE_XLDFLAGS" AC_SUBST(LIBOCTAVE_LINK_DEPS) AC_SUBST(LIBOCTAVE_LINK_OPTS) LIBOCTINTERP_LINK_DEPS="$LTLIBREADLINE $HDF5_LIBS $MAGICK_LIBS $Z_LIBS $FFTW_XLIBS $SPARSE_XLIBS $FONTCONFIG_LIBS $FT2_LIBS $FREETYPE_LIBS $WAYLAND_CLIENT_LIBS $X11_LIBS $CARBON_LIBS $GL2PS_LIBS $OPENGL_LIBS $JAVA_LIBS $LAPACK_LIBS" LIBOCTINTERP_LINK_OPTS="$HDF5_LDFLAGS $MAGICK_LDFLAGS $Z_LDFLAGS $FFTW_XLDFLAGS $SPARSE_XLDFLAGS $FT2_LDFLAGS $WAYLAND_CLIENT_LDFLAGS" OCTAVE_LINK_DEPS="" OCTAVE_LINK_OPTS="" OCT_LINK_DEPS="" OCT_LTLINK_DEPS="" OCT_GUI_LINK_DEPS="" OCT_LINK_OPTS="$LDFLAGS" OCT_GUI_LINK_OPTS="$LDFLAGS" if test $link_all_deps = yes; then AC_DEFINE(OCTAVE_LINK_ALL_DEPS, 1, [Link with all dependencies.]) OCT_LINK_DEPS="libinterp/liboctinterp.la liboctave/liboctave.la" OCT_LTLINK_DEPS="$OCT_LINK_DEPS" OCT_GUI_LINK_DEPS="libgui/liboctgui.la $OCT_LINK_DEPS" MKOCTFILE_OCTAVE_LINK_DEPS="$LIBOCTINTERP_LINK_DEPS $MKOCTFILE_LIBOCTAVE_LINK_DEPS" MKOCTFILE_OCT_LINK_DEPS="-L${octlibdir} $LIBOCTINTERP $LIBOCTAVE" LIBOCTINTERP_LINK_DEPS="$LIBOCTINTERP_LINK_DEPS $LIBOCTAVE_LINK_DEPS" LIBOCTINTERP_LINK_OPTS="$LIBOCTINTERP_LINK_OPTS $LIBOCTAVE_LINK_OPTS" OCTAVE_LINK_DEPS="$LIBOCTINTERP_LINK_DEPS" OCTAVE_LINK_OPTS="$LIBOCTINTERP_LINK_OPTS" else case $host_os in mingw* | msdosmsvc) OCT_LINK_DEPS="libinterp/liboctinterp.la liboctave/liboctave.la" OCT_LTLINK_DEPS="$OCT_LINK_DEPS" OCT_GUI_LINK_DEPS="libgui/liboctgui.la $OCT_LINK_DEPS" MKOCTFILE_OCT_LINK_DEPS="-L${octlibdir} $LIBOCTINTERP $LIBOCTAVE" ;; darwin*) dnl Contains variables that are defined and undefined at this point, dnl so use appropriate quoting to defer expansion of dnl ${abs_top_builddir}, ${bindir}, and ${version}. OCT_LINK_DEPS='-bundle_loader ${abs_top_builddir}/src/octave'"${EXEEXT}" MKOCTFILE_OCT_LINK_DEPS='-bundle_loader ${bindir}/octave-${version}'"${EXEEXT}" ;; esac fi AC_SUBST(LIBOCTINTERP_LINK_DEPS) AC_SUBST(LIBOCTINTERP_LINK_OPTS) AC_SUBST(OCTAVE_LINK_DEPS) AC_SUBST(OCTAVE_LINK_OPTS) AC_SUBST(OCT_LINK_DEPS) AC_SUBST(OCT_LTLINK_DEPS) AC_SUBST(OCT_LINK_OPTS) AC_SUBST(OCT_GUI_LINK_DEPS) AC_SUBST(OCT_GUI_LINK_OPTS) AC_SUBST(MKOCTFILE_OCTAVE_LINK_DEPS) AC_SUBST(MKOCTFILE_OCT_LINK_DEPS) LIBOCTGUI_LINK_DEPS="" LIBOCTGUI_LINK_OPTS="" OCTAVE_GUI_LINK_DEPS="" OCTAVE_GUI_LINK_OPTS="" if test $build_qt_gui = yes; then LIBOCTGUI_LINK_DEPS="$QT_LIBS" LIBOCTGUI_LINK_OPTS="$QT_LDFLAGS" if test $link_all_deps = yes || test -n "$QT_LDFLAGS"; then LIBOCTGUI_LINK_DEPS="$LIBOCTGUI_LINK_DEPS $LIBOCTINTERP_LINK_DEPS" LIBOCTGUI_LINK_OPTS="$LIBOCTGUI_LINK_OPTS $LIBOCTINTERP_LINK_OPTS" OCTAVE_GUI_LINK_DEPS="$OCTAVE_GUI_LINK_DEPS $LIBOCTGUI_LINK_DEPS" OCTAVE_GUI_LINK_OPTS="$OCTAVE_GUI_LINK_OPTS $LIBOCTGUI_LINK_OPTS" fi fi AC_SUBST(LIBOCTGUI_LINK_DEPS) AC_SUBST(LIBOCTGUI_LINK_OPTS) AC_SUBST(OCTAVE_GUI_LINK_DEPS) AC_SUBST(OCTAVE_GUI_LINK_OPTS) ############################################################################## ### Configuration tests done. ### Restore original compilation flags. CFLAGS="$original_octave_configure_CFLAGS" CXXFLAGS="$original_octave_configure_CXXFLAGS" ### Add footer to config.h AH_BOTTOM([#include "oct-conf-post-private.h"]) AH_BOTTOM([#include "oct-conf-post-public.h"]) ### Make all AC_DEFINES available to testif feature of test.m function. dnl This must reside at the bottom of configure.ac after all AC_DEFINES dnl have been made. AC_OUTPUT_MAKE_DEFS AC_CONFIG_COMMANDS_PRE([ ## Fully expand all directory variables. These are normally left ## unexpanded (as explained and recommended by the autoconf manual). ## But we store configuration info in files and expect whatever ## is set at configure time to stay the same when Make is executed. ## Doing things like ## ## configure --prefix=/some/where ## make --prefix=/some/where/else ## ## won't work properly and is not allowed when building Octave. eval prefix="\"$prefix\"" eval exec_prefix="\"$exec_prefix\"" eval bindir="\"$bindir\"" eval sbindir="\"$sbindir\"" eval libexecdir="\"$libexecdir\"" eval datarootdir="\"$datarootdir\"" eval datadir="\"$datadir\"" eval sysconfdir="\"$sysconfdir\"" eval sharedstatedir="\"$sharedstatedir\"" eval localstatedir="\"$localstatedir\"" eval runstatedir="\"$runstatedir\"" eval includedir="\"$includedir\"" eval oldincludedir="\"$oldincludedir\"" eval docdir="\"$docdir\"" eval infodir="\"$infodir\"" eval htmldir="\"$htmldir\"" eval dvidir="\"$dvidir\"" eval pdfdir="\"$pdfdir\"" eval psdir="\"$psdir\"" eval libdir="\"$libdir\"" eval localedir="\"$localedir\"" eval mandir="\"$mandir\"" version="$OCTAVE_VERSION" api_version="$OCTAVE_API_VERSION" eval octlibdir="\"$octlibdir\"" eval archlibdir="\"$archlibdir\"" eval localarchlibdir="\"$localarchlibdir\"" eval localapiarchlibdir="\"$localapiarchlibdir\"" eval localverarchlibdir="\"$localverarchlibdir\"" eval octfiledir="\"$octfiledir\"" eval localoctfiledir="\"$localoctfiledir\"" eval localapioctfiledir="\"$localapioctfiledir\"" eval localveroctfiledir="\"$localveroctfiledir\"" eval octincludedir="\"$octincludedir\"" eval fcnfiledir="\"$fcnfiledir\"" eval localfcnfiledir="\"$localfcnfiledir\"" eval localapifcnfiledir="\"$localapifcnfiledir\"" eval localverfcnfiledir="\"$localverfcnfiledir\"" eval octetcdir="\"$octetcdir\"" eval octlocaledir="\"$octlocaledir\"" eval doc_cache_file="\"$doc_cache_file\"" eval octtestsdir="\"$octtestsdir\"" eval texi_macros_file="\"$texi_macros_file\"" eval imagedir="\"$imagedir\"" eval octdatadir="\"$octdatadir\"" eval octdocdir="\"$octdocdir\"" eval octfontsdir="\"$octfontsdir\"" eval startupfiledir="\"$startupfiledir\"" eval localstartupfiledir="\"$localstartupfiledir\"" eval localapipkgdir="\"$localapipkgdir\"" eval man1dir="\"$man1dir\"" eval man1ext="\"$man1ext\"" eval infofile="\"$infofile\"" ## Also expand the following variables because they may depend on the values ## of variables expanded above. eval MKOCTFILE_DL_LDFLAGS="\"$MKOCTFILE_DL_LDFLAGS\"" eval MKOCTFILE_OCT_LINK_DEPS="\"$MKOCTFILE_OCT_LINK_DEPS\"" ]) ### Do substitutions in Makefiles and other files that hold configuration info. AUTOCONF_SUBST_VARS="`echo $ac_subst_vars`" AC_SUBST(AUTOCONF_SUBST_VARS) AC_SUBST(ac_config_files) AC_SUBST(ac_config_headers) AC_CONFIG_FILES([ Makefile build-aux/check-subst-vars.sh:build-aux/check-subst-vars.in.sh build-aux/find-defun-files.sh:build-aux/find-defun-files.in.sh build-aux/find-files-with-tests.sh:build-aux/find-files-with-tests.in.sh doc/doxyhtml/Doxyfile libgnu/Makefile test/Makefile liboctave/octave.pc:liboctave/octave.in.pc libinterp/octinterp.pc:libinterp/octinterp.in.pc libmex/octmex.pc:libmex/octmex.in.pc]) dnl We use a .in.h file for oct-conf-post-private.h and dnl oct-conf-post-public.h simply to copy it to the build tree dnl so that we don't have to add the -I${top_srcdir} to any CPPFLAGS variables. AC_CONFIG_FILES([ oct-conf-post-private.h-tmp:oct-conf-post-private.in.h oct-conf-post-public.h-tmp:oct-conf-post-public.in.h]) AC_CONFIG_COMMANDS([oct-conf-post-private.h], [$SHELL $srcdir/build-aux/move-if-change oct-conf-post-private.h-tmp oct-conf-post-private.h]) AC_CONFIG_COMMANDS([oct-conf-post-public.h], [$SHELL $srcdir/build-aux/move-if-change oct-conf-post-public.h-tmp oct-conf-post-public.h]) OCTAVE_CONFIG_MOVE_IF_CHANGE_FILES([ liboctave/external/mk-f77-def.sh liboctave/mk-version-h.sh libinterp/corefcn/mk-mxtypes-h.sh build-aux/subst-config-vals.sh build-aux/subst-cross-config-vals.sh build-aux/subst-script-vals.sh]) AC_OUTPUT ### Print a summary of the build configuration. AC_MSG_NOTICE([ Octave is now configured for $canonical_host_type Source directory: $srcdir Installation prefix: $prefix C compiler: $CC $XTRA_CFLAGS $WARN_CFLAGS $CFLAGS C++ compiler: $CXX $XTRA_CXXFLAGS $WARN_CXXFLAGS $CXXFLAGS Fortran compiler: $F77 $FFLAGS CPPFLAGS: $CPPFLAGS Fortran libraries: $FLIBS Lex libraries: $LEXLIB LIBS: $LIBS LDFLAGS: $LDFLAGS Extra LDFLAGS: $XTRA_LDFLAGS $WARN_LDFLAGS AMD CPPFLAGS: $AMD_CPPFLAGS AMD LDFLAGS: $AMD_LDFLAGS AMD libraries: $AMD_LIBS ARPACK CPPFLAGS: $ARPACK_CPPFLAGS ARPACK LDFLAGS: $ARPACK_LDFLAGS ARPACK libraries: $ARPACK_LIBS BLAS libraries: $BLAS_LIBS BZ2 CPPFLAGS: $BZ2_CPPFLAGS BZ2 LDFLAGS: $BZ2_LDFLAGS BZ2 libraries: $BZ2_LIBS CAMD CPPFLAGS: $CAMD_CPPFLAGS CAMD LDFLAGS: $CAMD_LDFLAGS CAMD libraries: $CAMD_LIBS CARBON libraries: $CARBON_LIBS CCOLAMD CPPFLAGS: $CCOLAMD_CPPFLAGS CCOLAMD LDFLAGS: $CCOLAMD_LDFLAGS CCOLAMD libraries: $CCOLAMD_LIBS CHOLMOD CPPFLAGS: $CHOLMOD_CPPFLAGS CHOLMOD LDFLAGS: $CHOLMOD_LDFLAGS CHOLMOD libraries: $CHOLMOD_LIBS COLAMD CPPFLAGS: $COLAMD_CPPFLAGS COLAMD LDFLAGS: $COLAMD_LDFLAGS COLAMD libraries: $COLAMD_LIBS CURL CPPFLAGS: $CURL_CPPFLAGS CURL LDFLAGS: $CURL_LDFLAGS CURL libraries: $CURL_LIBS CXSPARSE CPPFLAGS: $CXSPARSE_CPPFLAGS CXSPARSE LDFLAGS: $CXSPARSE_LDFLAGS CXSPARSE libraries: $CXSPARSE_LIBS DL libraries: $DL_LIBS FFTW3 CPPFLAGS: $FFTW3_CPPFLAGS FFTW3 LDFLAGS: $FFTW3_LDFLAGS FFTW3 libraries: $FFTW3_LIBS FFTW3F CPPFLAGS: $FFTW3F_CPPFLAGS FFTW3F LDFLAGS: $FFTW3F_LDFLAGS FFTW3F libraries: $FFTW3F_LIBS FLTK CPPFLAGS: $FLTK_CPPFLAGS FLTK LDFLAGS: $FLTK_LDFLAGS FLTK libraries: $FLTK_LIBS fontconfig CPPFLAGS: $FONTCONFIG_CPPFLAGS fontconfig libraries: $FONTCONFIG_LIBS FreeType2 CPPFLAGS: $FT2_CPPFLAGS FreeType2 libraries: $FT2_LIBS GLPK CPPFLAGS: $GLPK_CPPFLAGS GLPK LDFLAGS: $GLPK_LDFLAGS GLPK libraries: $GLPK_LIBS HDF5 CPPFLAGS: $HDF5_CPPFLAGS HDF5 LDFLAGS: $HDF5_LDFLAGS HDF5 libraries: $HDF5_LIBS Java home: $JAVA_HOME Java JVM path: $JAVA_LDPATH Java CPPFLAGS: $JAVA_CPPFLAGS Java libraries: $JAVA_LIBS KLU CPPFLAGS: $KLU_CPPFLAGS KLU LDFLAGS: $KLU_LDFLAGS KLU libraries: $KLU_LIBS LAPACK libraries: $LAPACK_LIBS Magick++ CPPFLAGS: $MAGICK_CPPFLAGS Magick++ LDFLAGS: $MAGICK_LDFLAGS Magick++ libraries: $MAGICK_LIBS OpenGL libraries: $OPENGL_LIBS PCRE CPPFLAGS: $PCRE_CPPFLAGS PCRE LDFLAGS: $PCRE_LDFLAGS PCRE libraries: $PCRE_LIBS PortAudio CPPFLAGS: $PORTAUDIO_CPPFLAGS PortAudio LDFLAGS: $PORTAUDIO_LDFLAGS PortAudio libraries: $PORTAUDIO_LIBS PTHREAD flags: $PTHREAD_CFLAGS PTHREAD libraries: $PTHREAD_LIBS QHULL CPPFLAGS: $QHULL_CPPFLAGS QHULL LDFLAGS: $QHULL_LDFLAGS QHULL libraries: $QHULL_LIBS QRUPDATE CPPFLAGS: $QRUPDATE_CPPFLAGS QRUPDATE LDFLAGS: $QRUPDATE_LDFLAGS QRUPDATE libraries: $QRUPDATE_LIBS Qt CPPFLAGS: $QT_CPPFLAGS Qt LDFLAGS: $QT_LDFLAGS Qt GUI libraries: $QT_LIBS Qt moc: $MOC $MOCFLAGS Qt uic: $UIC $UICFLAGS Qt rcc: $RCC $RCCFLAGS Qt lrelease: $LRELEASE $LRELEASEFLAGS Qt qcollectiongenerator: $QCOLLECTIONGENERATOR $QCOLLECTIONGENERATORFLAGS Qt qhelpgenerator: $QHELPGENERATOR $QHELPGENERATORFLAGS READLINE libraries: $LIBREADLINE Sndfile CPPFLAGS: $SNDFILE_CPPFLAGS Sndfile LDFLAGS: $SNDFILE_LDFLAGS Sndfile libraries: $SNDFILE_LIBS SPQR CPPFLAGS: $SPQR_CPPFLAGS SPQR LDFLAGS: $SPQR_LDFLAGS SPQR libraries: $SPQR_LIBS SuiteSparse config libraries: $SUITESPARSECONFIG_LIBS SUNDIALS core CPPFLAGS: $SUNDIALS_CORE_CPPFLAGS SUNDIALS core LDFLAGS: $SUNDIALS_CORE_LDFLAGS SUNDIALS core libraries: $SUNDIALS_CORE_LIBS SUNDIALS IDA CPPFLAGS: $SUNDIALS_IDA_CPPFLAGS SUNDIALS IDA LDFLAGS: $SUNDIALS_IDA_LDFLAGS SUNDIALS IDA libraries: $SUNDIALS_IDA_LIBS SUNDIALS NVECTOR CPPFLAGS: $SUNDIALS_NVECSERIAL_CPPFLAGS SUNDIALS NVECTOR LDFLAGS: $SUNDIALS_NVECSERIAL_LDFLAGS SUNDIALS NVECTOR libraries: $SUNDIALS_NVECSERIAL_LIBS SUNLINSOL KLU CPPFLAGS: $SUNDIALS_SUNLINSOLKLU_CPPFLAGS SUNLINSOL KLU LDFLAGS: $SUNDIALS_SUNLINSOLKLU_LDFLAGS SUNLINSOL KLU libraries: $SUNDIALS_SUNLINSOLKLU_LIBS UMFPACK CPPFLAGS: $UMFPACK_CPPFLAGS UMFPACK LDFLAGS: $UMFPACK_LDFLAGS UMFPACK libraries: $UMFPACK_LIBS Wayland client CPPFLAGS: $WAYLAND_CLIENT_CPPFLAGS Wayland client LDFLAGS: $WAYLAND_CLIENT_LDFLAGS Wayland client libraries: $WAYLAND_CLIENT_LIBS X11 include flags: $X11_INCFLAGS X11 libraries: $X11_LIBS Z CPPFLAGS: $Z_CPPFLAGS Z LDFLAGS: $Z_LDFLAGS Z libraries: $Z_LIBS Default pager: $DEFAULT_PAGER gnuplot: $GNUPLOT_BINARY Build Octave Qt GUI: $BUILD_QT_SUMMARY_MSG Build Java interface: $build_java Build static libraries: $STATIC_LIBS Build shared libraries: $SHARED_LIBS Dynamic Linking API: $DL_API_MSG Use library visibility flags: $ENABLE_LIB_VISIBILITY_FLAGS 64-bit array dims and indexing: $ENABLE_64 64-bit BLAS array dims and indexing: $HAVE_64_BIT_BLAS Use std::pmr::polymorphic_allocator: $HAVE_STD_PMR_POLYMORPHIC_ALLOCATOR OpenMP SMP multithreading: $ENABLE_OPENMP Include support for GNU readline: $USE_READLINE Use push parser in command line REPL: $ENABLE_COMMAND_LINE_PUSH_PARSER Build cross tools: $cross_tools Build docs: $ENABLE_DOCS Embed Mercurial ID in libraries: $ENABLE_HG_ID Install build logs: $install_build_logs ]) warn_msg_printed=false OCTAVE_CONFIGURE_WARNING_SUMMARY if test $opengl_graphics = no; then AC_MSG_WARN([]) AC_MSG_WARN([The libraries needed for OpenGL graphics were not found.]) AC_MSG_WARN([Creating plots is still possible if gnuplot is installed.]) warn_msg_printed=true fi if $warn_msg_printed; then AC_MSG_NOTICE([]) AC_MSG_NOTICE([NOTE: Libraries or auxiliary programs may be skipped if they are not found]) AC_MSG_NOTICE([NOTE: OR if they are missing required features on your system.]) fi ### End of configure. ================================================ FILE: doc/doxyhtml/Doxyfile.in ================================================ # -*- mode: conf; -*- ######################################################################## ## ## Copyright (C) 2013-2026 The Octave Project Developers ## ## See the file COPYRIGHT.md in the top-level directory of this ## distribution or . ## ## This file is part of Octave. ## ## Octave is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, see ## . ## ######################################################################## # Doxyfile for Doxygen 1.8.11 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for GNU Octave. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. # # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all text # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv # built into libc) for the transcoding. See https://www.gnu.org/software/libiconv # for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the # project for which the documentation is generated. This name is used in the # title of most generated pages and in a few other places. # The default value is: My Project. PROJECT_NAME = "GNU Octave" # The public stable API version (unrelated to the internal API version). PROJECT_NUMBER = @PACKAGE_VERSION@ # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = "A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab" # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. PROJECT_LOGO = @abs_top_srcdir@/etc/icons/octave-logo-48.png # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = @abs_top_builddir@/doc # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and # will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes # performance problems for the file system. # The default value is: NO. CREATE_SUBDIRS = YES # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode # U+3044. # The default value is: NO. ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, # Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. # The default value is: YES. REPEAT_BRIEF = YES # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. # The default value is: NO. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. FULL_PATH_NAMES = YES # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = @abs_top_srcdir@ # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief # description. If set to NO, the Javadoc-style will behave just like regular Qt- # style comments (thus requiring an explicit @brief command for a brief # description.) # The default value is: NO. JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus # requiring an explicit \brief command for a brief description.) # The default value is: NO. QT_AUTOBRIEF = NO # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new # page for each member. If set to NO, the documentation of a member will be part # of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 2 # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See http://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. MARKDOWN_SUPPORT = YES # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or # globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); # versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = YES # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small # doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 # symbols. At the end of a run doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 2 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. # Note: This will also disable the warnings about undocumented members that are # normally produced when WARNINGS is set to YES. # The default value is: NO. EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined # locally in source files will be included in the documentation. If set to NO, # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base name of # the file that contains the anonymous namespace. By default anonymous namespace # are hidden. # The default value is: NO. EXTRACT_ANON_NSPACES = YES # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file # names in lowercase letters. If set to YES, uppercase letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. # The default value is: system dependent. CASE_SENSE_NAMES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. FORCE_LOCAL_INCLUDES = YES # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. SORT_BRIEF_DOCS = YES # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief # member documentation. # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting # detailed member documentation. # The default value is: NO. SORT_MEMBERS_CTORS_1ST = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. SHOW_NAMESPACES = YES #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. INPUT = @abs_top_srcdir@/src/ \ @abs_top_srcdir@/liboctave/ \ @abs_top_srcdir@/libinterp \ @abs_top_srcdir@/doc/doxyhtml/pages \ @abs_top_builddir@/doc/doxyhtml/pages # The EXCLUDE tag is used to exclude files and/or directories that would # otherwise be included by the INPUT tag. EXCLUDE = # This tag is used to exclude files and/or directories that would otherwise be # included by the INPUT tag using a pattern rather than an exact name as # the EXCLUDE tag does. EXCLUDE_PATTERNS = *.in.h # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: https://www.gnu.org/software/libiconv) for the list of # possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. RECURSIVE = YES # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). EXAMPLE_PATH = @abs_top_srcdir@/examples/ # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. EXAMPLE_RECURSIVE = NO #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. # # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. # The default value is: NO. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. STRIP_CODE_COMMENTS = NO # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # function all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. REFERENCES_LINK_SOURCE = NO #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: html. i.e. @abs_top_builddir@/doc/doxyhtml # This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = doxyhtml # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this # to YES can help to show when doxygen was last run and thus if the # documentation is up to date. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = YES # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # (.qch) of the generated HTML documentation. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = ./octave-cpp-api.qch # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace # (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.octave.cpp-api # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- # folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = "Octave C++ API" # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = "core cpp" # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = "core cpp" # The QHG_LOCATION tag can be used to specify the location of Qt's # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the # generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = @QHELPGENERATOR@ # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # of each HTML page. A value of NO enables the index and the value YES disables # it. Since the tabs in the index contain the same information as the navigation # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = YES # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag # value is set to YES, a side panel will be generated containing a tree-like # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # further fine-tune the look of the index. As an example, the default style # sheet generated by doxygen has an example that shows how to put an image at # the root of the tree instead of the PROJECT_NAME. Since the tree basically has # the same information as the tab index, you could consider setting # DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = YES # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. # For large projects the javascript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use + S # (what the is depends on the OS and browser, but it is typically # , /