changeset 25934:332be8be16eb

dynamically load qt graphics * configure.ac (QT_OPENGL_LIBS): New variable. (LIBOCTGUI_LINK_DEPS): Delete $OPENGL_LIBS from the list. * acinclude.m4 (OCTAVE_CHECK_QT_VERSION): Check for Qt OpenGL module separately from other Qt modules. * subst-cross-config-vals.in.sh, subst-config-vals.in.sh: Substitute it. * build-env.h, build-env.in.cc, toplev.cc: Include QT_OPENGL_LIBS in build info. * libgui/src/module.mk (%canon_reldir%_%canon_reldir%_la_CPPFLAGS): Delete -I$(srcdir)/libgui/graphics from the list. * __init_qt__.cc: Use DEFUN_DLD and DEFMETHOD_DLD macros. Include comment to register qt toolkit using PKG_ADD file. * libgui/graphics/module.mk: Build __init_qt__.oct. * libgui/module.mk (%canon_reldir%_liboctgui_la_LIBADD): Delete $(LIBOCTGUI_GRAPHICS_LIB) from the list. Use $(QT_LIBS) instead of $(LIBOCTGUI_LINK_DEPS). * main-window.cc: (octave_interpreter::octave_interpreter): Don't call install___init_qt___functions or register qt graphics toolkit. * run-octave.in: Add $builddir/libgui/graphics directory to LOADPATH.
author John W. Eaton <jwe@octave.org>
date Fri, 28 Sep 2018 18:18:09 -0400
parents a00379f6f8c4
children 4b661d535ddb
files build-aux/subst-config-vals.in.sh build-aux/subst-cross-config-vals.in.sh configure.ac libgui/graphics/__init_qt__.cc libgui/graphics/module.mk libgui/module.mk libgui/src/main-window.cc libgui/src/module.mk libinterp/build-env.h libinterp/build-env.in.cc libinterp/corefcn/toplev.cc m4/acinclude.m4 run-octave.in
diffstat 13 files changed, 88 insertions(+), 41 deletions(-) [+]
line wrap: on
line diff
--- a/build-aux/subst-config-vals.in.sh	Mon Oct 15 15:27:36 2018 -0400
+++ b/build-aux/subst-config-vals.in.sh	Fri Sep 28 18:18:09 2018 -0400
@@ -200,6 +200,7 @@
 QT_CPPFLAGS="@QT_CPPFLAGS@"
 QT_LDFLAGS="@QT_LDFLAGS@"
 QT_LIBS="@QT_LIBS@"
+QT_OPENGL_LIBS="@QT_OPENGL_LIBS@"
 RANLIB="@RANLIB@"
 RDYNAMIC_FLAG="@RDYNAMIC_FLAG@"
 READLINE_LIBS="@READLINE_LIBS@"
@@ -372,6 +373,7 @@
   -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_QT_OPENGL_LIBS%|\"${QT_OPENGL_LIBS}\"|" \
   -e "s|%OCTAVE_CONF_RANLIB%|\"${RANLIB}\"|" \
   -e "s|%OCTAVE_CONF_RDYNAMIC_FLAG%|\"${RDYNAMIC_FLAG}\"|" \
   -e "s|%OCTAVE_CONF_READLINE_LIBS%|\"${READLINE_LIBS}\"|" | \
--- a/build-aux/subst-cross-config-vals.in.sh	Mon Oct 15 15:27:36 2018 -0400
+++ b/build-aux/subst-cross-config-vals.in.sh	Fri Sep 28 18:18:09 2018 -0400
@@ -204,6 +204,7 @@
 QT_CPPFLAGS="@QT_CPPFLAGS@"
 QT_LDFLAGS="@QT_LDFLAGS@"
 QT_LIBS="@QT_LIBS@"
+QT_OPENGL_LIBS="@QT_OPENGL_LIBS@"
 RANLIB="@RANLIB@"
 RDYNAMIC_FLAG="@RDYNAMIC_FLAG@"
 READLINE_LIBS="@READLINE_LIBS@"
