~ubuntu-branches/ubuntu/utopic/gtk2hs/utopic

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
dnl Gtk2hs - A GUI Library for Haskell based on Gtk+
dnl
dnl Copyright (c) 2001, 2002, 2003-2005 Axel Simon <as49@ukc.ac.uk>
dnl Copyright (c) 2004-2005 Duncan Coutts <duncan@coutts.uklinux.net>
dnl with parts stolen from Manuel Chakravaty, Sven Panne and Micheal Weber
dnl
dnl This library is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU Library General Public
dnl License as published by the Free Software Foundation; either
dnl version 2 of the License, or (at your option) any later version.
dnl 
dnl This library is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
dnl Library General Public License for more details.
dnl 
dnl You should have received a copy of the GNU Library General Public
dnl License along with this library (COPYING.LIB); if not, write to the Free
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

dnl ######################################################################
dnl Process this file with autoconf to produce a configure script.
dnl ######################################################################

AC_INIT([gtk2hs],[0.10.1])
AM_INIT_AUTOMAKE([dist-bzip2])

dnl * We require autoconf version 2.59
dnl When this is bumped up to 2.61 then remove the definitions of AC_PROG_SED and
dnl AC_PROG_GREP and everthing used by these macros from acinclude.m4.
AC_PREREQ(2.59)

dnl Check system type.
AC_CANONICAL_HOST

AC_CONFIG_HEADERS([gtk2hs-config.h])
AH_TOP([
#ifndef _GTK2HS_CONFIG_H_
#define _GTK2HS_CONFIG_H_

/* Hack to suppress warnings that these symbols clash with
   the ones from ghc's version of config.h */
#undef /**/ PACKAGE_NAME
#undef /**/ PACKAGE_STRING
#undef /**/ PACKAGE_TARNAME
#undef /**/ PACKAGE_VERSION
])

dnl Checks for programs.
AC_PROG_CPP
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PATH_PROG(AR,ar)
AC_PATH_PROG(LD,ld)
AC_PATH_PROG(BASENAME,basename)
AC_PROG_GREP
AC_PATH_PROG(GZIP,gzip)
AC_PROG_SED
AC_PATH_PROG(CUT,cut)
AC_PATH_PROG(TAR,tar)
AC_PATH_PROG(TOUCH,touch)
AC_PROG_RANLIB
AC_PATH_PROG(XARGS,xargs)

dnl Does ld support -x and the @FILE input style?
PROG_LD_X
PROG_LD_INPUT
AM_CONDITIONAL(LD_INPUT, test "$LD_INPUT" = "yes")

dnl Figure out file extensions.
AC_EXEEXT

dnl Check if we're on windows
case "$host_os" in
  mingw* | *cygwin* )
    WIN32=yes
    HSCFLAGS="-C -optc-mms-bitfields"
    CREATE_TYPES="default"
    dnl we could set -optl-mwindows by default on windows, but then you
    dnl an exception if you use standard IO, hmmm.
    STARTUP_CODE=;;
  *)
    WIN32=no
    HSCFLAGS=""
    CREATE_TYPES="plugNsocket default"
    STARTUP_CODE=;;
esac
AM_CONDITIONAL(WIN32, test "$WIN32" = "yes")

dnl Select a specific Haskell compiler and/or flags.
AC_ARG_WITH(hc, 
            [AS_HELP_STRING([--with-hc=HC], [use Haskell compiler HC])],
	    [HC=$withval])

AC_ARG_WITH(hcflags, 
            [AS_HELP_STRING([--with-hcflags=HCFLAGS], [flags for Haskell tools, default: -O])],
	    [HCFLAGS=$withval],[HCFLAGS=-O])



dnl Check for GHC-6.0 or greater.
dnl (The next command is not executed, if $HC is already set.)
AC_PATH_PROG(HC, [$HC ghc], ghc-not-found)
if test $HC = ghc-not-found; then
 AC_MSG_ERROR([
Could not find GHC!  This is the only supported compiler.
You need GHC 6.4 or later.])
fi

GHC=$HC

dnl Check GHC details.
AC_MSG_CHECKING([version of GHC])
GHC_VERSION=`$GHC --numeric-version`
AC_MSG_RESULT([$GHC_VERSION])

GTKHS_PROG_CHECK_VERSION($GHC_VERSION, -lt, 6.4, [
  AC_MSG_ERROR([Gtk2Hs requires GHC 6.4 or later])])

GTKHS_PROG_CHECK_VERSION($GHC_VERSION, -ge, 6.10,
  GHC_VERSION_610=yes, GHC_VERSION_610=no)
AM_CONDITIONAL(GHC_VERSION_610, test "$GHC_VERSION_610" = "yes")

GTKHS_PROG_CHECK_VERSION($GHC_VERSION, -ge, 6.12,
  GHC_VERSION_612=yes, GHC_VERSION_612=no)

dnl Calculate a version number with 3 digits (i.e. 502 for 5.2)
GHC_VERSION_NUMBER=`echo $GHC_VERSION | $SED "s/[[0-9]*\.\([0-9]]*\).*/0\1/"`
GHC_VERSION_NUMBER=`echo $GHC_VERSION_NUMBER | $SED "s/[[0-9]*\([0-9][0-9]]\)/\1/"`
GHC_VERSION_NUMBER=`echo $GHC_VERSION | $SED "s/\([[0-9]]\).*/\1/"`$GHC_VERSION_NUMBER

AC_DEFINE_UNQUOTED(__GLASGOW_HASKELL__, $GHC_VERSION_NUMBER,
	[Version number of GHC.])

dnl From ghc-6.4.1 onwards, ghc supports a -hide-all-packages flag which means
dnl that we start with an empty package environment. This makes it easier to
dnl check that we are not depending on packages from the environment but have
dnl stated our package deps explicitly.
GTKHS_PROG_CHECK_VERSION($GHC_VERSION, -ge, 6.4.1, [
HIDE_ALL_PACKAGES=-hide-all-packages
])
AC_SUBST(HIDE_ALL_PACKAGES)

dnl check for ghc-6.8 or later as a proxy for the base package split
GTKHS_PROG_CHECK_VERSION($GHC_VERSION, -ge, 6.8, [
HAVE_SPLIT_BASE=yes
AC_DEFINE([HAVE_SPLIT_BASE], [1], [Using split base package.])
])
AM_CONDITIONAL(HAVE_SPLIT_BASE, test "$HAVE_SPLIT_BASE" = "yes")
AC_SUBST(HAVE_SPLIT_BASE)

GHCBARE=`basename $GHC`
GHCDIR=`dirname $GHC`
GHCPKGNAME=ghc-pkg`echo $GHCBARE | $SED s/ghc//`

dnl Check for ghc-pkg. Use the one that is in the same directory and
dnl version suffix as the specified compiler.
AC_PATH_PROGS(GHCPKG, $GHCPKGNAME ghc-pkg, ghcpkg-not-found, $GHCDIR)

if test $GHCPKG = ghcpkg-not-found; then
  AC_MSG_ERROR([ghc-pkg not found. (But ghc exists!?)]);
fi

dnl Define WIN32 on win32 platform. Perhaps this should go in the
dnl gtk2hs-config.h file?
if test "$WIN32" = "yes"; then
  HCFLAGS="$HCFLAGS -DWIN32"
fi

AC_ARG_ENABLE(profiling,
	     [AS_HELP_STRING([--enable-profiling], [additionally build profiling versions of all libs])],
	     [ENABLE_PROFILING=$enableval],[ENABLE_PROFILING=no])
AM_CONDITIONAL(ENABLE_PROFILING, test "$ENABLE_PROFILING" = "yes")

AC_ARG_ENABLE(split-objs,
	     [AS_HELP_STRING([--enable-split-objs], [produce smaller executables (on supported platforms)])],
	     [ENABLE_SPLITOBJS=$enableval],[ENABLE_SPLITOBJS=yes])
AM_CONDITIONAL(ENABLE_SPLITOBJS, test "$ENABLE_SPLITOBJS" = "yes")

dnl Check if user wants bindings for deprecated APIs. Defaults to yes.
AC_MSG_CHECKING([whether to build deprecated bindings])
AC_ARG_ENABLE(deprecated,
	     [AS_HELP_STRING([--disable-deprecated], [do not generate bindings for any deprecated APIs])],
	     [ENABLE_DEPRECATED=$enableval],[ENABLE_DEPRECATED=yes])
AC_MSG_RESULT($ENABLE_DEPRECATED)
DISABLE_DEPRECATED=`test $ENABLE_DEPRECATED = yes && echo no || echo yes`

AC_MSG_CHECKING([whether to build deprecated packages (gnomevfs, sourceview)])
AC_ARG_ENABLE(deprecated-packages,
	     [AS_HELP_STRING([--disable-deprecated-packages], [do not build deprecated packages])],
	     [ENABLE_DEPRECATED_PACKAGES=$enableval],[ENABLE_DEPRECATED_PACKAGES=yes])
AC_MSG_RESULT($ENABLE_DEPRECATED_PACKAGES)
DISABLE_DEPRECATED_PACKAGES=`test $ENABLE_DEPRECATED_PACKAGES = yes && echo no || echo yes`


dnl packager mode is for people building packages, eg for linux distros.
dnl in packager mode you do not get any optional dependancies unless you
dnl explicitly ask for them with --enable-PACKAGE
dnl also in packager mode it defaults to --without-pkgreg see below.
dnl see http://www.onlamp.com/pub/a/onlamp/2005/03/31/packaging.html?page=2
AC_ARG_ENABLE([packager-mode],
	AS_HELP_STRING([--enable-packager-mode],
        		[change configuration behavior to ease packaging]),
	[if test x"${enableval}" = xyes; then
		packager_mode=yes
	else
		packager_mode=no
	fi],
	[packager_mode=no])
if test "$packager_mode" = "yes"; then
	ENABLE_PKG_DEFAULT=no
	PKGREG_DEFAULT=no
else
	ENABLE_PKG_DEFAULT=auto
	PKGREG_DEFAULT=yes
fi

dnl If we're on windows then packager mode also indicates that we want to
dnl build the installer (which means we delay some variable expansions in the
dnl package files).
AM_CONDITIONAL(WIN32_INSTALLER, test "$WIN32" = "yes" -a "$packager_mode" = "yes")

dnl Check whether to register the packages with ghc-pkg
dnl Distributors usuall want to install into a temp directory without registering
dnl anything and leave the registering phase for a post-install action.
AC_ARG_WITH(pkgreg,
            [AS_HELP_STRING([--without-pkgreg], [Do not reigster Haskell packages (useful for distributors)])],
	    [PKGREG=$withval;],[PKGREG=$PKGREG_DEFAULT;])
AM_CONDITIONAL(ENABLE_PKGREG, test "$PKGREG" = "yes")

