かなりcaamに頼った。
自分メモ。net/gnutls は、libtoolさしかえ。
security/policykit は src/polkit-dbus/polkit-read-auth-helper.c に
#define dirfd(dirp) ((dirp)->dd_fd)
追加。あと、bmake install 時に -lpolkit を探せないので work/.*/bin が見えないようディレクトリ名を変えた。
sysutils/hal の hald の rule.h に追加。
typedef uint32_t u_int32_t;
sysutils/gnome-vfs の libgnomevfs は、PREFIXが残るので
p=/home1/pkg/200901/pkg gmake CC="gcc -DPREFIX=\\\"$p\\\" \ -DPKG_SYSCONFDIR=\\\"$p/etc\\\" -DPKGLOCALEDIR=\\\"$p/share/local\\\""
さらにlibtool差し替え。MakefileのGSSAPI_CFLAGS等にゴミが残るので削除。
devel/libgnome もcaamしてからlibtool差し替え。
databases/shared-mime-info も PREFIX 残り。
gtk2は、こんなエラー。
Undefined first referenced symbol in file gdk_pixdata_from_pixbuf gdk-pixbuf-csource.o gdk_pixdata_to_csource gdk-pixbuf-csource.o gdk_pixbuf_new_from_file gdk-pixbuf-csource.o
gdk-pixbuf/.libs/libgdk-pixbuf-2.0.so がこんな風。
nm .libs/libgdk-pixbuf-2.0.so
:
[57] | 87848| 1640|FUNC |LOCL |2 |13 |gdk_pixdata_from_pixbuf
:
LOCLになってるのが問題か。ははーん、libtool で nm を使って グローバルシンボルを抽出するんだが、nmの出力がBSD互換形式であると 決め打ちしているのか。じゃあ Solaris の nm のままじゃ無理だ。 てことで生成される libtool の変数設定を以下のように。
NM="nm -p" : : : global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGIRSTW][ABCDGIRSTW]*\\)[ ][ ]*\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2 \\2/p'"
いやまて、configureのときに NM="nm -p" としておくほうがいいかな? 次からそうしよう。あ、エラーが出なくなった。なんだ最初からそうしておけば。
次、devel/libglade。もろもろ -std=c9x ではコンパイルできないから オプションを除去。net/py-ORBIT、graphics/py-cairo も同様。
databases/sqlite3 で、src/btreeInt.h が2重インクルードされて 変数の2重定義エラーが出る。初歩的バグ。src/btreeInt.h 全体を 以下の記述で包む。
#ifdef _BTREEINT_H_ #define _BTREEINT_H_ : : : #endif
さらにリンク時に sqlite3_version が見えない。 何も考えず sqlite3.c を、
#ifndef SQLITE_AMALGAMATION SQLITE_API const char sqlite3_version[] = SQLITE_VERSION; #else const char sqlite3_version[] = SQLITE_VERSION; #endif
とかしておしまい。あうまくいっちゃった。
sysutils/libgtop の sysdeps/solaris/glibtop_server.h に不足あり。
#define GLIBTOP_SUID_PROC_WD 0 #define GLIBTOP_SUID_PROC_AFFINITY 0
と思ってコンパイルは通ったが別のツールのリンクでこける。 そもそもSolaris用の関数が全く実装されていない。おぃおぃ。こりゃ 手に追えないなあと半ばあきらめながら検索したら OpenSolaris用のパッチ が見つかった。Local copy。
net/bug-buddy は icon のインストールを行なう Makefile で、 sh のfor文に空のリストを渡している。それで /usr/xpg4/bin/sh がこける。 なので CONFIG_SHELL=/bin/bash に設定してからcaamに助けてもらう。
graphics/cheese が #if defined(__sun)
で挟んで
sys/videodev2.h とやらを include しようとしてるが、sparcにゃそんなもん
ない。から外した。通った。
sysutils/gnome-mount もSolaris対応がダメ。 src/ 内の gnome-mount-properties-view.c と gnome-mount.c だ。 パッチも見当たらない。しゃーない作るか。あってるかどうか分からないが。
--- gnome-mount-0.8/src/gnome-mount-properties-view.c.orig Sat Jan 24 07:09:38 2009 +++ gnome-mount-0.8/src/gnome-mount-properties-view.c Sat Jan 24 07:36:51 2009 @@ -42,6 +42,8 @@ #include <sys/mount.h> #include <limits.h> #include <pwd.h> +#elif defined(sun) +#include <sys/mnttab.h> #else #include <mntent.h> #endif @@ -536,6 +538,16 @@ *mount_options = g_string_free(optstr, FALSE); *mount_fstype = mtab->mounts[mtab->iter++].f_fstypename; return TRUE; + } else { + return FALSE; + } +#elif defined(sun) + struct mnttab mtb; + int result = getmntent(handle, mtb); + if (result==0) { + *device_file = mtb.mnt_special; + *mount_options = mtb.mnt_mntopts; + *mount_fstype = mtb.mnt_fstype; } else { return FALSE; } --- gnome-mount-0.8/src/gnome-mount.c.orig Sat Jan 24 07:28:33 2009 +++ gnome-mount-0.8/src/gnome-mount.c Sat Jan 24 07:33:58 2009 @@ -892,6 +892,15 @@ } return fstab ? fstab->fs_spec : NULL; +#elif defined(sun) + struct mnttab mtb; + int result; + result = getmntent(handle, mtb); + + if (result == 0 & mtb.mnt_mountp != NULL) { + *mount_point = mtb.mnt_mountp; + } + return result==0 ? mtb.mnt_fstype : NULL; #else struct mntent *mnt;
x11/gnome-panel ヘルプのインストールで omf ファイルの元ファイル名が おかしい。拡張子 .out なしに書き換える。
chat/telepathy-gabble で lib/gibber/giber-util.c は
#ifdef sun typedef uint32_t u_int32_t; typedef uint16_t u_int16_t; #endif
を追加。src/bytestream-socks5.h に
#include <sys/sockio.h>
を追加。
chat/telepathy-idle リンクに -lcrypto が必要。
devel/exempi は char** を const char** へキャストしている
部分がこけるがこれは #ifdef __NetBSD__
してある部分を使えば
よいので、とりあえず #if defined(__NetBSD__) || defined(sun)
にした。
net/avahi も要らないんだけどなあ。まず configure でこける。 --with-distro=none にしないと。さらに configure で HAVE_SETEGID と HAVE_SETEUID のセットに失敗しているようだ。さらに dbus_connection_disconnect という古い名前の関数を使っている ようだ。config.h で
#define HAVE_SETEGID 1 #define HAVE_SETEUID 1 #define dbus_connection_disconnect dbus_connection_close
しちゃった。あと、-std=c99 を削除。
perl -i -pe 's/ -std=c9.//' **/Makefile
x11/qt3-tools はややこしくてわからん。qtlibsが $PKG に 入っているにもかかわらず、ソースツリーから生成される lib/.libs/libqt-mt.so を二重リンクしに行って libtool が怒る。 ソースツリーの lib/.libs/libqt-mt.la を引数から除去して通った。 通じるかいな。
sysutils/gvfs は struct msghdr のメンバーがsolaris的に未定義。
/usr/include/sys/socket.h を見ればわかるが _XPG4_2 をdefineしていないと
msg_control なんかは定義されない。とりあえず
gmake CC='gcc -D_XPG4_2 -std=c99'
で回す。
std=c99 だと通らないのもあるので普通にgmakeで継続。あと,mkdtemp()を
無条件で使ってるので,それのないsolarisではリンクエラーになる。
むう,適度に簡単な関数だから一瞬書いちゃおうかと迷ったが
これだけ便利な関数ならどっか別のパッケージのライブラリで実装してるん
ちゃうかと思って nm $pkg/lib/lib*so
で探したら,
めーっけ,gettextlib にあった。てことで gvfsd-burn を生成する
コマンドラインに -lgettextlib を追加してみて,通った。
おお,これは個人的に新しい work around 方法を発見。
security/seahorse の libseahorse/seahorse-passphrase.c で include している err.h なんてsolarisにない。
--- daemon/seahorse-daemon.c.bak Fri Jan 30 16:23:02 2009 +++ daemon/seahorse-daemon.c Fri Jan 30 16:15:59 2009 @@ -67,6 +67,19 @@ { NULL } }; +#ifdef sun +int warn(char *msg) +{ + write(2, msg, strlen(msg)); + write(2, "\n", 1); +} +int err(int status, char *msg) +{ + warn(msg); + write(2, "\n", 1); + exit(status); +} +#endif static void daemonize () {
はい,おしまい。
misc/yelp はリンク時に未解決シンボルでまくり。
Undefined first referenced symbol in file nsCOMPtr_base::assign_from_helper(nsCOMPtr_helper const, nsID const)yelp-Yelper.o (symbol belongs to implicit dependency /home1/pkg/200901/pkg/lib/firefox/libxpcom_core.so) nsCOMPtr_base::begin_assignment() yelp-Yelper.o (symbol belongs to implicit dependency /home1/pkg/200901/pkg/lib/firefox/libxpcom_core.so) : :
最後の libtool 呼出しに -lxpcom_core を追加。