@@ -376,6 +377,7 @@
   -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_QT_OPENGL_LIBS%|\"${QT_OPENGL_LIBS}\"|" \
   -e "s|%OCTAVE_CONF_RANLIB%|\"${RANLIB}\"|" \
   -e "s|%OCTAVE_CONF_RDYNAMIC_FLAG%|\"${RDYNAMIC_FLAG}\"|" \
   -e "s|%OCTAVE_CONF_READLINE_LIBS%|\"${READLINE_LIBS}\"|" | \
--- a/configure.ac	Mon Oct 15 15:27:36 2018 -0400
+++ b/configure.ac	Fri Sep 28 18:18:09 2018 -0400
@@ -2789,7 +2789,7 @@
 OCTAVE_GUI_LINK_OPTS=""
 
 if test $build_qt_gui = yes; then
-  LIBOCTGUI_LINK_DEPS="$QT_LIBS $OPENGL_LIBS"
+  LIBOCTGUI_LINK_DEPS="$QT_LIBS"
   LIBOCTGUI_LINK_OPTS="$QT_LDFLAGS"
 
   if test $link_all_deps = yes || test -n "$QT_LDFLAGS"; then
@@ -3028,7 +3028,8 @@
   QRUPDATE libraries:            $QRUPDATE_LIBS
   Qt CPPFLAGS:                   $QT_CPPFLAGS
   Qt LDFLAGS:                    $QT_LDFLAGS
-  Qt libraries:                  $QT_LIBS
+  Qt GUI libraries:              $QT_LIBS
+  Qt OpenGL libraries:           $QT_OPENGL_LIBS
   Qt moc:                        $MOC $MOCFLAGS
   Qt uic:                        $UIC $UICFLAGS
   Qt rcc:                        $RCC $RCCFLAGS
--- a/libgui/graphics/__init_qt__.cc	Mon Oct 15 15:27:36 2018 -0400
+++ b/libgui/graphics/__init_qt__.cc	Fri Sep 28 18:18:09 2018 -0400
@@ -31,7 +31,7 @@
 #include <QPalette>
 #include <QRegExp>
 
-#include "defun.h"
+#include "defun-dld.h"
 #include "graphics.h"
 #include "gtk-manager.h"
 #include "interpreter.h"
@@ -41,6 +41,8 @@
 #include "QtHandlesUtils.h"
 #include "__init_qt__.h"
 
+// PKG_ADD: if (__have_feature__ ("QT") && __have_feature__ ("OPENGL") && have_window_system ()) register_graphics_toolkit ("qt"); endif
+
 namespace QtHandles
 {
 
@@ -95,14 +97,14 @@
   }
 }
 
-DEFMETHOD (__init_qt__, interp, , , "")
+DEFMETHOD_DLD (__init_qt__, interp, , , "")
 {
   QtHandles::__init__ (interp);
 
   return octave_value ();
 }
 
-DEFUN (__shutdown_qt__, , , "")
+DEFUN_DLD (__shutdown_qt__, , , "")
 {
   QtHandles::__shutdown__ ();
 
@@ -164,7 +166,7 @@
   return d;
 }
 
-DEFUN (__uigetfile_qt__, args, , "")
+DEFUN_DLD (__uigetfile_qt__, args, , "")
 {
   using namespace QtHandles::Utils;
 
@@ -246,7 +248,7 @@
   return retval;
 }
 
-DEFUN (__uiputfile_qt__, args, , "")
+DEFUN_DLD (__uiputfile_qt__, args, , "")
 {
   using namespace QtHandles::Utils;
 
@@ -296,7 +298,7 @@
   return retval;
 }
 