dnl Check whether to use a local package file.
AC_ARG_WITH(user-pkgconf,
	   [AS_HELP_STRING([--with-user-pkgconf], [use the current user's GHC package database])],
	   [USERPKGCONF=yes;],[USERPKGCONF=;])

AC_ARG_WITH(pkgconf,
	   [AS_HELP_STRING([--with-pkgconf=FILE], [GHC package file to install packages])],
	   [PKGCONF=$withval;],[PKGCONF=;])

m4_pattern_allow([^PKG_])

dnl Check for various GHC packages:
GHC_PKG_CHECK(base,      [PKG_BASE_VERSION],      [PKG_BASE_ID])
GHC_PKG_CHECK(haskell98, [PKG_HASKELL98_VERSION], [PKG_HASKELL98_ID])
GHC_PKG_CHECK(mtl,       [PKG_MTL_VERSION],       [PKG_MTL_ID])
if test "$HAVE_SPLIT_BASE" = "yes"; then
	GHC_PKG_CHECK(bytestring, [PKG_BYTESTRING_VERSION], [PKG_BYTESTRING_ID])
	GHC_PKG_CHECK(containers, [PKG_CONTAINERS_VERSION], [PKG_CONTAINERS_ID])
	GHC_PKG_CHECK(array,      [PKG_ARRAY_VERSION],      [PKG_ARRAY_ID])
	GHC_PKG_CHECK(old-time,   [PKG_OLDTIME_VERSION],    [PKG_OLDTIME_ID])
	GHC_PKG_CHECK(pretty,     [PKG_PRETTY_VERSION],     [HSPKG_PRETTY_ID])

	CAIRO_SPLITBASE_DEPENDS="${PKG_BYTESTRING_ID} ${PKG_ARRAY_ID}"
	GTK_SPLITBASE_DEPENDS="${PKG_CONTAINERS_ID} ${PKG_ARRAY_ID}"
	SOEGTK_SPLITBASE_DEPENDS="${PKG_OLDTIME_ID}"
	GNOMEVFS_SPLITBASE_DEPENDS="${PKG_BYTESTRING_ID}"
	GSTREAMER_SPLITBASE_DEPENDS="${PKG_BYTESTRING_ID}"
fi
AC_SUBST(PKG_BASE_VERSION)
AC_SUBST(PKG_HASKELL98_VERSION)
AC_SUBST(PKG_MTL_VERSION)
AC_SUBST(PKG_BYTESTRING_VERSION)
AC_SUBST(PKG_CONTAINERS_VERSION)
AC_SUBST(PKG_ARRAY_VERSION)
AC_SUBST(PKG_OLDTIME_VERSION)
AC_SUBST(PKG_PRETTY_VERSION)

AC_SUBST(PKG_BASE_ID)
AC_SUBST(PKG_HASKELL98_ID)
AC_SUBST(PKG_MTL_ID)
AC_SUBST(PKG_BYTESTRING_ID)
AC_SUBST(PKG_CONTAINERS_ID)
AC_SUBST(PKG_ARRAY_ID)
AC_SUBST(PKG_OLDTIME_ID)
AC_SUBST(PKG_PRETTY_ID)

AC_SUBST(CAIRO_SPLITBASE_DEPENDS)
AC_SUBST(GTK_SPLITBASE_DEPENDS)
AC_SUBST(SOEGTK_SPLITBASE_DEPENDS)
AC_SUBST(GNOMEVFS_SPLITBASE_DEPENDS)
AC_SUBST(GSTREAMER_SPLITBASE_DEPENDS)

GTKHS_PROG_CHECK_VERSION($PKG_BASE_VERSION, -ge, 4.0,
AC_DEFINE(HAVE_NEW_CONTROL_EXCEPTION,[1],
 [Define if you have the new Control.Exception module (from GHC 6.10)]))

dnl Check for the GTK&Co libraries. Use the special PKG_CHECK_MODULES
dnl macro from the pkg-config program.
PKG_CHECK_MODULES(GLIB,[glib-2.0 >= 2.0.0 gobject-2.0 >= 2.0.0], [], AC_MSG_ERROR([

The development files for the glib-2.x library were not found.
Perhaps you need to install glib or glib-devel

The exact error reported by pkg-config was:
  "$GLIB_PKG_ERRORS"

If you installed Glib or Gtk+ in a non-standard prefix then you may
need to adjust the PKG_CONFIG_PATH environment variable.

As a last resort you may set the environment variables GLIB_CFLAGS
and GLIB_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
]))
ENABLE_GLIB=yes

GTKHS_PKG_CHECK(gtk, gtk, GTK, [pango >= 1.0.0 gdk-2.0 >= 2.0.0 gdk-pixbuf-2.0 >= 0.12.0 gtk+-2.0 >= 2.0.0 gthread-2.0 >= 2.0.0], [GLIB],
                [build gtk and soegtk packages (default=auto)],
AC_MSG_ERROR([
The development files for the gtk-2.x library were not found.
Perhaps you need to install gtk or gtk-devel.

The exact error reported by pkg-config was:
  "$GTK_PKG_ERRORS"

If you installed Gtk+ in a non-standard prefix then you may need to
adjust the PKG_CONFIG_PATH environment variable.

As a last resort you may set the environment variables GTK_CFLAGS
and GTK_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
]))

dnl Find the Gtk installation prefix which is used in packager mode on windows
dnl for preparing the package files.
GTK_BASEPATH=`$PKG_CONFIG --variable=prefix gtk+-2.0`
AC_SUBST(GTK_BASEPATH)

dnl Check if user wants various optional bindings.
dnl Defaults to auto, or in packager mode it defaults to no.
GTKHS_PKG_CHECK(gio, gio, GIO, [gio-2.0 >= 2.16.4], [GLIB],
        [build gio package (default=auto)],
        [gio requirement not met.  Perhaps you need to install a newer GLib (>= 2.6.14) or the gio-devel package])

GTKHS_PKG_CHECK(libglade, glade, LIBGLADE, [libglade-2.0 >= 2.0.0], [GLIB GTK],
	[build glade package (default=auto)],
	[libglade library requirement not met. Perhaps you need to install libglade or libglade-devel])

GTKHS_PKG_CHECK(gconf, gconf, GCONF, [gconf-2.0 >= 2.0.0], [GLIB],
	[build gconf package (default=auto)],
	[GConf requirement not met. Perhaps you need to install gconf or gconf-devel])

GTKHS_PKG_CHECK(gtksourceview2, gtksourceview2, GTKSOURCEVIEW2, [gtksourceview-2.0 >= 2.0.2], [GLIB GTK],
	[build gtksourceview2 package (default=auto)],
	[GtkSourceView-2.0 requirement not met. Perhaps you need to install gtksourceview-2.0 or gtksourceview-devel-2.0])

dnl Don't build sourceview and gtksourceview2 at the same time
dnl (prefer gtksourceview2 if both are auto)
ENABLE_PKG_DEFAULT_sourceview_save="$ENABLE_PKG_DEFAULT"
if test "$ENABLE_GTKSOURCEVIEW2" = "yes" ; then
  ENABLE_PKG_DEFAULT=no
fi
GTKHS_PKG_CHECK_DEPRECATED(sourceview, sourceview, SOURCEVIEW, [gtksourceview-1.0 >= 0.6.0], [GLIB GTK],
	[build sourceview package [[DEPRECATED]] (default=no with --disable-deprecated, default=auto otherwise)],
	[GtkSourceView requirement not met. Perhaps you need to install gtksourceview or gtksourceview-devel])
ENABLE_PKG_DEFAULT="$ENABLE_PKG_DEFAULT_sourceview_save"
if test "$ENABLE_GTKSOURCEVIEW2" = "yes" -a "$ENABLE_SOURCEVIEW" = "yes" ; then
  AC_ERROR([The sourceview and gtksourceview2 packages cannot be enabled simultaneously.
            If you want to build sourceview, you must use --disable-gtksourceview2.])
fi

GTKHS_PKG_CHECK(mozilla, mozembed, MOZILLA_MOZEMBED, [mozilla-gtkmozembed >= 1.4], [GLIB GTK],
	[build bindings for the Mozilla display widget (default=auto)],
	[Mozilla requirement not met. Perhaps you need to install mozilla or mozilla-devel])
MOZILLA_MOZEMBED_LIBDIR=$(${PKG_CONFIG} --variable=libdir mozilla-gtkmozembed)

GTKHS_PKG_CHECK(seamonkey, mozembed, SEAMONKEY_MOZEMBED, [seamonkey-gtkmozembed >= 1.0], [GLIB GTK],
        [build bindings for the Mozilla display widget using the Seamonkey libs (default=auto)],
        [Seamonkey requirement not met. Perhaps you need to install seamonkey or seamonkey-devel])
SEAMONKEY_MOZEMBED_LIBDIR=$(${PKG_CONFIG} --variable=libdir seamonkey-gtkmozembed)

GTKHS_PKG_CHECK(firefox, mozembed, FIREFOX_MOZEMBED, [firefox-gtkmozembed >= 1.0], [GLIB GTK],
	[build bindings for the Mozilla display widget using the Firefox libs (default=auto)],
	[Mozilla Firefox requirement not met. Perhaps you need to install firefox or firefox-devel])
FIREFOX_MOZEMBED_LIBDIR=$(${PKG_CONFIG} --variable=libdir firefox-gtkmozembed)

GTKHS_PKG_CHECK(xulrunner, mozembed, XULRUNNER_MOZEMBED, [xulrunner-gtkmozembed >= 1.8.0.1], [GLIB GTK],
	[build bindings for the Mozilla display widget using the XULRunner libs (default=auto)],
	[XULRunner requirement not met. Perhaps you need to install xulrunner or xulrunner-devel])
XULRUNNER_MOZEMBED_LIBDIR=$(${PKG_CONFIG} --variable=libdir xulrunner-gtkmozembed)

dnl Use in this order of preference: xulrunner, seamonkey, firefox, mozilla
if test "$ENABLE_XULRUNNER_MOZEMBED" = "yes"; then
        ENABLE_MOZEMBED="yes"
	MOZEMBED_CFLAGS="$XULRUNNER_MOZEMBED_CFLAGS"
	MOZEMBED_LIBS="$XULRUNNER_MOZEMBED_LIBS"
	MOZEMBED_LIBDIR="$XULRUNNER_MOZEMBED_LIBDIR"
elif test "$ENABLE_SEAMONKEY_MOZEMBED" = "yes"; then
	ENABLE_MOZEMBED="yes"
	MOZEMBED_CFLAGS="$SEAMONKEY_MOZEMBED_CFLAGS"
	MOZEMBED_LIBS="$SEAMONKEY_MOZEMBED_LIBS"
	MOZEMBED_LIBDIR="$SEAMONKEY_MOZEMBED_LIBDIR"
elif test "$ENABLE_FIREFOX_MOZEMBED" = "yes"; then
	ENABLE_MOZEMBED="yes"
	MOZEMBED_CFLAGS="$FIREFOX_MOZEMBED_CFLAGS"
	MOZEMBED_LIBS="$FIREFOX_MOZEMBED_LIBS"
	MOZEMBED_LIBDIR="$FIREFOX_MOZEMBED_LIBDIR"
elif test "$ENABLE_MOZILLA_MOZEMBED" = "yes"; then
	ENABLE_MOZEMBED="yes"
	MOZEMBED_CFLAGS="$MOZILLA_MOZEMBED_CFLAGS"
	MOZEMBED_LIBS="$MOZILLA_MOZEMBED_LIBS"
	MOZEMBED_LIBDIR="$MOZILLA_MOZEMBED_LIBDIR"
else
	ENABLE_MOZEMBED="no"
fi
AC_DEFINE_UNQUOTED(MOZEMBED_LIBDIR,"$MOZEMBED_LIBDIR",[The mozembed library directory])
AM_CONDITIONAL(ENABLE_MOZEMBED, test "$ENABLE_MOZEMBED" = "yes")
AC_SUBST(MOZEMBED_CFLAGS)
AC_SUBST(MOZEMBED_LIBS)

GTKHS_PKG_CHECK(cairo, cairo, CAIRO, [cairo >= 1.0.0], [GLIB],
	[build bindings for the cairo vector graphics system (default=auto)],
	[cairo requirement not met. Perhaps you need to install cairo or cairo-devel])

GTKHS_PKG_CHECK(svg, svgcairo, SVGCAIRO, [librsvg-2.0 >= 2.16.0], [GLIB CAIRO],
	[build bindings for the cairo svg extension (default=auto)],
	[librsvg requirement not met. Perhaps you need to install librsvg or librsvg-devel])

GTKHS_PKG_CHECK(opengl, gtkglext, GTKGLEXT, [gtkglext-1.0 >= 1.0.5], [GLIB GTK],
 	[build bindings for the Gtk OpenGL extension (default=auto)],
 	[GtkGLExt library requirement not met. Perhaps you need to install gtkglext or gtkglext-devel])

GTKHS_PKG_CHECK_DEPRECATED(gnomevfs, gnomevfs, GNOMEVFS, [gnome-vfs-2.0 >= 2.0.0 gnome-vfs-module-2.0 >= 2.0.0 ], [GLIB],
	[build gnome-vfs package [[DEPRECATED]] (default=no with --disable-deprecated, default=auto otherwise)],
	[gnomevfs library requirement not met. Perhaps you need to install libgnomevfs or libgnomevfs-devel])

GTKHS_PKG_CHECK(gstreamer, gstreamer, GSTREAMER,
                [gstreamer-0.10 >= 0.10 \
                 gstreamer-audio-0.10 >= 0.10 \
                 gstreamer-base-0.10 >= 0.10 \
                 gstreamer-controller-0.10 >= 0.10 
                 gstreamer-dataprotocol-0.10 >= 0.10 \
                 gstreamer-net-0.10 >= 0.10 \
                 gstreamer-plugins-base-0.10], [GLIB],
	[build gstreamer package (default=auto)],
	[gstreamer library requirement not met. Perhaps you need to install libgstreamer or libgstreamer-devel])

dnl The following is a hack to fix the fact that
dnl "pkg-config --libs mozilla-gtkmozembed" does not always give us all the
dnl right stuff. On many systems, the mozilla .so files that we need to link
dnl with are not installed on the standard library search path.
dnl "pkg-config --libs mozilla-gtkmozembed" tells us -L/path/to/moz/libs which
dnl helps with finding the .so libs at static link time but does nothing to
dnl modify the search path at dynamic link/load time. Hence what we do here is
dnl modify the lib flags to add -rpath${mozlibdir} if it is not there already.

if ! echo ${MOZEMBED_LIBS} | $GREP -e "-Wl,-\(rpath\|R\),\?${MOZEMBED_LIBDIR}" > /dev/null; then
	MOZEMBED_LIBS="${MOZEMBED_LIBS} -Wl,-rpath,${MOZEMBED_LIBDIR}"
fi

dnl Another hack, on glibc systems GHCi cannot load the pthread library,
dnl so do not include it in the LIBS list. This is not usually a problem since
dnl some other lib usually has the pthread library as a dependency and the
dnl system dynamic linker loads up the pthread library automatically.
case "$host_os" in
  linux*)
    GTKHS_GLIBC_PTHREAD_HACK(LIBGLADE_LIBS)
    GTKHS_GLIBC_PTHREAD_HACK(GCONF_LIBS)
    GTKHS_GLIBC_PTHREAD_HACK(SOURCEVIEW_LIBS)
    GTKHS_GLIBC_PTHREAD_HACK(GTKSOURCEVIEW2_LIBS)
    GTKHS_GLIBC_PTHREAD_HACK(MOZEMBED_LIBS);;
esac

dnl Some APIs only appeared in later versions of libraries. Generate only
dnl Haskell types for the available C types.
HAVE_GTK_VERSION_2_2=`$PKG_CONFIG gtk+-2.0 --atleast-version=2.2 && echo yes || echo no`
HAVE_GTK_VERSION_2_4=`$PKG_CONFIG gtk+-2.0 --atleast-version=2.4 && echo yes || echo no`
HAVE_GTK_VERSION_2_6=`$PKG_CONFIG gtk+-2.0 --atleast-version=2.6 && echo yes || echo no`
HAVE_GTK_VERSION_2_8=`$PKG_CONFIG gtk+-2.0 --atleast-version=2.8 && echo yes || echo no`
HAVE_GTK_VERSION_2_10=`$PKG_CONFIG gtk+-2.0 --atleast-version=2.10 && echo yes || echo no`
HAVE_GTK_VERSION_2_12=`$PKG_CONFIG gtk+-2.0 --atleast-version=2.12 && echo yes || echo no`

AM_CONDITIONAL(HAVE_GTK_VERSION_2_2, test "$HAVE_GTK_VERSION_2_2" = "yes")
AM_CONDITIONAL(HAVE_GTK_VERSION_2_4, test "$HAVE_GTK_VERSION_2_4" = "yes")
AM_CONDITIONAL(HAVE_GTK_VERSION_2_6, test "$HAVE_GTK_VERSION_2_6" = "yes")
AM_CONDITIONAL(HAVE_GTK_VERSION_2_8, test "$HAVE_GTK_VERSION_2_8" = "yes")
AM_CONDITIONAL(HAVE_GTK_VERSION_2_10, test "$HAVE_GTK_VERSION_2_10" = "yes")
AM_CONDITIONAL(HAVE_GTK_VERSION_2_12, test "$HAVE_GTK_VERSION_2_12" = "yes")

CREATE_TYPES="$CREATE_TYPES `test "$HAVE_GTK_VERSION_2_2" = "yes" && echo gtk-2.2`"
CREATE_TYPES="$CREATE_TYPES `test "$HAVE_GTK_VERSION_2_4" = "yes" && echo gtk-2.4`"
CREATE_TYPES="$CREATE_TYPES `test "$HAVE_GTK_VERSION_2_6" = "yes" && echo gtk-2.6`"
CREATE_TYPES="$CREATE_TYPES `test "$HAVE_GTK_VERSION_2_8" = "yes" && echo gtk-2.8`"
CREATE_TYPES="$CREATE_TYPES `test "$HAVE_GTK_VERSION_2_10" = "yes" && echo gtk-2.10`"
CREATE_TYPES="$CREATE_TYPES `test "$HAVE_GTK_VERSION_2_12" = "yes" && echo gtk-2.12`"

dnl Also allow us to conditionally compile binding to the new Gtk+ APIs.
GTKHS_PACKAGE_ADD_CHECK_VERSION(gtk+-2.0, GTK, Gtk+)

dnl Also allow us to conditionally compile binding to GtkSourceView-2.0 APIs.
GTKHS_PACKAGE_ADD_CHECK_VERSION(gtksourceview-2.0, GTKSOURCEVIEW2, gtksourceview2)
HAVE_GTKSOURCEVIEW2_VERSION_2_2=`$PKG_CONFIG gtksourceview-2.0 --atleast-version=2.2 && echo yes || echo no`
AM_CONDITIONAL(HAVE_GTKSOURCEVIEW2_VERSION_2_2, test "$HAVE_GTKSOURCEVIEW2_VERSION_2_2" = "yes")
GTKSOURCEVIEW2_CREATE_TYPES=gtksourceview2
GTKSOURCEVIEW2_CREATE_TYPES="$GTKSOURCEVIEW2_CREATE_TYPES `test "$HAVE_GTKSOURCEVIEW2_VERSION_2_2" = "yes" && echo gtksourceview2-2.2`"
AC_SUBST(GTKSOURCEVIEW2_CREATE_TYPES)

dnl Allow us to conditionally compile bindings to Pango APIs.
GTKHS_PACKAGE_ADD_CHECK_VERSION(pango, PANGO, Pango)

dnl Allow us to conditionally compile bindings to Glib APIs.
GTKHS_PACKAGE_ADD_CHECK_VERSION(glib-2.0, GLIB, Glib)

dnl Allow us to conditionally compile bindings to Glib APIs.
GTKHS_PACKAGE_ADD_CHECK_VERSION(gstreamer-0.10, GST, gstreamer)

dnl Allow us to conditionally compile bindings to GnomeVFS APIs.
GTKHS_PACKAGE_ADD_CHECK_VERSION(gnome-vfs-2.0, GNOME_VFS, gnome-vfs)
HAVE_GNOME_VFS_VERSION_2_14=`$PKG_CONFIG gnome-vfs-2.0 --atleast-version=2.14 && echo yes || echo no`
AM_CONDITIONAL(HAVE_GNOME_VFS_VERSION_2_14, test "$HAVE_GNOME_VFS_VERSION_2_14" = "yes")

dnl Allow us to conditionally compile bindings to librsvg APIs
GTKHS_PACKAGE_ADD_CHECK_VERSION(librsvg-2.0, LIBRSVG, librsvg)

dnl Also allow us to conditionally compile bindings to Glib APIs.
dnl We also want to know if certain cairo backends are enabled or not
dnl we can find out by checking the appropriate cpp defines in cairo-features.h
dnl Actually getting at these cpp defines is a bit tricky, what we do is
dnl pre-process a shell file and include cairo.h then we run that
dnl shell file to bring in the values of the shell vars it defines.
dnl Then finally we substitute those into our config header file.
if test "$ENABLE_CAIRO" = "yes" ; then
CAIRO_CPP_FLAGS="`$PKG_CONFIG --cflags cairo`"
$CPP $CAIRO_CPP_FLAGS - > conftest.sh <<_ACEOF
true <<_GIGO
#include <cairo.h>
_GIGO
#ifdef CAIRO_HAS_PS_SURFACE
_CAIRO_HAS_PS_SURFACE=1
#endif
#ifdef CAIRO_HAS_PDF_SURFACE
_CAIRO_HAS_PDF_SURFACE=1
#endif
#ifdef CAIRO_HAS_SVG_SURFACE
_CAIRO_HAS_SVG_SURFACE=1
#endif
#ifdef CAIRO_HAS_PNG_FUNCTIONS
_CAIRO_HAS_PNG_FUNCTIONS=1
#endif
_CAIRO_VERSION_MAJOR=CAIRO_VERSION_MAJOR
_CAIRO_VERSION_MINOR=CAIRO_VERSION_MINOR
_CAIRO_VERSION_MICRO=CAIRO_VERSION_MICRO
_ACEOF
. ./conftest.sh
CAIRO_HEADERS="\"cairo.h\""
if test ${_CAIRO_HAS_PS_SURFACE}; then
AC_DEFINE_UNQUOTED(ENABLE_CAIRO_PS_SURFACE, [], [cairo ps backend enabled])
CAIRO_HEADERS="${CAIRO_HEADERS}, \"cairo-ps.h\""
fi
if test ${_CAIRO_HAS_PDF_SURFACE}; then
AC_DEFINE_UNQUOTED(ENABLE_CAIRO_PDF_SURFACE, [], [cairo pdf backend enabled])
CAIRO_HEADERS="${CAIRO_HEADERS}, \"cairo-pdf.h\""
fi
if test ${_CAIRO_HAS_SVG_SURFACE}; then
AC_DEFINE_UNQUOTED(ENABLE_CAIRO_SVG_SURFACE, [], [cairo svg backend enabled])
CAIRO_HEADERS="${CAIRO_HEADERS}, \"cairo-svg.h\""
fi
if test ${_CAIRO_HAS_PNG_FUNCTIONS}; then
AC_DEFINE_UNQUOTED(ENABLE_CAIRO_PNG_FUNCTIONS, [], [cairo png functions available])
fi
AC_DEFINE_UNQUOTED(_CAIRO_MAJOR_VERSION, (${_CAIRO_VERSION_MAJOR}), [cairo major version number])
AC_DEFINE_UNQUOTED(_CAIRO_MINOR_VERSION, (${_CAIRO_VERSION_MINOR}), [cairo minor version number])
AC_DEFINE_UNQUOTED(_CAIRO_MICRO_VERSION, (${_CAIRO_VERSION_MICRO}), [cairo minor patch level])
AH_BOTTOM([
/* Allow code to be compiled differently for different versions of cairo */
#ifdef GTK2HS_HS_PREPROC
#define CAIRO_CHECK_VERSION(major,minor,micro)    \
    (_CAIRO_MAJOR_VERSION > (major) || \
     (_CAIRO_MAJOR_VERSION == (major) && _CAIRO_MINOR_VERSION > (minor)) || \
     (_CAIRO_MAJOR_VERSION == (major) && _CAIRO_MINOR_VERSION == (minor) && \
      _CAIRO_MICRO_VERSION >= (micro)))
#endif

#endif
])
fi

dnl For reasons know only to themselves, Sun decided to ship a development
dnl version of Gtk+ (version 2.1.0). Being an intermediate development version
dnl it had bugs/typos etc. The function gtk_icon_size_lookup was mistakenly
dnl conditionally included based on the preprocessor symbol GTK_MULTIHEAD_SAFE.
dnl We'll be nice and support Sun's poor users by defining this symbol for this
dnl version of Gtk+ only.
if $PKG_CONFIG gtk+-2.0 --exact-version 2.1.0; then
  AC_DEFINE(GTK_MULTIHEAD_SAFE, [],
  [Define this if we need to hack around a broken development version of Gtk+ (2.1.0)
  that for some reason Sun decided it'd be a really good idea for them to ship. Grrr.])
fi

dnl If we're building with Gtk+ 2.8 or later then we also depend on the cairo
dnl bindings for Haskell. So set the GTK_CAIRO_DEPEND variable to the
dnl appropaiate value to substitute into the gtk package files

if test "$HAVE_GTK_VERSION_2_8" = "yes" -a "$ENABLE_CAIRO" = "yes"; then
  GTK_CAIRO_DEPEND=", cairo-${PACKAGE_VERSION}";
fi

dnl The GtkPlug/GtkSocket widgets have been ported to Win32 as of Gtk+ 2.8.0
if test "$HAVE_GTK_VERSION_2_8" = "yes" -a "$WIN32" = "yes"; then
  CREATE_TYPES="$CREATE_TYPES plugNsocket"
fi

dnl The configuration program for GTK is kind of stupid in that it
dnl lists directories which don't exist. ghc-pkg in ghc 5.04 or greater
dnl does not like that, so we need to filter out non-existent directories.
dnl Furthermore we remove all libraries and directories for packages that
dnl built on top of gtk so that they don't appear several times on the
dnl command line.
GTKHS_PACKAGE_FILTER_CFLAGS([GLIB_CFLAGS], [], [$GLIB_CFLAGS])
GTKHS_PACKAGE_FILTER_LIBS([GLIB_LIBS], [], [$GLIB_LIBS])

GTKHS_PACKAGE_FILTER_CFLAGS([GIO_CFLAGS], [], [$GIO_CFLAGS])
GTKHS_PACKAGE_FILTER_LIBS([GIO_LIBS], [], [$GIO_LIBS])

GTKHS_PACKAGE_FILTER_CFLAGS([GTK_CFLAGS], [$GLIB_CFLAGS], [$GTK_CFLAGS])
GTKHS_PACKAGE_FILTER_LIBS([GTK_LIBS], [$GLIB_LIBS], [$GTK_LIBS $STARTUP_CODE])

GTKHS_PACKAGE_FILTER_CFLAGS([GIO_CFLAGS], [$GLIB_CFLAGS], [$GIO_CFLAGS])
GTKHS_PACKAGE_FILTER_LIBS([GIO_LIBS], [$GLIB_LIBS], [$GIO_LIBS])

GTKHS_PACKAGE_FILTER_CFLAGS([SOURCEVIEW_CFLAGS], [$GLIB_CFLAGS $GTK_CFLAGS], [$SOURCEVIEW_CFLAGS])
GTKHS_PACKAGE_FILTER_LIBS([SOURCEVIEW_LIBS], [$GLIB_LIBS $GTK_LIBS], [$SOURCEVIEW_LIBS])

GTKHS_PACKAGE_FILTER_CFLAGS([GTKSOURCEVIEW2_CFLAGS], [$GLIB_CFLAGS $GTK_CFLAGS], [$GTKSOURCEVIEW2_CFLAGS])
GTKHS_PACKAGE_FILTER_LIBS([GTKSOURCEVIEW2_LIBS], [$GLIB_LIBS $GTK_LIBS], [$GTKSOURCEVIEW2_LIBS])

GTKHS_PACKAGE_FILTER_CFLAGS([LIBGLADE_CFLAGS], [$GLIB_CFLAGS $GTK_CFLAGS], [$LIBGLADE_CFLAGS])
GTKHS_PACKAGE_FILTER_LIBS([LIBGLADE_LIBS], [$GLIB_LIBS $GTK_LIBS], [$LIBGLADE_LIBS])

GTKHS_PACKAGE_FILTER_CFLAGS([GCONF_CFLAGS], [$GLIB_CFLAGS], [$GCONF_CFLAGS])
GTKHS_PACKAGE_FILTER_LIBS([GCONF_LIBS], [$GLIB_LIBS], [$GCONF_LIBS])

GTKHS_PACKAGE_FILTER_CFLAGS([MOZEMBED_CFLAGS], [$GLIB_CFLAGS $GTK_CFLAGS], [$MOZEMBED_CFLAGS])
GTKHS_PACKAGE_FILTER_LIBS([MOZEMBED_LIBS], [$GLIB_LIBS $GTK_LIBS], [$MOZEMBED_LIBS])

GTKHS_PACKAGE_FILTER_CFLAGS([CAIRO_CFLAGS], [], [$CAIRO_CFLAGS])
GTKHS_PACKAGE_FILTER_LIBS([CAIRO_LIBS], [], [$CAIRO_LIBS])

GTKHS_PACKAGE_FILTER_CFLAGS([SVGCAIRO_CFLAGS], [$CAIRO_CFLAGS], [$SVGCAIRO_CFLAGS])
GTKHS_PACKAGE_FILTER_LIBS([SVGCAIRO_LIBS], [$CAIRO_LIBS], [$SVGCAIRO_LIBS])

GTKHS_PACKAGE_FILTER_CFLAGS([GTKGLEXT_CFLAGS], [$GLIB_CFLAGS $GTK_CFLAGS], [$GTKGLEXT_CFLAGS])
GTKHS_PACKAGE_FILTER_LIBS([GTKGLEXT_LIBS], [$GLIB_LIBS $GTK_LIBS], [$GTKGLEXT_LIBS])

GTKHS_PACKAGE_FILTER_CFLAGS([GNOMEVFS_CFLAGS], [$GLIB_CFLAGS], [$GNOMEVFS_CFLAGS])
GTKHS_PACKAGE_FILTER_LIBS([GNOMEVFS_LIBS], [$GLIB_LIBS], [$GNOMEVFS_LIBS])

GTKHS_PACKAGE_FILTER_CFLAGS([GSTREAMER_CFLAGS], [$GLIB_CFLAGS], [$GSTREAMER_CFLAGS])
GTKHS_PACKAGE_FILTER_LIBS([GSTREAMER_LIBS], [$GLIB_LIBS], [$GSTREAMER_LIBS])

dnl Change the representation of these flags to "flag1","flag2". The
dnl letters CQ stand for Comma, Quote.
GTKHS_REFORMAT_PACKAGE_CFLAGS(GLIB_CFLAGS, GLIB_CFLAGS_CQ)
GTKHS_REFORMAT_PACKAGE_LIBS(GLIB_LIBS, GLIB_LIBS_CQ, GLIB_LIBDIR_CQ, GLIB_LIBEXTRA_CQ)
AC_SUBST(GLIB_CFLAGS_CQ)
AC_SUBST(GLIB_LIBS_CQ)
AC_SUBST(GLIB_LIBDIR_CQ)
AC_SUBST(GLIB_LIBEXTRA_CQ)

GTKHS_REFORMAT_PACKAGE_CFLAGS(GIO_CFLAGS, GIO_CFLAGS_CQ)
GTKHS_REFORMAT_PACKAGE_LIBS(GIO_LIBS, GIO_LIBS_CQ, GIO_LIBDIR_CQ, GIO_LIBEXTRA_CQ)
AC_SUBST(GIO_CFLAGS_CQ)
AC_SUBST(GIO_LIBS_CQ)
AC_SUBST(GIO_LIBDIR_CQ)
AC_SUBST(GIO_LIBEXTRA_CQ)

GTKHS_REFORMAT_PACKAGE_CFLAGS(GTK_CFLAGS, GTK_CFLAGS_CQ)
GTKHS_REFORMAT_PACKAGE_LIBS(GTK_LIBS, GTK_LIBS_CQ, GTK_LIBDIR_CQ, GTK_LIBEXTRA_CQ)
AC_SUBST(GTK_CFLAGS_CQ)
AC_SUBST(GTK_LIBS_CQ)
AC_SUBST(GTK_LIBDIR_CQ)
AC_SUBST(GTK_LIBEXTRA_CQ)

GTKHS_REFORMAT_PACKAGE_CFLAGS(GIO_CFLAGS, GIO_CFLAGS_CQ)
GTKHS_REFORMAT_PACKAGE_LIBS(GIO_LIBS, GIO_LIBS_CQ, GIO_LIBDIR_CQ, GIO_LIBEXTRA_CQ)
AC_SUBST(GIO_CFLAGS_CQ)
AC_SUBST(GIO_LIBS_CQ)
AC_SUBST(GIO_LIBDIR_CQ)
AC_SUBST(GIO_LIBEXTRA_CQ)

dnl Fix another bug in ghc-pkg where it doesn't look into directories
dnl for dependant packages when building the .o file.
GTKHS_REFORMAT_PACKAGE_CFLAGS(SOURCEVIEW_CFLAGS, SOURCEVIEW_CFLAGS_CQ)
GTKHS_REFORMAT_PACKAGE_LIBS(SOURCEVIEW_LIBS, SOURCEVIEW_LIBS_CQ,
			    SOURCEVIEW_LIBDIR_CQ, SOURCEVIEW_LIBEXTRA_CQ)
AC_SUBST(SOURCEVIEW_CFLAGS_CQ)
AC_SUBST(SOURCEVIEW_LIBS_CQ)
AC_SUBST(SOURCEVIEW_LIBDIR_CQ)
AC_SUBST(SOURCEVIEW_LIBEXTRA_CQ)

GTKHS_REFORMAT_PACKAGE_CFLAGS(GTKSOURCEVIEW2_CFLAGS, GTKSOURCEVIEW2_CFLAGS_CQ)
GTKHS_REFORMAT_PACKAGE_LIBS(GTKSOURCEVIEW2_LIBS, GTKSOURCEVIEW2_LIBS_CQ,
			    GTKSOURCEVIEW2_LIBDIR_CQ, GTKSOURCEVIEW2_LIBEXTRA_CQ)
AC_SUBST(GTKSOURCEVIEW2_CFLAGS_CQ)
AC_SUBST(GTKSOURCEVIEW2_LIBS_CQ)
AC_SUBST(GTKSOURCEVIEW2_LIBDIR_CQ)
AC_SUBST(GTKSOURCEVIEW2_LIBEXTRA_CQ)

GTKHS_REFORMAT_PACKAGE_CFLAGS(LIBGLADE_CFLAGS, LIBGLADE_CFLAGS_CQ)
GTKHS_REFORMAT_PACKAGE_LIBS(LIBGLADE_LIBS, LIBGLADE_LIBS_CQ,
			    LIBGLADE_LIBDIR_CQ, LIBGLADE_LIBEXTRA_CQ)
AC_SUBST(LIBGLADE_CFLAGS_CQ)
AC_SUBST(LIBGLADE_LIBS_CQ)
AC_SUBST(LIBGLADE_LIBDIR_CQ)
AC_SUBST(LIBGLADE_LIBEXTRA_CQ)

GTKHS_REFORMAT_PACKAGE_CFLAGS(GCONF_CFLAGS, GCONF_CFLAGS_CQ)
GTKHS_REFORMAT_PACKAGE_LIBS(GCONF_LIBS, GCONF_LIBS_CQ, GCONF_LIBDIR_CQ,
			    GCONF_LIBEXTRA_CQ)
AC_SUBST(GCONF_CFLAGS_CQ)
AC_SUBST(GCONF_LIBS_CQ)
AC_SUBST(GCONF_LIBDIR_CQ)
AC_SUBST(GCONF_LIBEXTRA_CQ)

GTKHS_REFORMAT_PACKAGE_CFLAGS(MOZEMBED_CFLAGS, MOZEMBED_CFLAGS_CQ)
GTKHS_REFORMAT_PACKAGE_LIBS(MOZEMBED_LIBS, MOZEMBED_LIBS_CQ,
                            MOZEMBED_LIBDIR_CQ, MOZEMBED_LIBEXTRA_CQ)
AC_SUBST(MOZEMBED_CFLAGS_CQ)
AC_SUBST(MOZEMBED_LIBS_CQ)
AC_SUBST(MOZEMBED_LIBDIR_CQ)
AC_SUBST(MOZEMBED_LIBEXTRA_CQ)

GTKHS_REFORMAT_PACKAGE_CFLAGS(CAIRO_CFLAGS, CAIRO_CFLAGS_CQ)
GTKHS_REFORMAT_PACKAGE_LIBS(CAIRO_LIBS, CAIRO_LIBS_CQ, CAIRO_LIBDIR_CQ, CAIRO_LIBEXTRA_CQ)
AC_SUBST(CAIRO_CFLAGS_CQ)
AC_SUBST(CAIRO_LIBS_CQ)
AC_SUBST(CAIRO_LIBDIR_CQ)
AC_SUBST(CAIRO_LIBEXTRA_CQ)

GTKHS_REFORMAT_PACKAGE_CFLAGS(SVGCAIRO_CFLAGS, SVGCAIRO_CFLAGS_CQ)
GTKHS_REFORMAT_PACKAGE_LIBS(SVGCAIRO_LIBS, SVGCAIRO_LIBS_CQ, SVGCAIRO_LIBDIR_CQ, SVGCAIRO_LIBEXTRA_CQ)
AC_SUBST(SVGCAIRO_CFLAGS_CQ)
AC_SUBST(SVGCAIRO_LIBS_CQ)
AC_SUBST(SVGCAIRO_LIBDIR_CQ)
AC_SUBST(SVGCAIRO_LIBEXTRA_CQ)

GTKHS_REFORMAT_PACKAGE_CFLAGS(GTKGLEXT_CFLAGS, GTKGLEXT_CFLAGS_CQ)
GTKHS_REFORMAT_PACKAGE_LIBS(GTKGLEXT_LIBS, GTKGLEXT_LIBS_CQ, GTKGLEXT_LIBDIR_CQ, GTKGLEXT_LIBEXTRA_CQ)
AC_SUBST(GTKGLEXT_CFLAGS_CQ)
AC_SUBST(GTKGLEXT_LIBS_CQ)
AC_SUBST(GTKGLEXT_LIBDIR_CQ)
AC_SUBST(GTKGLEXT_LIBEXTRA_CQ)

GTKHS_REFORMAT_PACKAGE_CFLAGS(GNOMEVFS_CFLAGS, GNOMEVFS_CFLAGS_CQ)
GTKHS_REFORMAT_PACKAGE_LIBS(GNOMEVFS_LIBS, GNOMEVFS_LIBS_CQ, GNOMEVFS_LIBDIR_CQ, GNOMEVFS_LIBEXTRA_CQ)
AC_SUBST(GNOMEVFS_CFLAGS_CQ)
AC_SUBST(GNOMEVFS_LIBS_CQ)
AC_SUBST(GNOMEVFS_LIBDIR_CQ)
AC_SUBST(GNOMEVFS_LIBEXTRA_CQ)

GTKHS_REFORMAT_PACKAGE_CFLAGS(GSTREAMER_CFLAGS, GSTREAMER_CFLAGS_CQ)
GTKHS_REFORMAT_PACKAGE_LIBS(GSTREAMER_LIBS, GSTREAMER_LIBS_CQ, GSTREAMER_LIBDIR_CQ, GSTREAMER_LIBEXTRA_CQ)
AC_SUBST(GSTREAMER_CFLAGS_CQ)
AC_SUBST(GSTREAMER_LIBS_CQ)
AC_SUBST(GSTREAMER_LIBDIR_CQ)
AC_SUBST(GSTREAMER_LIBEXTRA_CQ)

if test $DISABLE_DEPRECATED = yes; then
  AC_DEFINE(DISABLE_DEPRECATED, [], [Leave out all deprecated functions.])
  AC_DEFINE(G_DISABLE_DEPRECATED, [], [Omit deprecated glib functions.])
  AC_DEFINE(GDK_DISABLE_DEPRECATED, [], [Omit deprecated gdk functions.])
  AC_DEFINE(GDK_PIXBUF_DISABLE_DEPRECATED, [],
	[Omit deprecated pixbuf functions.])
  AC_DEFINE(GTK_DISABLE_DEPRECATED, [], [Omit deprecated gtk functions.])
else
  CREATE_TYPES="deprecated $CREATE_TYPES";
fi;

dnl Decide which signals implementation to use, it does not work with GHCi for
dnl version of GHC up to 6.4, it is fixed in 6.4.1. However we will use it on
dnl sparc and amd64 since amd64 does not have a working ghci, and its ffi
dnl support is insufficient for the old signals method. For sparc, the ghc ffi
dnl support is also insufficient for the old signals method.
case "$host_cpu" in
  sparc*) USE_GCLOSUE_SIGNALS_IMPL=yes;;
 x86_64*) USE_GCLOSUE_SIGNALS_IMPL=yes;;
       *) USE_GCLOSUE_SIGNALS_IMPL=no;;
esac
GTKHS_PROG_CHECK_VERSION($GHC_VERSION, -ge, 6.4.1, [USE_GCLOSUE_SIGNALS_IMPL=yes])
if test $USE_GCLOSUE_SIGNALS_IMPL = yes; then
	AC_DEFINE(USE_GCLOSUE_SIGNALS_IMPL, [], [Use the new GClosure based signals implementation.])
fi
AM_CONDITIONAL(USE_GCLOSUE_SIGNALS_IMPL, test "$USE_GCLOSUE_SIGNALS_IMPL" = "yes")

dnl The following is a check that is only needed by gtk2hs cvs users who
dnl upgrade from an earlier version which used to use "config.h" rather than
dnl "gtk2hs-config.h". The "config.h" file sometimes clashed with the file of
dnl the same name from ghc. In particular it can cause the alex lexer to be
dnl misconpiled on big endian machines. So we want to make sure that the file
dnl does not exist. If it does we'll ask the user to remove it.
if test -f ${srcdir}/config.h; then
  AC_MSG_ERROR([You appear to be upgrading Gtk2Hs without starting with a
		clean build tree. That's ok! But can you please delete the
		old config.h and config.h.in files, since their presense can
		cause build problems that are hard to track down.
		After deleteing the two files you can re-run ./configure])
fi

dnl Decide what default memory limits to use with the build tools (c2hs).
dnl We generally want to keep them reasonably low without cutting it too close
dnl to the absolute minimum.
if test "$WIN32" = "yes"; then
  dnl It seems to take considerably more memory on win32. Not sure why.
  dnl Don't use -H{x}m in combination with -M{x}m on windows since it seems to
  dnl trigger wierd ghc rts behaviour.
  HSTOOLFLAGS="-M256m"
else
  dnl I'll actually work in just 68Mb so 80Mb should be fine and still allow it
  dnl to run on 32bit 128Mb machines. 64bit machines need more obviously.
  case $ac_cv_sizeof_void_p in
	4) HSTOOLFLAGS="-H50m -M80m";;
	8) HSTOOLFLAGS="-H100m -M160m";;
  esac
fi

dnl Always use the local c2hs.
C2HS='./tools/c2hs/c2hsLocal$(EXEEXT)'

dnl The hsc2hs preprocessor
AC_PATH_PROG(HSC2HS,hsc2hs, no)
if test "$HSC2HS" = "no"; then
  AC_MSG_ERROR([Could not find hsc2hs. This should be installed with GHC!])
fi

dnl The happy parser generator
AC_PATH_PROG(HAPPY,happy, no)
if test "$HAPPY" = no; then
  HAPPY_ERROR="Could not find happy which is needed to build c2hs."
else
  AC_MSG_CHECKING([version of happy])
  HAPPY_VERSION=`$HAPPY --version | $SED "s/[[^0-9.]*\([0-9.]*\) .*]/\1/"`;
  AC_MSG_RESULT([$HAPPY_VERSION])
  GTKHS_PROG_CHECK_VERSION($HAPPY_VERSION, -lt, 1.15.0, [
    HAPPY_ERROR="Version 1.15 or later of happy is required."])
fi
if test -n "$HAPPY_ERROR"; then
  dnl We only need to complain if we would actually have to invoke happy
  dnl which would not be the case for a normal distribution tarball in which
  dnl the parser .hs file exists and is newer then the parser .y file
  CParser=${srcdir}/tools/c2hs/c/CParser
  if test ! -f ${CParser}.hs -o ${CParser}.hs -ot ${CParser}.y; then
    AC_MSG_ERROR([$HAPPY_ERROR])
  fi
