Mercurial > jwe > octave
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"