src/java.desktop/unix/native/libawt_xawt/awt/gtk_interface.c
author ihse
Sat, 03 Mar 2018 08:21:47 +0100
branchihse-warnings-cflags-branch
changeset 56230 489867818774
parent 47216 71c04702a3d5
permissions -rw-r--r--
No longer disable E_OLD_STYLE_FUNC_DEF.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
37711
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
     1
/*
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
     2
 * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
     4
 *
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    10
 *
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    15
 * accompanied this code).
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    16
 *
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    20
 *
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    23
 * questions.
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    24
 */
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    25
#include <dlfcn.h>
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    26
#include <stdlib.h>
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    27
#include "jvm_md.h"
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    28
#include "gtk_interface.h"
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    29
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    30
GtkApi* gtk2_load(JNIEnv *env, const char* lib_name);
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    31
GtkApi* gtk3_load(JNIEnv *env, const char* lib_name);
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    32
37811
40c09ac0ca71 8156020: 8145547 breaks AIX and and uses RTLD_NOLOAD incorrectly
simonis
parents: 37711
diff changeset
    33
gboolean gtk2_check(const char* lib_name, gboolean load);
40c09ac0ca71 8156020: 8145547 breaks AIX and and uses RTLD_NOLOAD incorrectly
simonis
parents: 37711
diff changeset
    34
gboolean gtk3_check(const char* lib_name, gboolean load);
37711
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    35
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    36
GtkApi *gtk;
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    37
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    38
typedef struct {
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    39
    GtkVersion version;
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    40
    const char* name;
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    41
    const char* vname;
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    42
    GtkApi* (*load)(JNIEnv *env, const char* lib_name);
37811
40c09ac0ca71 8156020: 8145547 breaks AIX and and uses RTLD_NOLOAD incorrectly
simonis
parents: 37711
diff changeset
    43
    gboolean (*check)(const char* lib_name, gboolean load);
37711
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    44
} GtkLib;
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    45
39033
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    46
static GtkLib gtk_libs[] = {
37711
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    47
    {
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    48
        GTK_2,
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    49
        JNI_LIB_NAME("gtk-x11-2.0"),
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    50
        VERSIONED_JNI_LIB_NAME("gtk-x11-2.0", "0"),
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    51
        &gtk2_load,
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    52
        &gtk2_check
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    53
    },
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    54
    {
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    55
        GTK_3,
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    56
        JNI_LIB_NAME("gtk-3"),
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    57
        VERSIONED_JNI_LIB_NAME("gtk-3", "0"),
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    58
        &gtk3_load,
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    59
        &gtk3_check
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    60
    }
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    61
};
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    62
39033
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    63
static GtkLib** get_libs_order(GtkVersion version) {
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    64
    static GtkLib** load_order;
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    65
    static int n_libs = 0;
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    66
    if (!n_libs) {
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    67
        n_libs = sizeof(gtk_libs) / sizeof(GtkLib);
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    68
        load_order = calloc(n_libs + 1, sizeof(GtkLib *));
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    69
    }
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    70
    int i, first = 0;
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    71
    for (i = 0; i < n_libs; i++) {
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    72
        load_order[i] = &gtk_libs[i];
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    73
        if (load_order[i]->version == version) {
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    74
            first = i;
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    75
        }
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    76
    }
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    77
    if (first) {
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    78
        for (i = first; i > 0; i--) {
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    79
            load_order[i] = load_order[i - 1];
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    80
        }
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    81
        load_order[0] = &gtk_libs[first];
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    82
    }
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    83
    return load_order;
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    84
}
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    85
56230
489867818774 No longer disable E_OLD_STYLE_FUNC_DEF.
ihse
parents: 47216
diff changeset
    86
static GtkLib* get_loaded(void) {
39033
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    87
    GtkLib** libs = get_libs_order(GTK_ANY);
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    88
    while(!gtk && *libs) {
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
    89
        GtkLib* lib = *libs++;
37811
40c09ac0ca71 8156020: 8145547 breaks AIX and and uses RTLD_NOLOAD incorrectly
simonis
parents: 37711
diff changeset
    90
        if (lib->check(lib->vname, /* load = */FALSE)) {
37711
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    91
            return lib;
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    92
        }
37811
40c09ac0ca71 8156020: 8145547 breaks AIX and and uses RTLD_NOLOAD incorrectly
simonis
parents: 37711
diff changeset
    93
        if (lib->check(lib->name, /* load = */FALSE)) {
37711
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    94
            return lib;
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    95
        }
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    96
    }
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    97
    return NULL;
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    98
}
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
    99
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   100
gboolean gtk_load(JNIEnv *env, GtkVersion version, gboolean verbose) {
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   101
    if (gtk == NULL) {
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   102
        GtkLib* lib = get_loaded();
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   103
        if (lib) {
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   104
            if (verbose) {
39033
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
   105
                fprintf(stderr, "Looking for GTK%d library...\n",
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
   106
                                                                 lib->version);
37711
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   107
            }
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   108
            gtk = lib->load(env, lib->vname);
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   109
            if (!gtk) {
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   110
                gtk = lib->load(env, lib->name);
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   111
            }
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   112
        } else {
39033
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
   113
            GtkLib** libs = get_libs_order(version);
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
   114
            while (!gtk && *libs) {
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
   115
                lib = *libs++;
37711
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   116
                if (version == GTK_ANY || lib->version == version) {
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   117
                    if (verbose) {
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   118
                        fprintf(stderr, "Looking for GTK%d library...\n",
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   119
                                                                  lib->version);
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   120
                    }
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   121
                    gtk = lib->load(env, lib->vname);
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   122
                    if (!gtk) {
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   123
                        gtk = lib->load(env, lib->name);
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   124
                    }
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   125
                    if (verbose && !gtk) {
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   126
                        fprintf(stderr, "Not found.\n");
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   127
                    }
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   128
                }
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   129
            }
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   130
        }
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   131
        if (verbose) {
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   132
            if (gtk) {
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   133
                fprintf(stderr, "GTK%d library loaded.\n", lib->version);
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   134
            } else {
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   135
                fprintf(stderr, "Failed to load GTK library.\n");
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   136
            }
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   137
        }
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   138
    }
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   139
    return gtk != NULL;
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   140
}
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   141
37811
40c09ac0ca71 8156020: 8145547 breaks AIX and and uses RTLD_NOLOAD incorrectly
simonis
parents: 37711
diff changeset
   142
static gboolean check_version(GtkVersion version) {
39033
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
   143
    GtkLib** libs = get_libs_order(version);
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
   144
    while (*libs) {
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
   145
        GtkLib* lib = *libs++;
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
   146
        if (lib->check(lib->vname, /* load = */TRUE)) {
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
   147
            return TRUE;
37711
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   148
        }
39033
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
   149
        if (lib->check(lib->name, /* load = */TRUE)) {
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
   150
            return TRUE;
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
   151
        }
37711
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   152
    }
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   153
    return FALSE;
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   154
}
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   155
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   156
gboolean gtk_check_version(GtkVersion version) {
39033
d61135c3795c 8156121: "Fail forward" fails for GTK3 if no GTK2 available
ssadetsky
parents: 37811
diff changeset
   157
    if (gtk || get_loaded()) {
37711
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   158
        return TRUE;
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   159
    }
37811
40c09ac0ca71 8156020: 8145547 breaks AIX and and uses RTLD_NOLOAD incorrectly
simonis
parents: 37711
diff changeset
   160
    return check_version(version);
37711
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   161
}
972001566d66 8145547: [AWT/Swing] Conditional support for GTK 3 on Linux
ssadetsky
parents:
diff changeset
   162