Meson kullanarak alt dizinleri ve Vala kaynaklarını derlemek
Şimdiye kadar Vala kaynaklarını nasıl derleyeceğimizi öğrendik.
Ancak bu kaynakları elle derlemek yerine Meson kullanabiliriz.
Önceki derslerde geliştirdiğimiz kullanıcının saati klavyeden değiştirebildiği küçük uygulamayı kullanacağız.
Önce ana dizinde bir Meson kütüğü oluşturalım.
Kütüğü meson.build
ismi ile kaydediniz.
project('rize', 'vala', 'c')
gnome = import('gnome')
uygulamaIsmi = meson.project_name()
subdir('veri')
subdir('kaynak')
Burada uygulamaIsmi
isimli değişken geliştirdiğimiz uygulamanın ismini tutuyor.
gnome
isimli değişkeni ise kaynakları derlemek için kullanacağız.
subdir
komutu ile alt dizinleri ekliyoruz.
Uygulamanın kaynakları veri dizininde, kaynak kütükleri ise kaynak dizininde olacak.
Uygulamanın veri dizininde bir başka meson.build
kütüğü oluşturuyoruz.
kaynaklar = gnome.compile_resources(
uygulamaIsmi + '-resources',
'rize.xml'
)
Yukarıda kaynaklar
değişkeninde derlenecek kaynakları belirtiyoruz.
Aynı dizinde daha önceki derslerde oluşturduğumuz rize.glade
ve rize.xml
kütükleri bulunuyor.
Xml kütüğümüz aşağıdaki gibidir.
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/bir/cay/koy">
<file compressed="true" preprocess="xml-stripblanks">rize.glade</file>
</gresource>
</gresources>
Pencere desenimiz de aşağıdaki gibi idi.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<template class="Pencere" parent="GtkWindow">
<property name="can-focus">False</property>
<property name="title" translatable="yes">Çay</property>
<property name="window-position">center</property>
<property name="default-width">320</property>
<signal name="key-press-event" handler="tusaBasildi" swapped="no"/>
<child>
<object class="GtkBox" id="kutu">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="saat">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">69</property>
<property name="margin-bottom">69</property>
<property name="label" translatable="yes">00:00</property>
<property name="justify">center</property>
<attributes>
<attribute name="scale" value="5"/>
</attributes>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
</template>
</interface>
Kaynak kodumuz ise kaynak dizininde bulunuyor.
Buradaki meson.build
kütüğüne bakalım.
gerekliPaketler = [
dependency('glib-2.0'),
dependency('gobject-2.0'),
dependency('gtk+-3.0')
]
kaynakKutukler = files('rize.vala')
executable(uygulamaIsmi,
kaynaklar,
kaynakKutukler,
vala_args: [ '--gresourcesdir=veri/' ],
dependencies : gerekliPaketler,
install: true)
Burada Vala'ya kaynakların veri dizininde olduğunu belirtiyoruz.
rize.vala
kütüğünde ise kullanıcının saati arttırıp azaltabildiği ufak uygulamamızın kaynak kodu bulunuyor.
using Gtk;
using Gdk;
[GtkTemplate (ui = "/bir/cay/koy/rize.glade")]
class Pencere : Gtk.Window
{
public Pencere ()
{
saat.set_label("07:10");
show_all();
}
[GtkChild]
private unowned Label saat;
private int saniyeyeCevir(string sure)
{
int dakika = sure.split(":")[0].to_int();
int saniye = sure.split(":")[1].to_int();
return dakika * 60 + saniye;
}
private string metneCevir(int sureDakika)
{
int dakika = sureDakika / 60;
int saniye = sureDakika - dakika * 60;
if (dakika > 9)
if (saniye > 9)
return (dakika.to_string() + ":" + saniye.to_string());
else
return (dakika.to_string() + ":" + "0" + saniye.to_string());
else
if (saniye > 9)
return ("0" + dakika.to_string() + ":" + saniye.to_string());
else
return ("0" + dakika.to_string() + ":" + "0" + saniye.to_string());
}
private void saatiAzalt()
{
int simdikiSaat = saniyeyeCevir(saat.get_label());
stdout.printf("Saati azaltıyorum\n");
if (simdikiSaat != 0)
simdikiSaat = simdikiSaat - 1;
stdout.printf("Şimdiki saat %s\n", metneCevir(simdikiSaat));
saat.set_label(metneCevir(simdikiSaat));
}
private void saatiArttir()
{
int simdikiSaat = saniyeyeCevir(saat.get_label());
stdout.printf("Saati arttırıyorum\n");
simdikiSaat = simdikiSaat + 1;
stdout.printf("Şimdiki saat %s\n", metneCevir(simdikiSaat));
saat.set_label(metneCevir(simdikiSaat));
}
[GtkCallback]
private bool tusaBasildi(EventKey tus )
{
string tusIsmi = Gdk.keyval_name(tus.keyval);
if (tusIsmi == "minus" || tusIsmi == "KP_Subtract")
saatiAzalt();
if (tusIsmi == "plus" || tusIsmi == "KP_Add")
saatiArttir();
stdout.printf("%s tuşuna basıldı\n", tusIsmi);
return true;
}
}
int main (string[] secenekler)
{
Gtk.init (ref secenekler);
var pencere = new Pencere();
pencere.destroy.connect(Gtk.main_quit);
Gtk.main();
return 0;
}
Uygulamanın kaynağını buradan indirebilirsiniz.
Eğer git kullanarak indirmek indirmek isterseniz
git clone https://codeberg.org/erdem/rizeden.git --branch Ders5
komutu ile bu dersi indirebilirsiniz.
rizeden
dizinin içine giriniz.
cd rizeden
Öncelikle derleme yapacağımız dizini oluşturuyoruz.
meson setup oluştur
Sonra bu oluşturduğumuz dizine girelim.
cd oluştur/
Burada uygulamayı derleyip kurmak için
sudo ninja install
komutunu verebilirsiniz.
Artık uygulamaya rize
yazarak erişebilirsiniz. + ve - tuşlarına basmayı deneyiniz.
Uygulamayı kaldırmak için aynı dizinin içinde
sudo ninja uninstall
komutu vermek yeterlidir.
Yorumlar