Fuzuli Programla Dilini kaynaktan kodlardan derlemek,
http://stdioe.blogspot.com/2012/06/compiling-and-installing-fuzuli-from.html adresinde Fuzuli programlama dilinin kaynaktan nasıl derleneceğini anlatmış idim ancak bu tarif güncelliğini yitirdi. Zira Fuzuli Programlama Dili, her gün büyük gelişimler gösteren dinamik ve genç bir proje. Kaynaktan derleme işlemlerini de etkileyecek değişiklikler yapıldığından bu konuyu tekrar anlatmak gerekti.
Bir önceki makalede olduğu gibi, sürekli güncel sürümlere erişmek için kaynak koda Mercurial ile erişimi tarif edeceğim ve örnek tarif için 64 bit Ubuntu Linux işletim sistemini kullanacağım. Bunu baz alarak farklı linux dağıtımları için de benzer işlemleri yapabilirsiniz.
1-) Mercurial kurulumu ve kaynak kodlara erişim. (Install Mercurial & access source)
Not: Bu program kabaca, geliştirici / geliştiricilerin koda her yeni müdehalede bulunduklarında, her bir işleme bir açıklama bilgisi girerek ortak bir sunucuya senkronize etmelerini sağlar. Bu sayede birden fazla kişinin aynı proje üzerinde çalışmasına olanak sağladığı gibi, işler yolunda gitmediğinde ya da bir hata tespitinde zaman çizgisi üzerinde belirli bir ana dönmeyi de sağlar.
İşte biz de bu programı kullanarak kaynak kodların bir kopyasını kendi sistemimize çekeceğiz. Aynı zamanda ilerleyen zamanlarda, yine mercurial programını kullanarak elimizdeki kaynak kodu güncelleyip tekrar derleyebileceğiz.
Mercurial programını kurmak için,
ismail@ismail-M61PME-S2P:~$ sudo apt-get install mercurial
Yukarıdaki komut marifeti ile, sistemimize mercurial kurulacaktır. Artık "hg" komutu ile mercurial'i kullanabilir durumdayız. Bizler sözbirliği yapmışcasına kaynak kodumuzu hep /usr/share/fuzuli dizini altına indiriyoruz. Bu sebeple öncelikle "/usr/share" dizinine gideceğim ve burada "hg" komutu ile kaynak kodları code.google 'dan isteyeceğim. Kodların bir kopyası bilgisayarıma gelirken fuzuli dizini de kendiliğinden oluşturulacak,
ismail@ismail-M61PME-S2P:~$ ismail@ismail-M61PME-S2P:~$ cd /usr/share/ ismail@ismail-M61PME-S2P:/usr/share$ sudo hg clone https://code.google.com/p/fuzuli/ destination directory: fuzuli requesting all changes adding changesets adding manifests adding file changes added 109 changesets with 833 changes to 353 files (+1 heads) updating to branch default 297 files updated, 0 files merged, 0 files removed, 0 files unresolved ismail@ismail-M61PME-S2P:/usr/share$
2-) Bağımlılıkları kurmak, (Install dependencies)
ismail@ismail-M61PME-S2P:/usr/share/fuzuli$ sudo apt-get install libmysqlclient-dev libgd2-xpm-dev libreadline-dev libssl-dev libncurses5-dev libfltk1.1-dev
Ve ayrıca elbette gcc, g++ derleyicilerini de kurmamız gerekecek. Derleyicimiz olmadan Fuzuli'yi derlememiz mümkün olmayacaktır.
Yukarıdaki paketler, Fuzuli Programlama dilini derlemek için gerekli bağımlılıkların development paketleridir. Fuzuli derlendikten sonra bu sistemde kullanılabilmesi için ilgili paketlerin developmen olmayan yani sonlarında "-dev" ismi olmayan paketlerinin de yüklenmesi gerekecektir.
Not: Bağımlılık paketlerinin bir kısmı dinamik, bir kısmı ise statik derlenmektedir. Bunun anlamı, statik derlenen paketlerin "dev" versiyonları dışında ayrıca kendilerine ihtiyaç duyulmayacağıdır. Zira statik olmaları Fuzuli'nin içine gömülü çalışacakları anlamına gelmektedir. Ancak dinamik derlenenler, Fuzuli'nin içine gömülü olmayacakları için ilgili paketlerin kurulmuş versiyonlarına ihtiyaç olacaktır. Bu bir detay bilgidir, ayrıca paketlerin statik, dinamik durumlarını gösterir bir liste bu makale içinde verilmemiştir.
Ayrıca çok fazla müdehale gerektirdiği ve Fuzuli kullanıcıları pek uğraştırdığı için Fuzuli'nin kaynak koduna eklediğimiz soket kütüphanesi olan happycoders'ın kaynak kodları da Fuzuli Kaynak kodları içine eklenmiştir. Şimdi bu dizine gidip, happycoders'ı derleyelim;
ismail@ismail-M61PME-S2P:/usr/share$ cd fuzuli/ ismail@ismail-M61PME-S2P:/usr/share/fuzuli$ cd lib/libsocket-1.8/ ismail@ismail-M61PME-S2P:/usr/share/fuzuli/lib/libsocket-1.8$ sudo ./configure checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking for g++... g++ checking for C++ compiler default output file name... a.out ... ... ismail@ismail-M61PME-S2P:/usr/share/fuzuli/lib/libsocket-1.8$ ismail@ismail-M61PME-S2P:/usr/share/fuzuli/lib/libsocket-1.8$ sudo make cd . && /bin/bash /usr/share/fuzuli/lib/libsocket-1.8/config/missing --run aclocal-1.7 /usr/share/fuzuli/lib/libsocket-1.8/config/missing: line 46: aclocal-1.7: command not found WARNING: `aclocal-1.7' is missing on your system. You should only need it if you modified `acinclude.m4' or `configure.ac'. You might want to install the `Automake' and `Perl' packages. Grab them from any GNU archive site. cd . && \ ... ... ismail@ismail-M61PME-S2P:/usr/share/fuzuli/lib/libsocket-1.8$ ismail@ismail-M61PME-S2P:/usr/share/fuzuli/lib/libsocket-1.8$ sudo make install Making install in src ... ... PATH="$PATH:/sbin" ldconfig -n /usr/local/lib/happycoders/ ---------------------------------------------------------------------- Libraries have been installed in: /usr/local/lib/happycoders/ If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,--rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to `/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- ... ... ismail@ismail-M61PME-S2P:/usr/share/fuzuli/lib/libsocket-1.8$
Not: Yukarıdaki kurulum çıktısında satırların uzayıp gitmelerine mani olmak için bazır önemsiz olabilecek bölümleri "..." ifadesi ile özetleyip, gizledim.
Kurulumun sonunda bir rapor bilgisi veriliyor. Buna göre happycoders kütüphanesi dosyaları "/usr/local/lib/happycoders" dizinine yüklenmişler. Ancak Fuzuli programı onları "/usr/lib/happycoders" dizini içinde arayacak. Bu sebeple mevcut dizinini "ldconfig" ile register edip, bu dizinin bir de "/usr/lib" altına link'ini oluşturacağım:
ismail@ismail-M61PME-S2P:/usr/share/fuzuli/lib/libsocket-1.8$ sudo ldconfig /usr/local/lib/happycoders/ ismail@ismail-M61PME-S2P:/usr/share/fuzuli/lib/libsocket-1.8$ sodu ln -s /usr/local/lib/happycoders /usr/lib/happycoders ismail@ismail-M61PME-S2P:/usr/share/fuzuli/lib/libsocket-1.8$
Artık Fuzuli'yi derlemek için ön hazırlıklarımız tamamlanmış durumda.
3-) Fuzuli'nin derlenmesi; (compiling Fuzuli)
Bu makalede sıfırdan kulum anlatıyor olsakda bir alışkanlığın sonucu olarak tedbiren önce "clean" yapıp sonra "build" yapıyorum,
ismail@ismail-M61PME-S2P:/usr/share/fuzuli/lib/libsocket-1.8$ cd /usr/share/fuzuli/ ismail@ismail-M61PME-S2P:/usr/share/fuzuli$ sudo ./release-clean-all.sh ismail@ismail-M61PME-S2P:/usr/share/fuzuli$ sudo ./release-build-all.sh
Not: Yine kalabalık yaratmamak için komutların çıktılarına yer vermedim.
Bu noktada "/usr/lib/fuzuli" dizini altında fuzuli binary'si ve kütüphaneleri bulunmaktadır. fuzuli binary'sinin alışageldik yeri olan "/usr/bin" dizininde de olması gerekir. Bunun için,
a) fuzuli binary'sinin link'ini "/usr/bin" altına oluşturacağım.
ismail@ismail-M61PME-S2P:/usr/share/fuzuli$ sudo ln -s /usr/lib/fuzuli/fuzuli /usr/bin/fuzuli
Ayrıca kütüphanelerin kullanılabilir olması için
b) ya "/usr/lib" altına kopyalanmaları gerekir,
ismail@ismail-M61PME-S2P:/usr/share/fuzuli$ sudo cp /usr/lib/fuzuli/*.so /usr/lib/
b) ya da mevcut dizinleri "ldconfig" ile register edilmeli,
ismail@ismail-M61PME-S2P:/usr/share/fuzuli$ sudo ldconfig /usr/lib/fuzuli/
Kurulan Fuzuli'nin test edilmesi; (testing Fuzuli)
Artık Fuzuli Programlama Dilimiz tam olarak kullanıma hazır. Her şeyin yolunda gittiğinden emin olmak için kaynak kodları indirdiğimiz dizin içindeki "tests" dizinine gidip, tüm testleri çalıştırabiliriz.
ismail@ismail-M61PME-S2P:/usr/share/fuzuli$ cd /usr/share/fuzuli/tests/ ismail@ismail-M61PME-S2P:/usr/share/fuzuli/tests$ ./tester.sh -------------------------------------------- | testing all FUZULI script files. | -------------------------------------------- argc_argv.fzl: 1: PASS arithmetic.fzl: 1: PASS 2: PASS 3: PASS 4: PASS 5: PASS 6: PASS 7: PASS 8: PASS 9: PASS 10: PASS 11: PASS 12: PASS block.fzl: 1: PASS Break.fzl: 1: PASS clientsocket.fzl: 1: PASS clone.fzl: 1: PASS 2: PASS dotimes.fzl: 1: PASS eval.fzl: 1: PASS explode.fzl: 1: PASS fibonacci.fzl: 1: PASS 2: PASS 3: PASS 4: PASS 5: PASS for.fzl: 1: PASS 2: PASS 3: PASS 4: PASS funcoverload.fzl: 1: PASS 2: PASS 3: PASS hex.fzl: 1: PASS inc.fzl: 1: PASS 2: PASS io.fzl: 1: PASS 2: PASS 3: PASS 4: PASS letTest1.fzl: 1: PASS list.fzl: 1: PASS 2: PASS 3: PASS 4: PASS 5: PASS 6: PASS 7: PASS 8: PASS math.fzl: 1: PASS 2: PASS 3: PASS 4: PASS 5: PASS 6: PASS 7: PASS 8: PASS 9: PASS maxmin.fzl: 1: PASS ols.fzl: 1: PASS 2: PASS oop.fzl: 1: PASS 2: PASS sort.fzl: 1: PASS 2: PASS strings.fzl: 1: PASS 2: PASS 3: PASS 4: PASS 5: PASS 6: PASS 7: PASS 8: PASS 9: PASS 10: PASS 11: PASS 12: PASS 13: PASS 14: PASS 15: PASS 16: PASS 17: PASS 18: PASS 19: PASS 20: PASS 21: PASS 22: PASS 23: PASS 24: PASS 25: PASS 26: PASS 27: PASS 28: PASS 29: PASS switchcase.fzl: 1: PASS types.fzl: 1: PASS 2: PASS while.fzl: 1: PASS -------------------------------------------- | Report of test | -------------------------------------------- | 26 files has been tested. | 98 statements has been passed. | 0 statements has been failed. | 0 statements has been undefined. -------------------------------------------- ismail@ismail-M61PME-S2P:/usr/share/fuzuli/tests$
Tüm testlerin geçtiğini gördüğümüzde herşeyin yolunda gittiğinden emin olabiliriz. Ayrıca samples/gui dizini altında Grafik Kullanıcı Arabirimi örneklerine de erişebiliriz. Örneğin,
ismail@ismail-M61PME-S2P:/usr/share/fuzuli/tests$ cd ../samples/gui/ ismail@ismail-M61PME-S2P:/usr/share/fuzuli/samples/gui$ fuzuli gui4.fzl [close, Hello Fuzuli GUI, 297, 296, 230, 230, @FuzuliNativeObject[@FuzuliWidget]] Exiting...ismail@ismail-M61PME-S2P:/usr/share/fuzuli/samples/gui$
----
Kurulumdan daha sonraki bir tarihte Fuzuli'nin güncel kaynak kodları ile tekrar derlenmesi (update Fuzuli)
Fuzuli Programlama Dili'nin genç ve bir o kadar da dinamik bir proje olduğunu söylemiştim. Dolayısıyla her yeni bir gün, Fuzuli için yepyeni fonksiyonlar yazılmaya devam edecektir. Bu sebeple kodunuzu zaman zaman güncelleyip, Fuzuli'yi tekrar derlemeniz de gerekecektir.
Bu işlem, buraya kadar anlatılanlardan çok daha kolay olacaktır, zira tüm bağımlılıklar yüklenmiş, ilgili dizinler register edilmiş, link'ler tanımlanmış durumda. Sırasıyla,
a) Kaynak kodun güncellenmesi, (update source)
fuzuli'nin kaynak kodlarının olduğu "/usr/share/fuzuli" dizinine gidip hg ile yeni kodları istiyoruz.
ismail@ismail-M61PME-S2P:~$ cd /usr/share/fuzuli/ ismail@ismail-M61PME-S2P:/usr/share/fuzuli$ sudo hg pull pulling from https://code.google.com/p/fuzuli/ searching for changes no changes found ismail@ismail-M61PME-S2P:/usr/share/fuzuli$
Bu makale hazırlanırken, zaten en güncel kodu indirdiğimiz için değişiklik tespit edilmedi ancak "No changes found" yerine bir takım değişikliklerin tespit edildiğini düşünelim. Bu durumda "sudo hg update" ile değişiklikleri uygulamamız gerekecekti.
b) Ve daha sonra Fuzuli'yi önce "clean" edip sonra tekrar "build" etmeliyiz, (re-compile source)
ismail@ismail-M61PME-S2P:/usr/share/fuzuli$ sudo ./release-clean-all.sh ismail@ismail-M61PME-S2P:/usr/share/fuzuli$ sudo ./release-build-all.sh
Artık son güncel versiyon Fuzuli diline sahibiz.
Lütfen varsa karşılaşılan sorunlar için bilgi veriniz.
Paylaştığınız bilgiler çok yararlı bilgiler . Herkesin bilmesi gerekiyor bunları . Karın germe olarak paylaşımlarınızın devamını bekleriz .
YanıtlaSil