2017-01-08 1 views
3

Ich kompiliere einen Vala-Code auf ElementaryOS Loki, der mit GTK Version 3.18 ausgeliefert wird. Jetzt bekomme ich (viel) ist veraltet und Warnungen wie:Vala generiert veraltete Warnungen für höhere GTK/GDK-Versionen

src/ScreenGrabber.vala:64.55-64.94: warning: Gdk.Display.get_device_manager has been deprecated since 3.20. 
src/ScreenGrabber.vala:64.55-64.115: warning: Gdk.DeviceManager.get_client_pointer has been deprecated since 3.20 
src/ScreenGrabber.vala:85.19-85.50: warning: Gdk.Screen.get_active_window has been deprecated since 3.22 

Aber die empfohlene Alternative Methoden, die einfach dont't existieren noch in 3,18 zugunsten der „veralteten“ Einsen verwendet werden soll, so kann ich sie nicht verwenden .

Wie kann ich valac die richtigen Warnungen für die gegebene GTK Version geben? Ich neige dazu, Warnungen komplett abzuschalten, die ich lieber vermeiden möchte. valac hat einen Schalter --target-glib, aber es gibt kein Äquivalent "--target-GTK"

-

EDIT: z.B. dieses kleine Programm demonstriert das Problem mit valac -o test test.vala --pkg=gtk+-3.0 kompiliert, wenn (auf Elementary OS Loki, mit GTK 3,18)

using Gtk; 
public class Test { 

    public Test() { 
     var manager = Gdk.Display.get_default().get_device_manager(); 
    } 

    public static int main(string[] args) { 
     var test = new Test(); 
     return 0; 
    } 
} 
+0

Ich weiß nicht, ob es eine Option gibt, um dies auszuschalten. Sie versuchen, Sie zu warnen, egal welche Version Sie verwenden, aus Gründen der zukünftigen Kompatibilität sollten Sie bestimmte Klassen nicht verwenden. – oldtechaa

Antwort

3

Wahrscheinlich die beste Lösung ist, die --enable-deprecated Schalter zu verwenden, wenn mit valac kompilieren. Sie könnten auch versuchen, --disable-since-check, wenn das nicht funktioniert. Die --disable-since-check wurde in Vala 0.32 mit dem neuen Attribut [Version] eingeführt.

In einer idealen Welt würde eine Bibliothek auch ihre Bindung für Vala verteilen. Dies würde bedeuten, dass die Bindung mit der Bibliothek synchron gehalten wird. Siehe Vala Bindings Upstream guide.

Sowohl GTK + als auch Vala sind GNOME-gehostete Projekte. Obwohl Vala die GTK + Bindungen trägt, werden beide Projekte synchron gehalten und sollten gut zusammenarbeiten. Speziell in Bezug auf Ihre Frage, GTK + 3.18 was released 22 September 2015 und Vala 0.30 on the 18 September 2015. Beide waren rechtzeitig für die GNOME 3.18 release on 23 September 2015.

Was mit Loki passiert ist, sind according to the Loki beta release blog post, GTK + 3.18 und Vala 0.32 wurden gebündelt. Vala 0.32 trägt Bindungen für GTK + 3.20.

So können Sie die gtk+-3.0.vapi und gdk-3.0.vapi aus dem Vala 0.30.0 Release herunterladen und stattdessen verwenden. Dies wird leider eine Menge verschiedener Warnungen anzeigen, da die Versionsinformationen in VAPIs kürzlich geändert wurden. Vala verwendet jetzt [Version] anstelle von [Deprecated]. Diese verschiedenen Warnungen können mit --enable-deprecated unterdrückt werden.

Wenn Sie zu einer Verteilung beitragen, gibt es keinen grundlegenden Grund, warum Distributionen den Vala-Compiler mit den Bindungen kompilieren müssen, die mit dem Compiler geliefert werden. Sie könnten also zwei oder mehr Pakete haben. Eine für den Compiler, eine für die nicht-Upstream-Bindungen, z.B. vala-0.30 und vala-non-upstreamed-bindings-0.30. Obwohl das ein bisschen eine Vereinfachung ist, zum Beispiel Vala will continue to carry a binding some time after it has been generated upstream.

Verwandte Themen