問題が発生したのは,FreeBSD 8.0-RELEASE をインストールしてあるマシンだった。何が問題だったかというと,ports を更新しておいて,portupgrade -a を行った。その際,多くの更新されるべき ports は問題なく更新されたようなのだが,libGL-7.4.4 → libGL-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このエラーがでてから,一週間ほどが経つが,これがなかなか解決されなかった。その際,何をしたかというと,(1) ports を更新して,portupgrade を行う,(2) /usr/ports/distfiles/ の中や /var/db/pkg/ の中のそれっぽいファイルを消してから portupgrade を行う,などだった。もしかしたら数日経てば ports が更新されるかも,と思って待ってみたがだめだった。ちなみに,私は言うほど FreeBSD を熟知してるわけではなく,むしろどっちかというと素人に近い,と思っている。なので対応は初心者の対応しかできない…。それでもこのエラーが気になっていたので,何度もチャレンジはしてみていた。でもいくらやってもだめだった。' 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
しかし,実はうまく portupgrade ができたケースが存在していた。それは FreeBSD 8.1-RELEASE をインストールした別のマシンだとうまくいっていた,ということだった。そこで,気を取り直してエラーメッセージを見なおしてみた。よく見ると,
intel_drm_winsys.h:8:26: error: intel_bufmgr.h: No such file or directoryというのがエラーの最初みたいだった。そこで,とりあえずエラーの表示にあった2つのファイル,intel_drm_winsys.h と intel_bufmgr.h を locate コマンドで検索してみた。すると,エラーを起こすマシンの方には intel_bufmgr.h がない,と出た。しかしうまくいったマシンには存在していた。どこにあったかというと
/usr/local/include/intel_bufmgr.hなぜ FreeBSD 8.0-RELEASE マシンの方になかったのかはわからない。しかし,これで希望が見えた。そこで,FreeBSD 8.1-RELEASE マシンの intel_drm_winsys.h を FreeBSD 8.0-RELEASE にコピーし, libGL をインストールしてみた(一度 pkg_delete していたので…)。
すると,これがうまくいった。解決してみれば大したことはなかった。やっぱりエラーは体に悪いねぇ。エラー表示をみると,焦ってしまって何もいいことない…。それにしてもなぜ FreeBSD 8.0-RELEASE には intel_drm_winsys.h がなかったんやろ?何かの手違いかなぁ?まさか自分で消したとは思えないのだが…。ま,いずれにせよ,問題が解決してよかったよかった。ちなみに intel_drm_winsys.h はネットで検索すると得られるみたい。
0 件のコメント:
コメントを投稿