Parts of http://bugs.wireshark.org/bugzilla/show_bug.cgi?id=1179
[obnox/wireshark/wip.git] / cmake / modules / FindGTK2.cmake
1 #
2 # try to find GTK2 (and glib) and GTK2GLArea
3 #
4 # GTK2_INCLUDE_DIRS  - Directories to include to use GTK2
5 # GTK2_LIBRARIES     - Files to link against to use GTK2
6 # GTK2_FOUND         - If false, don't try to use GTK2
7 # GTK2_GL_FOUND      - If false, don't try to use GTK2's GL features
8 #
9 ###################################################################
10 #
11 #  Copyright (c) 2004 Jan Woetzel
12 #  Copyright (c) 2006 Andreas Schneider <mail@cynapses.org>
13 #
14 # This program is free software; you can redistribute it and/or
15 # modify it under the terms of the GNU General Public License
16 # as published by the Free Software Foundation; either version 2
17 # of the License, or (at your option) any later version.
18 #
19 # This program is distributed in the hope that it will be useful,
20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22 # GNU General Public License for more details.
23 #
24 # You should have received a copy of the GNU General Public License
25 # along with this program; if not, write to the Free Software
26 # Foundation, Inc., 51 Franklin Street, Fifth Floor,
27 # Boston, MA  02110-1301, USA.
28 #
29 ###################################################################
30 #
31 #  Copyright (c) 2004 Jan Woetzel
32 #  Copyright (c) 2006 Andreas Schneider <mail@cynapses.org>
33 #  All rights reserved.
34 #
35 # Redistribution and use in source and binary forms, with or without
36 # modification, are permitted provided that the following conditions
37 # are met:
38 #
39 # * Redistributions of source code must retain the above copyright
40 #   notice, this list of conditions and the following disclaimer.
41 #
42 # * Redistributions in binary form must reproduce the above copyright
43 #   notice, this list of conditions and the following disclaimer in
44 #   the documentation and/or other materials provided with the
45 #   distribution.
46 #
47 # * Neither the name of the <ORGANIZATION> nor the names of its
48 #   contributors may be used to endorse or promote products derived
49 #   from this software without specific prior written permission.
50 #
51 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
52 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
53 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
54 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
55 # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
56 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
57 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
58 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
59 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
60 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
61 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
62 # POSSIBILITY OF SUCH DAMAGE.
63 #
64
65 IF (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS)
66   # in cache already
67   SET(GTK2_FOUND TRUE)
68 ELSE (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS)
69   IF(UNIX)
70     # use pkg-config to get the directories and then use these values
71     # in the FIND_PATH() and FIND_LIBRARY() calls
72     INCLUDE(UsePkgConfig)
73
74     PKGCONFIG(gtk+-2.0 _GTK22IncDir _GTK22LinkDir _GTK22LinkFlags _GTK22Cflags)
75
76     FIND_PATH(GTK2_GTK_INCLUDE_PATH gtk/gtk.h
77       $ENV{GTK2_HOME}
78       ${_GTK22IncDir}
79       /usr/include/gtk-2.0
80       /usr/local/include/gtk-2.0
81       /opt/include/gtk-2.0
82       /opt/gnome/include/gtk-2.0
83       /sw/include/gtk-2.0
84     )
85
86     # Some Linux distributions (e.g. Red Hat) have glibconfig.h
87     # and glib.h in different directories, so we need to look
88     # for both.
89     #  - Atanas Georgiev <atanas@cs.columbia.edu>
90     PKGCONFIG(glib-2.0 _GLIB2IncDir _GLIB2inkDir _GLIB2LinkFlags _GLIB2Cflags)
91     PKGCONFIG(gmodule-2.0 _GMODULE2IncDir _GMODULE2inkDir _GMODULE2LinkFlags _GMODULE2Cflags)
92     SET(GDIR /opt/gnome/lib/glib-2.0/include)
93
94     FIND_PATH(GTK2_GLIBCONFIG_INCLUDE_PATH glibconfig.h
95       ${_GLIB2IncDir}
96       /opt/gnome/lib64/glib-2.0/include
97       /opt/gnome/lib/glib-2.0/include
98       /opt/lib/glib-2.0/include
99       /usr/lib64/glib-2.0/include
100       /usr/lib/glib-2.0/include
101       /sw/lib/glib-2.0/include
102     )
103     #MESSAGE(STATUS "DEBUG: GTK2_GLIBCONFIG_INCLUDE_PATH = ${GTK2_GLIBCONFIG_INCLUDE_PATH}")
104
105     FIND_PATH(GTK2_GLIB_INCLUDE_PATH glib.h
106       ${_GLIB2IncDir}
107       /opt/include/glib-2.0
108       /opt/gnome/include/glib-2.0
109       /usr/include/glib-2.0
110       /sw/include/glib-2.0
111     )
112     #MESSAGE(STATUS "DEBUG: GTK2_GLIBCONFIG_INCLUDE_PATH = ${GTK2_GLIBCONFIG_INCLUDE_PATH}")
113
114     FIND_PATH(GTK2_GTKGL_INCLUDE_PATH gtkgl/gtkglarea.h
115       ${_GLIB2IncDir}
116       /usr/include
117       /usr/local/include
118       /usr/openwin/share/include
119       /opt/gnome/include
120       /opt/include
121       /sw/include
122     )
123
124     PKGCONFIG(pango _PANGOIncDir _PANGOinkDir _PANGOLinkFlags _PANGOCflags)
125
126     FIND_PATH(GTK2_PANGO_INCLUDE_PATH pango/pango.h
127       ${_PANGOIncDir}
128       /opt/gnome/include/pango-1.0
129       /opt/include/pango-1.0
130       /usr/include/pango-1.0
131       /sw/include/pango-1.0
132     )
133
134     PKGCONFIG(gdk-2.0 _GDK2IncDir _GDK2inkDir _GDK2LinkFlags _GDK2Cflags)
135
136     FIND_PATH(GTK2_GDKCONFIG_INCLUDE_PATH gdkconfig.h
137       ${_GDK2IncDir}
138       /opt/gnome/lib/gtk-2.0/include
139       /opt/gnome/lib64/gtk-2.0/include
140       /opt/lib/gtk-2.0/include
141       /usr/lib/gtk-2.0/include
142       /usr/lib64/gtk-2.0/include
143       /sw/lib/gtk-2.0/include
144     )
145
146     PKGCONFIG(cairo _CAIROIncDir _CAIROinkDir _CAIROLinkFlags _CAIROCflags)
147
148     FIND_PATH(GTK2_CAIRO_INCLUDE_PATH cairo.h
149       ${_CAIROIncDir}
150       /opt/gnome/include/cairo
151       /usr/include
152       /usr/include/cairo
153       /opt/include
154       /opt/include/cairo
155       /sw/include
156       /sw/include/cairo
157     )
158     #MESSAGE(STATUS "DEBUG: GTK2_CAIRO_INCLUDE_PATH = ${GTK2_CAIRO_INCLUDE_PATH}")
159
160     PKGCONFIG(atk _ATKIncDir _ATKinkDir _ATKLinkFlags _ATKCflags)
161
162     FIND_PATH(GTK2_ATK_INCLUDE_PATH atk/atk.h
163       ${_ATKIncDir}
164       /opt/gnome/include/atk-1.0
165       /usr/include/atk-1.0
166       /opt/include/atk-1.0
167       /sw/include/atk-1.0
168     )
169     #MESSAGE(STATUS "DEBUG: GTK2_ATK_INCLUDE_PATH = ${GTK2_ATK_INCLUDE_PATH}")
170
171     FIND_LIBRARY(GTK2_GTKGL_LIBRARY
172       NAMES
173         gtkgl
174       PATHS
175         ${_GTK22IncDir}
176         /usr/lib
177         /usr/local/lib
178         /usr/openwin/lib
179         /usr/X11R6/lib
180         /opt/gnome/lib
181         /opt/lib
182         /sw/lib
183     )
184
185     FIND_LIBRARY(GTK2_GTK_LIBRARY
186       NAMES
187         gtk-x11-2.0
188       PATHS
189         ${_GTK22LinkDir}
190         /usr/lib
191         /usr/local/lib
192         /usr/openwin/lib
193         /usr/X11R6/lib
194         /opt/gnome/lib
195         /opt/lib
196         /sw/lib
197     )
198
199     FIND_LIBRARY(GTK2_GDK_LIBRARY
200       NAMES
201         gdk-x11-2.0
202       PATHS
203         ${_GDK2LinkDir}
204         /usr/lib
205         /usr/local/lib
206         /usr/openwin/lib
207         /usr/X11R6/lib
208         /opt/gnome/lib
209         /opt/lib
210         /sw/lib
211     )
212
213     FIND_LIBRARY(GTK2_GMODULE_LIBRARY
214       NAMES
215         gmodule-2.0
216       PATHS
217         ${_GMODULE2inkDir}
218         /usr/lib
219         /usr/local/lib
220         /usr/openwin/lib
221         /usr/X11R6/lib
222         /opt/gnome/lib
223         /opt/lib
224         /sw/lib
225     )
226
227     FIND_LIBRARY(GTK2_GLIB_LIBRARY
228       NAMES
229         glib-2.0
230       PATHS
231         ${_GLIB2inkDir}
232         /usr/lib
233         /usr/local/lib
234         /usr/openwin/lib
235         /usr/X11R6/lib
236         /opt/gnome/lib
237         /opt/lib
238         /sw/lib
239     )
240
241     FIND_LIBRARY(GTK2_Xi_LIBRARY 
242       NAMES
243         Xi
244       PATHS 
245         /usr/lib
246         /usr/local/lib
247         /usr/openwin/lib
248         /usr/X11R6/lib
249         /opt/gnome/lib
250         /opt/lib
251         /sw/lib
252     )
253
254     FIND_LIBRARY(GTK2_GTHREAD_LIBRARY
255       NAMES
256         gthread-2.0
257       PATHS
258         /usr/lib
259         /usr/local/lib
260         /usr/openwin/lib
261         /usr/X11R6/lib
262         /opt/gnome/lib
263         /opt/lib
264         /sw/lib
265     )
266
267
268     FIND_LIBRARY(GTK2_GOBJECT_LIBRARY
269       NAMES
270         gobject-2.0
271       PATHS
272         /usr/lib
273         /usr/local/lib
274         /usr/openwin/lib
275         /usr/X11R6/lib
276         /opt/gnome/lib
277         /opt/lib
278         /sw/lib
279     )
280
281     IF(GTK2_GTK_INCLUDE_PATH)
282       IF(GTK2_GLIBCONFIG_INCLUDE_PATH)
283         IF(GTK2_GLIB_INCLUDE_PATH)
284           IF(GTK2_GTK_LIBRARY)
285             IF(GTK2_GLIB_LIBRARY)
286               IF(GTK2_PANGO_INCLUDE_PATH)
287                 IF(GTK2_ATK_INCLUDE_PATH)
288                   IF(GTK2_CAIRO_INCLUDE_PATH)
289                     # Assume that if gtk and glib were found, the other
290                     # supporting libraries have also been found.
291
292                     SET(GTK2_FOUND TRUE)
293
294                     SET(GTK2_INCLUDE_DIRS
295                       ${GTK2_GTK_INCLUDE_PATH}
296                       ${GTK2_GLIBCONFIG_INCLUDE_PATH}
297                       ${GTK2_GLIB_INCLUDE_PATH}
298                       ${GTK2_PANGO_INCLUDE_PATH}
299                       ${GTK2_GDKCONFIG_INCLUDE_PATH}
300                       ${GTK2_ATK_INCLUDE_PATH}
301                       ${GTK2_CAIRO_INCLUDE_PATH}
302                     )
303
304                     SET(GTK2_LIBRARIES
305                       ${GTK2_GTK_LIBRARY}
306                       ${GTK2_GDK_LIBRARY}
307                       ${GTK2_GLIB_LIBRARY}
308                     )
309                     #${GTK2_GOBJECT_LIBRARY})
310
311                     IF(GTK2_GMODULE_LIBRARY)
312                       SET(GTK2_LIBRARIES
313                         ${GTK2_LIBRARIES}
314                         ${GTK2_GMODULE_LIBRARY}
315                       )
316                     ENDIF(GTK2_GMODULE_LIBRARY)
317
318                     IF(GTK2_GTHREAD_LIBRARY)
319                       SET(GTK2_LIBRARIES
320                         ${GTK2_LIBRARIES}
321                         ${GTK2_GTHREAD_LIBRARY}
322                       )
323                     SET(GTK2_LIBRARIES ${GTK2_LIBRARIES})
324                     ENDIF(GTK2_GTHREAD_LIBRARY)
325                   ELSE(GTK2_CAIRO_INCLUDE_PATH)
326                     MESSAGE(STATUS "Can not find cairo")
327                   ENDIF(GTK2_CAIRO_INCLUDE_PATH)
328                 ELSE(GTK2_ATK_INCLUDE_PATH)
329                   MESSAGE(STATUS "Can not find atk")
330                 ENDIF(GTK2_ATK_INCLUDE_PATH)
331               ELSE(GTK2_PANGO_INCLUDE_PATH)
332                 MESSAGE(STATUS "Can not find pango includes")
333               ENDIF(GTK2_PANGO_INCLUDE_PATH)
334             ELSE(GTK2_GLIB_LIBRARY)
335               MESSAGE(STATUS "Can not find glib lib")
336             ENDIF(GTK2_GLIB_LIBRARY)
337           ELSE(GTK2_GTK_LIBRARY)
338             MESSAGE(STATUS "Can not find gtk lib")
339           ENDIF(GTK2_GTK_LIBRARY)
340         ELSE(GTK2_GLIB_INCLUDE_PATH)
341           MESSAGE(STATUS "Can not find glib includes")
342         ENDIF(GTK2_GLIB_INCLUDE_PATH)
343       ELSE(GTK2_GLIBCONFIG_INCLUDE_PATH)
344         MESSAGE(STATUS "Can not find glibconfig")
345       ENDIF(GTK2_GLIBCONFIG_INCLUDE_PATH)
346     ELSE (GTK2_GTK_INCLUDE_PATH)
347       MESSAGE(STATUS "Can not find gtk includes")
348     ENDIF (GTK2_GTK_INCLUDE_PATH)
349
350     IF (GTK2_FOUND)
351       IF (NOT GTK2_FIND_QUIETLY)
352         MESSAGE(STATUS "Found GTK2: ${GTK2_LIBRARIES}")
353       ENDIF (NOT GTK2_FIND_QUIETLY)
354     ELSE (GTK2_FOUND)
355       IF (GTK2_FIND_REQUIRED)
356         MESSAGE(SEND_ERROR "Could NOT find GTK2")
357       ENDIF (GTK2_FIND_REQUIRED)
358     ENDIF (GTK2_FOUND)
359
360     MARK_AS_ADVANCED(
361       GTK2_GDK_LIBRARY
362       GTK2_GLIB_INCLUDE_PATH
363       GTK2_GLIB_LIBRARY
364       GTK2_GLIBCONFIG_INCLUDE_PATH
365       GTK2_GMODULE_LIBRARY
366       GTK2_GTHREAD_LIBRARY
367       GTK2_Xi_LIBRARY
368       GTK2_GTK_INCLUDE_PATH
369       GTK2_GTK_LIBRARY
370       GTK2_GTKGL_INCLUDE_PATH
371       GTK2_GTKGL_LIBRARY
372       GTK2_ATK_INCLUDE_PATH
373       GTK2_GDKCONFIG_INCLUDE_PATH
374       #GTK2_GOBJECT_LIBRARY
375       GTK2_PANGO_INCLUDE_PATH
376     )
377   ENDIF(UNIX)
378 ENDIF (GTK2_LIBRARIES AND GTK2_INCLUDE_DIRS)
379
380 # vim:et ts=2 sw=2 comments=\:\#