fi

dnl The alex lexer generator
AC_PATH_PROG(ALEX,alex, no)
if test "$ALEX" = no; then
  dnl We only need to complain if we would actually have to invoke alex
  dnl which would not be the case for a normal distribution tarball in which
  dnl the lexer .hs file exists and is newer then the lexer .x file
  CLexer=${srcdir}/tools/c2hs/c/CLexer
  if test ! -f ${CLexer}.hs -o ${CLexer}.hs -ot ${CLexer}.x; then
    AC_MSG_ERROR([Could not find alex which is needed to build c2hs.])
  fi
fi

dnl Documentation
AC_ARG_ENABLE(docs,
              [AS_HELP_STRING([--enable-docs], [build html documentation])],
              [BUILDDOCS=$enableval],[BUILDDOCS=no])
if test "$BUILDDOCS" = "yes"; then
  AC_ARG_VAR(HADDOCK,[path to Haddock (versions 0.8 & 0.9, or versions 2.4 and above)])
  AC_PATH_PROG(HADDOCK,haddock, no)
  if test "$HADDOCK" = "no"; then
    AC_MSG_ERROR([Could not find haddock which is required to build the documentation.
    Install haddock or re-run configure without --enable-docs])
  fi
  AC_MSG_CHECKING([version of haddock])
  HADDOCK_VERSION="`$HADDOCK --version | head -n 1 | $CUT -d' ' -f3 | $CUT -d, -f1`"
  bad_haddock_version=no
  AC_MSG_RESULT([$HADDOCK_VERSION])  
  GTKHS_PROG_CHECK_VERSION($HADDOCK_VERSION, -lt, 0.7, [bad_haddock_version=yes;])
  GTKHS_PROG_CHECK_VERSION($HADDOCK_VERSION, -ge, 0.8, [USE_CPP_LINES="yes";])
  GTKHS_PROG_CHECK_VERSION($HADDOCK_VERSION, -ge, 2.0, [
    HADDOCK2="yes";
    GTKHS_PROG_CHECK_VERSION($HADDOCK_VERSION, -lt, 2.4, [bad_haddock_version=yes;])
  ])
  if test "$bad_haddock_version" = "yes" ; then
    AC_MSG_ERROR([I need haddock version x, where 0.7 <= x < 2.0 or x > 2.4
    to build the documentation.
    Upgrade your version of haddock or re-run configure without --enable-docs])
  fi
