[[diary/Kojima]]

・X11R7.1(その2)

その後,しばらくビルドは順調に進んだけど,Xdmx(ってなんだ?)をリンクする際に

 gcc -m64 -g -O2 -o Xdmx -rdynamic Xdmx-dmx.o Xdmx-dmxcb.o
 Xdmx-dmxcmap.o Xdmx-dmxcursor.o Xdmx-dmxdpms.o Xdmx-dmxextension.o
 ...
 /usr/X11/lib/libXau.so /usr/X11/lib/libXdmcp.so -lm
 ../../dix/.libs/libdix.a(devices.o): In function `CoreKeyboardBell':
 /sources/X/srcs/xserver/dix/devices.c:216: undefined reference to `DDXRingBell'
 input/libdmxinput.a(dmxinputinit.o): In function `dmxDeviceOnOff':
 /sources/X/srcs/xserver/hw/dmx/input/dmxinputinit.c:437: undefined reference to `miPointerGetMotionBufferSize'
 /sources/X/srcs/xserver/hw/dmx/input/dmxinputinit.c:437: undefined reference to `miPointerGetMotionEvents'
 input/libdmxinput.a(dmxinputinit.o): In function `dmxAddDevice':
 /sources/X/srcs/xserver/hw/dmx/input/dmxinputinit.c:714: undefined reference to `miRegisterPointerDevice'
 input/libdmxinput.a(dmxxinput.o): In function `ChangePointerDevice':
 /sources/X/srcs/xserver/hw/dmx/input/dmxxinput.c:102: undefined reference to `miPointerGetMotionEvents'
 /sources/X/srcs/xserver/hw/dmx/input/dmxxinput.c:103: undefined reference to `miPointerGetMotionBufferSize'
 collect2: ld returned 1 exit status
 make[3]: *** [Xdmx] Error 1
 make[3]: Leaving directory `/sources/X/srcs/xserver/hw/dmx'

なんてエラーが発生.ソースコードを grep したら,このあたりの定義は xserver/mi/mipointer.h に

 extern int miPointerGetMotionBufferSize(
     void
 ) _X_DEPRECATED;

 extern int miPointerGetMotionEvents(
     DeviceIntPtr /*pPtr*/,
     xTimecoord * /*coords*/,
     unsigned long /*start*/,
     unsigned long /*stop*/,
     ScreenPtr /*pScreen*/
 );

という風にあるのだけど,find で定義を探しても

 root:/sources/X/srcs# find . -name "*.[ch]" | xargs grep miPointerGetMotionEvents
 ./driver/xf86-input-evdev/src/evdev_axes.c:                                       miPointerGetMotionEvents,
 ./driver/xf86-input-mouse/src/mouse.c:                          miPointerGetMotionEvents,
 ./driver/xf86-input-vmmouse/src/vmmouse.c:   "miPointerGetMotionEvents",
 ./driver/xf86-input-vmmouse/src/vmmouse.c:                            miPointerGetMotionEvents, pMse->Ctrl,
 ./xserver/hw/darwin/darwin.c:                        miPointerGetMotionEvents,
 ./xserver/hw/dmx/input/dmxinputinit.c:                                              miPointerGetMotionEvents,
 ./xserver/hw/dmx/input/dmxmotion.c: * This file provides functions similar to miPointerGetMotionEvents and
 ./xserver/hw/dmx/input/dmxmotion.c:/** This routine performs the same function as \a miPointerGetMotionEvents:
 ./xserver/hw/dmx/input/dmxmotion.c: * \a miPointerGetMotionEvents for devices with only 2 axes (i.e., core
 ./xserver/hw/dmx/input/dmxmotion.c: * Because compatibility with miPointerGetMotionEvents is not possible,
 ./xserver/hw/dmx/input/dmxxinput.c:    new_dev->valuator->GetMotionProc   = miPointerGetMotionEvents;
 ./xserver/hw/xfree86/os-support/bsd/bsd_mouse.c:                                miPointerGetMotionEvents, 
 ./xserver/hw/xfree86/os-support/sco/sco_mouse.c:        miPointerGetMotionEvents, pMse->Ctrl,
 ./xserver/hw/xfree86/os-support/usl/usl_mouse.c:                              miPointerGetMotionEvents, pMse->Ctrl,
 ./xserver/hw/xgl/egl/kinput.c:      miPointerGetMotionEvents,
 ./xserver/hw/xgl/xglinput.c:                             miPointerGetMotionEvents,
 ./xserver/hw/xwin/winmouse.c:                          miPointerGetMotionEvents,
 ./xserver/mi/mipointer.h:extern int miPointerGetMotionEvents(

と,使っている側は見つかるものの,実際の定義はされてない感じ.

それでは,と 7.0 のソースコードを見たら mi/mipointer.c に

 /*
  * Pointer/CursorDisplay interface routines
  */
 
 int
 miPointerGetMotionBufferSize ()
 {
     return MOTION_SIZE;
 }
 
 int
 miPointerGetMotionEvents (pPtr, coords, start, stop, pScreen)
     DeviceIntPtr    pPtr;
     xTimecoord      *coords;
     unsigned long   start, stop;
     ScreenPtr       pScreen;
 ...

といった定義がされている模様.このあたりを 7.1 の mipointer.c に持っていけば何とかなるのだろうか??
-そう言えば xdpyinfo が OpenGL ライブラリを必要とするのだけど,OpenGL ライブラリは X のヘッダファイルを必要とする,という競合状態もあったなぁ.. -- [[kojima]] &new{2007-01-05 (金) 20:28:17};
-私は、あれやこれやと考えることが面倒なので、 X11R7.0/src/everything の中を全部と、 X11R7.1/src/everythingの中全部、 そして X11R7.1/src/lib/libX11-X11R7.1-1.0.1.tar.bz2 を持ってきて ./build-from-tarballs.sh …  したらcompileが通ったと、記憶してます。 そのcompileしたモノが使えるかは確認してはいません。 -- [[alpexterm]] &new{2007-01-05 (金) 22:06:35};
-しばらくgitのソースと格闘してみたけど、これって開発中のバージョンだから、ある部分の変更が必ずしも全体に反映されていないような印象ですねぇ。とりあえず昔ビルドしたことのある7.0+7.1のソースコードに戻してビルドしてみるのがよさげだなぁ。しかし、7.0と7.1の tarballをマージして
くれるツールも提供されているのだけれど、guile 用だったりして、ほとんど罰ゲームを受けてるような気がしてきた。。(苦笑 -- [[kojima]] &new{2007-01-06 (土) 00:00:09};

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS