2013-10-09

Build TclX 8.4.1

在 build 的時候,需要 Tcl 的 source code。configure 使用下列的方式設定:

CPPFLAGS="-I/home/danilo/rpm/SOURCES/tcl8.6.1/generic/ -I/home/danilo/rpm/SOURCES/tcl8.6.1/unix/" ./configure --enable-threads --with-tcl=/usr/lib64


* notice:因為我是使用 x86_64 的作業系統,所以目錄指向 /usr/lib64,如果是 32 位元應該要指向 /usr/lib 才對。然後,因為 TclX 有使用 Tcl 的內部宣告,所以要設定  CPPFLAGS 讓 TclX 在 build 的時候可以找到 header file。


再來就是 make,跟 make install 就可以了。

Build a Tcl/Tk RPM (on openSUSE 12.3)

首先,要先安裝 rpm-build 這個工具。如果是 Ubuntu 的使用者,安裝的命令如下:
sudo apt-get install rpm

在 openSUSE 上我是使用 GUI 安裝軟體,下列是我猜可以使用的 openSUSE 命令,但是我沒試過:
sudo zypper install rpm-build

再來是環境設定,首先在自己的家目錄建立下列的目錄:
  • */rpm
  • */rpm/BUILD
  • */rpm/RPMS
  • */rpm/SOURCES
  • */rpm/SPECS
  • */rpm/SRPMS
Create the .rpmmacros at your home folder for your own rpm build configuratio(下面是相關的範例):

%packager       test <test@gmail.com>
 
%_topdir        /home/test/rpm
%_tmppath       /var/tmp
 
%_rpmtopdir     %{_topdir}
%_builddir      %{_rpmtopdir}/BUILD
%_rpmdir        %{_rpmtopdir}/RPMS
%_sourcedir     %{_rpmtopdir}/SOURCES
%_specdir       %{_rpmtopdir}/SPECS
%_srcrpmdir     %{_rpmtopdir}/SRPMS


再來就下載 Tcl 和 Tk 8.6.1 的 source code package。放到 rpm/SOURCES,使用下列的命令解壓縮:

tar xzvf tcl8.6.1-src.tar.gz
tar xzvf tk8.6.1-src.tar.gz

1. tcl

進入 tcl8.6.1 的目錄下,再進入 unix 目錄,對於 tcl.spec 我們有二個地方要修改:
  1. 預設的安裝目錄:原本是 /usr/local,可以改成 /usr
  2. 在最後再加入一行 %{directory}/share/man/mann,有檔案會安裝到這裡,如果不加會出現問題
如果要建立一個 tclsh 的連結,在  make INSTALL_ROOT=%{buildroot} install 之後,加入下面這一行:
ln -s tclsh%{majorver} $RPM_BUILD_ROOT%{_bindir}/tclsh


然後 tcl.spec 要在 Name:          tcl 這行之前加入版本宣告:

%global majorver1 8
%global majorver2 6
%global majorver %{majorver1}.%{majorver2}


再來使用下列的命令建立 RPM:
rpmbuild --bb tcl.spec

2. tk

先確定 tcl 做好 rpm 之後有安裝成功。另外,還需要 XFree86-dev 有安裝才行。

進入 tk8.6.1 的目錄下,再進入 unix 目錄,對於 tk.spec 我們有一個地方要修改:
  1. 預設的安裝目錄:原本是 /usr/local,可以改成 /usr 
如果要建立一個 wish 的連結,在  make INSTALL_ROOT=%{buildroot} install 之後,加入下面這一行:
ln -s wish%{majorver} $RPM_BUILD_ROOT%{_bindir}/wish

然後在 Name:          tk 這行之前加入版本宣告:

%global majorver1 8
%global majorver2 6
%global majorver %{majorver1}.%{majorver2}


再來使用下列的命令建立 RPM:
rpmbuild --bb tk.spec

2013-10-02

Network Time Protocol (NTP) client

範例:來自 Network Time Protocol - NTP

使用了 Tcllib 中的 NTP package,並且需要使用 TclUDP 或者是 ceptcl 來提供 UDP 支援。
 
package require time

set timeserver "time.stdtime.gov.tw"

proc NetTime {server} {
set tok [time::getsntp $server] ;# or gettime to use the TIME protocol
time::wait $tok
if {[time::status $tok] eq "ok"} {
   set result [time::unixtime $tok]
   set code ok
} else {
   set result [time::error $tok]
   set code error
}
time::cleanup $tok
return -code $code $result
}


exec cmd.exe /c time [clock format [NetTime $timeserver] -format %H:%M:%S]