-DEFUN (__uigetdir_qt__, args, , "")
+DEFUN_DLD (__uigetdir_qt__, args, , "")
 {
   using namespace QtHandles::Utils;
 
--- a/libgui/graphics/module.mk	Mon Oct 15 15:27:36 2018 -0400
+++ b/libgui/graphics/module.mk	Fri Sep 28 18:18:09 2018 -0400
@@ -1,6 +1,6 @@
 if AMCOND_BUILD_QT_GRAPHICS
 
-LIBOCTGUI_GRAPHICS_LIB := %reldir%/libgui-graphics.la
+LIBOCTGUI_GRAPHICS_LIB := %reldir%/__init_qt__.la
 
 OCTAVE_GUI_GRAPHICS_MOC = \
   %reldir%/moc-annotation-dialog.cc \
@@ -29,21 +29,21 @@
 DIRSTAMP_FILES += \
   %reldir%/$(octave_dirstamp)
 
-octave_gui_MOC += \
-  $(OCTAVE_GUI_GRAPHICS_MOC)
+##__init_qt___MOC += \
+##  $(OCTAVE_GUI_GRAPHICS_MOC)
 
-octave_gui_graphics_UI = \
+__init_qt___UI = \
   %reldir%/annotation-dialog.ui
 
-octave_gui_graphics_UI_H = $(patsubst %reldir%/%.ui, %reldir%/ui-%.h, $(octave_gui_graphics_UI))
+__init_qt___UI_H = $(patsubst %reldir%/%.ui, %reldir%/ui-%.h, $(__init_qt___UI))
 
-$(octave_gui_graphics_UI_H): | %reldir%/$(octave_dirstamp)
+$(__init_qt___UI_H): | %reldir%/$(octave_dirstamp)
 
-BUILT_SOURCES += $(octave_gui_graphics_UI_H)
+BUILT_SOURCES += $(__init_qt___UI_H)
 
-octave_gui_graphics_RC = %reldir%/qrc-qthandles.cc
+__init_qt___RC = %reldir%/qrc-qthandles.cc
 
-$(octave_gui_graphics_RC): | %reldir%/$(octave_dirstamp)
+$(__init_qt___RC): | %reldir%/$(octave_dirstamp)
 
 noinst_HEADERS += \
   %reldir%/__init_qt__.h \
@@ -87,7 +87,7 @@
   %reldir%/qopengl-functions.h \
   $(TEMPLATE_SRC)
 
-%canon_reldir%_%canon_reldir%_la_SOURCES = \
+%canon_reldir%___init_qt___la_SOURCES = \
   %reldir%/__init_qt__.cc \
   %reldir%/annotation-dialog.cc \
   %reldir%/Backend.cc \
@@ -122,20 +122,21 @@
   %reldir%/ToggleButtonControl.cc \
   %reldir%/ToggleTool.cc \
   %reldir%/ToolBar.cc \
-  %reldir%/gl-select.cc
+  %reldir%/gl-select.cc \
+  $(OCTAVE_GUI_GRAPHICS_MOC)
 
 TEMPLATE_SRC = \
   %reldir%/ToolBarButton.cc
 
-nodist_%canon_reldir%_%canon_reldir%_la_SOURCES = $(octave_gui_graphics_MOC) $(octave_gui_graphics_RC)
+nodist_%canon_reldir%___init_qt___la_SOURCES = $(__init_qt___MOC) $(__init_qt___RC)
 
-%canon_reldir%_%canon_reldir%_la_CPPFLAGS = \
+%canon_reldir%___init_qt___la_CPPFLAGS = \
   $(AM_CPPFLAGS) \
   $(FT2_CPPFLAGS) \
   $(FONTCONFIG_CPPFLAGS) \
   $(HDF5_CPPFLAGS) \
   @OCTGUI_DLL_DEFS@ \
-  @QT_CPPFLAGS@ \
+  -I/usr/include/x86_64-linux-gnu/qt5/QtOpenGL -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/x86_64-linux-gnu/qt5 \
   -Ilibgui/graphics -I$(srcdir)/libgui/graphics \
   -Isrc -I$(srcdir)/libgui/src \
   -Iliboctave \
@@ -149,7 +150,40 @@
   -Ilibinterp/corefcn -I$(srcdir)/libinterp/corefcn \
   -I$(srcdir)/libinterp/octave-value
 
-noinst_LTLIBRARIES += $(LIBOCTGUI_GRAPHICS_LIB)
+%canon_reldir%___init_qt___la_LDFLAGS = \
+  -avoid-version -module $(NO_UNDEFINED_LDFLAG) $(WARN_LDFLAGS)
+
+%canon_reldir%___init_qt___la_LIBADD = \
+  $(DLD_LIBOCTINTERP_LIBADD) \
+  $(QT_OPENGL_LIBS)
+
+%canon_reldir%___init_qt___la_DEPENDENCIES = $(QT_OPENGL_LIBS)
+
+octlib_LTLIBRARIES += $(LIBOCTGUI_GRAPHICS_LIB)
+
+GRAPHICS_DEFUN_FILES = %reldir%/__init_qt__.cc
+
+GRAPHICS_OCT_FILES = $(LIBOCTGUI_GRAPHICS_LIB:.la=.oct)
+
+OCTAVE_INTERPRETER_TARGETS += $(GRAPHICS_OCT_FILES)
+
+OCT_FILE_LIBS += $(LIBOCTGUI_GRAPHICS_LIB)
+
+## Use stamp files to avoid problems with checking timestamps
+## of symbolic links
+
+%reldir%/__init_qt__.oct : $(LIBOCTGUI_GRAPHICS_LIB)
+	$(AM_V_GEN)$(INSTALL_PROGRAM) %reldir%/.libs/$(shell $(SED) -n -e "s/dlname='\([^']*\)'/\1/p" < $<) $@
+
+GRAPHICS_PKG_ADD_FILE = %reldir%/PKG_ADD
+
+%reldir%/PKG_ADD: $(GRAPHICS_DEFUN_FILES) $(srcdir)/build-aux/mk-pkg-add.sh | %reldir%/$(octave_dirstamp)
+	$(AM_V_GEN)rm -f $@-t && \
+	$(SHELL) $(srcdir)/build-aux/mk-pkg-add.sh "$(srcdir)" $(GRAPHICS_DEFUN_FILES) > $@-t && \
+	mv $@-t $@
+
+OCT_FILE_PKG_ADD_FILES += \
+  $(GRAPHICS_PKG_ADD_FILE)
 
 libgui_EXTRA_DIST += \
   %reldir%/qthandles.qrc \
@@ -159,11 +193,13 @@
   %reldir%/images/select.png \
   %reldir%/images/zoom-in.png \
   %reldir%/images/zoom-out.png \
-  $(octave_gui_graphics_UI)
+  $(__init_qt___UI)
 
 libgui_CLEANFILES += \
-  $(octave_gui_graphics_MOC) \
-  $(octave_gui_graphics_RC) \
-  $(octave_gui_graphics_UI_H)
+  $(GRAPHICS_OCT_FILES) \
+  $(GRAPHICS_PKG_ADD_FILE) \
+  $(__init_qt___MOC) \
+  $(__init_qt___RC) \
+  $(__init_qt___UI_H)
 
 endif
--- a/libgui/module.mk	Mon Oct 15 15:27:36 2018 -0400
+++ b/libgui/module.mk	Fri Sep 28 18:18:09 2018 -0400
@@ -53,10 +53,9 @@
 %canon_reldir%_liboctgui_la_LIBADD = \
   %reldir%/qterminal/libqterminal.la \
   %reldir%/src/libgui-src.la \
-  $(LIBOCTGUI_GRAPHICS_LIB) \
   libinterp/liboctinterp.la \
   liboctave/liboctave.la \
-  $(LIBOCTGUI_LINK_DEPS)
+  $(QT_LIBS)
 
 ## Increment the following version numbers as needed and according
 ## to the rules in the etc/HACKING.md file:
--- a/libgui/src/main-window.cc	Mon Oct 15 15:27:36 2018 -0400
+++ b/libgui/src/main-window.cc	Fri Sep 28 18:18:09 2018 -0400
@@ -62,9 +62,9 @@
 
 #include "builtin-defun-decls.h"
 #include "defaults.h"
-#if defined (HAVE_QT_GRAPHICS)
-#  include "__init_qt__.h"
-#endif
+//#if defined (HAVE_QT_GRAPHICS)
+//#  include "__init_qt__.h"
+//#endif
 #include "interpreter-private.h"
 #include "interpreter.h"
 #include "oct-map.h"
@@ -128,13 +128,9 @@
             // Start executing commands in the command window.
 
 #if defined (HAVE_QT_GRAPHICS)
-            // The qt graphics toolkit must be initialized before startup
+            // The qt graphics toolkit must be registered before startup
             // files are executed.
 
-            symbol_table& symtab = interp.get_symbol_table ();
-
-            install___init_qt___functions (symtab);
-
             Fregister_graphics_toolkit (interp, ovl ("qt"));
 #endif
 
--- a/libgui/src/module.mk	Mon Oct 15 15:27:36 2018 -0400
+++ b/libgui/src/module.mk	Fri Sep 28 18:18:09 2018 -0400
@@ -233,7 +233,6 @@
   -I$(srcdir)/libgui/qterminal/libqterminal \
   -Ilibgui/src -I$(srcdir)/libgui/src \
   -I$(srcdir)/%reldir%/m-editor \
-  -I$(srcdir)/libgui/graphics \
   -Iliboctave \
   -I$(srcdir)/liboctave/array \
   -Iliboctave/numeric -I$(srcdir)/liboctave/numeric \
--- a/libinterp/build-env.h	Mon Oct 15 15:27:36 2018 -0400
+++ b/libinterp/build-env.h	Fri Sep 28 18:18:09 2018 -0400
@@ -150,6 +150,7 @@
     extern const char *QT_CPPFLAGS;
     extern const char *QT_LDFLAGS;
     extern const char *QT_LIBS;
+    extern const char *QT_OPENGL_LIBS;
     extern const char *RANLIB;
     extern const char *RDYNAMIC_FLAG;
     extern const char *READLINE_LIBS;
--- a/libinterp/build-env.in.cc	Mon Oct 15 15:27:36 2018 -0400
+++ b/libinterp/build-env.in.cc	Fri Sep 28 18:18:09 2018 -0400
@@ -265,6 +265,8 @@
 
     const char *QT_LIBS = %OCTAVE_CONF_QT_LIBS%;
 
+    const char *QT_OPENGL_LIBS = %OCTAVE_CONF_QT_OPENGL_LIBS%;
+
     const char *RANLIB = %OCTAVE_CONF_RANLIB%;
 
     const char *RDYNAMIC_FLAG = %OCTAVE_CONF_RDYNAMIC_FLAG%;
--- a/libinterp/corefcn/toplev.cc	Mon Oct 15 15:27:36 2018 -0400
+++ b/libinterp/corefcn/toplev.cc	Fri Sep 28 18:18:09 2018 -0400
@@ -547,6 +547,7 @@
            { "QT_CPPFLAGS", octave::build_env::QT_CPPFLAGS },
            { "QT_LDFLAGS", octave::build_env::QT_LDFLAGS },
            { "QT_LIBS", octave::build_env::QT_LIBS },
+           { "QT_OPENGL_LIBS", octave::build_env::QT_OPENGL_LIBS },
            { "RANLIB", octave::build_env::RANLIB },
            { "RDYNAMIC_FLAG", octave::build_env::RDYNAMIC_FLAG },
            { "READLINE_LIBS", octave::build_env::READLINE_LIBS },
--- a/m4/acinclude.m4	Mon Oct 15 15:27:36 2018 -0400
+++ b/m4/acinclude.m4	Fri Sep 28 18:18:09 2018 -0400
@@ -1974,10 +1974,12 @@
   ## Check for Qt libraries
   case "$qt_version" in
     4)
