Mac OS X で pkg-configでエラーになった

普段から OS Xのパッケージ管理には Homebrew を使っています。
Homebrew に含まれる一部パッケージ(pango)のバージョンを変えてインストールする必要があり、自分でビルドしてみようと思ったところすっかりはまってしまいました。

発生した症状

Homebrew でインストールしたパッケージ(cairo)に依存している箇所でエラーになってしまいました。

具体的には ./configure の実行中に pkg-config で依存しているパッケージの.pc ファイルが存在しないと怒られています。

# config.log
pkg-config --cflags --print-errors cairo 

Package xcb-shm was not found in the pkg-config search path.
Perhaps you should add the directory containing `xcb-shm.pc'
to the PKG_CONFIG_PATH environment variable
Package 'xcb-shm', required by 'cairo', not found

解決するには?

エラーメッセージどおり、環境変数 PKG_CONFIG_PATHの通るところに .pc ファイルを配置するか、環境変数にパスを追加して再実行することで解決しました。

PKG_CONFIG_PATHが空の場合のデフォルトは

/usr/local/lib/pkgconfig

です。

今回は /opt/X11/lib/pkgconfig/ の中に依存している .pcファイルがあったので、パス追加で対応しました。

$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/opt/X11/lib/

再実行し、エラーが出なくなるのを確認します。

$ pkg-config --cflags --print-errors cairo

あとは通常通り、./configure, make などを実行すればOKです。

OS X では(Homebrewでは?) X11 関係の pkgconfigのパッケージ情報ファイル(.pcファイル)は /opt/X11/lib/pkgconfig/ にあるのですね。

【Java】 Mapを値でソートする方法

Javaでソート対応のマップと言えばTreeMapだけど、TreeMapはキーのソートにしか対応してません。

マップの値でのソートはオブジェクト外の要素でソートしたい時などは値でのソートが出来ると便利ですので、今回はその方法をご紹介します。

続きを読む 【Java】 Mapを値でソートする方法

Mac OS X でポートを開いているプログラムを調べる

WindowsやLinuxでは netstat の -bオプションや-pオプションでポートを待ち受けているプロセスを調べる事ができるのに、Mac OS Xではそんなオプションが無く困った。

なんとか方法が他にないか調べた所、
Mac OS X では lsof を使うのが一番簡単そう。

$ lsof -i | grep LISTEN

結果はこんな感じになる。

$ lsof -i | grep LISTEN
Dropbox     303   user   19u  IPv4 0xffffff0123456789      0t0  TCP *:17500 (LISTEN)
Dropbox     303   user   25u  IPv4 0xffffff0123456789      0t0  TCP localhost:26165 (LISTEN)
node      56728   user    8u  IPv4 0xffffff0123456789      0t0  TCP *:hbci (LISTEN)
mongod    57071   user    6u  IPv4 0xffffff0123456789      0t0  TCP localhost:28017 (LISTEN)
mongod    57071   user    7u  IPv4 0xffffff0123456789      0t0  TCP localhost:27017 (LISTEN)

調べようと思った動機は mongodb のListenポートをど忘れして確認したかっただけでした。
実行結果を見ると mongodb は TCP localhost:27017, TCP localhost:28017とあるので、
待ち受けているポートはTCPポート27017, 28017の2つですね。

Linuxで “ls -l” のパーミッションに現れるドットの謎

Linux で ls -l の表示をした時に、パーミッション欄の右側にドット(“.”)が現れる事がある。

# ll -h /etc/profile.d/
-rw-r--r--. 1 root root 1.2K  4月 28 23:58 2010 colorls.csh
-rw-r--r--. 1 root root 1.2K  4月 28 23:58 2010 colorls.sh
-rw-r--r--  1 root root 1.8K 12月 11 08:19 2011 foo.sh

何度か調べるのだけど、すぐ忘れてしまうのでメモしておく。 続きを読む Linuxで “ls -l” のパーミッションに現れるドットの謎

WineでInstall Mono 2.8 or greaterエラーになった時の対応方法

LinuxでWindowsアプリケーションを実行する必要があったためWineでの実行を試したところ、

$ wine foo.exe
wine: Install Mono 2.8 or greater for Windows to run .NET 4.0 applications. 

と言われてしまいました。wine 2.10 を入れてるのに。

Wine内で動くmonoライブラリのバージョンが古いのだろうと判断し、
winetricksを使って.Net Frameworkライブラリのdotnet40を
インストールしたら動くようになりました。

手順は以下のとおりです。 続きを読む WineでInstall Mono 2.8 or greaterエラーになった時の対応方法

WebViewでshouldOverrideUrlLoading()が反応しない問題

StackOverflowでも”shouldOverrideUrlLoading(…) not executed if “window.location.href” modified in a timeout callback“と報告されているが、WebViewで JavaScript から location.href を書き換えると通常shouldOverrideUrlLoading()が反応するのに setTimeout()を使用して location.href を書き換えた場合は shouldOverrideUrlLoading() が呼ばれません。 続きを読む WebViewでshouldOverrideUrlLoading()が反応しない問題

RVMでRuby環境の切り替えを簡単に!

Rvm image
Ruby 開発を始める時はまずgem管理ツールを入れておくと便利です。
実行環境やプロダクトに応じ、Ruby本体やgemパッケージの依存するバージョンが異なる事も多々あります。これらのバージョンを管理して切り替えを容易にしてくれるのがRVM(Ruby Version Manager)やBundlerといった管理ツールなのです。

今回はRVMのインストール手順をまとめました。それでは続きをどうぞ。 続きを読む RVMでRuby環境の切り替えを簡単に!

OS X + Ruby 1.9.3 + Rails 3.2.3 で segmentation fault

Mac OS Xで Rails + Heroku な環境を作ろうとしてSegmentation Faultで苦しんだ。
最終的には(一応)使えるようになったので記録としてメモしておきます。 続きを読む OS X + Ruby 1.9.3 + Rails 3.2.3 で segmentation fault

vim で Zen coding を使う方法

Zencoding vim logo
最近 zen coding にはまっています。
vim でも使いたい、ということで導入方法をまとめておきます。

参考:知らない人は損してる?コーディングが3倍速くなるZen-Codingを導入してみた 続きを読む vim で Zen coding を使う方法