else
  USE_CPP_LINES="yes"
fi
AM_CONDITIONAL(HADDOCK2,  test "$HADDOCK2"  = "yes")
AM_CONDITIONAL(BUILDDOCS, test "$BUILDDOCS" = "yes")

dnl Define the set of packages that Haddock should cross-reference into. This
dnl should include all modules of GHC that contain the definitions of e.g.
dnl Maybe and Bool, etc. This setting is likely dependent on the GHC version.
HADDOCK_PACKAGES="base-$PKG_BASE_VERSION mtl-$PKG_MTL_VERSION"

dnl The preprocessor to use on Haskell sources
if test "$USE_CPP_LINES" = "yes"; then
HSCPP='$(CPP) -x c -traditional-cpp'
else
HSCPP='$(CPP) -x c -traditional-cpp -P'
fi

dnl Needed substitution.
AC_SUBST(USERPKGCONF)
AC_SUBST(PKGCONF)
AC_SUBST(HCFLAGS)
AC_SUBST(C2HS)
AC_SUBST(HSC2HS)
AC_SUBST(HSCPP)
AC_SUBST(VERSION)
dnl Platform specific flags 
AC_SUBST(HSCFLAGS)
AC_SUBST(C2HSFLAGS)
AC_SUBST(HSTOOLFLAGS)
dnl Versionitis
AC_SUBST(CREATE_TYPES)
dnl Optional packages
AC_SUBST(GTK_CAIRO_DEPEND)
AC_SUBST(CAIRO_HEADERS)
dnl Documentation
AC_SUBST(HADDOCK)
AC_SUBST(HADDOCK_PACKAGES)
dnl The c2hs part.
AC_SUBST(CPP)

