2012年6月13日水曜日

FreeBSD の portupgrade で libGL-7.4.4 がエラー

ちょっと悩んでいたことが解決したので,書き込んでおこう。今,FreeBSD を数カ所で使っているのだが,その一ヶ所で portupgrade をした際にエラーが起こって困っている。そのうちの一個が解決した(と思っている)際の記録である。

問題が発生したのは,FreeBSD 8.0-RELEASE をインストールしてあるマシンだった。何が問題だったかというと,ports を更新しておいて,portupgrade -a を行った。その際,多くの更新されるべき ports は問題なく更新されたようなのだが,libGL-7.4.4libGL-7.6.1 の更新がエラーでうまくいかなかった。そのため,libGL に依存しているいくつかの ports の更新されなかった。エラーしたのがわかったのは,error とログを吐いたからなのだが,ログのエラーに相当する部分はこんな感じだった(長くて申し訳ないが…)
gmake[5]: ディレクトリ `/usr/ports/graphics/libGL/work/Mesa-7.6.1/src/gallium/winsys/drm/intel/gem' に入ります
cc -c -I. -I../../../../../../src/gallium/include -I../../../../../../src/gallium/auxiliary
 -I../../../../../../src/gallium/drivers -I/src/gallium/include -I/src/gallium/auxiliary
 -I/src/gallium/drivers -I/usr/local/include -I/usr/local/include/drm -I/usr/local/include -O2
 -pipe -fno-strict-aliasing -Wall -Wmissing-prototypes -std=c99  
 -fno-strict-aliasing  -fPIC  -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM
 -DHAVE_POSIX_MEMALIGN -DUSE_XCB -DPTHREADS -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER
 -DHAVE_ALIAS -DGLX_INDIRECT_RENDERING -DGLX_DIRECT_RENDERING 
intel_drm_batchbuffer.c -o intel_drm_batchbuffer.o
In file included from intel_drm_batchbuffer.c:2:
intel_drm_winsys.h:8:26: error: intel_bufmgr.h: No such file or directory
In file included from intel_drm_batchbuffer.c:2:
intel_drm_winsys.h:30: error: expected specifier-qualifier-list before 'drm_intel_bufmgr'
intel_drm_winsys.h:41: error: expected ')' before '*' token
intel_drm_winsys.h:56: error: expected specifier-qualifier-list before 'drm_intel_bo'
intel_drm_winsys.h:72: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
intel_drm_batchbuffer.c:23: error: expected specifier-qualifier-list before 'drm_intel_bo'
intel_drm_batchbuffer.c: In function 'intel_drm_batchbuffer_reset':
intel_drm_batchbuffer.c:37: error: 'struct intel_drm_batchbuffer' has no member named 'bo'
intel_drm_batchbuffer.c:38: warning: implicit declaration of function 'drm_intel_bo_unreference'
intel_drm_batchbuffer.c:38: error: 'struct intel_drm_batchbuffer' has no member named 'bo'
intel_drm_batchbuffer.c:39: error: 'struct intel_drm_batchbuffer' has no member named 'bo'
intel_drm_batchbuffer.c:39: warning: implicit declaration of function 'drm_intel_bo_alloc'
intel_drm_batchbuffer.c:39: error: 'struct ' has no member named 'gem'
intel_drm_batchbuffer.c:43: warning: implicit declaration of function 'drm_intel_bo_map'
intel_drm_batchbuffer.c:43: error: 'struct intel_drm_batchbuffer' has no member named 'bo'
intel_drm_batchbuffer.c:44: error: 'struct intel_drm_batchbuffer' has no member named 'bo'
intel_drm_batchbuffer.c: In function 'intel_drm_batchbuffer_reloc':
intel_drm_batchbuffer.c:115: warning: implicit declaration of function 'drm_intel_bo_emit_reloc'
intel_drm_batchbuffer.c:115: error: 'struct intel_drm_batchbuffer' has no member named 'bo'
intel_drm_batchbuffer.c:116: warning: implicit declaration of function 'intel_bo'
intel_drm_batchbuffer.c:120: error: invalid type argument of '->'
intel_drm_batchbuffer.c: In function 'intel_drm_batchbuffer_flush':
intel_drm_batchbuffer.c:159: warning: implicit declaration of function 'drm_intel_bo_unmap'
intel_drm_batchbuffer.c:159: error: 'struct intel_drm_batchbuffer' has no member named 'bo'
intel_drm_batchbuffer.c:162: warning: implicit declaration of function 'drm_intel_bo_exec'
intel_drm_batchbuffer.c:162: error: 'struct intel_drm_batchbuffer' has no member named 'bo'
intel_drm_batchbuffer.c:167: error: 'struct intel_drm_batchbuffer' has no member named 'bo'
intel_drm_batchbuffer.c:168: error: 'struct intel_drm_batchbuffer' has no member named 'bo'
intel_drm_batchbuffer.c:175: error: 'struct intel_drm_batchbuffer' has no member named 'bo'
intel_drm_batchbuffer.c:190: warning: implicit declaration of function 'intel_drm_fence_create'
intel_drm_batchbuffer.c:190: error: 'struct intel_drm_batchbuffer' has no member named 'bo'
intel_drm_batchbuffer.c:190: warning: assignment makes pointer from integer without a cast
intel_drm_batchbuffer.c: In function 'intel_drm_batchbuffer_destroy':
intel_drm_batchbuffer.c:202: error: 'struct intel_drm_batchbuffer' has no member named 'bo'
intel_drm_batchbuffer.c:203: error: 'struct intel_drm_batchbuffer' has no member named 'bo'
gmake[5]: *** [intel_drm_batchbuffer.o] エラー 1
gmake[5]: ディレクトリ `/usr/ports/graphics/libGL/work/Mesa-7.6.1/src/gallium/winsys/drm/intel/gem' から出ます
gmake[4]: *** [default] エラー 1
gmake[4]: ディレクトリ `/usr/ports/graphics/libGL/work/Mesa-7.6.1/src/gallium/winsys/drm/intel' から出ます
gmake[3]: *** [default] エラー 1
gmake[3]: ディレクトリ `/usr/ports/graphics/libGL/work/Mesa-7.6.1/src/gallium/winsys/drm' から出ます
gmake[2]: *** [default] エラー 1
gmake[2]: ディレクトリ `/usr/ports/graphics/libGL/work/Mesa-7.6.1/src/gallium/winsys' から出ます
gmake[1]: *** [subdirs] エラー 1
gmake[1]: ディレクトリ `/usr/ports/graphics/libGL/work/Mesa-7.6.1/src' から出ます
gmake: *** [default] エラー 1
*** Error code 1

