diff --git a/aclocal.m4 b/aclocal.m4 index a4816f9ad8..6eb3cbd0b8 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,8 +1,7 @@ -# generated automatically by aclocal 1.11.6 -*- Autoconf -*- +# generated automatically by aclocal 1.15.1 -*- Autoconf -*- + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, -# Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -12,6 +11,7 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_include([build/aclocal/ac_raf_func_which_getservbyname_r.m4]) m4_include([build/aclocal/atomic_builtins.m4]) m4_include([build/aclocal/ax_cflags_gcc_option.m4]) @@ -23,6 +23,7 @@ m4_include([build/aclocal/bakefile-lang.m4]) m4_include([build/aclocal/bakefile.m4]) m4_include([build/aclocal/gtk-2.0.m4]) m4_include([build/aclocal/gtk-3.0.m4]) +m4_include([build/aclocal/gtk-4.0.m4]) m4_include([build/aclocal/gtk.m4]) m4_include([build/aclocal/pkg.m4]) m4_include([build/aclocal/sdl.m4]) diff --git a/build/aclocal/gtk-4.0.m4 b/build/aclocal/gtk-4.0.m4 new file mode 100644 index 0000000000..77abae34a0 --- /dev/null +++ b/build/aclocal/gtk-4.0.m4 @@ -0,0 +1,208 @@ +# Configure paths for GTK+ +# Owen Taylor 1997-2001 + +dnl AM_PATH_GTK_4_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) +dnl Test for GTK+, and define GTK_CFLAGS and GTK_LIBS, if gthread is specified in MODULES, +dnl pass to pkg-config +dnl +AC_DEFUN([AM_PATH_GTK_4_0], +[m4_warn([obsolete], [AM_PATH_GTK_4_0 is deprecated, use PKG_CHECK_MODULES([GTK], [gtk+-4.0]) instead]) +dnl Get the cflags and libraries from pkg-config +dnl +AC_ARG_ENABLE(gtktest, [ --disable-gtktest do not try to compile and run a test GTK+ program], + , enable_gtktest=yes) + min_gtk_version=ifelse([$1], [], [3.90.0], [$1]) + + pkg_config_args="gtk+-4.0 >= $min_gtk_version" + for module in . $4 + do + case "$module" in + gthread) + pkg_config_args="$pkg_config_args gthread-2.0" + ;; + esac + done + + no_gtk="" + + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + + if test x$PKG_CONFIG != xno ; then + if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then + : + else + echo "*** pkg-config too old; version 0.7 or better required." + no_gtk=yes + PKG_CONFIG=no + fi + else + no_gtk=yes + fi + + AC_MSG_CHECKING(for GTK+ - version >= $min_gtk_version) + + if test x$PKG_CONFIG != xno ; then + ## don't try to run the test against uninstalled libtool libs + if $PKG_CONFIG --uninstalled $pkg_config_args; then + echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH" + enable_gtktest=no + fi + + if $PKG_CONFIG $pkg_config_args; then + : + else + no_gtk=yes + fi + fi + + if test x"$no_gtk" = x ; then + GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags` + GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs` + gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-4.0 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-4.0 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-4.0 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_gtktest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GTK_CFLAGS" + LIBS="$GTK_LIBS $LIBS" +dnl +dnl Now check if the installed GTK+ is sufficiently new. (Also sanity +dnl checks the results of pkg-config to some extent) +dnl + rm -f conf.gtktest + AC_TRY_RUN([ +#include +#include +#include + +int +main () +{ + unsigned int major, minor, micro; + + fclose (fopen ("conf.gtktest", "w")); + + if (sscanf("$min_gtk_version", "%u.%u.%u", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_gtk_version"); + exit(1); + } + + if ((GTK_MAJOR_VERSION != $gtk_config_major_version) || + (GTK_MINOR_VERSION != $gtk_config_minor_version) || + (GTK_MICRO_VERSION != $gtk_config_micro_version)) + { + printf("\n*** 'pkg-config --modversion gtk+-4.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", + $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, + GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); + printf ("*** was found! If pkg-config was correct, then it is best\n"); + printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); + printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); + printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); + printf("*** required on your system.\n"); + printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); + printf("*** to point to the correct configuration files\n"); + } + else + { + if ((GTK_MAJOR_VERSION > major) || + ((GTK_MAJOR_VERSION == major) && (GTK_MINOR_VERSION > minor)) || + ((GTK_MAJOR_VERSION == major) && (GTK_MINOR_VERSION == minor) && (GTK_MICRO_VERSION >= micro))) + { + return 0; + } + else + { + printf("\n*** An old version of GTK+ (%u.%u.%u) was found.\n", + GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); + printf("*** You need a version of GTK+ newer than %u.%u.%u. The latest version of\n", + major, minor, micro); + printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); + printf("***\n"); + printf("*** If you have already installed a sufficiently new version, this error\n"); + printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); + printf("*** being found. The easiest way to fix this is to remove the old version\n"); + printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n"); + printf("*** correct copy of pkg-config. (In this case, you will have to\n"); + printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); + printf("*** so that the correct libraries are found at run-time))\n"); + } + } + return 1; +} +],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_gtk" = x ; then + AC_MSG_RESULT(yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$PKG_CONFIG" = "no" ; then + echo "*** A new enough version of pkg-config was not found." + echo "*** See http://pkgconfig.sourceforge.net" + else + if test -f conf.gtktest ; then + : + else + echo "*** Could not run GTK+ test program, checking why..." + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GTK_CFLAGS" + LIBS="$LIBS $GTK_LIBS" + AC_TRY_LINK([ +#include +#include +], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GTK+ or finding the wrong" + echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GTK+ is incorrectly installed."]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GTK_CFLAGS="" + GTK_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GTK_CFLAGS) + AC_SUBST(GTK_LIBS) + rm -f conf.gtktest +]) + +dnl GTK_CHECK_BACKEND(BACKEND-NAME [, MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Tests for BACKEND-NAME in the GTK targets list +dnl +AC_DEFUN([GTK_CHECK_BACKEND], +[m4_warn([obsolete], [GTK_CHECK_BACKEND is deprecated, use PKG_CHECK_MODULES([GTK_X11], [gtk+-x11-4.0]) or similar instead]) + pkg_config_args=ifelse([$1],,gtk+-4.0, gtk+-$1-4.0) + min_gtk_version=ifelse([$2],,4.0.0,$2) + pkg_config_args="$pkg_config_args >= $min_gtk_version" + + AC_PATH_PROG(PKG_CONFIG, [pkg-config], [AC_MSG_ERROR([No pkg-config found])]) + + if $PKG_CONFIG $pkg_config_args ; then + target_found=yes + else + target_found=no + fi + + if test "x$target_found" = "xno"; then + ifelse([$4],,[AC_MSG_ERROR([Backend $backend not found.])],[$4]) + else + ifelse([$3],,[:],[$3]) + fi +]) diff --git a/build/bakefiles/common.bkl b/build/bakefiles/common.bkl index 4ca786e829..c596c08ccc 100644 --- a/build/bakefiles/common.bkl +++ b/build/bakefiles/common.bkl @@ -577,6 +577,7 @@ $(TAB)cl /EP /nologo "$(DOLLAR)(InputPath)" > "$(SETUPHDIR)\wx\msw\rcdefs.h" gtk-win32-2.0.lib gdk-win32-2.0.lib gio-2.0.lib pangocairo-1.0.lib gdk_pixbuf-2.0.lib cairo.lib pango-1.0.lib gobject-2.0.lib gthread-2.0.lib glib-2.0.lib libgtk-3.dll.a libgdk-3.dll.a gio-2.0.lib pangocairo-1.0.lib gdk_pixbuf-2.0.lib cairo.lib pango-1.0.lib gobject-2.0.lib gthread-2.0.lib glib-2.0.lib + libgtk-4.dll.a libgdk-4.dll.a gio-2.0.lib pangocairo-1.0.lib gdk_pixbuf-2.0.lib cairo.lib pango-1.0.lib gobject-2.0.lib gthread-2.0.lib glib-2.0.lib diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl index cbe3f19d45..bd05d5a1dd 100644 --- a/build/bakefiles/files.bkl +++ b/build/bakefiles/files.bkl @@ -3311,6 +3311,10 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! src/osx/cocoa/glcanvas.mm src/osx/glcanvas_osx.cpp src/osx/iphone/glcanvas.mm src/osx/glcanvas_osx.cpp src/cocoa/glcanvas.mm + + src/unix/glx11.cpp + src/gtk/glcanvas.cpp + src/unix/glx11.cpp src/gtk/glcanvas.cpp @@ -3337,6 +3341,10 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! wx/osx/glcanvas.h wx/cocoa/glcanvas.h + + wx/gtk/glcanvas.h + wx/unix/glx11.h + wx/gtk/glcanvas.h wx/unix/glx11.h @@ -3627,8 +3635,9 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! - $(GTK2_LOWLEVEL_SRC) + $(GTK_LOWLEVEL_SRC) $(GTK_LOWLEVEL_SRC) + $(GTK2_LOWLEVEL_SRC) $(GTK1_LOWLEVEL_SRC) $(MOTIF_LOWLEVEL_SRC) $(MSW_LOWLEVEL_SRC) $(MSW_DESKTOP_LOWLEVEL_SRC) @@ -3638,6 +3647,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! $(DFB_LOWLEVEL_SRC) + $(GTK_LOWLEVEL_HDR) $(GTK_LOWLEVEL_HDR) $(GTK_LOWLEVEL_HDR) $(GTK1_LOWLEVEL_HDR) @@ -3655,8 +3665,9 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! - $(GTK2_SRC) + $(GTK_SRC) $(GTK_SRC) + $(GTK2_SRC) $(GTK1_SRC) $(MOTIF_SRC) $(MSW_SRC) $(MSW_DESKTOP_SRC) @@ -3665,8 +3676,9 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! $(QT_SRC) - $(GTK2_HDR) + $(GTK_HDR) $(GTK_HDR) + $(GTK2_HDR) $(GTK1_HDR) $(MOTIF_HDR) $(MSW_HDR) $(MSW_DESKTOP_HDR) $(MSW_RSC) @@ -3691,8 +3703,9 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! $(ADVANCED_OSX_IPHONE_SRC) $(ADVANCED_COCOA_SRC) $(ADVANCED_UNIX_SRC) $(ADVANCED_MOTIF_SRC) - $(ADVANCED_GTK2_SRC) + $(ADVANCED_GTK_SRC) $(ADVANCED_GTK_SRC) + $(ADVANCED_GTK2_SRC) $(ADVANCED_UNIX_SRC) $(ADVANCED_GTK1_SRC) $(ADVANCED_UNIX_SRC) $(ADVANCED_QT_SRC) @@ -3703,8 +3716,9 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! $(ADVANCED_OSX_IPHONE_HDR) $(ADVANCED_COCOA_HDR) $(ADVANCED_UNIX_HDR) $(ADVANCED_MOTIF_HDR) - $(ADVANCED_GTK2_HDR) + $(ADVANCED_GTK_HDR) $(ADVANCED_GTK_HDR) + $(ADVANCED_GTK2_HDR) $(ADVANCED_UNIX_HDR) $(ADVANCED_GTK1_HDR) $(ADVANCED_UNIX_HDR) $(ADVANCED_QT_HDR) @@ -3712,13 +3726,15 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! - $(ADVANCED_GTK_NATIVE_SRC) + $(ADVANCED_GTK_NATIVE_SRC) $(ADVANCED_GTK_NATIVE_SRC) + $(ADVANCED_GTK_NATIVE_SRC) $(ADVANCED_MSW_NATIVE_SRC) - $(ADVANCED_GTK_NATIVE_HDR) + $(ADVANCED_GTK_NATIVE_HDR) $(ADVANCED_GTK_NATIVE_HDR) + $(ADVANCED_GTK_NATIVE_HDR) $(ADVANCED_MSW_NATIVE_HDR) diff --git a/configure.in b/configure.in index 8eb3571261..7b20dff46f 100644 --- a/configure.in +++ b/configure.in @@ -414,7 +414,7 @@ fi dnl we use AC_ARG_WITH and not WX_ARG_WITH for the toolkit options as they dnl shouldn't default to wxUSE_ALL_FEATURES -AC_ARG_WITH(gtk, [[ --with-gtk[=VERSION] use GTK+, VERSION can be 3, 2 (default), 1 or "any"]], [wxUSE_GTK="$withval" CACHE_GTK=1 TOOLKIT_GIVEN=1]) +AC_ARG_WITH(gtk, [[ --with-gtk[=VERSION] use GTK+, VERSION can be 4 (EXPERIMENTAL), 3, 2 (default), 1 or "any"]], [wxUSE_GTK="$withval" CACHE_GTK=1 TOOLKIT_GIVEN=1]) WX_ARG_ONLY_WITH(motif, [ --with-motif use Motif/Lesstif], [wxUSE_MOTIF="$withval" CACHE_MOTIF=1 TOOLKIT_GIVEN=1]) WX_ARG_ONLY_WITH(osx_cocoa, [ --with-osx_cocoa use Mac OS X (Cocoa)], [wxUSE_OSX_COCOA="$withval" CACHE_OSX_COCOA=1 TOOLKIT_GIVEN=1]) WX_ARG_ONLY_WITH(osx_iphone, [ --with-osx_iphone use iPhone OS X port], [wxUSE_OSX_IPHONE="$withval" CACHE_OSX_IPHONE=1 TOOLKIT_GIVEN=1]) @@ -2737,6 +2737,7 @@ if test "$wxUSE_GUI" = "yes"; then WXGTK127= WXGTK2= WXGTK3= + WXGTK4= WXGPE= if test "$wxUSE_MSW" = 1 ; then @@ -2787,12 +2788,14 @@ if test "$wxUSE_GUI" = "yes"; then fi esac - if test "$wxGTK_VERSION" != 3; then + if test "$wxGTK_VERSION" != 4 -a "$wxGTK_VERSION" != 3; then AM_PATH_GTK_2_0(2.6.0, wx_cv_lib_gtk=2.0, , $GTK_MODULES) fi if test -z "$wx_cv_lib_gtk"; then if test "$wxGTK_VERSION" = 3 -o "$wxGTK_VERSION" = any; then AM_PATH_GTK_3_0(, wx_cv_lib_gtk=3, , $GTK_MODULES) + elif test "$wxGTK_VERSION" = 4 -o "$wxGTK_VERSION" = any; then + AM_PATH_GTK_4_0(, wx_cv_lib_gtk=4, , $GTK_MODULES) fi fi fi @@ -2832,6 +2835,10 @@ if test "$wxUSE_GUI" = "yes"; then fi case "$wx_cv_lib_gtk" in + 4) WXGTK4=1 + WXGTK3=1 + TOOLKIT_VERSION=4 + ;; 3) WXGTK3=1 TOOLKIT_VERSION=3 ;; @@ -5034,6 +5041,9 @@ else fi fi +if test "$WXGTK4" = 1 ; then + AC_DEFINE_UNQUOTED(__WXGTK4__, 1) +fi if test "$WXGTK3" = 1 ; then AC_DEFINE_UNQUOTED(__WXGTK3__, 1) WXGTK2=1 @@ -5490,7 +5500,7 @@ if test "$WXGTK2" = 1; then if test "$wxUSE_GTKPRINT" = "yes" ; then if test "$WXGTK3" = 1; then - gtk_unix_print="gtk+-unix-print-3.0" + gtk_unix_print="gtk+-unix-print-${TOOLKIT_VERSION}.0" else gtk_unix_print="gtk+-unix-print-2.0 >= 2.10" fi @@ -7140,7 +7150,7 @@ if test "$wxUSE_WEBVIEW" = "yes"; then if test "$USE_WEBVIEW_WEBKIT2" = 0; then webkitgtk=webkit-1.0 if test "$WXGTK3" = 1; then - webkitgtk=webkitgtk-3.0 + webkitgtk="webkitgtk-${TOOLKIT_VERSION}.0" fi PKG_CHECK_MODULES([WEBKIT], [$webkitgtk >= 1.3.1], @@ -7778,7 +7788,7 @@ elif test "$GXX" = yes ; then dnl that they're deprecated but we still have to use them to support older dnl toolkit versions and leaving this warning enabled prevents seeing any dnl other ones - if test "$WXGTK3" = 1 -o "$wxUSE_MAC" = 1 ; then + if test "$WXGTK4" != 1 -a \( "$WXGTK3" = 1 -o "$wxUSE_MAC" = 1 \) ; then CXXWARNINGS="$CXXWARNINGS -Wno-deprecated-declarations" dnl CXXWARNINGS is not used for Objective-C++ code compilation, but we @@ -7978,7 +7988,7 @@ case "$TOOLKIT" in TOOLKIT_DESC="GTK+" if test "$WXGTK2" = 1; then if test "$WXGTK3" = 1; then - TOOLKIT_DESC="$TOOLKIT_DESC 3" + TOOLKIT_DESC="$TOOLKIT_DESC ${TOOLKIT_VERSION}" else TOOLKIT_DESC="$TOOLKIT_DESC 2" fi diff --git a/setup.h.in b/setup.h.in index 8aa259f041..1f1955ad4c 100644 --- a/setup.h.in +++ b/setup.h.in @@ -68,6 +68,9 @@ /* Define this if your version of GTK+ is >= 3.0 */ #undef __WXGTK3__ +/* Define this if your version of GTK+ is >= 3.90.0 */ +#undef __WXGTK4__ + /* Define this if you want to use GPE features */ #undef __WXGPE__