dnl write the results...
AC_CONFIG_FILES([
  Makefile
  gtk2hs.spec
  mk/chsDepend
  mk/link-splitobjs.sh
  mk/fix-package-conf.sh
  docs/prologue.txt

  glib/glib.package.conf			glib/glib.cabal
  gtk/gtk.package.conf				gtk/gtk.cabal
  gio/gio.package.conf				gio/gio.cabal
  glade/glade.package.conf			glade/glade.cabal
  gconf/gconf.package.conf			gconf/gconf.cabal
  sourceview/sourceview.package.conf		sourceview/sourceview.cabal
  gtksourceview2/gtksourceview2.package.conf	gtksourceview2/gtksourceview2.cabal
  mozembed/mozembed.package.conf		mozembed/mozembed.cabal
  cairo/cairo.package.conf			cairo/cairo.cabal
  svgcairo/svgcairo.package.conf		svgcairo/svgcairo.cabal
  gtkglext/gtkglext.package.conf		gtkglext/gtkglext.cabal
  soegtk/soegtk.package.conf			soegtk/soegtk.cabal
  gnomevfs/gnomevfs.package.conf		gnomevfs/gnomevfs.cabal
  gstreamer/gstreamer.package.conf		gstreamer/gstreamer.cabal
  ])
AC_CONFIG_COMMANDS([default],[[chmod a+x mk/chsDepend mk/link-splitobjs.sh install-sh]])
AC_OUTPUT

