[Cmake] Possible error in FindGTK.cmake
Brendan McCane
mccane at cs.otago.ac.nz
Thu, 19 Feb 2004 11:34:32 +1300
--=-jvZb4mRfGwPXqJO8GhDh
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
G'day,
I have recently tried compiling vxl/vgui using gtk but without glut on a
Fedora core 1 machine. This has caused a link error because libgdk is
apparently dependent on libXi, but libXi is not included in the
dependencies in FindGTK.cmake. Here's an example error:
c++ -fPIC basic01_display_image.o -o
/home/brendan/vxl-1.0.0/bin/core/vgui/examples/basic01_display_image
-rdynamic -L/home/brendan/vxl-1.0.0/bin/lib
-L/home/brendan/vxl-1.0-beta/gtkglarea-1.2.2/gtkgl/lib -L/usr/X11R6/lib
-lgtkgl -lgtk -lgdk -lgmodule -lglib -lGLU -lGL -lX11 -lXext -lvgui
-lvnl_algo -lnetlib -lvnl -lvil1 -lvil -ljpeg -ltiff -lpng -lzlib -lvgl
-lvpl -lvbl -lvul -lgtkgl -lgtk -lgdk -lgmodule -lglib -lQv -lvcl -lm
-lGLU -lGL -lX11 -lXext -lX11 -lXext
-Wl,-rpath,/home/brendan/vxl-1.0.0/bin/lib:/home/brendan/vxl-1.0-beta/gtkglarea-1.2.2/gtkgl/lib:/usr/X11R6/lib
/usr/lib/gcc-lib/i386-redhat-linux/3.3.2/../../../libgdk.so: undefined
reference to `XGetDeviceMotionEvents'
/usr/lib/gcc-lib/i386-redhat-linux/3.3.2/../../../libgdk.so: undefined
reference to `XFreeDeviceList'
/usr/lib/gcc-lib/i386-redhat-linux/3.3.2/../../../libgdk.so: undefined
reference to `XQueryDeviceState'
/usr/lib/gcc-lib/i386-redhat-linux/3.3.2/../../../libgdk.so: undefined
reference to `XListInputDevices'
/usr/lib/gcc-lib/i386-redhat-linux/3.3.2/../../../libgdk.so: undefined
reference to `XFreeDeviceMotionEvents'
/usr/lib/gcc-lib/i386-redhat-linux/3.3.2/../../../libgdk.so: undefined
reference to `XFreeDeviceState'
/usr/lib/gcc-lib/i386-redhat-linux/3.3.2/../../../libgdk.so: undefined
reference to `XOpenDevice'
/usr/lib/gcc-lib/i386-redhat-linux/3.3.2/../../../libgdk.so: undefined
reference to `XSelectExtensionEvent'
/usr/lib/gcc-lib/i386-redhat-linux/3.3.2/../../../libgdk.so: undefined
reference to `XUngrabDevice'
/usr/lib/gcc-lib/i386-redhat-linux/3.3.2/../../../libgdk.so: undefined
reference to `XGrabDevice'
I have attached a modified FindGTK.cmake (sourced from
$vxl/config/cmake/Modules/NewCMake/FindGTK.cmake) that solves the link
problem simply by adding libXi to the dependencies. Anyway, not sure if
this is a general problem or just my problem, but I thought I'd let you
know.
--
Cheers,
Brendan.
----------------------------------------------------------------------------
Brendan McCane Email: mccane at cs.otago.ac.nz
Department of Computer Science Phone: +64 3 479 8588/8578.
University of Otago Fax: +64 3 479 8529
Box 56, Dunedin, New Zealand.
--=-jvZb4mRfGwPXqJO8GhDh
Content-Disposition: attachment; filename=FindGTK.cmake
Content-Type: text/plain; name=FindGTK.cmake; charset=
Content-Transfer-Encoding: 7bit
#
# try to find GTK (and glib) and GTKGLArea
#
# GTK_INCLUDE_DIR - Directories to include to use GTK
# GTK_LIBRARIES - Files to link against to use GTK
# GTK_FOUND - If false, don't try to use GTK
# don't even bother under WIN32
IF (UNIX)
FIND_PATH( GTK_gtk_INCLUDE_DIR gtk/gtk.h
/usr/include
/usr/local/include
/usr/openwin/share/include
/usr/openwin/include
/usr/X11R6/include
/usr/include/X11
/usr/X11R6/include/gtk12
/usr/include/gtk-1.2
/usr/local/include/gtk-1.2
/opt/gnome/include
${GTK_gtk_INCLUDE_PATH}
)
# Some Linux distributions (e.g. Red Hat) have glibconfig.h
# and glib.h in different directories, so we need to look
# for both.
# - Atanas Georgiev <atanas at cs.columbia.edu>
FIND_PATH( GTK_glibconfig_INCLUDE_DIR glibconfig.h
/usr/include
/usr/local/include
/usr/openwin/share/include
/usr/local/include/glib12
/usr/lib/glib/include
/usr/local/lib/glib/include
/opt/gnome/include
/opt/gnome/lib/glib/include
${GTK_glibconfig_INCLUDE_PATH}
)
FIND_PATH( GTK_glib_INCLUDE_DIR glib.h
/usr/include
/usr/local/include
/usr/openwin/share/include
/usr/include/gtk-1.2
/usr/local/include/glib12
/usr/lib/glib/include
/usr/include/glib-1.2
/usr/local/include/glib-1.2
/opt/gnome/include
/opt/gnome/include/glib-1.2
${GTK_glib_INCLUDE_PATH}
)
FIND_PATH( GTK_gtkgl_INCLUDE_DIR gtkgl/gtkglarea.h
/usr/include
/usr/local/include
/usr/openwin/share/include
/opt/gnome/include
${GTK_gtkgl_INCLUDE_PATH}
)
FIND_LIBRARY( GTK_gtkgl_LIBRARY gtkgl
/usr/lib
/usr/local/lib
/usr/openwin/lib
/usr/X11R6/lib
/opt/gnome/lib
)
#
# The 12 suffix is thanks to the FreeBSD ports collection
#
FIND_LIBRARY( GTK_gtk_LIBRARY
NAMES gtk gtk12
PATHS /usr/lib
/usr/local/lib
/usr/openwin/lib
/usr/X11R6/lib
/opt/gnome/lib
)
FIND_LIBRARY( GTK_gdk_LIBRARY
NAMES gdk gdk12
PATHS /usr/lib
/usr/local/lib
/usr/openwin/lib
/usr/X11R6/lib
/opt/gnome/lib
)
FIND_LIBRARY( GTK_gmodule_LIBRARY
NAMES gmodule gmodule12
PATHS /usr/lib
/usr/local/lib
/usr/openwin/lib
/usr/X11R6/lib
/opt/gnome/lib
)
FIND_LIBRARY( GTK_glib_LIBRARY
NAMES glib glib12
PATHS /usr/lib
/usr/local/lib
/usr/openwin/lib
/usr/X11R6/lib
/opt/gnome/lib
)
FIND_LIBRARY( GTK_Xi_LIBRARY
NAMES Xi
PATHS /usr/lib
/usr/local/lib
/usr/openwin/lib
/usr/X11R6/lib
/opt/gnome/lib
)
IF(GTK_gtk_INCLUDE_DIR)
IF(GTK_glibconfig_INCLUDE_DIR)
IF(GTK_glib_INCLUDE_DIR)
IF(GTK_gtkgl_INCLUDE_DIR)
IF(GTK_gtk_LIBRARY)
IF(GTK_glib_LIBRARY)
IF(GTK_gtkgl_LIBRARY)
# Assume that if gtk and glib were found, the other
# supporting libraries have also been found.
SET( GTK_FOUND "YES" )
SET( GTK_INCLUDE_DIR ${GTK_gtk_INCLUDE_DIR}
${GTK_glibconfig_INCLUDE_DIR}
${GTK_glib_INCLUDE_DIR}
${GTK_gtkgl_INCLUDE_DIR} )
SET( GTK_LIBRARIES ${GTK_gtkgl_LIBRARY}
${GTK_gtk_LIBRARY}
${GTK_gdk_LIBRARY}
${GTK_gmodule_LIBRARY}
${GTK_glib_LIBRARY}
${GTK_Xi_LIBRARY} )
ENDIF(GTK_gtkgl_LIBRARY)
ENDIF(GTK_glib_LIBRARY)
ENDIF(GTK_gtk_LIBRARY)
ENDIF(GTK_gtkgl_INCLUDE_DIR)
ENDIF(GTK_glib_INCLUDE_DIR)
ENDIF(GTK_glibconfig_INCLUDE_DIR)
ENDIF(GTK_gtk_INCLUDE_DIR)
MARK_AS_ADVANCED(
GTK_gtkgl_LIBRARY
GTK_glib_LIBRARY
GTK_gtk_LIBRARY
GTK_Xi_LIBRARY
GTK_gtkgl_INCLUDE_DIR
GTK_glibconfig_INCLUDE_DIR
GTK_glib_INCLUDE_DIR
GTK_gtk_INCLUDE_DIR
)
ENDIF (UNIX)
--=-jvZb4mRfGwPXqJO8GhDh--