Stop in /usr/ports/graphics/libGL.
[1]    22562 exit 1     make install clean
このエラーがでてから,一週間ほどが経つが,これがなかなか解決されなかった。その際,何をしたかというと,(1) ports を更新して,portupgrade を行う(2) /usr/ports/distfiles/ の中や /var/db/pkg/ の中のそれっぽいファイルを消してから portupgrade を行う,などだった。もしかしたら数日経てば ports が更新されるかも,と思って待ってみたがだめだった。ちなみに,私は言うほど FreeBSD を熟知してるわけではなく,むしろどっちかというと素人に近い,と思っている。なので対応は初心者の対応しかできない…。それでもこのエラーが気になっていたので,何度もチャレンジはしてみていた。でもいくらやってもだめだった。

しかし,実はうまく portupgrade ができたケースが存在していた。それは FreeBSD 8.1-RELEASE をインストールした別のマシンだとうまくいっていた,ということだった。そこで,気を取り直してエラーメッセージを見なおしてみた。よく見ると,
intel_drm_winsys.h:8:26: error: intel_bufmgr.h: No such file or directory
というのがエラーの最初みたいだった。そこで,とりあえずエラーの表示にあった2つのファイル,intel_drm_winsys.hintel_bufmgr.h を locate コマンドで検索してみた。すると,エラーを起こすマシンの方には intel_bufmgr.h がない,と出た。しかしうまくいったマシンには存在していた。どこにあったかというと
/usr/local/include/intel_bufmgr.h
なぜ FreeBSD 8.0-RELEASE マシンの方になかったのかはわからない。しかし,これで希望が見えた。そこで,FreeBSD 8.1-RELEASE マシンの intel_drm_winsys.hFreeBSD 8.0-RELEASE にコピーし, libGL をインストールしてみた(一度 pkg_delete していたので…)。

すると,これがうまくいった。解決してみれば大したことはなかった。やっぱりエラーは体に悪いねぇ。エラー表示をみると,焦ってしまって何もいいことない…。それにしてもなぜ FreeBSD 8.0-RELEASE には intel_drm_winsys.h がなかったんやろ?何かの手違いかなぁ?まさか自分で消したとは思えないのだが…。ま,いずれにせよ,問題が解決してよかったよかった。ちなみに intel_drm_winsys.h はネットで検索すると得られるみたい。

0 件のコメント: