changeset 18042:4502d6d577d5 classdef

maint: Periodic merge of default to classdef
author John W. Eaton <jwe@octave.org>
date Sat, 30 Nov 2013 12:39:54 -0500
parents 6762a6d23010 (current diff) 132667955f66 (diff)
children 39edc0fccf58
files scripts/general/isa.m
diffstat 18 files changed, 519 insertions(+), 280 deletions(-) [+]
line wrap: on
line diff
--- a/NEWS	Tue Nov 26 12:38:46 2013 -0500
+++ b/NEWS	Sat Nov 30 12:39:54 2013 -0500
@@ -1,10 +1,41 @@
 Summary of important user-visible changes for version 3.8:
 ---------------------------------------------------------
 
- ** A GUI is now available with Octave and is the default when starting
-    an interactive session.  The original command line interface is also
-    available and can be entered by using the "--no-gui" option when
-    invoking Octave.
+  ** One of the biggest new features for Octave 3.8 is a graphical user
+     interface.  It is the one thing that users have requested most
+     often over the last few years and now it is almost ready.  But
+     because it is not quite as polished as we would like, we have
+     decided to wait until the 4.0.x release series before making the
+     GUI the default interface (until then, you can use the --force-gui
+     option to start the GUI).
+
+     Given the length of time and the number of bug fixes and
+     improvements since the last major release Octave, we also decided
+     against delaying the release of all these new improvements any
+     longer just to perfect the GUI.  So please enjoy the 3.8 release of
+     Octave and the preview of the new GUI.  We beleive it is working
+     reasonably well, but we also know that there are some obvious rough
+     spots and many things that could be improved.
+
+     WE NEED YOUR HELP.  There are many ways that you can help us fix
+     the remaining problems, complete the GUI, and improve the overall
+     user experience for both novices and experts alike:
+
+       * If you are a skilled software developer, you can help by
+         contributing your time to help with Octave's development.  See
+         http://octave.org/get-involved.html for more information.
+
+       * If Octave does not work properly, you are encouraged
+         report the problems you find.  See http://octave.org/bugs.html
+         for more information about how to report problems.
+
+       * Whether you are a user or developer, you can help to fund the
+         project.  Octave development takes a lot of time and expertise.
+         Your contributions help to ensure that Octave will continue to
+         improve.  See http://octave.org/donate.html for more details.
+
+    We hope you find Octave to be useful.  Please help us make it even
+    better for the future!
 
  ** Octave now uses OpenGL graphics by default with FLTK widgets.  If
     OpenGL libraries or FLTK widgets are not available when Octave is
--- a/configure.ac	Tue Nov 26 12:38:46 2013 -0500
+++ b/configure.ac	Sat Nov 30 12:39:54 2013 -0500
@@ -1141,7 +1141,7 @@
   ## Check for fontconfig library
 
   warn_fontconfig=""