dnl ...and chat with the user
echo "**************************************************"
echo "* Configuration completed successfully.           "
echo "*                                                 "
echo "* The following packages will be built:           "
echo "*                                                 "
echo "* glib           : yes                            "
echo "* gtk            : ${ENABLE_GTK}                  "
echo "* gio            : ${ENABLE_GIO}                  "
echo "* glade          : ${ENABLE_LIBGLADE}             "
echo "* cairo          : ${ENABLE_CAIRO}                "
echo "* svgcairo       : ${ENABLE_SVGCAIRO}             "
echo "* gtkglext       : ${ENABLE_GTKGLEXT}             "
echo "* gconf          : ${ENABLE_GCONF}                "
echo "* sourceview     : ${ENABLE_SOURCEVIEW}           "
echo "* gtksourceview2 : ${ENABLE_GTKSOURCEVIEW2}       "
echo "* mozembed       : ${ENABLE_MOZEMBED}             "
echo "* soegtk         : ${ENABLE_GTK}                  "
echo "* gnomevfs       : ${ENABLE_GNOMEVFS}             "
echo "* gstreamer      : ${ENABLE_GSTREAMER}            "
echo "* documentation  : ${BUILDDOCS}                   "
dnl echo "* tutorials     : no                              "
echo "*                                                 "
echo "* Now do \"(g)make\" followed by \"(g)make install\""
echo "**************************************************"