On Tuesday 13 April 2010 09:58:49 pm linux fan wrote: > This couldn't be something simple like libXi.so got in wrong place > among many places, could it? > > Try > whereis libXi.so tried that no joy I'm afraid, it seem to be a problem with pkgconfig macros used by cmake:-
A) My pkgconfig path is set like so:- export PKG_CONFIG_PATH=$XORG_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH ( a check of xi.pc is below:- ########################## root [ /usr/X11R7.5/lib/pkgconfig ]# ls xi.pc xi.pc root [ /usr/X11R7.5/lib/pkgconfig ]# cat xi.pc prefix=/usr/X11R7.5 exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include Name: Xi Description: X Input Extension Library Version: 1.3 Requires: inputproto Requires.private: x11 xext Cflags: -I${includedir} Libs: -L${libdir} -lXi root [ /usr/X11R7.5/lib/pkgconfig ]# ######################### as regards XI headers I have these:- root [ ~ ]# ls /usr/X11R7.5/include/X11/extensions/XI*.h /usr/X11R7.5/include/X11/extensions/XI.h /usr/X11R7.5/include/X11/extensions/XInput.h /usr/X11R7.5/include/X11/extensions/XI2.h /usr/X11R7.5/include/X11/extensions/XInput2.h /usr/X11R7.5/include/X11/extensions/XI2proto.h /usr/X11R7.5/include/X11/extensions/XIproto.h root [ ~ ]# ####################### B) I fixed the file to find libXi (including to check PKG_CONFIG ( here I use the kde one and I am unsure if it is really checking the set $PKG_CONFIG_PATH ); I now call it FindlibXi.cmake created like so:- ######### file to find libXi (not in /usr/ cd kdebase-workspace-4.4.2 cat >cmake/modules/FindlibXi.cmake<<"EOF" ########################################### FIND_PATH(LIBXi_INCLUDE_DIR XI.h /usr/X11R7.5/include/X11/extensions ) FIND_LIBRARY(LIBXi_LIBRARY NAMES libXi.so libXi.so.6 libXi.so.6.1.0 PATH /usr/X11R7.5/lib /usr/X11R7.5/lib64 ) IF (LIBXi_INCLUDE_DIR AND LIBXi_LIBRARY) IF (NOT WIN32) # use pkg-config to get the directories and then use these values # in the FIND_PATH() and FIND_LIBRARY() calls INCLUDE(UsePkgConfig) pkg_check_modules(LIBXi libXi>=1.2.0) ENDIF (NOT WIN32) SET(LIBXi_FOUND TRUE) ENDIF (LIBXi_INCLUDE_DIR AND LIBXi_LIBRARY) IF (LIBXi_FOUND) IF (NOT libXi_FIND_QUIETLY) message(STATUS "Found libXi: ${LIBXi_LIBRARY}") ENDIF (NOT libXi_FIND_QUIETLY) ELSE (LIBXi_FOUND) IF (libXi_FIND_REQUIRED) message(FATAL_ERROR "Could not find libXi") ENDIF (libXi_FIND_REQUIRED) ENDIF (LIBXi_FOUND) EOF C) I force cmake to 'execute' this file before a Makefile is generated like so:- cd $SOURCES/kdebase-workspace-4.4.2 cat CMakeLists.txt | sed -e '25 i find_package(libXi REQUIRED)' >CMakeLists.txt2 mv -v CMakeLists.txt2 CMakeLists.txt cd cmake/modules cat CMakeLists.txt | sed -e '6 i FindlibXi.cmake )' >CMakeLists.txt3 mv -v CMakeLists.txt3 CMakeLists.txt (my seds are a little crufty; perhaps someone on list could suggest something more elegant) D) The output from cmake shows that libXi is found :- ############### spew from cmake -- Found automoc4: /opt/kde-4.4.2/bin/automoc4 -- Strigi API needs 'signed char' -- Found Strigi: /opt/kde-4.4.2/lib/libstreams.so -- found qimageblitz, version 4.0.0 -- Found QImageBlitz: /opt/kde-4.4.2/include/qimageblitz -- Found ZLIB: /usr/lib64/libz.so -- checking for module 'libXi>=1.2.0' -- package 'libXi>=1.2.0' not found -- Found libXi: /usr/X11R7.5/lib64/libXi.so -- WARNING: you are using the obsolete 'PKGCONFIG' macro use FindPkgConfig -- Found GLIB2: /usr/lib64/libglib-2.0.so -- found fontconfig, version 2.7.3 -- Found Fontconfig: /usr/lib64/libfontconfig.so -- found libggadget-1.0, version 0.11.2 -- found libggadget-qt-1.0, version 0.11.2 -- Found Googlegadgets: ggadget-qt-1.0;ggadget-1.0;QtGui;QtCore -- checking for modules 'qzion>=0.4.0;qedje>=0.4.0' -- found qzion, version 0.4.0 -- found qedje, version 0.4.0 -- Found QEdje: /opt/kde-4.4.2/lib/libqedje.so;/opt/kde-4.4.2/lib/libqzion.so ############ then further down -- Looking for _XiGetDevicePresenceNotifyEvent -- Looking for _XiGetDevicePresenceNotifyEvent - not found -- _XiGetDevicePresenceNotifyEvent is not found, libXi version 1.2.0 or later is required to keep layouts with keyboard hotplugging ....it reports that the version is NOT >=1.2.0 ( though I have version 1.3 as shown in the xi.pc above). E) ..then the usual 'hardwired' failure if libXi is not in /usr/lib of make at 84% ---------------- Clearly there is something wrong with xi.pc not being checked for the correct version or there is some macro to report libXi of version >=1.2.0 only if it is found in /usr/lib or some such. (I also noticed this line -- WARNING: you are using the obsolete 'PKGCONFIG' macro use FindPkgConfig (whether I use ' UsePkgConfig ' or 'FindPkgConfig ' in the FindLibxi.cmake macro above. I am also unsure of which X1.h header to use in said macro. I have tried XI.h and XI2.h all with the same result. I also came across this link which could be of relevance: http://mail.kde.org/pipermail/kde-buildsystem/2009-April/005716.html Sorry about the long post and thanks to you all for all the suggestions, (AND if anyone know of a better way to use pkgconfig with cmake (find package) rather than that which I am using I would be grateful for suggestions) sincerely lux-integ -- http://linuxfromscratch.org/mailman/listinfo/blfs-support FAQ: http://www.linuxfromscratch.org/blfs/faq.html Unsubscribe: See the above information page