-      QT_MODULES="QtCore QtGui QtNetwork QtOpenGL QtHelp"
+      QT_OPENGL_MODULE="QtOpenGL"
+      QT_MODULES="QtCore QtGui QtNetwork QtHelp"
     ;;
     5)
-      QT_MODULES="Qt5Core Qt5Gui Qt5Network Qt5OpenGL Qt5PrintSupport Qt5Help"
+      QT_OPENGL_MODULE="Qt5OpenGL"
+      QT_MODULES="Qt5Core Qt5Gui Qt5Network Qt5PrintSupport Qt5Help"
     ;;
     *)
       AC_MSG_ERROR([Unrecognized Qt version $qt_version])
@@ -2007,6 +2009,7 @@
     QT_CPPFLAGS="$($PKG_CONFIG --cflags-only-I $QT_MODULES | $SED -e 's/^ *$//')"
     QT_LDFLAGS="$($PKG_CONFIG --libs-only-L $QT_MODULES | $SED -e 's/^ *$//')"
     QT_LIBS="$($PKG_CONFIG --libs-only-l $QT_MODULES | $SED -e 's/^ *$//')"
+    QT_OPENGL_LIBS="$($PKG_CONFIG --libs-only-l $QT_OPENGL_MODULE | $SED -e 's/^ *$//')"
 
     case $host_os in
       *darwin*)
