Archive for the 'Mac' Category

portconf 處理 soft link 的問題

ports-mgmt/portconf 是一個很好用的工具,可以設定一個 port.conf,內容大致上的形式是這樣:

editor/vim*: WITH_CSCOPE=yes | WITH_EXUBERANT_CTAGS=yes

如此一來,portconf 便會在 /etc/make.conf 自動去 parse port.conf,然後將對應的參數加入,以上面的例子,如果我安裝 editor/vim or editor/vim-lite 都會自動加入 “WITH_CSCOPE=yes WITH_EXUBERANT_CTAGS=yes”,這樣我們便可以更方便地管理各種不同 ports 的安裝參數。

但是,原本的 portconf 只是單純地判斷是否在 /usr/ports 下執行 make 的,如果 /usr/ports 是使用 soft link 的方式,其 real path 卻是在其它地方,那麼 portconf 便不會運作,它判斷的程式碼是加在 /etc/make.conf:

.if !empty(.CURDIR:M/usr/ports*) && exists(/usr/local/libexec/portconf)
_PORTCONF!=/usr/local/libexec/portconf
.for i in ${_PORTCONF:S/|/ /g}
${i:S/%/ /g}
.endfor
.endif

從上面可以看到,它是利用 make 的 modifier 去比對,但是 modifier 其後接的 pattern 是不接受變數展開的,也就是說我們不能這樣寫:

_PORTDIR!=/bin/realpath /usr/ports
.if !empty(.CURDIR:M${_PORTDIR}*) && exists(/usr/local/libexec/portconf)
_PORTCONF!=/usr/local/libexec/portconf
.for i in ${_PORTCONF:S/|/ /g}
${i:S/%/ /g}
.endfor
.endif

這是 make 本身的限制,rafan 後來送了個 patch,讓 portconf 可以在安裝的時候自動將 make.conf 裡 /usr/ports 換成它的 real path,但是只保證安裝時候判斷,如果 real path 換地方了,便得手動修改或是乾脆重裝 portconf,其實 /usr/ports 的 real path 多半很少換,只要記得換了要修改或重裝就好,所以也還可以,但是我在想有什麼方式可以達到真正的動態判斷 real path,後來我改出了兩個版本:

Version 1

第一個版本想法是既然直接在 make.conf 做判斷有困難,那不如都改到 portconf 那隻 shell script 去判斷吧!

/etc/make.conf

.if exists(/usr/local/libexec/portconf)
_PORTCONF!=/usr/local/libexec/portconf
.for i in ${_PORTCONF:S/|/ /g}
${i:S/%/ /g}
.endfor
.endif

/usr/local/libexec/portconf 前面加入

_portdir=`/bin/realpath /usr/ports`
_curdir=`pwd`
if [ "${_curdir##${_portdir}*}" != "" ]; then
    exit
fi

Version 2

第二個版本是直接在 make.conf 利用外部工具做判斷,只需要修改 make.conf,不用動到 portconf 那隻 shell script。

/etc/make.conf

_PORTSDIR!=/bin/realpath /usr/ports
_MATCHDIR!=echo `echo ${.CURDIR} | /usr/bin/grep ^${_PORTSDIR}`
.if !empty(_MATCHDIR) && exists(/usr/local/libexec/portconf)
_PORTCONF!=/usr/local/libexec/portconf
.for i in ${_PORTCONF:S/|/ /g}
${i:S/%/ /g}
.endfor
.endif

上面兩個版本都可以達到動態判斷 real path,但是有一利必有一弊…原本 portconf 利用 make 本身的 modifier 便是為了減少每次呼叫 make 多花費在判斷的時間,這對於一般的 ports 安裝來說,不會有多大的影響,但是對於 make buildworld 來說,便有可能造成很大的影響,所以我做個了測試,看看上面兩種修改在 make buildworld 增加多少時間,我的測試環境是:

  • CPU:Intel(R) Core(TM)2 Duo CPU E6550 @ 2.33GHz (2333.35-MHz K8-class CPU)
  • OS:FreeBSD 7.0R amd64

測試出來的結果:

  • Original:60m57.49s
  • Version 1:62m6.19s
  • Version 2:61m29.74s

這樣的結果我還算可以接受,所以我選擇了 Version 2 的版本 (雖然它做法挺髒的 XD)。

Leopard 10.5.2 更新出來了

Mac OS 10.5 leopard 新的更新出來了,目前最新版本是 10.5.2;除了安全性更新之外,還有軟體功能上的修正和新功能,廢話不多說,趕快來更新!

詳細的更新內容可以參考這裡
leopard 10.5.2 update

Leopard 下 Firefox 輸入問題

Leopard 上更新了 Firefox 2.0.0.9 之後,從昨天開始,就一直有一個怪問題出現,就是輸入某些中文字會有問題,就是輸出的字會不見,然後再接著輸入其他中文字,又會出現,只是游標位置會跑到前一個字,一開始以為是 OpenVanilla 的問題,可是換了內建的漢音輸入也是有同樣的問題,然後我又試了 safari,發現沒有這個問題,所以我猜應該是這一版的 firefox 有問題。

這個問題發生在開啟 firefox 一段時間後,出現過問題的字有”兩”、”軟”、”黃”,希望下一版的能夠解決這個問題!

Update: 試用了 Firefox 3 Beta 2 沒有再出現掉字的問題了,可是速度還是慢啊 ><

Leopard – 如何更換登入畫面的背景?

到 leopard 的使用者們!是不是看膩了登入畫面一成不變的背景!?大家都有個疑問,包括我也是,到底要怎麼把那個背景改掉?

嘿嘿!其實登入畫面的背景就隱藏在 /System/Library/CoreServices/DefaultDesktop.jpg 這個檔案,也就是說,只要把這個檔案換成你喜歡的圖片就行了。(當然,檔名不能改,好!我知道這是廢話…)

我換成 Time Machine 的背景!

Update: 上面的做法不是很好,嗯!後來想想也是,其實這些背景圖片的資訊早已經寫在系統資訊裡面了,只要下:

sudo defaults write /Library/Preferences/com.apple.loginwindow DesktopPicture "/Library/Desktop Pictures/Aqua Blue.jpg"

就可以直接指定要置換的來源檔案,如此一來,連改檔名都不用了。