-  if test -z "$warn_freetype"; then
+  if test $native_graphics = yes; then
     PKG_CHECK_MODULES(FONTCONFIG, [fontconfig],
       [have_fontconfig=yes
        OPENGL_LIBS="$FONTCONFIG_LIBS $OPENGL_LIBS"
@@ -1155,6 +1155,20 @@
     OCTAVE_CONFIGURE_WARNING([warn_fontconfig])
   fi
 
+  ## Check for Xft library (when using X11)
+
+  warn_xft=""
+  if test $native_graphics = yes && test "$have_x" = yes; then
+    PKG_CHECK_MODULES(XFT, [xft],
+      [AC_DEFINE(HAVE_XFT, 1, [Define to 1 if Xft is present.])],
+      [warn_xft="Xft library not found.  Native graphics will be disabled."])
+  fi
+
+  if test -n "$warn_xft"; then
+    native_graphics=no
+    OCTAVE_CONFIGURE_WARNING([warn_xft])
+  fi
+
   ## Check for FLTK (www.fltk.org) library
 
   AC_ARG_WITH([fltk-prefix], [
@@ -2462,7 +2476,7 @@
     JAVA_HOME=`echo $JAVA_TMP_HOME | $SED -e 's|[[/\\]]bin[[/\\]]\?$||' | $SED -e 's|[[/\\]]jre[[/\\]]\?$||'`
   fi
 
-  case $host_os in
+  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.
@@ -2470,14 +2484,8 @@
       ## (e.g. C:\Program Files\Java\...).
       if test -n "$JAVA_HOME"; then
         JAVA_HOME=`cd "$JAVA_HOME" && pwd`
-        ## Maybe this will be useful in the future, as native Java won't
-        ## understand MSYS paths.
-        JAVA_HOME_NATIVE=`cd "$JAVA_HOME" && pwd -W`
       fi
     ;;
-    *)
-      JAVA_HOME_NATIVE="$JAVA_HOME"
-    ;;
   esac
 
   ## Amend search path for JAVAC and JAR.
--- a/libgui/languages/de_DE.ts	Tue Nov 26 12:38:46 2013 -0500
+++ b/libgui/languages/de_DE.ts	Sat Nov 30 12:39:54 2013 -0500
@@ -149,7 +149,7 @@
         <translation>&amp;%1 %2</translation>
     </message>
     <message>
-        <location line="+174"/>
+        <location line="+175"/>
         <source>&amp;New File</source>
         <translation>&amp;Neue Datei</translation>
     </message>
@@ -309,7 +309,7 @@
         <translation>&amp;Suchen und Ersetzen</translation>
     </message>
     <message>
-        <location line="-589"/>
+        <location line="-590"/>
         <source>Could not open file
 %1
 for read: %2.</source>
@@ -338,7 +338,7 @@
 %2.</translation>
     </message>
     <message>
-        <location line="+554"/>
+        <location line="+555"/>
         <source>Go&amp;to Line</source>
         <translation>&amp;Gehe zu Zeile</translation>
     </message>
@@ -376,7 +376,7 @@
 <context>
     <name>file_editor_tab</name>
     <message>
-        <location filename="../src/m-editor/file-editor-tab.cc" line="+787"/>
+        <location filename="../src/m-editor/file-editor-tab.cc" line="+792"/>
         <source>Goto line</source>
         <translation>Gehe zu Zeile</translation>
     </message>
@@ -403,7 +403,7 @@
     </message>
     <message>
         <location line="+10"/>
-        <location line="+123"/>
+        <location line="+122"/>
         <location line="+111"/>
         <location line="+64"/>
         <location line="+22"/>
@@ -411,7 +411,7 @@
         <translation>Octave Editor</translation>
     </message>
     <message>
-        <location line="-319"/>
+        <location line="-318"/>
         <source>The file
 %1
 is about to be closed but has been modified.
@@ -422,7 +422,7 @@
 %2</translation>
     </message>
     <message>
-        <location line="+202"/>
+        <location line="+201"/>
         <source>Octave Files (*.m);;All Files (*)</source>
         <translation>Octave Dateien (*.m);;All Files (*)</translation>
     </message>
@@ -459,7 +459,7 @@
 %2.</translation>
     </message>
     <message>
-        <location line="-962"/>
+        <location line="-966"/>
         <source>Line:</source>
         <translation>Zeile:</translation>
     </message>
@@ -469,7 +469,7 @@
         <translation>Spalte:</translation>
     </message>
     <message>
-        <location line="+1134"/>
+        <location line="+1138"/>
         <source>It seems that &apos;%1&apos; has been modified by another application. Do you want to reload it?</source>
         <translation>Die Datei %1 wurde von einer anderen Anwendung verändert. Soll der neue Inhalt geladen werden?</translation>
     </message>
@@ -708,8 +708,8 @@
 You can find more information about each of these by visiting &lt;a href=&quot;http://octave.org/support.html&quot;&gt;http://octave.org/support.html&lt;/a&gt; (opens in external browser).&lt;/p&gt;
 &lt;/body&gt;&lt;/html&gt;</source>
         <translation>&lt;html&gt;&lt;body&gt;
-&lt;p&gt;Wir hoffen dass Du Octave nützlich findest.&lt;/p&gt;
-&lt;p&gt;Wenn Du auf Probleme stoßen solltest, gibt es eine Reihe von Wegen um Hilfe zu bekommen. Neben der Option kommerziellen Support zu erhalten, gibt es noch eine Mailingliste, ein Wiki und andere Community Support Channels
+&lt;p&gt;Wir hoffen, dass Du Octave nützlich findest.&lt;/p&gt;
+&lt;p&gt;Wenn Du auf Probleme stoßen solltest, gibt es eine Reihe von Wegen um Hilfe zu bekommen. Neben der Option kommerziellen Support zu erhalten, gibt es noch eine Mailingliste, ein Wiki und andere Community Support Channels.
 Mehr über jede Möglichkeit findest Du im Internet unter &lt;a href=&quot;http://octave.org/support.html&quot;&gt;http://octave.org/support.html&lt;/a&gt; (Wird im externen Browser geöffnet).&lt;/p&gt;
 &lt;/body&gt;&lt;/html&gt;</translation>
     </message>
@@ -734,9 +734,9 @@
 &lt;head/&gt;&lt;body&gt;
 &lt;p&gt;Für weitere Informationen über Octave:&lt;/p&gt;
 &lt;ul&gt;
-&lt;li&gt;Visit &lt;a href=&quot;http://octave.org&quot;&gt;http://octave.org&lt;/a&gt; (Öffnet im externen Browser)&lt;/li&gt;
-&lt;li&gt;Online Dokumentation &lt;a href=&quot;http://www.gnu.org/software/octave/doc/interpreter/index.html&quot;&gt;html&lt;/a&gt;- oder &lt;a href=&quot;http://www.gnu.org/software/octave/octave.pdf&quot;&gt;PDF&lt;/span&gt;&lt;/a&gt;Dokument (Öffnet im externen Browser)&lt;/li&gt;
-&lt;li&gt;Öffnet den Dokumentations-Browser von Octave GUI mit Hilfe-Menü&lt;/li&gt;
+&lt;li&gt;&lt;a href=&quot;http://octave.org&quot;&gt;http://octave.org&lt;/a&gt; (Öffnet im externen Browser)&lt;/li&gt;
+&lt;li&gt;Online Dokumentation &lt;a href=&quot;http://www.gnu.org/software/octave/doc/interpreter/index.html&quot;&gt;html&lt;/a&gt;- oder &lt;a href=&quot;http://www.gnu.org/software/octave/octave.pdf&quot;&gt;PDF&lt;/span&gt;&lt;/a&gt;-Dokument (Öffnet im externen Browser)&lt;/li&gt;
+&lt;li&gt;Benutze den Dokumentations-Browser von Octave GUI im Hilfe-Menü&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/body&gt;&lt;/html&gt;</translation>
     </message>
@@ -1005,7 +1005,7 @@
     <message>
         <location filename="../src/history-dock-widget.cc" line="+43"/>
         <source>Browse and search the command history.</source>
-        <translation>Durchsuchen Sie die Befehlshistorie.</translation>
+        <translation>Durchsuchen der Befehlshistorie.</translation>
     </message>
     <message>
         <location line="+24"/>
@@ -1043,7 +1043,7 @@
     <message>
         <location filename="../src/welcome-wizard.cc" line="-179"/>
         <source>Welcome to Octave!</source>
-        <translation>Willkommen zu Octave!</translation>
+        <translation>Willkommen bei Octave!</translation>
     </message>
     <message>
         <location line="+3"/>
@@ -1063,8 +1063,8 @@
 &lt;p&gt;The configuration file is stored in %1.  If that file exists, you will not see this dialog when Octave starts.&lt;/p&gt;
 &lt;/body&gt;&lt;/html&gt;</source>
         <translation>&lt;html&gt;&lt;body&gt;
-&lt;p&gt;Es scheint als ob die grafische Benutzerschnittstelle zum ersten Mal auf diesem Computer gestartet wurde.
-Klicke auf &apos;weiter&apos; um eine Konfigurationsdatei anzulegen und Octave zu starten.&lt;/p&gt;
+&lt;p&gt;Es scheint, dass die grafische Benutzerschnittstelle (GUI) zum ersten Mal auf diesem Computer gestartet wurde.
+Klicke auf &apos;Weiter&apos; um eine Konfigurationsdatei anzulegen und Octave zu starten.&lt;/p&gt;
 &lt;p&gt;Die Konfigurationsdatei wird in %1 gespeichert. Falls diese Datei existiert, wird dieser Dialog nicht mehr angezeigt.&lt;/p&gt;
 &lt;/body&gt;&lt;/html&gt;</translation>
     </message>
@@ -1073,13 +1073,13 @@
     <name>main_window</name>
     <message>
         <location filename="../src/main-window.cc" line="+201"/>
-        <location line="+1149"/>
+        <location line="+1161"/>
         <source>Load Workspace</source>
         <translation>Lade Arbeitsumgebung</translation>
     </message>
     <message>
-        <location line="-511"/>
-        <location line="+865"/>
+        <location line="-520"/>
+        <location line="+874"/>
         <source>About Octave</source>
         <translation>Über Octave</translation>
     </message>
@@ -1144,13 +1144,13 @@
         <translation>Einfügen</translation>
     </message>
     <message>
-        <location line="-1247"/>
-        <location line="+1166"/>
+        <location line="-1259"/>
+        <location line="+1178"/>
         <source>Save Workspace As</source>
         <translation>Arbeitsumgebung speichern als</translation>
     </message>
     <message>
-        <location line="-1042"/>
+        <location line="-1054"/>
         <source>The release notes file &apos;%1&apos; is empty.</source>
         <translation>Die Datei &apos;%1&apos; mit Versionshinweisen ist leer.</translation>
     </message>
@@ -1165,17 +1165,16 @@
         <translation>Versionshinweise zu Octave</translation>
     </message>
     <message>
-        <location line="+185"/>
+        <location line="+186"/>
         <source>Octave Community News</source>
-        <translation>Neuigkeiten aus der Octave Gemeinschaft</translation>
+        <translation>Neuigkeiten aus der Octave Community</translation>
     </message>
     <message>
-        <location line="+171"/>
         <source>Set working directory</source>
-        <translation>Arbeitsverzeichnis setzen</translation>
+        <translation type="obsolete">Arbeitsverzeichnis setzen</translation>
     </message>
     <message>
-        <location line="+754"/>
+        <location line="+936"/>
         <source>Clear Clipboard</source>
         <translation>Zwischenablage leeren</translation>
     </message>
@@ -1287,7 +1286,7 @@
     <message>
         <location line="+3"/>
         <source>Community News</source>
-        <translation>Neuigkeiten der Gemeinschaft</translation>
+        <translation>Neuigkeiten der Community</translation>
     </message>
     <message>
         <location line="+30"/>
@@ -1305,7 +1304,8 @@
         <translation>Ein Verzeichnis höher</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="-1120"/>
+        <location line="+1123"/>
         <source>Browse directories</source>
         <translation>Verzeichnis suchen</translation>
     </message>
@@ -1379,7 +1379,7 @@
 <context>
     <name>news_reader</name>
     <message>
-        <location line="-1268"/>
+        <location line="-1279"/>
         <source>&lt;html&gt;
 &lt;body&gt;
 &lt;p&gt;
@@ -1392,7 +1392,18 @@
 &lt;/p&gt;
 &lt;p&gt;
 &lt;small&gt;&lt;em&gt;&amp;mdash; The Octave Developers, </source>
-        <translation type="unfinished"></translation>
+        <translation>&lt;html&gt;
+&lt;body&gt;
+&lt;p&gt;
+Die Neuigkeiten aus der Octave Community scheinen nicht erreichbar zu sein.
+&lt;/p&gt;
+&lt;p&gt;
+Für die aktuellsten Neuigkeiten besuche
+&lt;a href=&quot;http://octave.org/community-news.html&quot;&gt;http://octave.org/community-news.html&lt;/a&gt;
+sobald Du über eine Verbindung zum Internet verfügst (Link öffnet sich im externen Browser).
+&lt;/p&gt;
+&lt;p&gt;
+&lt;small&gt;&lt;em&gt;&amp;mdash; Die Entwickler von Octave,</translation>
     </message>
     <message>
         <location line="+18"/>
@@ -1409,7 +1420,19 @@
 &lt;/p&gt;
 &lt;p&gt;
 &lt;small&gt;&lt;em&gt;&amp;mdash; The Octave Developers, </source>
-        <translation type="unfinished"></translation>
+        <translation>&lt;html&gt;
+&lt;body&gt;
+&lt;p&gt;
+Die Verbindung zum Internet um aktuelle Neuigkeiten von der Octave Community anzuzeigen wurde deaktiviert.
+&lt;/p&gt;
+&lt;p&gt;
+Für aktuelle Neuigkeiten besuche
+&lt;a href=&quot;http://octave.org/community-news.html&quot;&gt;http://octave.org/community-news.html&lt;/a&gt;
+sobald Du über eine Verbindung zum Internet verfügst (Link öffnet sich im externen Browser)
+oder aktiviere die Internetverbindung in den Einstellungen unter Netzwerk.
+&lt;/p&gt;
+&lt;p&gt;
+&lt;small&gt;&lt;em&gt;&amp;mdash; Die Entwickler von Octave,</translation>
     </message>
 </context>
 <context>
@@ -1516,7 +1539,7 @@
 <context>
     <name>resource_manager</name>
     <message>
-        <location filename="../src/resource-manager.cc" line="+204"/>
+        <location filename="../src/resource-manager.cc" line="+224"/>
         <source>The settings file
 %1
 does not exist and can not be created.
@@ -1527,9 +1550,9 @@
         <translation>Die Konfigurationsdatei
 %1
 existiert nicht und kann nicht angelegt werden.
-Stellen Sie sicher, daß Sie Lese- und Schreibrechte für
+Stelle sicher, dass Du Lese- und Schreibrechte für
 %2
-besitzen.
+besitzt.
 Die Octave Benutzeroberfläche muss jetzt geschlossen werden.</translation>
     </message>
     <message>
@@ -1703,7 +1726,7 @@
     <message>
         <location line="+36"/>
         <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Select font, font size (as a difference from the default size), font style (bold, italic, underline), text color and background color (for the latter, the color pink (255,0,255) is a placeholder for the default background color)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
-        <translation type="unfinished"></translation>
+        <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Auswahl von Schrift, Schriftgröße (als Differenz von der Standardgröße), Schriftstil (&lt;b&gt;f&lt;/b&gt;ett, &lt;b&gt;k&lt;/b&gt;ursiv, &lt;b&gt;u&lt;/b&gt;nterstrichen), Text- und Hintergrundfarbe (für den Hintergrund ist die Farbe Pink (255,0,255) ein Platzhalter für die Standardfarbe)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
     </message>
     <message>
         <location line="+31"/>
@@ -1893,7 +1916,7 @@
     <message>
         <location filename="../src/welcome-wizard.cc" line="+44"/>
         <source>Community News</source>
-        <translation>Neuigkeiten der Gemeinschaft</translation>
+        <translation>Neuigkeiten der Community</translation>
     </message>
     <message>
         <location line="+5"/>
@@ -1918,7 +1941,12 @@
 &lt;p&gt;You may also view the news by selecting the &quot;Community News&quot; item in the &quot;Help&quot; menu in the GUI, or by visiting
 &lt;a href=&quot;http://octave.org/community-news.html&quot;&gt;http://octave.org/community-news.html&lt;/a&gt;.&lt;/p&gt;
 &lt;/body&gt;&lt;/html&gt;</source>
-        <translation type="unfinished"></translation>
+        <translation>&lt;html&gt;&lt;body&gt;
+&lt;p&gt;Beim Start der Octave GUI kann die Octave Webseite auf aktuelle Neuigkeiten und Informationen über die Octave Community geprüft werden.
+Die Überprüfung findet dann nur einmal am Tag statt und Neuigkeiten werden nur eingeblendet, wenn es seit der letzten Überprüfung etwas Neues gibt.&lt;/p&gt;
+&lt;p&gt;Du kannst dir die Neuigkeiten auch ansehen, indem Du den Punkt &quot;Neuigkeiten der Community&quot; im Menü auswählst oder folgende Internetseite besuchst:
+&lt;a href=&quot;http://octave.org/community-news.html&quot;&gt;http://octave.org/community-news.html&lt;/a&gt;.&lt;/p&gt;
+&lt;/body&gt;&lt;/html&gt;</translation>
     </message>
     <message>
         <location line="+26"/>
@@ -1929,7 +1957,13 @@
 &lt;head/&gt;&lt;body&gt;
 &lt;p&gt;Allow Octave to connect to the Octave web site when it starts to display current news and information about the Octave community.&lt;/p&gt;
 &lt;/body&gt;&lt;/html&gt;</source>
-        <translation type="unfinished"></translation>
+        <translation>&lt;html&gt;&lt;head&gt;
+&lt;style&gt;
+a:link { text-decoration: underline; color: #0000ff; }
+&lt;/style&gt;
+&lt;head/&gt;&lt;body&gt;
+&lt;p&gt;Erlaube Octave beim Programmstart eine Verbindung zur Octave Webseite herzustellen um aktuelle Neuigkeiten und Informationen über Octave anzuzeigen.&lt;/p&gt;
+&lt;/body&gt;&lt;/html&gt;</translation>
     </message>
 </context>
 <context>
@@ -1958,7 +1992,7 @@
     <message>
         <location filename="../src/welcome-wizard.cc" line="+135"/>
         <source>Welcome to GNU Octave</source>
-        <translation>Willkommen zu GNU Octave</translation>
+        <translation>Willkommen bei GNU Octave</translation>
     </message>
 </context>
 <context>
@@ -2010,7 +2044,7 @@
     <message>
         <location line="+1"/>
         <source>View the variables in the active workspace.</source>
-        <translation>Sehen Sie die Variablen ein, die sich in der aktiven Arbeitsumgebung befinden.</translation>
+        <translation>Variablen einsehen, die sich in der aktiven Arbeitsumgebung befinden.</translation>
     </message>
     <message>
         <location line="+76"/>
Binary file libgui/src/icons/warning.png has changed
--- a/libgui/src/main-window.cc	Tue Nov 26 12:38:46 2013 -0500
+++ b/libgui/src/main-window.cc	Sat Nov 30 12:39:54 2013 -0500
@@ -1150,6 +1150,8 @@
 
   construct_tool_bar ();
 
+  construct_warning_bar ();
+
   connect (qApp, SIGNAL (aboutToQuit ()),
            this, SLOT (prepare_to_exit ()));
 
@@ -1771,6 +1773,167 @@
 }
 
 void
+main_window::construct_warning_bar (void)
+{
+  QSettings *settings = resource_manager::get_settings ();
+
+  if (settings
+      && settings->value ("General/hide_new_gui_warning", false).toBool ())
+    {
+      construct_gui_info_button ();
+
+      return;
+    }
+
+  _warning_bar = new QDockWidget (this);
+  _warning_bar->setAttribute (Qt::WA_DeleteOnClose);
+
+  QFrame *box = new QFrame (_warning_bar);
+
+  QLabel *icon = new QLabel (box);
+  QIcon warning_icon
+    = QIcon::fromTheme ("dialog-warning",
+                        QIcon (":/actions/icons/warning.png"));
+  QPixmap icon_pixmap = warning_icon.pixmap (QSize (32, 32));
+  icon->setPixmap (icon_pixmap);
+
+  QTextBrowser *msg = new QTextBrowser (box);
+  msg->setOpenExternalLinks (true);
+  msg->setText
+    (tr ("<strong>You are using a release candidate of Octave's experimental GUI.</strong>  "
+         "Octave is under continuous improvement and the GUI will be the "
+         "default interface for the 4.0 release.  For more information, "
+         "select the \"Release Notes\" item in the \"Help\" menu of the GUI, "
+         "or visit <a href=\"http://octave.org\">http://octave.org</a>."));
+
+  msg->setStyleSheet ("background-color: #ffd97f; color: black; margin 4px;");
+  msg->setMinimumWidth (100);
+  msg->setMinimumHeight (60);
+  msg->setMaximumHeight (80);
+  msg->setSizePolicy (QSizePolicy (QSizePolicy::Expanding,
+                                   QSizePolicy::Minimum));
+
+  QPushButton *info_button = new QPushButton (tr ("More Info"), box);
+  QPushButton *hide_button = new QPushButton (tr ("Hide"), box);
+
+  connect (info_button, SIGNAL (clicked ()),
+           this, SLOT (show_gui_info ()));
+
+  connect (hide_button, SIGNAL (clicked ()),
+           this, SLOT (hide_warning_bar ()));
+
+  QVBoxLayout *button_layout = new QVBoxLayout;
+
+  button_layout->addWidget (info_button);
+  button_layout->addWidget (hide_button);
+
+  QHBoxLayout *icon_and_message = new QHBoxLayout;
+
+  icon_and_message->addWidget (icon);
+  icon_and_message->addSpacing (10);
+  icon_and_message->addWidget (msg);
+  icon_and_message->addSpacing (10);
+  icon_and_message->addLayout (button_layout);
+
+  icon_and_message->setAlignment (hide_button, Qt::AlignTop);
+
+  box->setFrameStyle (QFrame::Box);
+  box->setLineWidth (2);
+  box->setMaximumWidth (1000);
+  box->adjustSize ();
+  box->setLayout (icon_and_message);
+
+  _warning_bar->setFeatures (QDockWidget::NoDockWidgetFeatures);
+  _warning_bar->setObjectName ("WarningToolBar");
+  _warning_bar->setWidget (box);
+
+  setCorner (Qt::TopLeftCorner, Qt::TopDockWidgetArea);
+  setCorner (Qt::TopRightCorner, Qt::TopDockWidgetArea);
+
+  addDockWidget (Qt::TopDockWidgetArea, _warning_bar);
+};
+
+void
+main_window::construct_gui_info_button (void)
+{
+  QIcon warning_icon
+    = QIcon::fromTheme ("dialog-warning",
+                        QIcon (":/actions/icons/warning.png"));
+
+  _gui_info_button
+    = new QPushButton (warning_icon, tr ("Experimental GUI Info"));
+
+  _main_tool_bar->addWidget (_gui_info_button);
+
+  connect (_gui_info_button, SIGNAL (clicked ()),
+           this, SLOT (show_gui_info ()));
+}
+
+void
+main_window::hide_warning_bar (void)
+{
+  QSettings *settings = resource_manager::get_settings ();
+
+  if (settings)
+    {
+      settings->setValue ("General/hide_new_gui_warning", true);
+
+      settings->sync ();
+    }
+
+  removeDockWidget (_warning_bar);
+
+  construct_gui_info_button ();
+}
+
+void
+main_window::show_gui_info (void)
+{
+  QString gui_info
+    (tr ("<p><strong>A Note about Octave's New GUI</strong></p>"
+         "<p>One of the biggest new features for Octave 3.8 is a graphical "
+         "user interface.  It is the one thing that users have requested "
+         "most often over the last few years and now it is almost ready.  "
+         "But because it is not quite as polished as we would like, we "
+         "have decided to wait until the 4.0.x release series before "
+         "making the GUI the default interface.</p>"
+         "<p>Given the length of time and the number of bug fixes and "
+         "improvements since the last major release Octave, we also "
+         "decided against delaying the release of all these new "
+         "improvements any longer just to perfect the GUI.  So please "
+         "enjoy the 3.8 release of Octave and the preview of the new GUI.  "
+         "We beleive it is working reasonably well, but we also know that "
+         "there are some obvious rough spots and many things that could be "
+         "improved.</p>"
+         "<p><strong>We Need Your Help</strong></p>"
+         "<p>There are many ways that you can help us fix the remaining "
+         "problems, complete the GUI, and improve the overall user "
+         "experience for both novices and experts alike (links will open "
+         "an external browser):</p>"
+         "<p><ul><li>If you are a skilled software developer, you can "
+         "help by contributing your time to help "
+         "<a href=\"http://octave.org/get-involved.html\">develop "
+         "Octave</a>.</li>"
+         "<li>If Octave does not work properly, you are encouraged to "
+         "<a href=\"http://octave.org/bugs.html\">report problems </a> "
+         "that you find.</li>"
+         "<li>Whether you are a user or developer, you can "
+         "<a href=\"http://octave.org/donate.html\">help to fund the "
+         "project</a>.  "
+         "Octave development takes a lot of time and expertise.  "
+         "Your contributions help to ensure that Octave will continue "
+         "to improve.</li></ul></p>"
+         "<p>We hope you find Octave to be useful.  Please help us make "
+         "it even better for the future!</p>"));
+
+  QMessageBox gui_info_dialog (QMessageBox::Warning,
+                               tr ("Experimental GUI Info"),
+                               gui_info, QMessageBox::Close);
+
+  gui_info_dialog.exec ();
+}
+
+void
 main_window::construct_tool_bar (void)
 {
   _main_tool_bar = addToolBar ("Main");
--- a/libgui/src/main-window.h	Tue Nov 26 12:38:46 2013 -0500
+++ b/libgui/src/main-window.h	Sat Nov 30 12:39:54 2013 -0500
@@ -124,6 +124,9 @@
   void exit (int status);
   void reset_windows (void);
 
+  void hide_warning_bar (void);
+  void show_gui_info (void);
+
   void change_directory (const QString& dir);
   void browse_for_directory (void);
   void set_current_working_directory (const QString& dir);
@@ -222,6 +225,9 @@
 
   void construct_news_menu (QMenuBar *p);
 
+  void construct_warning_bar (void);
+  void construct_gui_info_button (void);
+
   void construct_tool_bar (void);
 
   void establish_octave_link (void);
@@ -293,6 +299,9 @@
 
   QToolBar *_main_tool_bar;
 
+  QDockWidget *_warning_bar;
+  QPushButton *_gui_info_button;
+
   QMenu *_debug_menu;
 
   QAction *_debug_continue;
--- a/libgui/src/module.mk	Tue Nov 26 12:38:46 2013 -0500
+++ b/libgui/src/module.mk	Sat Nov 30 12:39:54 2013 -0500
@@ -67,6 +67,7 @@
   src/icons/terminal.png \
   src/icons/undo.png \
   src/icons/up.png \
+  src/icons/warning.png \
   src/icons/widget-close.png \
   src/icons/widget-dock.png \
   src/icons/widget-undock.png \
--- a/libgui/src/octave-gui.cc	Tue Nov 26 12:38:46 2013 -0500
+++ b/libgui/src/octave-gui.cc	Sat Nov 30 12:39:54 2013 -0500
@@ -127,28 +127,35 @@
   if (start_gui)
     {
       QApplication application (argc, argv);
+      QTranslator gui_tr, qt_tr, qsci_tr;
 
-      // Set the codec for all strings
+      // Set the codec for all strings (before wizard)
       QTextCodec::setCodecForCStrings (QTextCodec::codecForName ("UTF-8"));
 
+      // show wizard if this is the first run
       if (resource_manager::is_first_run ())
         {
+          resource_manager::config_translators (&qt_tr, &qsci_tr, &gui_tr); // before wizard
+          application.installTranslator (&qt_tr);
+          application.installTranslator (&qsci_tr);
+          application.installTranslator (&gui_tr);
+
           welcome_wizard welcomeWizard;
 
           if (welcomeWizard.exec () == QDialog::Rejected)
             exit (1);
-        }
-
-      resource_manager::reload_settings ();
 
-      // install translators for the gui and qt text
-      QTranslator gui_tr, qt_tr, qsci_tr;
+          resource_manager::reload_settings ();  // install settings file
+        }
+      else
+        {
+          resource_manager::reload_settings ();  // get settings file
 
-      resource_manager::config_translators (&qt_tr, &qsci_tr, &gui_tr);
-
-      application.installTranslator (&qt_tr);
-      application.installTranslator (&qsci_tr);
-      application.installTranslator (&gui_tr);
+          resource_manager::config_translators (&qt_tr, &qsci_tr, &gui_tr); // after settings
+          application.installTranslator (&qt_tr);
+          application.installTranslator (&qsci_tr);
+          application.installTranslator (&gui_tr);
+        }
 
       // update network-settings
       resource_manager::update_network_settings ();
--- a/libgui/src/resource-manager.cc	Tue Nov 26 12:38:46 2013 -0500
+++ b/libgui/src/resource-manager.cc	Sat Nov 30 12:39:54 2013 -0500
@@ -100,35 +100,33 @@
   QString qt_trans_dir
     = QLibraryInfo::location (QLibraryInfo::TranslationsPath);
 
+  QString language = "SYSTEM";  // take system language per default
+
   QSettings *settings = resource_manager::get_settings ();
 
   if (settings)
     {
-      // get the locale from the settings
-      QString language = settings->value ("language","SYSTEM").toString ();
-
-      if (language == "SYSTEM")
-        language = QLocale::system ().name ();    // get system wide locale
+      // get the locale from the settings if already available
+      language = settings->value ("language","SYSTEM").toString ();
+    }
 
-      // load the translator file for qt strings
-      loaded = qt_tr->load ("qt_" + language, qt_trans_dir);
+  if (language == "SYSTEM")
+    language = QLocale::system ().name ();    // get system wide locale
 
-      if (!loaded) // try lower case
-        qt_tr->load ("qt_" + language.toLower (), qt_trans_dir);
+  // load the translator file for qt strings
+  loaded = qt_tr->load ("qt_" + language, qt_trans_dir);
 
-      // load the translator file for qscintilla settings
-      loaded = qsci_tr->load ("qscintilla_" + language, qt_trans_dir);
+  if (!loaded) // try lower case
+    qt_tr->load ("qt_" + language.toLower (), qt_trans_dir);
 
-      if (!loaded) // try lower case
-        qsci_tr->load ("qscintilla_" + language.toLower (), qt_trans_dir);
+  // load the translator file for qscintilla settings
+  loaded = qsci_tr->load ("qscintilla_" + language, qt_trans_dir);
 
-      // load the translator file for gui strings
-      gui_tr->load (language, get_gui_translation_dir ());
-    }
-  else
-    {
-      // FIXME: Is this an error?  If so, what should we do?
-    }
+  if (!loaded) // try lower case
+    qsci_tr->load ("qscintilla_" + language.toLower (), qt_trans_dir);
+
+  // load the translator file for gui strings
+  gui_tr->load (language, get_gui_translation_dir ());
 }
 
 bool
--- a/libgui/src/resource.qrc	Tue Nov 26 12:38:46 2013 -0500
+++ b/libgui/src/resource.qrc	Sat Nov 30 12:39:54 2013 -0500
@@ -63,6 +63,7 @@
         <file>icons/graphic_logo_WorkspaceView.png</file>
         <file>icons/graphic_logo_DocumentationDockWidget.png</file>
         <file>icons/graphic_logo_ReleaseWidget.png</file>
+        <file>icons/warning.png</file>
         <file>icons/widget-close.png</file>
         <file>icons/widget-dock.png</file>
         <file>icons/widget-undock.png</file>
--- a/libinterp/corefcn/syscalls.cc	Tue Nov 26 12:38:46 2013 -0500
+++ b/libinterp/corefcn/syscalls.cc	Sat Nov 30 12:39:54 2013 -0500
@@ -378,53 +378,71 @@
 }
 
 /*
-%!test
-%! unix_sort = true;
-%! cmd = {"sort", "-r"};
-%! if (ispc ())
-%!   status = system ("sort /? 2>NUL 1>NUL");
-%!   if (status == 0)
-%!     unix_sort = false;
-%!     cmd = {"sort", "/R"};
-%!   endif
-%! endif
-%! [in, out, pid] = popen2 (cmd{:});
-%! if (isunix ())
+
+%!test  # UNIX-style test
+%! if (isunix () || ismac ())
+%!   [in, out, pid] = popen2 ("sort", "-r");
 %!   EAGAIN = errno ("EAGAIN");
-%! else
-%!   EAGAIN = errno ("EINVAL");
-%! endif
-%! fputs (in, "these\nare\nsome\nstrings\n");
-%! fclose (in);
-%! done = false;
-%! str = {};
-%! idx = 0;
-%! errs = 0;
-%! do
-%!   if (! isunix ())
-%!     errno (0);
-%!   endif
-%!   s = fgets (out);
-%!   if (ischar (s))
-%!     idx++;
-%!     str{idx} = s;
-%!   elseif (errno () == EAGAIN)
-%!     fclear (out);
-%!     sleep (0.1);
-%!     if (++errs == 100)
+%!   fputs (in, "these\nare\nsome\nstrings\n");
+%!   fclose (in);
+%!   done = false;
+%!   str = {};
+%!   idx = 0;
+%!   errs = 0;
+%!   do
+%!     if (ismac ())  # FIXME: Is this necessary?
+%!       errno (0);
+%!     endif
+%!     s = fgets (out);
+%!     if (ischar (s))
+%!       idx++;
+%!       str{idx} = s;
+%!     elseif (errno () == EAGAIN)
+%!       fclear (out);
+%!       sleep (0.1);
+%!       if (++errs == 100)
+%!         done = true;
+%!       endif
+%!     else
 %!       done = true;
 %!     endif
-%!   else
-%!     done = true;
-%!   endif
-%! until (done)
-%! fclose (out);
-%! waitpid (pid);
-%! if (unix_sort)
+%!   until (done)
+%!   fclose (out);
+%!   waitpid (pid);
 %!   assert (str, {"these\n","strings\n","some\n","are\n"});
-%! else
+%! endif
+
+%!test  # Windows-style test
+%! if (ispc () && ! isunix ())
+%!   [in, out, pid] = popen2 ('C:\Windows\system32\sort.exe', "/R");
+%!   EAGAIN = errno ("EINVAL");
+%!   fputs (in, "these\r\nare\r\nsome\r\nstrings\r\n");
+%!   fclose (in);
+%!   done = false;
+%!   str = {};
+%!   idx = 0;
+%!   errs = 0;
+%!   do
+%!     errno (0);
+%!     s = fgets (out);
+%!     if (ischar (s))
+%!       idx++;
+%!       str{idx} = s;
+%!     elseif (errno () == EAGAIN)
+%!       fclear (out);
+%!       sleep (0.1);
+%!       if (++errs == 100)
+%!         done = true;
+%!       endif
+%!     else
+%!       done = true;
+%!     endif
+%!   until (done)
+%!   fclose (out);
+%!   waitpid (pid);
 %!   assert (str, {"these\r\n","strings\r\n","some\r\n","are\r\n"});
 %! endif
+
 */
 
 DEFUNX ("fcntl", Ffcntl, args, ,
--- a/libinterp/octave-value/ov-class.cc	Tue Nov 26 12:38:46 2013 -0500
+++ b/libinterp/octave-value/ov-class.cc	Sat Nov 30 12:39:54 2013 -0500
@@ -2016,33 +2016,113 @@
 %!error class ()
 */
 
-DEFUN (__isa_parent__, args, ,
+DEFUN (isa, args, ,
        "-*- texinfo -*-\n\
-@deftypefn {Built-in Function} {} __isa_parent__ (@var{class}, @var{name})\n\
-Undocumented internal function.\n\
+@deftypefn {Function File} {} isa (@var{obj}, @var{classname})\n\
+Return true if @var{obj} is an object from the class @var{classname}.\n\
+\n\
+@var{classname} may also be one of the following class categories:\n\
+\n\
+@table @asis\n\
+@item @qcode{\"float\"}\n\
+Floating point value comprising classes @qcode{\"double\"} and\n\
+@qcode{\"single\"}.\n\
+\n\
+@item @qcode{\"integer\"}\n\
+Integer value comprising classes (u)int8, (u)int16, (u)int32, (u)int64.\n\
+\n\
+@item @qcode{\"numeric\"}\n\
+Numeric value comprising either a floating point or integer value.\n\
+@end table\n\
+\n\
+If @var{classname} is a cell array of string, a logical array of the same\n\
+size is returned, containing true for each class to which @var{obj}\n\
+belongs to.\n\
+\n\
+@seealso{class, typeinfo}\n\
 @end deftypefn")
 {
-  octave_value retval = false;
-
-  if (args.length () == 2)
+  octave_value retval;
+
+  if (args.length () != 2)
+    {
+      print_usage ();
+      return retval;
+    }
+
+  octave_value obj = args(0); // not const because of find_parent_class ()
+  const Array<std::string> cls = args(1).cellstr_value ();
+  if (error_state)
+    {
+      error ("isa: CLASSNAME must be a string or cell attay of strings");
+      return retval;
+    }
+
+  boolNDArray matches (cls.dims (), false);
+  const octave_idx_type n = cls.numel ();
+  for (octave_idx_type idx = 0; idx < n; idx++)
     {
-      octave_value cls = args(0);
-      octave_value nm = args(1);
-
-      if (! error_state)
-        {
-          if (cls.find_parent_class (nm.string_value ()))
-            retval = true;
-        }
-      else
-        error ("__isa_parent__: expecting arguments to be character strings");
+      const std::string cl = cls(idx);
+      if ((cl == "float"   && obj.is_float_type   ()) ||
+          (cl == "integer" && obj.is_integer_type ()) ||
+          (cl == "numeric" && obj.is_numeric_type ()) ||
+          obj.class_name () == cl || obj.find_parent_class (cl))
+        matches(idx) = true;
     }
-  else
-    print_usage ();
-
-  return retval;
+  return octave_value (matches);
 }
 
+/*
+%!assert (isa ("char", "float"), false)
+%!assert (isa (logical (1), "float"), false)
+%!assert (isa (double (13), "float"), true)
+%!assert (isa (single (13), "float"), true)
+%!assert (isa (int8 (13), "float"), false)
+%!assert (isa (int16 (13), "float"), false)
+%!assert (isa (int32 (13), "float"), false)
+%!assert (isa (int64 (13), "float"), false)
+%!assert (isa (uint8 (13), "float"), false)
+%!assert (isa (uint16 (13), "float"), false)
+%!assert (isa (uint32 (13), "float"), false)
+%!assert (isa (uint64 (13), "float"), false)
+%!assert (isa ("char", "numeric"), false)
+%!assert (isa (logical (1), "numeric"), false)
+%!assert (isa (double (13), "numeric"), true)
+%!assert (isa (single (13), "numeric"), true)
+%!assert (isa (int8 (13), "numeric"), true)
+%!assert (isa (int16 (13), "numeric"), true)
+%!assert (isa (int32 (13), "numeric"), true)
+%!assert (isa (int64 (13), "numeric"), true)
+%!assert (isa (uint8 (13), "numeric"), true)
+%!assert (isa (uint16 (13), "numeric"), true)
+%!assert (isa (uint32 (13), "numeric"), true)
+%!assert (isa (uint64 (13), "numeric"), true)
+%!assert (isa (uint8 (13), "integer"), true)
+%!assert (isa (double (13), "integer"), false)
+%!assert (isa (single (13), "integer"), false)
+%!assert (isa (single (13), {"integer", "float", "single"}), [false true true])
+
+%!assert (isa (double (13), "double"))
+%!assert (isa (single (13), "single"))
+%!assert (isa (int8 (13), "int8"))
+%!assert (isa (int16 (13), "int16"))
+%!assert (isa (int32 (13), "int32"))
+%!assert (isa (int64 (13), "int64"))
+%!assert (isa (uint8 (13), "uint8"))
+%!assert (isa (uint16 (13), "uint16"))
+%!assert (isa (uint32 (13), "uint32"))
+%!assert (isa (uint64 (13), "uint64"))
+%!assert (isa ("string", "char"))
+%!assert (isa (true, "logical"))
+%!assert (isa (false, "logical"))
+%!assert (isa ({1, 2}, "cell"))
+%!assert (isa ({1, 2}, {"numeric", "integer", "cell"}), [false false true])
+
+%!test
+%! a.b = 1;
+%! assert (isa (a, "struct"));
+*/
+
 DEFUN (__parent_classes__, args, ,
        "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} __parent_classes__ (@var{x})\n\
--- a/scripts/general/isa.m	Tue Nov 26 12:38:46 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +0,0 @@
-## Copyright (C) 2004-2013 John W. Eaton
-##
-## 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
-## <http://www.gnu.org/licenses/>.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {} isa (@var{obj}, @var{classname})
-## Return true if @var{obj} is an object from the class @var{classname}.
-##
-## @var{classname} may also be one of the following class categories: 
-##
-## @table @asis
-## @item @qcode{"float"}
-## Floating point value comprising classes @qcode{"double"} and
-## @qcode{"single"}.
-##
-## @item @qcode{"integer"}
-## Integer value comprising classes (u)int8, (u)int16, (u)int32, (u)int64.
-##
-## @item @qcode{"numeric"}
-## Numeric value comprising either a floating point or integer value.
-## @end table
-## @seealso{class, typeinfo}
-## @end deftypefn
-
-## Author: Paul Kienzle <pkienzle@users.sf.net>
-## Adapted-by: jwe
-
-function retval = isa (obj, classname)
-
-  if (nargin != 2)
-    print_usage ();
-  endif
-
-  if (strcmp (classname, "float"))
-    retval = isfloat (obj);
-  elseif (strcmp (classname, "integer"))
-    retval = isinteger (obj);
-  elseif (strcmp (classname, "numeric"))
-    retval = isnumeric (obj);
-  else
-    class_of_obj = class (obj);
-    retval = strcmp (class_of_obj, classname);
-    if (! retval && isobject (obj))
-      retval = __isa_parent__ (obj, classname);
-    endif
-  endif
-
-endfunction
-
-
-%!assert (isa ("char", "float"), false)
-%!assert (isa (logical (1), "float"), false)
-%!assert (isa (double (13), "float"), true)
-%!assert (isa (single (13), "float"), true)
-%!assert (isa (int8 (13), "float"), false)
-%!assert (isa (int16 (13), "float"), false)
-%!assert (isa (int32 (13), "float"), false)
-%!assert (isa (int64 (13), "float"), false)
-%!assert (isa (uint8 (13), "float"), false)
-%!assert (isa (uint16 (13), "float"), false)
-%!assert (isa (uint32 (13), "float"), false)
-%!assert (isa (uint64 (13), "float"), false)
-%!assert (isa ("char", "numeric"), false)
-%!assert (isa (logical (1), "numeric"), false)
-%!assert (isa (double (13), "numeric"), true)
-%!assert (isa (single (13), "numeric"), true)
-%!assert (isa (int8 (13), "numeric"), true)
-%!assert (isa (int16 (13), "numeric"), true)
-%!assert (isa (int32 (13), "numeric"), true)
-%!assert (isa (int64 (13), "numeric"), true)
-%!assert (isa (uint8 (13), "numeric"), true)
-%!assert (isa (uint16 (13), "numeric"), true)
-%!assert (isa (uint32 (13), "numeric"), true)
-%!assert (isa (uint64 (13), "numeric"), true)
-%!assert (isa (uint8 (13), "integer"), true)
-%!assert (isa (double (13), "integer"), false)
-%!assert (isa (single (13), "integer"), false)
-
-%!assert (isa (double (13), "double"))
-%!assert (isa (single (13), "single"))
-%!assert (isa (int8 (13), "int8"))
-%!assert (isa (int16 (13), "int16"))
-%!assert (isa (int32 (13), "int32"))
-%!assert (isa (int64 (13), "int64"))
-%!assert (isa (uint8 (13), "uint8"))
-%!assert (isa (uint16 (13), "uint16"))
-%!assert (isa (uint32 (13), "uint32"))
-%!assert (isa (uint64 (13), "uint64"))
-%!assert (isa ("string", "char"))
-%!assert (isa (true, "logical"))
-%!assert (isa (false, "logical"))
-%!assert (isa ({1, 2}, "cell"))
-%!test
-%! a.b = 1;
-%! assert (isa (a, "struct"));
-
--- a/scripts/general/module.mk	Tue Nov 26 12:38:46 2013 -0500
+++ b/scripts/general/module.mk	Sat Nov 30 12:39:54 2013 -0500
@@ -40,7 +40,6 @@
   general/interp3.m \
   general/interpn.m \
   general/interpft.m \
-  general/isa.m \
   general/iscolumn.m \
   general/isdir.m \
   general/isequal.m \
--- a/scripts/testfun/__run_test_suite__.m	Tue Nov 26 12:38:46 2013 -0500
+++ b/scripts/testfun/__run_test_suite__.m	Sat Nov 30 12:39:54 2013 -0500
@@ -28,7 +28,7 @@
   fixedtestdir = fullfile (testsdir, "fixed");
   fcnfiledir = octave_config_info ("fcnfiledir");
   if (nargin == 0)
-    fcndirs = { libinterptestdir, liboctavetestdir, fcnfiledir };
+    fcndirs = { liboctavetestdir, libinterptestdir, fcnfiledir };
     fixedtestdirs = { fixedtestdir };
   endif
   global files_with_no_tests = {};
--- a/src/octave-config.in.cc	Tue Nov 26 12:38:46 2013 -0500
+++ b/src/octave-config.in.cc	Sat Nov 30 12:39:54 2013 -0500
@@ -51,25 +51,25 @@
 "                        expects to find locally installed .oct files.\n"
 "\n"
 "  -p VAR, --print VAR   Print the value of the given configuration\n"
-"		        variable VAR.  Recognized variables are:\n"
+"                        variable VAR.  Recognized variables are:\n"
 "\n"
-"			  API_VERSION	         LOCALAPIARCHLIBDIR\n"
-"			  CANONICAL_HOST_TYPE	 LOCALAPIFCNFILEDIR\n"
-"			  DEFAULT_PAGER	         LOCALAPIOCTFILEDIR\n"
-"			  ARCHLIBDIR	         LOCALARCHLIBDIR\n"
-"			  BINDIR	         LOCALFCNFILEDIR\n"
-"			  DATADIR	         LOCALOCTFILEDIR\n"
-"			  DATAROOTDIR	         LOCALSTARTUPFILEDIR\n"
-"			  EXEC_PREFIX	         LOCALVERARCHLIBDIR\n"
-"			  FCNFILEDIR		 LOCALVERFCNFILEDIR\n"
-"			  LOCALVEROCTFILEDIR	 MAN1DIR\n"
-"			  IMAGEDIR	         MANDIR\n"
-"			  MAN1EXT	         OCTFILEDIR\n"
-"			  INCLUDEDIR	         OCTINCLUDEDIR\n"
-"			  INFODIR	         OCTLIBDIR\n"
-"			  INFOFILE	         PREFIX\n"
-"			  LIBDIR	         STARTUPFILEDIR\n"
-"			  LIBEXECDIR		 VERSION\n"
+"                          API_VERSION            LOCALAPIARCHLIBDIR\n"
+"                          CANONICAL_HOST_TYPE    LOCALAPIFCNFILEDIR\n"
+"                          DEFAULT_PAGER          LOCALAPIOCTFILEDIR\n"
+"                          ARCHLIBDIR             LOCALARCHLIBDIR\n"
+"                          BINDIR                 LOCALFCNFILEDIR\n"
+"                          DATADIR                LOCALOCTFILEDIR\n"
+"                          DATAROOTDIR            LOCALSTARTUPFILEDIR\n"
+"                          EXEC_PREFIX            LOCALVERARCHLIBDIR\n"
+"                          FCNFILEDIR             LOCALVERFCNFILEDIR\n"
+"                          LOCALVEROCTFILEDIR     MAN1DIR\n"
+"                          IMAGEDIR               MANDIR\n"
+"                          MAN1EXT                OCTFILEDIR\n"
+"                          INCLUDEDIR             OCTINCLUDEDIR\n"
+"                          INFODIR                OCTLIBDIR\n"
+"                          INFOFILE               PREFIX\n"
+"                          LIBDIR                 STARTUPFILEDIR\n"
+"                          LIBEXECDIR             VERSION\n"
 "\n"
 "  -v, --version         Print the Octave version number.\n"
 "\n";
--- a/src/octave-config.in.sh	Tue Nov 26 12:38:46 2013 -0500
+++ b/src/octave-config.in.sh	Sat Nov 30 12:39:54 2013 -0500
@@ -117,7 +117,7 @@
                         expects to find locally installed .oct files.
 
   -p VAR, --print VAR   Print the value of the given configuration
-		        variable VAR.  Recognized variables are:
+                        variable VAR.  Recognized variables are:
 
                           API_VERSION             LOCALAPIOCTFILEDIR
                           ARCHLIBDIR              LOCALARCHLIBDIR
--- a/test/fntests.m	Tue Nov 26 12:38:46 2013 -0500
+++ b/test/fntests.m	Sat Nov 30 12:39:54 2013 -0500
@@ -43,12 +43,12 @@
   testdirs = {currdir, srcdir};
 endif
 
+liboctave_tree = canonicalize_file_name (fullfile (topbuilddir, "liboctave"));
 src_tree = canonicalize_file_name (fullfile (topbuilddir, "libinterp"));
-liboctave_tree = canonicalize_file_name (fullfile (topbuilddir, "liboctave"));
 script_tree = canonicalize_file_name (fullfile (topsrcdir, "scripts"));
 local_script_tree = canonicalize_file_name (fullfile (currdir, "../scripts"));
 
-fundirs = {src_tree, liboctave_tree, script_tree};
+fundirs = {liboctave_tree, src_tree, script_tree};
 
 if (! strcmp (currdir, srcdir))
   fundirs{end+1} = local_script_tree;