@@ -2014,6 +2017,7 @@
         if test -z "$QT_LIBS"; then
           QT_LDFLAGS="`$PKG_CONFIG --libs-only-other $QT_MODULES | tr ' ' '\n' | $GREP -e '-F' | uniq | tr '\n' ' '`"
           QT_LIBS="`$PKG_CONFIG --libs-only-other $QT_MODULES | tr ' ' '\n' | $GREP -v -e '-F' | uniq | tr '\n' ' '`"
+          QT_OPENGL_LIBS="`$PKG_CONFIG --libs-only-other $QT_OPENGL_MODULE | tr ' ' '\n' | $GREP -v -e '-F' | uniq | tr '\n' ' '`"
           ## Enabling link_all_deps works around libtool's imperfect handling
           ## of the -F flag
           AM_CONDITIONAL([AMCOND_LINK_ALL_DEPS],
@@ -2169,6 +2173,7 @@
   AC_SUBST(QT_CPPFLAGS)
   AC_SUBST(QT_LDFLAGS)
   AC_SUBST(QT_LIBS)
+  AC_SUBST(QT_OPENGL_LIBS)
 ])
 dnl
 dnl Check if the default Fortran INTEGER is 64 bits wide.
--- a/run-octave.in	Mon Oct 15 15:27:36 2018 -0400
+++ b/run-octave.in	Fri Sep 28 18:18:09 2018 -0400
@@ -35,6 +35,7 @@
 d2="$builddir/scripts"
 d3="$builddir/libinterp"
 d4="$top_srcdir/examples/data"
+d5="$builddir/libgui/graphics"
 
 d1_list=`$FIND "$d1" -type d -a ! \( \( -name private -o -name '@*' -o -name '+*' -o -name '.deps' -o -name '.libs' \) -a -prune \) -exec echo '{}' ';' | $SED 's/$/:/'`
 d2_list=`$FIND "$d2" -type d -a ! \( \( -name private -o -name '@*' -o -name '+*' -o -name '.deps' -o -name '.libs' \) -a -prune \) -exec echo '{}' ';' | $SED 's/$/:/'`
@@ -48,7 +49,7 @@
 
 octave_executable="$builddir/src/octave"
 
-LOADPATH="$d1_path:$d2_path:$d3_path:$d4_path"
+LOADPATH="$d1_path:$d2_path:$d3_path:$d4_path:$d5"
 IMAGEPATH=".:$top_srcdir/scripts/image"
 DOCFILE="$builddir/doc/interpreter/doc-cache"
 BUILT_IN_DOCSTRINGS_FILE="$builddir/libinterp/DOCSTRINGS"