2010年10月9日 星期六

使用 GNU Build System 管理用 Vala 寫的 GTK+ 程式

延續先前的文章『使用 GNU Build System (aka Autotools) 來管理 Vala 編譯流程

首先準備好 GTK+ 的 Vala 原始碼檔案 MyApp.vala
using Gtk;

namespace ValaTutorial
{
    class MyApp : Gtk.Window
    {
        public MyApp ()
        {
            var button = new Button.with_label ("Click me!");
            add (button);

            button.clicked.connect (on_clicked);
        }

        private void on_clicked (Gtk.Button button)
        {
            stdout.printf ("Ouch!\n");
        }

        public static int main (string[] args)
        {                                                    
            Gtk.init (ref args);

            var app = new MyApp ();
            app.show_all ();

            app.destroy.connect (Gtk.main_quit);

            Gtk.main ();
            return 0;
        }
    }
}
然後再準備一個 Makefile.am
# AM_VALAFLAGS = --pkg gtk+-2.0            

bin_PROGRAMS = MyApp

MyApp_SOURCES = MyApp.vala
MyApp_CPPFLAGS = @GTK_CFLAGS@
MyApp_LDFLAGS = @GTK_LIBS@
MyApp_VALAFLAGS = --pkg gtk+-2.0
第 1,8 行是 Vala 使用外部函式庫時需要的參數,視實際需求選擇使用
效果相當於
$ valac --pkg gtk+2.0 MyApp.vala
最後是自動產生並修改過後的 configure.ac
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.65])
AC_INIT([hello], [0.0], [foo@bar.com])

AM_INIT_AUTOMAKE([-Wall -Werror foreign])

# Checks for programs.
AC_PROG_CC
AM_PROG_VALAC([0.8.0])

# Checks for libraries.
AM_PATH_GTK_2_0                                                 

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile])
AC_OUTPUT
第 14 行會產生出 Makefile.am 所需要的 @GTK_CFLAGS@ 及 @GTK_LIBS@
最後就是一般 GNU Build System 慣用的指令
$ autoreconf -if
$ ./configure
$ make
參考資料:

2010年10月8日 星期五

使用 GNU Build System (aka Autotools) 來管理 Vala 編譯流程

首先要先安裝好需要的軟體套件

以 Ubuntu 10.04 為例
$ sudo apt-get install autoconf automake pkg-config valac vim

Ubuntu 10.04 上面的 Vim 並沒有提供 Vala 的語法著色
還好官方網站上面已經有提供了 Vala/Vim
照著做一遍就好了

準備一個的 hello world 原始碼檔案 hello.vala
void main() {
    stdout.printf("Hello world\n");
}

接者寫一個 Makefile.am
bin_PROGRAMS = hello
hello_SOURCES = hello.vala
hello_CPPFLAGS = @GLIB_CFLAGS@
hello_LDFLAGS = @GLIB_LIBS@

然後將 autoscan 產生出來的 configure.scan 更名為 configure.ac
$ autoscan
$ mv configure.scan configure.ac

再修改成下面這樣
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.65)
AC_INIT([hello],[0.0],[foo@bar.com])

AM_INIT_AUTOMAKE([-Wall -Werror foreign])

# Checks for programs.
AC_PROG_CC
AM_PROG_VALAC([0.8.0])

# Checks for libraries.
AM_PATH_GLIB_2_0(,,,[gobject])                                  

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile])
AC_OUTPUT

第 7 行的
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
會產生一些處理 Makefile.am 的工具出來

第 10 行的
AC_PROG_CC
會檢查 C Compiler 因為 Vala 最終還是會產生 C 的原始檔案

第 11 行的
AM_PROG_VALAC([0.8.0])
當然就是檢查這篇文章的主角 Vala 囉

第 14 行的
AM_PATH_GLIB_2_0(,,,[gobject])
會產生出在 Makefile.am 所使用的 @GLIB_CFLAGS@ 跟 @GLIB_LIBS@
還有會使用到 glib 裡面的 gobject 這個 module

接下來就如同一般的 GNU Build System (aka Autotools) 的慣用方法
使用以下命令來產生 configure 腳本檔案
$ autoreconf -if

然後就是 ./configure && make && make install 這類常見的指令連續技囉~ :P

2010年10月3日 星期日

BetaRadio v1.1 正式釋出

此版新增的功能是可以透過網路新增播放清單
簡單講就是 list.json 這個網路上的檔案裡面有多少清單就會看到多少清單
另外修正了播放時會斷斷續續的問題

Ubuntu 9.10/10.04/10.10 使用者可以直接使用命令列執行以下步驟
$ sudo add-apt-repository ppa:fourdollars/betaradio
$ sudo apt-get update
$ sudo apt-get install betaradio
來安裝

至於其它的 GNU/Linux 系統就要請諸位大大們幫忙產生安裝套件囉~ <(_ _)>

軟體原始碼下載 betaradio-1.1.tar.bz2 SHA1: 2768cfbb07dbc7d87b6f653645a00037629446ad
編譯時會需要 libgtk2.0-dev libgstreamer0.10-dev libjson-glib-dev libsoup2.4-dev 這些套件
執行時會需要 gstreamer0.10-plugins-good gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly gstreamer0.10-ffmpeg 這些套件

祝大家玩得開心。:D