diff --git a/.boring b/.boring
new file mode 100644
--- /dev/null
+++ b/.boring
@@ -0,0 +1,59 @@
+# Project specific
+\.setup-config$
+autom4te\.cache
+c2hs\.spec$
+c2hs/c/CLexer\.hs$
+c2hs/c/CParser\.hs$
+c2hs/c2hs$
+c2hs/c2hs-inplace$
+c2hs/tests/.*\.hs$
+c2hs/tests/.*\.h$
+\.chi$
+c2hs/tests/enums$
+c2hs/tests/marsh$
+c2hs/tests/pointer$
+c2hs/tests/structs$
+c2hs/toplevel/C2HSConfig\.hs$
+c2hs/toplevel/Version\.hs$
+config\.log$
+config\.status$
+configure$
+^dist
+doc/c2hs/Makefile$
+doc/c2hs/.*\.html$
+doc/c2hs/.*\.txt$
+doc/c2hs/man1/c2hs.1
+postInst\.sh
+#
+# Boring file regexps:
+\.hi$
+\.o$
+\.o\.cmd$
+\.ko$
+\.ko\.cmd$
+\.mod\.c$
+(^|/)\.tmp_versions($|/)
+(^|/)CVS($|/)
+(^|/)RCS($|/)
+~$
+#(^|/)\.[^/]
+(^|/)_darcs($|/)
+\.bak$
+\.BAK$
+\.orig$
+(^|/)vssver\.scc$
+\.swp$
+(^|/)MT($|/)
+(^|/)\{arch\}($|/)
+(^|/).arch-ids($|/)
+(^|/),
+\.class$
+\.prof$
+(^|/)\.DS_Store$
+(^|/)BitKeeper($|/)
+(^|/)ChangeSet($|/)
+(^|/)\.svn($|/)
+\.py[co]$
+\#
+\.cvsignore$
+(^|/)Thumbs\.db$
diff --git a/.gitignore b/.gitignore
new file mode 100644
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,170 @@
+/.cabal-sandbox/*
+/cabal.sandbox.config
+*.chi
+*.chs.h
+/dist/*
+*.hi
+/issues/*
+*.o
+/.shelly/*.txt
+/tests/bugs/call_capital/Capital
+/tests/bugs/call_capital/Capital.chi
+/tests/bugs/call_capital/Capital.chs.h
+/tests/bugs/call_capital/Capital_c.o
+/tests/bugs/call_capital/Capital.hi
+/tests/bugs/call_capital/Capital.hs
+/tests/bugs/call_capital/Capital.o
+/tests/bugs/issue-09/Issue09.hs
+/tests/bugs/issue-102/Issue102
+/tests/bugs/issue-102/Issue102.hs
+/tests/bugs/issue-103/Issue103A.hs
+/tests/bugs/issue-103/Issue103.hs
+/tests/bugs/issue-107/Issue107
+/tests/bugs/issue-107/Issue107.hs
+/tests/bugs/issue-10/Issue10
+/tests/bugs/issue-10/Issue10.hs
+/tests/bugs/issue-10/Issue10.i
+/tests/bugs/issue-113/Issue113
+/tests/bugs/issue-113/Issue113.hs
+/tests/bugs/issue-115/Issue115
+/tests/bugs/issue-115/Issue115.hs
+/tests/bugs/issue-116/Issue116
+/tests/bugs/issue-116/Issue116.hs
+/tests/bugs/issue-15/Issue15
+/tests/bugs/issue-15/Issue15.hs
+/tests/bugs/issue-16/Issue16
+/tests/bugs/issue-16/Issue16.hs
+/tests/bugs/issue-19/Issue19
+/tests/bugs/issue-19/Issue19.hs
+/tests/bugs/issue-20/Issue20.i
+/tests/bugs/issue-22/Issue22
+/tests/bugs/issue-22/Issue22.hs
+/tests/bugs/issue-23/Issue23
+/tests/bugs/issue-23/Issue23.hs
+/tests/bugs/issue-29/Issue29.hs
+/tests/bugs/issue-29/Issue29.i
+/tests/bugs/issue-30/Issue30
+/tests/bugs/issue-30/Issue30Aux1.hs
+/tests/bugs/issue-30/Issue30Aux2.hs
+/tests/bugs/issue-30/Issue30.hs
+/tests/bugs/issue-31/Issue31
+/tests/bugs/issue-31/Issue31.hs
+/tests/bugs/issue-32/Issue32
+/tests/bugs/issue-32/Issue32.hs
+/tests/bugs/issue-36/Issue36
+/tests/bugs/issue-36/Issue36.hs
+/tests/bugs/issue-37/Issue37
+/tests/bugs/issue-37/Issue37.hs
+/tests/bugs/issue-38/Issue38
+/tests/bugs/issue-38/Issue38.hs
+/tests/bugs/issue-43/Issue43
+/tests/bugs/issue-43/Issue43.hs
+/tests/bugs/issue-44/Issue44
+/tests/bugs/issue-44/Issue44.hs
+/tests/bugs/issue-45/Issue45
+/tests/bugs/issue-45/Issue45.hs
+/tests/bugs/issue-46/Issue46
+/tests/bugs/issue-46/Issue46.hs
+/tests/bugs/issue-47/Issue47
+/tests/bugs/issue-47/Issue47.hs
+/tests/bugs/issue-51/Issue51
+/tests/bugs/issue-51/Issue51_GNU
+/tests/bugs/issue-51/Issue51_GNU.hs
+/tests/bugs/issue-51/Issue51.hs
+/tests/bugs/issue-51/Issue51_nonGNU
+/tests/bugs/issue-51/Issue51_nonGNU.hs
+/tests/bugs/issue-54/Issue54
+/tests/bugs/issue-54/Issue54.hs
+/tests/bugs/issue-60/Issue60
+/tests/bugs/issue-60/Issue60.hs
+/tests/bugs/issue-60/Issue60.i
+/tests/bugs/issue-62/Issue62
+/tests/bugs/issue-62/Issue62.hs
+/tests/bugs/issue-65/Issue65
+/tests/bugs/issue-65/Issue65.hs
+/tests/bugs/issue-69/Issue69
+/tests/bugs/issue-69/Issue69.hs
+/tests/bugs/issue-70/Issue70.hs
+/tests/bugs/issue-73/Issue73
+/tests/bugs/issue-73/Issue73.hs
+/tests/bugs/issue-75/Issue75
+/tests/bugs/issue-75/Issue75.hs
+/tests/bugs/issue-79/Issue79
+/tests/bugs/issue-79/Issue79.hs
+/tests/bugs/issue-7/Issue7.hs
+/tests/bugs/issue-7/Issue7.i
+/tests/bugs/issue-80/Issue80
+/tests/bugs/issue-80/Issue80.hs
+/tests/bugs/issue-82/Issue82
+/tests/bugs/issue-82/Issue82.hs
+/tests/bugs/issue-83/Issue83
+/tests/bugs/issue-83/Issue83.hs
+/tests/bugs/issue-93/Issue93
+/tests/bugs/issue-93/Issue93.hs
+/tests/bugs/issue-95/Issue95
+/tests/bugs/issue-95/Issue95.hs
+/tests/bugs/issue-96/Issue103
+/tests/bugs/issue-96/Issue96
+/tests/bugs/issue-96/Issue96.hs
+/tests/bugs/issue-97/Issue97
+/tests/bugs/issue-97/Issue97A.hs
+/tests/bugs/issue-97/Issue97.hs
+/tests/bugs/issue-98/Issue98
+/tests/bugs/issue-98/Issue98.hs
+/tests/bugs/issue-9/Issue9
+/tests/bugs/issue-9/Issue9.hs
+/tests/system/calls/Calls.hs
+/tests/system/cpp/Cpp.hs
+/tests/system/enums/enums
+/tests/system/enums/Enums.hs
+/tests/system/marsh/marsh
+/tests/system/marsh/Marsh.hs
+/tests/system/pointer/pointer
+/tests/system/pointer/Pointer.hs
+/tests/system/simple/simple
+/tests/system/simple/Simple.hs
+/tests/system/sizeof/sizeof
+/tests/system/sizeof/Sizeof.hs
+/tests/system/structs/structs
+/tests/system/structs/Structs.hs
+/tests/bugs/issue-20/Issue20
+/tests/bugs/issue-20/Issue20.hs
+/tests/bugs/issue-25/Issue25
+/tests/bugs/issue-25/Issue25.hs
+/tests/bugs/issue-48/Issue48
+/tests/bugs/issue-48/Issue48.hs
+/tests/bugs/issue-123/Issue123
+/tests/bugs/issue-123/Issue123.hs
+/tests/bugs/issue-102/issue-102.txt
+/tests/bugs/issue-117/Issue117
+/tests/bugs/issue-117/Issue117.hs
+/tests/bugs/issue-117/Issue117.chs.c
+/tests/bugs/issue-127/Issue127
+/tests/bugs/issue-127/Issue127.hs
+/tests/bugs/issue-128/Issue128
+/tests/bugs/issue-128/Issue128.chs.c
+/tests/bugs/issue-128/Issue128.hs
+/tests/bugs/issue-131/Issue131.chs.c
+/tests/bugs/issue-131/Issue131.hs
+/tests/bugs/issue-131/Issue131
+/tests/bugs/issue-130/Issue130
+/tests/bugs/issue-130/Issue130.hs
+/tests/bugs/issue-133/Issue133
+/tests/bugs/issue-133/Issue133.hs
+/tests/bugs/issue-136/Issue136.hs
+/tests/bugs/issue-136/Issue136
+/tests/bugs/issue-134/Issue134
+/tests/bugs/issue-134/Issue134.hs
+/tests/bugs/issue-151/Issue151.hs
+/tests/bugs/issue-149/Issue149
+/tests/bugs/issue-149/Issue149.hs
+/tests/bugs/issue-141/Issue141A.hs
+/tests/bugs/issue-141/Issue141B.hs
+/tests/bugs/issue-152/Issue152
+/tests/bugs/issue-140/Issue140
+/tests/bugs/issue-140/Issue140.hs
+/tests/bugs/issue-152/Issue152.hs
+/tests/bugs/issue-155/Issue155
+/tests/bugs/issue-155/Issue155.hs
+/tests/bugs/issue-152/Issue152.hs
+/tests/bugs/issue-155/Types.hs
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,30 @@
+env:
+  global:
+    - AWS_ACCESS_KEY_ID=AKIAIKUEH2ETWTBS2CKQ
+    - secure: "Jzawnhgk3dX2INzbZIlnHCH+aKWqy96B9T1hzBh/Fqp4whglaZDO0mTLHQnhypqAt1rXO2o3yBNcKgGOcgfUuE71uBCzzaXieB0p8BhYn7cwYeANbuKNOGrsP6oDutS5F57FNWwgRp+2oanpgJNOs/6wvfElA7W6ibN8tZiLQrw="
+  matrix:
+    - GHCVER=7.10.3
+
+before_install:
+ - travis_retry sudo add-apt-repository -y ppa:hvr/ghc
+ - travis_retry sudo apt-get update
+ - travis_retry sudo apt-get install libnetcdf-dev libgsl0-dev liblapack-dev
+ - travis_retry sudo apt-get install cabal-install-1.24 ghc-$GHCVER-prof ghc-$GHCVER-dyn happy
+ - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/1.24/bin:$PATH
+
+install:
+  - sudo apt-get update -qq
+  - sudo pip install awscli
+  - cabal update
+  - |
+    if [ $GHCVER = "head" ] || [ ${GHCVER%.*} = "7.8" ] || [ ${GHCVER%.*} = "7.10" ]; then
+      travis_retry sudo apt-get install happy-1.19.5 alex-3.1.7
+      export PATH=/opt/alex/3.1.7/bin:/opt/happy/1.19.5/bin:$PATH
+    else
+      travis_retry sudo apt-get install happy alex
+    fi
+  - cabal install --only-dependencies --enable-tests -fregression
+
+script:
+  - cabal install && cabal configure --enable-tests -fregression && cabal build && cabal test
+  - ./dist/build/regression-suite/regression-suite
diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,5 @@
+0.28.3
+ - Switch to language-c 0.7.1 [#192]
 0.28.2
  - Switch to language-c 0.6 [#176]
 0.28.1
diff --git a/ChangeLog.CTKlight b/ChangeLog.CTKlight
new file mode 100644
--- /dev/null
+++ b/ChangeLog.CTKlight
@@ -0,0 +1,465 @@
+2005-05-18  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* Makefile: Evil Hack to be able create base.build.conf before
+	building `libctk.a'
+
+2005-05-18  André Pang  <ozone@algorithm.com.au>
+
+	* Adaptation to GHC 6.4 and the Cabal package system
+
+2005-05-18  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* admin/BaseVersion.hs (versnum): 0.27.0
+
+2004-05-15  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* configure.in: Using `egrep' is available (as grep on SunOS
+	doesn't handle regular expressions) noticed by Matthias Neubauer
+	<neubauer@informatik.uni-freiburg.de>
+
+	* syntax/Parsers.hs (execParser): Added a token mapping as an
+	extra argument
+
+2003-10-19  Manuel M T Chakravarty  <chak@cse.unsw.edu.au>
+
+	* configure.in: Support for Mac OS X by Sean Seefried
+	<sseefried@cse.unsw.edu.au>
+
+2003-10-19  Manuel M T Chakravarty  <chak@cse.unsw.edu.au>
+
+	* sysdep/Makefile: Posix (and hence, `runPiped') support disabled,
+	as `runPiped' (1) isn't really used at the moment, (2) should be
+	rewritten anyway, and (3) breaks with GHC 6.3 as the signature of
+	`forkProcess' changed.
+
+	* admin/BaseVersion.hs (versnum): 0.26.0
+
+2003-06-10  Manuel M T Chakravarty  <chak@cse.unsw.edu.au>
+
+	* ../mk/common.mk (MKDEPENDFILES): defined ghc6
+
+	* syntax/Makefile (RANK2): defined ghc6
+
+	* sysdep/Makefile (SRCS): defined SysDepGHC6.hs as an alias for
+	SysDepGHC4.hs
+
+	* admin/BaseVersion.hs (versnum): 0.25.1
+
+2003-03-13  Manuel M T Chakravarty  <chak@cse.unsw.edu.au>
+
+	* general/Sets.hs (domSetFM): added
+
+	* general/FiniteMaps.hs (domFM): added
+	(imageFM): added
+
+	* admin/BaseVersion.hs (versnum): 0.25.0
+
+2003-02-12  Manuel M T Chakravarty  <chak@cse.unsw.edu.au>
+
+	* general/UNames.hs: we derive `Show Name' explicitly to print the
+	number only
+
+2003-02-05  Manuel M T Chakravarty  <chak@cse.unsw.edu.au>
+
+	* general/FileOps.hs (mktemp): added
+
+2003-02-01  Manuel M T Chakravarty  <chak@cse.unsw.edu.au>
+
+	* ../common.mk: I wasn't careful when removing the ability (for
+	the user) to invoke make in the part directories and hence the
+	ability to check dependencies in these directories.  As a result,
+	recursive invocations of make tried to check dependencies in part
+	directories and erroneously decided that the target is alreasy up
+	to date.  Now the object file are removed before descending into
+	the recursive make.
+
+	* ../common.mk (gendepend): remove $(DEPEND) first
+
+	* admin/BaseVersion.hs (versnum): 0.24.3
+
+2002-09-16  Manuel M T Chakravarty  <chak@AttitudeAdjuster>
+
+	* Makefile (libctk.o): generating library for GHCi
+
+2002-09-06  Manuel M T Chakravarty  <chak@AttitudeAdjuster>
+
+	* Makefile (OBJS): excluded state/DynArrays.o from the target
+	objects for nhc98 (as it chokes on that module)
+
+2002-05-16  Manuel M T Chakravarty  <chak@cse.unsw.edu.au>
+
+	* changed name if base package to `ctk' to not clash with GHC's
+	new package naming scheme
+
+	* admin/BaseVersion.hs (versnum): 0.24.2
+
+2002-03-22  Manuel M T Chakravarty  <chak@cse.unsw.edu.au>
+
+	* ../configure.in: test for availability of the `posix' package
+	made more reliable
+	
+	* admin/BaseVersion.hs (versnum): 0.24.1
+
+2002-03-12  Manuel M T Chakravarty  <chak@cse.unsw.edu.au>
+
+	* Makefile: revised to new build system
+
+	* admin/BaseVersion.hs (versnum): 0.24.0
+
+2002-03-06  Manuel M T Chakravarty  <chak@cse.unsw.edu.au>
+
+	* general/Sets.hs (isSuperSet): cut'n'pasto
+
+2002-03-05  Manuel M T Chakravarty  <chak@cse.unsw.edu.au>
+
+	* Makefile: fixed libctk.a target
+
+	* ../configure.in: make sure to include the posix package only for
+	GHC (and not for nhc98)
+
+	* admin/BaseVersion.hs (versnum): 0.23.1
+
+2002-02-11  Manuel M T Chakravarty  <chak@cse.unsw.edu.au>
+
+	* Makefile: we are now creating a library archive to use packages
+
+2002-02-10  Manuel M T Chakravarty  <chak@cse.unsw.edu.au>
+
+	* ../mk/common.mk: added package support
+
+	* ../configure.in: added package support; replaced -syslib by -package
+
+	* admin/BaseVersion.hs (versnum): 0.23.0
+
+2002-01-06  Manuel M T Chakravarty  <chak@cse.unsw.edu.au>
+
+	* common.mk: removed TMP as it causes problems on cygwin as
+	reported by Karl M. Syring <syring@web.de>
+
+	* admin/BaseVersion.hs (versnum): 0.22.5
+
+2001-09-26  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* general/UNames.hs: nhc98 1.08 doesn't grok deriving Ix
+
+	* ../configure.in: better support for nhc98 
+
+	* admin/BaseVersion.hs (versnum): 0.22.4
+
+2001-05-20  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* state/CIO.hs (doesFileExistCIO): added by Axel Simon <simona_@web.de>
+
+2001-05-13  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* Makefile (spotless): remove config.cache
+
+2001-04-21  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* ../configure.in: Adapted to support ghc 5.x and removed support
+	for ghc 3.x
+
+	* admin/BaseVersion.hs (versnum): 0.22.3
+
+2000-10-05  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* ../configure.in: uses the fptools macro for determining ghc's
+	version number
+
+2000-10-02  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* errors/Errors.hs (showError): special handling of internal positions
+
+	* admin/Common.hs: added internal positions
+
+	* admin/BaseVersion.hs (versnum): 0.22.2
+
+2000-09-15  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* ../configure.in: corrected ghc version number extraction to
+	correctly handle patch levels; added happy - most have gone lost
+	earlier...
+
+2000-09-12  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* syntax/Pretty.hs (<>): debugged
+
+2000-09-11  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* syntax/Pretty.hs (Pretty): type class for pretty printing
+	(infixOp): added
+	(usedWhen): added
+	(punctuate): added
+	(dot): added
+
+	* admin/BaseVersion.hs (versnum): 0.22.1
+
+2000-09-07  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* syntax/Pretty.hs: Revision of the interface; the interface is
+	now 90% compatible to SimonPJ's `Pretty' module; debugging
+	(fullRender): dropping leading '\n's
+	some more combinators
+
+	* admin/BaseVersion.hs (versnum): 0.22.0
+
+2000-09-03  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* admin/Common.hs (tabPos): Roman pointed out that tab stops
+	should be at 1, 9, ... rather than 0, 8, ...
+
+2000-09-02  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* admin/BaseVersion.hs (versnum): 0.21.1
+
+2000-08-18  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* sysdep/Makefile: Moved the posix stuff into an extra module,
+	which can be enabled individually
+
+	* ../configure.in: CygWin support; based on suggestions by Anibal
+	Maffioletti Rodrigues de DEUS <anibaldedeus@email.com>
+
+	* ../configure.in: uses -silent on lndir only if supported (isn't
+	supported before X11R6, says Jan Kort <kort@wins.uva.nl>)
+
+	* admin/BaseVersion.hs (versnum): 0.21.0
+
+2000-08-08  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* syntax/Lexers.hs: Changed the associativity of `quest`, `star`,
+	and `plus`.  This change was suggested by Martin Norbäck
+	<d95mback@dtek.chalmers.se>.
+
+	** WARNING **  This change may break some existing code!!!
+
+2000-06-19  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* admin/BaseVersion.hs (versnum): 0.20.2
+
+2000-04-06  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* ../configure.in: -fasm-x86 is used only if --with-ghc-native is given
+
+	* general/Sets.hs (powerSet): impl
+
+2000-04-05  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* general/Sets.hs: derived Eq and Ord for FMs, which allows sets
+	of sets and added `isSubSet' and `isSuperSet'
+
+	* general/FiniteMaps.hs: derived Eq and Ord for FMs
+
+	* admin/BaseVersion.hs (date): 0.20.1
+
+2000-03-04  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* ../configure.in: fixes re compiler & option selection
+
+2000-03-01  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* ../mk/common.mk: fixed dependency computations
+
+	* ../configure.in: polished; on Linux, uses native code generator
+	when compiling with GHC 4.0x, x >= 7
+
+2000-02-27  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* syntax/Parsers.hs: table handling substantially rewritten to
+	improve the space behaviour
+
+	* general/Utils.hs: `Tag' class
+
+	* admin/BaseVersion.hs (versnum): 0.20.0
+
+2000-02-23  Manuel M. T. Chakravarty  <chak@cse.unsw.edu.au>
+
+	* ../mk/config.mk.in: set correct access modes in INSTALL_DATA
+
+1999-12-06  Manuel M. T. Chakravarty  <chak@is.tsukuba.ac.jp>
+
+	* graphs/Marks.hs: newly implemented
+
+	* admin/BaseVersion.hs (versnum): 0.19.1
+
+1999-12-03  Manuel M. T. Chakravarty  <chak@is.tsukuba.ac.jp>
+
+	* syms/Attributes.hs: instance Ord Attrs
+
+1999-12-02  Manuel M. T. Chakravarty  <chak@is.tsukuba.ac.jp>
+
+	* sysdep/SysDepNHC1.hs: debugging
+
+1999-12-01  Manuel M. T. Chakravarty  <chak@is.tsukuba.ac.jp>
+
+	* ../configure.in,../mk/common.mk: better dependency tool computation
+
+	* syms/Idents.hs: uses `Attributed'
+
+	* syms/Attributes.hs: `Attributed' type class, as suggested by
+ 	Roman Lechtchinsky
+
+	* admin/BaseVersion.hs (versnum): 0.19.0
+
+	* sysdep/SysDepNHC1.hs: Started the system dependent module for
+	nhc98 with assistance from Malcolm Wallace
+
+1999-11-30  Manuel M. T. Chakravarty  <chak@is.tsukuba.ac.jp>
+
+	* state/StateTrans.hs: Adapted to new names in mutable variables API
+
+	* general/UNames.hs: Adapted to new names in mutable variables API
+
+	* sysdep/SysDepGHC3.hs: adapted to new names of exported entities
+
+	* sysdep/SysDepGHC4.hs: Cleaned up; no GHC internal stuff is used
+	anymore (some of the names of exported entities changed!)
+
+	* sysdep/Makefile: Added support for nhc98
+
+	* ../configure.in & friends: Added support for nhc98
+
+	* admin/BaseVersion.hs (versnum): 0.18.2
+
+1999-11-17  Manuel M. T. Chakravarty  <chak@is.tsukuba.ac.jp>
+
+	* ../mk/config.mk.in: introduced `docdir' and `pkgdocdir'
+	
+	* Make system debianised, according to the suggestions and the
+ 	patches of Michael Weber <michael.weber@Post.RWTH-Aachen.DE>
+
+	* admin/BaseVersion.hs (versnum): 0.18.1
+
+1999-11-07  Manuel M. T. Chakravarty  <chak@is.tsukuba.ac.jp>
+
+	* general/FileOps.hs (fileFindIn): debugged
+
+1999-11-06  Manuel M. T. Chakravarty  <chak@is.tsukuba.ac.jp>
+
+	* general/FileOps.hs: new module; implemented `fileFindIn'
+
+	* general/FNameOps.hs (addPath): added
+
+	* admin/BaseVersion.hs (versnum): 0.18.0
+
+1999-10-29  Manuel M. T. Chakravarty  <chak@is.tsukuba.ac.jp>
+
+	* admin/BaseVersion.hs (versnum): 0.17.17; fully modularised the
+	make system
+
+1999-10-25  Manuel M. T. Chakravarty  <chak@is.tsukuba.ac.jp>
+
+	* state/CIO.hs (removeFileCIO): added
+
+	* admin/BaseVersion.hs (versnum): 0.17.16
+
+1999-10-24  Manuel M. T. Chakravarty  <chak@is.tsukuba.ac.jp>
+
+	* syms/NameSpaces.hs (nameSpaceToList): added
+
+	* admin/BaseVersion.hs (versnum): 0.17.15
+
+1999-10-21  Manuel M. T. Chakravarty  <chak@is.tsukuba.ac.jp>
+
+	* syms/Idents.hs (isLegalIdent): corrected `checkTail' - thanx Sven
+
+1999-10-16  Manuel M. T. Chakravarty  <chak@is.tsukuba.ac.jp>
+
+	* syms/NameSpaces.hs (defLocal): uses `defGloal' if there is no
+	local range
+
+	
+Pre GNU-style change log
+------------------------
+
+0.17.13
+~~~~~~~
+09Oct99 Debugging
+
+0.17.12
+~~~~~~~
+27Sep99 `CIO.systemCIO'
+26Sep99 Debugging and some more clean up of `Lexers'
+25Sep99 Some convenience function on `Position's in `Common'
+23Sep99 Added `\v' to the control lexer
+
+0.17.11
+~~~~~~~
+22Sep99 Optimised and extended `Lexers' (meta actions can now return tokens or 
+	error messages); prepared the first separate distribution of CTKlight
+21Sep99 Debugged `Lexers'
+
+0.17.10
+~~~~~~~
+29Aug99 Added `Utils.lookupBy'
+
+0.17.9
+~~~~~~
+22Aug99 Throughly revised `Lexers' (according to SPJ's suggestions)
+12Aug99 Revised `Lexers.execLexer' (returns final state, changed semantics
+	of meta actions slightly, and structure simplified)
+
+0.17.8
+~~~~~~
+30Jul99 Clarified `NameSpaces'
+19Jul99 Using Roman's `Parsers.seplist1'
+
+0.17.7
+~~~~~~
+05Jul99 `Lexers' exports `ctrlLexer'
+
+0.17.6
+~~~~~~
+07Jun99 Small additions to `Idents'
+03Jun99 Small additions to `Attributes'
+
+0.17.5
+~~~~~~
+05Apr99 Configurable makefile variables from common.mk into new config.mk
+02Apr99 Small bug fixes
+31Mar99 `Parsers': Support for parsing prefixes
+30Mar99 Bug fixes (incl. `Parsers.sep')
+
+0.17.4
+~~~~~~
+13Mar99 Added meta actions to `Parsers'
+12Mar99 Revised for GHC 4.02 and Haskell 98
+11Mar99 Extension of parser library with threaded state
+04Mar99 Self-optimizing lexer library for regular expressions
+27Feb99 Self-optimizing LL(1) parser library a la Swierstra/Duponcheel 
+
+0.16.0
+~~~~~~
+11Feb99 `Idents.cloneIdent' & standard attributes in `Attributes'
+
+0.15.0
+~~~~~~
+02Feb99 `Set' module
+
+0.14.2
+~~~~~~
+23Jan99 `Ident' got an instance for `Show'
+
+0.14.1
+~~~~~~
+01Dec98 Extracted mk/dhc.mk and mk/nepal.mk from mk/common.mk
+
+0.14.0
+~~~~~~
+13Nov98 Rewrote `CST' into `PreCST' that provides an extra state (part of the
+	base state) that can be instantiated by an client compiler using the
+	Toolkit.  As a consequence, `state/Switches' can be moved into DHC.
+
+0.13.0
+~~~~~~
+10Nov98 admin/Version.hs
+
+0.12.0
+~~~~~~
+19Oct98 Added Sven Panne's `GetOpt' to general/
+
+0.11.1
+~~~~~~
+23Sep98	Completely overhauled Makefile system.
+
+29Jul98	Finished extraction from what was originally called the HiPar toolkit.
diff --git a/README.CTKlight b/README.CTKlight
new file mode 100644
--- /dev/null
+++ b/README.CTKlight
@@ -0,0 +1,80 @@
+		       Compiler Toolkit - Light			     -*-text-*-
+		       ========================
+
+Contents:
+
+  README.CTKlight -- This file
+  LICENSE.LIB	  -- GNU Library General Public License (LGPL)
+  BaseVersion.hs  -- Version, copyright, and disclaimer
+  Config.hs	  -- Configuration module
+  Common.hs	  -- Basic definitions, such as representation of positions
+  DLists.hs	  -- Difference lists - provide O(1) append
+  Errors.hs	  -- Types and functions for error handling
+  FNameOps.hs	  -- Common operations on file names
+  FiniteMaps.hs	  -- Finite maps based on 2-3 trees
+  GetOpt.hs	  -- Sven Panne's Haskell version of the GNU getopt library
+  Lexers.hs	  -- Self-optimising lexer combinators
+  Parsers.hs	  -- Self-optimising parser combinators
+  Pretty.hs	  -- Pretty printing combinators (the interface is essentially
+		     a superset of SimonPJ's pretty printing library)
+  Sets.hs	  -- Sets as an instance of the above mentioned finite maps
+  Utils.hs	  -- Utility routines
+
+The Compiler Toolkit Light (CTKlight) is a subset of the Compiler Toolkit
+(CTK) - an infrastructure for writing compilers in Haskell.  CTKlight
+essentially provides support for implementing syntactical analysis without the
+more heavy-weight state management (like compiler switches, global error pool,
+and exceptions), identifier and attribute management, and various other
+utilities included in the full CTK.  Both packages can be obtained from
+
+  http://www.cse.unsw.edu.au/~chak/ctk/
+
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- BUILDING -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+In contrast to full CTK, CTKlight is simply a set of Haskell modules without
+any complicated makefile structure.  The code is Haskell 98 compliant with the 
+exception that `Parser.hs' makes use of existentially quantified type
+variables - unfortunately, I do not believe that the same method of
+self-optimisation would work without existential types.
+
+The modules are tested with
+
+* GHC 4.02 and upwards (use `-fglasgow-exts' to compile `Parsers.hs') and
+* Hugs98 (use `-98' when using `Parsers.hs').
+
+If you want autoconf, a ready-made makefile structure, and much more
+additional library functionality, then use full CTK.
+
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- COPYLEFT -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+This library is free software; you can redistribute it and/or modify it under
+the terms of the GNU Library General Public License as published by the Free
+Software Foundation; either version 2 of the License, or (at your option) any
+later version.
+
+This library is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE.  See the GNU Library General Public License for more
+details.
+
+You should have received a copy of the GNU Library General Public License
+along with this system; if not, write to the Free Software Foundation, Inc.,
+675 Mass Ave, Cambridge, MA 02139, USA.
+
+Note: In essence this means that you can use this library in any program
+      whether it is free or proprietary.  However, if you modify or extend the
+      library itself, you are bound to distribute these modifications or
+      extensions according to the terms and conditions of the LGPL.  For
+      details consult the license itself, which is located in the file
+      `LICENSE.LIB'.
+
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- CREDITS -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+Author & Maintainer: Manuel M. T. Chakravarty <chak@cse.unsw.edu.au>
+
+Thanks to Simon L. Peyton Jones <simonpj@microsoft.com> and Roman Lechtchinsky
+<wolfro@cs.tu-berlin.de> for their helpful suggestions that improved the
+design and implementation of the `Lexers' module.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,35 @@
+[![Build Status](https://travis-ci.org/haskell/c2hs.svg?branch=master)](https://travis-ci.org/haskell/c2hs)
+
+`c2hs` is a interfacing tool that eases Haskell access to C libraries.
+The tool gets information about the C data type definitions and
+function signatures by analysing the C header files of the library.
+It uses this information to compute the missing details in the
+template of a Haskell module &mdash; called the binding file &mdash;
+that implements a Haskell binding to the C library.  Hooks embedded in
+the binding file signal where, which, and how C objects are accessed
+from Haskell.  The Haskell code in the binding file determines Haskell
+types signatures and marshaling details.
+
+Further information is on the
+[wiki](https://github.com/haskell/c2hs/wiki/Home).  Also see the
+[user guide](https://github.com/haskell/c2hs/wiki/User-Guide) (also
+available in the `doc` directory of the repository).
+
+
+## Installing
+
+To install `c2hs` from Hackage:
+
+    cabal install c2hs
+
+If you like to build from the GitHub repository, see the file
+`INSTALL`.  See the `REGRESSION-SUITE` file for a description of how
+to run the regression suite for checking C2HS performance against
+existing Haskell packages that use it.
+
+
+## License
+
+All code **generated by** `c2hs` is under a BSD licence. Hence, `c2hs` is useful for both open and closed source projects.
+
+The tool itself is released under the GPLv2. This is the same situation as for the GNU C Compiler. For details, see the file `COPYING`.
diff --git a/REGRESSION-SUITE b/REGRESSION-SUITE
new file mode 100644
--- /dev/null
+++ b/REGRESSION-SUITE
@@ -0,0 +1,50 @@
+                        C2HS REGRESSION SUITE
+                        ~~~~~~~~~~~~~~~~~~~~~
+
+C2HS is flexible enough that it's difficult to write a test suite that
+covers all the cases of interest to users.  As well as a general test
+suite and tests for individual issues, it makes sense to test for C2HS
+regressions by installing a range of packages that use C2HS.
+
+The regression suite is managed as a single Cabal test suite called
+regression-suite.  This reads a YAML configuration file giving a list
+of packages to test against.  The test suite succeeds if a "cabal
+install" of each of the test packages succeeds without error, using
+the current version of C2HS.
+
+This process requires care for two reasons:
+
+ 1. Because C2HS is an FFI tool, packages that use C2HS almost always
+    have dependencies on external libraries, so writing a simple test
+    suite is not straightforward.
+
+ 2. It's undesireable to install a whole set of Haskell packages for
+    C2HS regression testing into the user's environment.
+
+To handle these two issues, the regression-suite test suite behaves as
+follows:
+
+ ON TRAVIS
+
+  - Always run the regression suite.
+
+  - Install all library dependencies before attempting to install
+    Haskell packages.  These dependencies are given in the regression
+    suite configuration file as lists of APT package names, optionally
+    with PPAs to install them from, or as lists of shell commands to
+    use to install the dependencies.
+
+ ON NON-TRAVIS SYSTEMS
+
+  - Only run the regression suite if the C2HS_REGRESSION_SUITE
+    environment variable is defined.
+
+  - Assume that all C library dependencies are already installed.
+
+  - Set Cabal flags from environment variables called
+    C2HS_REGRESSION_FLAGS_<package> if these variables exist.
+
+
+The idea is to test for regressions under well-controlled conditions
+at each commit on Travis, but maintain the possibility of running the
+regression suite locally as well.
diff --git a/TODO b/TODO
new file mode 100644
--- /dev/null
+++ b/TODO
@@ -0,0 +1,289 @@
+								     -*-text-*-
+                                C2HS TODO
+                                =========
+
+Next: - enum hooks should define cFromEnum/cToEnum as the default marshallers
+       (see comment at GenBind.lookupDftMarshIn).
+
+      - Especially with function hooks, it is not sufficient to emit line
+	pragmas whenever a new CHS fragment starts.  As some hooks expand to
+	multiple lines of Haskell code, we need to reemit the line number of
+	the hook once for each line of Haskell generated from it.
+
+      - Points raised by PeteG:
+	* The initial comment put by c2hs shouldn't be put in the first line,
+	  as this makes it difficult to add {-# OPTIONS #-} pragma to the .chs
+	  file, as this pragma must be in the first line.
+
+          The only sensible solution seems to be to copy the first line of the
+          .chs file on top if it starts with the string "{-# OPTIONS".
+
+      - Ian requests {#const SYM#} where SYM is a pre-preprocessor symbol to 
+        evaluate to the C value of SYM.  Main problem is that the value might
+        be of various C types.
+
+      - Tutorial
+
+      - GenBind.setGet: How is it justified that `bitsPerField' is
+        fixed to the size of `CInt'?  Does the C def guarantee
+	that bitfields types are of the same size?
+
+      Next Major feature to be added: structure marshalling.
+
+      - the `hsverb' should be normalised with respect to white space and
+        parenthesis 
+
+      - have an option to compute .chi dependencies; do this on a
+        module-by-module basis generating many small depend files rather than
+        one big one
+
+      - Pending suggestions from Axel Simon:
+	+ succ/pred definitions for enum hooks
+
+      - marshalling of structs
+
+      - We need to handle the time stamps of .chi files more carefully;
+        otherwise, we often get lots of unnecessary re-runs of c2hs.
+
+      - Conceptual problem with import hooks: Currently, everything imported
+        from a .chi file by a binding module is also dumped into its own .chi
+        file.  Is is not generally correct, but it would also not be correct
+        to omit everything that has been imported.  The conceptually correct
+        solution would be to dump an entry for a type into a .chi file if the
+        corresponding Haskell type is exported by the binding module.  To
+        achieve this, we would also need an export hook.  Moreover, we may
+        import the same object from different modules, due to an implicit
+        reexport at the moment.  Either eliminate those reexports, or we have
+        the same problems as in Haskell to determine object identity.
+
+      - c2hs has to properly process GNU C "aligned" attributes.  Otherwise,
+        it's routine to calculate structure layout may deviate from that of
+        the C compiler, which may lead to nasty bugs in bindings.
+
+      - the use of get/set hooks with `class'ed newtypes is complicated, as
+        the type doesn't match `Ptr a'; see, eg, `GtkCList.cListGetNoOfRows'
+
+      - class methods should be able to get user-defined names (needed for
+        GtkData.chs)
+
+      - GenBind.mergePtrMap could be improved (see the comment)
+
+      - {#enum ...#} should create an instance of Storable as follows:
+	  instance Storable MyEnum where
+	    sizeOf    _ = sizeOf    (undefined :: CInt)
+	    alignment _ = alignment (undefined :: CInt)
+
+	    peek p   = liftM cToEnum $ peek (castPtr p :: Ptr CInt)
+	    poke p v = poke (castPtr p :: Ptr CInt) (cFromEnum v)
+
+      - `GenBind.setGet' needs to take `C2HSConfig.bitfieldDirection' into
+        account; otherwise, setting and getting of bitfields won't work on
+        architectures where bitfields start at the MSB (rather than the LSB)
+
+      - Vorschlag von Axel Krauth <krauth@infosun.fmi.uni-passau.de>:
+        An option with which c2hs prints a list of all functions that have not
+        been bound in a header file.  The Position info schould be sufficient
+        to determine this.  Maybe also add {#ignore foo#}, which makes it not
+        list a given identifier (for private functions listed in the header).
+      - In `GdkGL.chs', the prefix is not properly removed from the
+        constructors of `GdkGL.Configs'; same problem with
+        `GdkEvents.EventType'
+      - install the executable (c2hs and c2hs-config) with a version number
+        suffix and make a symbolic link for the name without version number
+        (makes installing multiple versions easier)
+      - #define enum's (see below)
+      - intro a safe flag (as opposite to unsafe, but make safe the default)
+      - overload stdAddr etc for ForeignObj (stable ptr & cast)
+      - C2HSMarsh: from qrczak@knm.org.pl (Marcin 'Qrczak' Kowalczyk)
+	  mallocForeignObj:: Int -> IO ForeignObj     -- malloc + freeing finalizer
+      - C2HSMarsh: 
+	  (!!!)   :: FromAddr a => Ptr a -> Int -> IO a
+	  p !!! i  = do
+		       v <- fixIO $ deref (p `plusAddr` sizeof v * i)
+		       return v
+          (Use in GdkColor, then)
+	  Part of New FFI, so use that in GdkColor!
+      - C2HSMarhs:
+	for compound structures it is inconvenient that in a pointer-based
+        out, an initial value is needed; thus
+	  out   :: (Storable a, FromAddr a) => a -> Marsh a Addr
+	  out x  = malloc x :> addrStd
+	and this is also convenient
+	  inp   :: ToAddr a => a -> Marsh () Addr
+	  inp x  = stdAddr x :> free
+        Axel also proposes this
+	  byValue :: b -> Marsh () b
+	  byValue x = use x :> forget
+      - Axel suggests,
+	  2b. Automatisches Marshalling von Strukturen.
+	  Eigentlich müßte es doch möglich sein, automatisch Instanzen von
+	  Storable für Strukturen zu erstellen. Falls man mal einen generische
+	  Pointer hat, kann man ja mit der ... as ... Methode eigene
+	  Marshalling Funktionen zur Verfügung stellen. Oder habe ich da etwas
+	  grundsätzliches übersehen? 
+
+Short term
+~~~~~~~~~~
+* cpp directives on the very first line of the .chs file are ignored
+  because the lexer looks for \n#  This is very confusing to users.
+
+* The C99 spec says (sec. 6.7.2.1):
+
+       [#4] Each  enumerated  type  shall  be  compatible  with  an
+       integer     type.      The     choice     of     type     is
+       implementation-defined   but   shall   be   capable   of
+       representing  the  values  of  all  the   members   of   the
+       enumeration. [...]
+
+  Hence, c2hs has to be a bit more clever about determining the integral type
+  used to represent an enum.
+
+* The definition of `GenBind.HsObjectMap' doesn't take into account that in
+  Haskell a single name can be used for both a type and a class.
+
+* See FIXME at `GenBind.mergeMaps'.
+
+* Explain the grabbing of cpp -I options from -cppopts= (aka -C) values better 
+  in the docu and add something like:
+
+    I prefer that to giving an option to c2hs and passing it to
+    cpp, because - as you say - you usually already have a
+    variable with the cpp options in your makefile and this way
+    you can easily reuse it.
+
+* #define enums in C: siehe unten - scheinen aber wichtig
+
+* In pointer hooks after a `->', we currently allow only type identifiers;
+  other forms of Haskell types would be nice, too (especially, `()').
+
+* A function prototype that uses a defined type on its left hand side may
+  declare a function, while that is not obvious from the declaration itself
+  (without also considering the `typedef').  This is not understood by
+  `GenBind' so far.
+
+* Why is a stable name an `unsigned long' in C land?  How about a `void *' and 
+  being able to get the `Addr' also in Haskell land?
+
+* if in a binding file erroneously `t->m' is used instead of `t.m' and `t' is
+  the tag of a struct, the error message just complains that there is no type
+  object for called `t'; it would be more user friendly to report in addition
+  that the tag `t' exists, but cannot be used in this expression
+
+* Should it be possible to specify a calling convention in context hook?
+  Isn't it a mitake to have explicit calling convention in the FFI?  Shouldn't 
+  that be adapted automatically depending on the target architecture?
+
+* Sven: How about exporting Haskell functions (also dynamic export)?
+  - callback registration function that explicitly have the type of the
+    callback function (from which we might want to generate a foreign export
+    dynamic). 
+
+* `mapM raise errs' in `lexC' increases the heap usage by a factor of _8_ when 
+  running the lexer alone on `gtkext.h' - probably because the whole analysis
+  has to be completed before we can be sure to have no error (and this kills
+  an interlocked produced/consumer scheme for the lexer and whatever function
+  is consuming the tokens).
+
+* sizeof and type hooks do only allow defined, but not basic types as
+  arguments.  This is not a real problem as C2HS provides all the needed
+  information to circumvent such usage, but it would still be more elegant to
+  support basic types as arguments, too.
+
+Middle term
+~~~~~~~~~~~
+
+* A hook {#const <C expr>#} would be nice (as in hsc2hs).  Unfortunately, it
+  is not that easy to realise.  We need to parse the <C expr> in the binding
+  module.  Moreover, the main value of this would be when the <C expr> is
+  put into the C field together with `enum define' stuff, so that all
+  pre-processor symbols in it are resolved.  However, this can easily give us
+  C compiler errors.  A cheap way out would be {#const "C expr"#} to avoid
+  parsing the C expression, but then we can get even more errors during
+  compiling the C.
+
+* C->HS might get a lot easier to use by providing as optional marshalling
+  libraries modules that handle often occurring standard stuff like converting 
+  `time_t' to `CalendarTime' or handle sockets etc.  We would, then, probably
+  like to have a matching Posix or so library.
+
+------------ Pre-1.0 rewrite ---------------
+
+Problems:
+
+* There are some implicit requirements on the position of binding hooks, which
+  the tool doesn't really enforce: context must be first, context and enum may
+  only occur where a toplevel definition is allowed. (This should be checked
+  before `GenBind' is used.)  We can not really check that a hook is in a
+  position where a toplevel definition is allowed (without analysing
+  significant parts of the Haskell code), but we can at least guarantee that
+  these hooks occur in column position 0.
+
+* Sven: #define enums in C: Introduce (#enum define SomeEnum {...}#) hooks
+  that collect `#define' symbols into an enumeration type; see also
+  +haskell/4025.  One probem: If identifiers with the same lexeme as
+  `SomeEnum' or the enum members are already defined in the C header, we might 
+  get conflicts.
+
+  The problem of this approach is that if the macro expands to something that
+  is not a constant expression C, we will get error messages from the
+  preprocessor, which are strange to the user.
+
+  Further idea, Michael's: extensible enums
+
+  There are, however, a number of interesting options supported by gcc -E that
+  might make alternative solutions to the problem feasible.
+
+END of ----- Pre-1.0 rewrite ---------------
+
+* Do we like direct support for mapping complete structs (if they are
+  sufficiently wellbehaved?) into Haskell data structures - both by generating
+  the Haskell data type definitions and by generating a `cFrom<Struct>' and a
+  `cTo<Struct>' routine.  The latter would be generated as a cascade of field
+  hooks.  H/Direct's formal definition of structure marshalling might be
+  helpful here.
+
+* Support for evaluating constants is not complete yet.  In this context, it
+  should probably also be checked, when there are two overlapping tags in an
+  enum (this is allowed in C, but is problematic for marshaling). 
+
+* How about Hugs support?  Is it already possible with current Hugs?
+
+
+Release Checklist
+~~~~~~~~~~~~~~~~~
+
+(1) In root of working directory,
+
+      % make tar-c2hs
+
+(2) Compile the resulting source distribution with latest ghc stable release:
+
+      % tar xzf c2hs-x.y.z.tar.gz
+      % cd c2hs-x.y.z
+      % ./configure
+      % make
+
+(3) Install and regression testing:
+
+    - Installation procedure
+
+        % make install
+
+    - Tests in build/ghc?/c2hs/tests/ directory
+
+(4) Check documentation and add release notes
+
+(5) Extended build test: build with older stable release of ghc and with the
+    cvs version
+
+(6) Register CVS tags for CTK and C->HS (syntax: Release-c2hs_x_y_z)
+
+(7) Make newest `tar' and build rpm
+
+(8) Put tar.gz and rpm sources and binaries up on Web page
+
+(9) Optionally also release the current version of CTK
+
+(10) Update the documentation under the Web page's docu/ directory
+
+(11) Announce: haskell@haskell.org, freshmeat.net
diff --git a/TODO.CTKlight b/TODO.CTKlight
new file mode 100644
--- /dev/null
+++ b/TODO.CTKlight
@@ -0,0 +1,81 @@
+								     -*-text-*-
+			  Compiler Base TODO
+			  ==================
+
+Next: 
+
+
+Short Term:
+~~~~~~~~~~~
+* See general/UNames.hs for nhc98 induced ugliness; change when nhc98 is fixed
+
+* Lexers: For unicode `Char', we need to explicit support for positive and
+  negated ranges such as ['\0'..'\255'] and ['\0'..'\255'] \\ ['a'..'c'],
+  where the latter is usually written [^abc] (see the haskell-cafe
+  discussion).
+
+* Roman introduced the class `Printable'.  A general class based pretty-print
+  system would be nice.
+
+* Parsers: Roman had the idea of allowing boolean functions to disambiguate
+  the parse table where two rules cannot be distinguished by the usual LL
+  mechanism alone (see emails).
+
+* Identifiers in any of the intermediate languages that have the same lexeme as
+  a keyword or a predefined identifier should always been pretty-printed in
+  their quoted form.
+
+  Difficult to know for each IL which identifiers have to be treated specially.
+  We need a kind of IL-dependent exception list.
+
+Middle Term:
+~~~~~~~~~~~~
+* Use a different attribute mechanism.  The stuff started for the flatten
+  prototype looks quite promising.  Observations:
+
+  - Current hipar system with a unique in every node => makes it complicated
+    to construct/transform trees, as we always have to clone subtress in a
+    monad.
+  - GHC's system => when attributes of an identifier are updated, the
+    "new" identifiers have to substituted into all expression that contain
+    usage occurences.
+
+* Graph processing support: Does it need to be a new mechanism or can we
+  realise it via Attrs (what kind of generic functions could we provide).  One
+  possibility is the use of an `Bool' attribute used to implement fast sets
+  (eg, marking).  (If there is a lot of marking, we might want to realise
+  indexing with attributes via hashing to be able to work with sparse keys and 
+  to already have O(1) during attribute table construction.)
+
+* `FiniteMap' should be an instance of `Functior' with `fmap = mapFM'
+
+* configuration shouldn't be in
+
+* FNameOps, FileOps: Introduce an autoconf set variable that determines
+  whether "/" or "\" is used as a delimiter in paths
+
+* Lexers: * After a certain number of errors (say 50); abort lexing.
+
+* Parsers (maybe similar problem with Lexers): If the grammar is not LL(1), we 
+  just get an `ambiguous grammar' error message at runtime without any hint,
+  which part of the grammer might be ambiguous.  This is too hard to debug!
+
+* In the language-specific `XXXAttrs.hs' modules, the routines for handling 
+  the different on the attribute tables have always the same structure;  Only
+  the access to the `AttrXXX' datatype is different.  It should be possible to
+  generalize them.
+
+  Moreover, the `referring identifier information' is always needed and might
+  be generalized.
+
+* The handling of state could be improved by revising the state modules and
+  using constructor classes and monad transformers.
+
+  Currently, we only define the state type abstractly when generating a new
+  instance of `CST'.  This is in order to be able to use the generic
+  operations, such as I/O, also in the monad instance.  But this comprises the 
+  security of the monad encapsulation as also the generic functions that allow 
+  to extract and copy the state can be used.  Ideally, we want to lift generic 
+  operations like I/O automagically into the new monad and to protect it from
+  access to its state.  Furthermore, some support for stripping and attaching
+  of the type-tag (intro with `newtype') would be nice.
diff --git a/c2hs.cabal b/c2hs.cabal
--- a/c2hs.cabal
+++ b/c2hs.cabal
@@ -1,5 +1,5 @@
 Name:           c2hs
-Version:        0.28.2
+Version:        0.28.3
 License:        GPL-2
 License-File:   COPYING
 Copyright:      Copyright (c) 1999-2007 Manuel M T Chakravarty
@@ -112,7 +112,7 @@
 Executable c2hs
     Build-Depends:  base >= 2 && < 5,
                     bytestring,
-                    language-c >= 0.6 && < 0.7,
+                    language-c >= 0.7.1 && < 0.8,
                     filepath,
                     dlist
 
diff --git a/custom-setup.hs b/custom-setup.hs
new file mode 100644
--- /dev/null
+++ b/custom-setup.hs
@@ -0,0 +1,92 @@
+--
+-- This Cabal setup script should ONLY be used in cases WHERE:
+--
+--   the bare structure wrapper capability of C2HS is used (i.e. '%'
+--   characters on pointer type arguments in "fun" hooks);
+--
+-- AND
+--
+--   a version of Cabal is being used that does not allow
+--   preprocessors to specify extra C sources (versions of
+--   cabal-install <= 1.22.0.0).
+--
+-- Otherwise Cabal should be able to deal with the extra C sources
+-- itself.
+--
+-- If in doubt, ask...
+--
+
+module Main (main) where
+
+import Control.Exception (catch)
+import Control.Monad (forM)
+
+import Distribution.PackageDescription
+    (BuildInfo(..), Executable(..), Library(..), PackageDescription(..))
+import Distribution.Simple (UserHooks(..),
+                            defaultMainWithHooks, simpleUserHooks)
+import Distribution.Simple.LocalBuildInfo (LocalBuildInfo(..))
+import Distribution.Simple.Setup (BuildFlags)
+-- Test-suites require Cabal-1.10 or greater
+import Distribution.PackageDescription (TestSuite(..))
+-- Benchmarks require Cabal-1.14 or greater
+import Distribution.PackageDescription (Benchmark(..))
+
+import System.Directory (doesDirectoryExist, getDirectoryContents)
+import System.Exit (ExitCode)
+import System.FilePath ((</>), takeExtensions)
+
+main :: IO ()
+main = defaultMainWithHooks simpleUserHooks { buildHook = chsBuildHook }
+
+addCSources :: [FilePath] -> BuildInfo -> BuildInfo
+addCSources newSrcs bi@(BuildInfo { cSources = oldSrcs }) =
+  bi { cSources = newSrcs ++ oldSrcs }
+
+hasChsCExtension :: FilePath -> Bool
+hasChsCExtension file = takeExtensions file == ".chs.c"
+
+getRecursiveContents :: FilePath -> IO [FilePath]
+getRecursiveContents topdir = do
+    topdirExists <- doesDirectoryExist topdir
+    if (not topdirExists)
+       then return []
+       else do
+           names <- getDirectoryContents topdir
+           let properNames = filter (`notElem` [".", ".."]) names
+           paths <- forM properNames $ \name -> do
+               let path = topdir </> name
+               isDirectory <- doesDirectoryExist path
+               if isDirectory
+                  then getRecursiveContents path
+                  else return [path]
+           return (concat paths)
+
+chsBuildHook :: PackageDescription -> LocalBuildInfo -> UserHooks ->
+                BuildFlags -> IO ()
+chsBuildHook pd lbi uh bf = hook `catchExitCode` \_ -> hook
+  where
+    hook :: IO ()
+    hook = chsBuildHook' pd lbi uh bf
+
+    catchExitCode :: IO a -> (ExitCode -> IO a) -> IO a
+    catchExitCode = catch
+
+chsBuildHook' :: PackageDescription -> LocalBuildInfo -> UserHooks ->
+                 BuildFlags -> IO ()
+chsBuildHook' pd@(PackageDescription
+                   { library     = mbLib
+                   , executables = exes
+                   , testSuites  = tss
+                   , benchmarks  = bms
+                   })
+             lbi uh bf = do
+    let distBuildDir = buildDir lbi
+    chsCFiles <- fmap (filter hasChsCExtension) $
+                 getRecursiveContents distBuildDir
+    let pd' = pd { library     = fmap (\lib -> lib { libBuildInfo       = addCSources chsCFiles (libBuildInfo lib)      }) mbLib
+                 , executables = fmap (\exe -> exe { buildInfo          = addCSources chsCFiles (buildInfo exe)         }) exes
+                 , testSuites  = fmap (\ts  -> ts  { testBuildInfo      = addCSources chsCFiles (testBuildInfo ts)      }) tss
+                 , benchmarks  = fmap (\bm  -> bm  { benchmarkBuildInfo = addCSources chsCFiles (benchmarkBuildInfo bm) }) bms
+                 }
+    buildHook simpleUserHooks pd' lbi uh bf
diff --git a/examples/libghttpHS/Ghttp.chs b/examples/libghttpHS/Ghttp.chs
new file mode 100644
--- /dev/null
+++ b/examples/libghttpHS/Ghttp.chs
@@ -0,0 +1,326 @@
+--  GhttpHS: Haskell binding to the Gnome HTTP library		  -*-haskell-*-
+--
+--  Author : Manuel M. T. Chakravarty
+--  Created: 5 August 99
+--
+--  Copyright (c) [1999..2000] Manuel M. T. Chakravarty
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Library General Public
+--  License as published by the Free Software Foundation; either
+--  version 2 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Library General Public License for more details.
+--
+--- DESCRIPTION ---------------------------------------------------------------
+--
+--  The C library `libghttp' provides a set of common http functions needed at 
+--  the client and the server end of an http connection.  The Haskell binding
+--  is generated with the help of the C->Haskell tool - always modify the
+--  original .chs file, _not_ the generated .hs file.
+--
+--  This library is fully compliant with HTTP 1.1 as defined in the draft 5
+--  update of RFC 2068.  
+--
+--- DOCU ----------------------------------------------------------------------
+--
+--  language: Haskell 98 & C->HS binding hooks (v0.7.5)
+--
+--  ** Stylistic warning: In the definition of `CurrentStatus', the field
+--       labels do not contain the name of the data type to which they belong.
+--       This is _not_ good practice in larger interfaces, because in Haskell
+--       such field labels pollute the global name space.
+--
+--- TODO ----------------------------------------------------------------------
+--
+--  * When and by whom is the memory area passed to `ghttp_set_body' be freed; 
+--    how about the string returned from `ghttp_get_body'?
+--
+--  * Conversion of `time_t' misses for `parseDate'.
+--
+
+module Ghttp (Request, URI, Type(..), SyncMode(..), Status(..), Proc(..),
+	      CurrentStatus(..),
+	      requestNew, requestDestroy, uriValidate, setURI, setProxy,
+	      setType, setBody, setSync, prepare, setChunksize, setHeader,
+	      process, getStatus, getHeader, close, clean, getSocket, getBody, 
+	      getError, {-parseDate,-} setAuthinfo, setProxyAuthinfo)
+where
+
+-- C->HS marshalling library
+--
+import C2HS
+
+import Monad  (liftM, when)
+import IOExts (unsafePerformIO)
+
+
+{#context lib="libghttp" prefix="ghttp"#}
+
+
+-- data structures
+-- ---------------
+
+-- abstract handle for a http request object (EXPORTED ABSTRACTLY)
+--
+newtype Request = Request Addr
+
+-- Uniform Resource Indicators (EXPORTED)
+--
+type URI = String
+
+-- body type (EXPORTED)
+--
+{#enum ghttp_type as Type {underscoreToCase}#}
+
+-- synchronous/asynchronous mode (EXPORTED)
+--
+{#enum sync_mode as SyncMode {underscoreToCase}#}
+
+-- request status (EXPORTED)
+--
+{#enum status as Status {underscoreToCase}#}
+
+-- describes the activity of a request (EXPORTED)
+--
+{#enum proc as Proc {underscoreToCase}#}
+
+-- status descriptor (EXPORTED)
+--
+data CurrentStatus = CurrentStatus {
+		       proc       :: Proc,    -- What's it doing?
+		       bytesRead  :: Int,     -- How many bytes have been read?
+		       bytesTotal :: Int      -- How many bytes total?
+		     }
+
+-- error types
+--
+invalidURI, illegalRequest :: String
+invalidURI     = "Ghttp: The Uniform Resource Indicator is invalid."
+illegalRequest = "Ghttp: The request is illegal or unsupported."
+
+
+-- functions
+-- ---------
+
+-- create a new request object (EXPORTED)
+--
+requestNew :: IO Request
+requestNew  = liftM Request {#call unsafe request_new#}
+
+-- delete a current request object (EXPORTED)
+--
+requestDestroy                :: Request -> IO ()
+requestDestroy (Request reqa)  = {#call unsafe request_destroy#} reqa
+
+-- validate a uri (EXPORTED)
+--
+uriValidate     :: URI -> Bool
+uriValidate uri  = 
+  let res = unsafePerformIO $
+	     {#call unsafe uri_validate#} `marsh1_` (stdAddr uri :> free)
+  in
+  res == -1
+
+-- set a uri in a request (EXPORTED)
+--
+-- * raise an exception if the URI is not valid
+--
+setURI                    :: Request -> URI -> IO ()
+setURI (Request reqa) uri  = 
+  {#call unsafe set_uri#} reqa `marsh1_` (stdAddr uri :> free)
+  `ifNegRaise_` invalidURI
+
+-- set a proxy for a request (EXPORTED)
+--
+-- * raise an exception if the request is not valid
+--
+setProxy                    :: Request -> URI -> IO ()
+setProxy (Request reqa) uri  = 
+  {#call unsafe set_proxy#} reqa `marsh1_` (stdAddr uri :> free)
+  `ifNegRaise_` illegalRequest
+
+-- set a request type (EXPORTED)
+--
+-- * raise an exception if the request is not valid
+--
+setType                      :: Request -> Type -> IO ()
+setType (Request reqa) rtype  = 
+  {#call unsafe set_type#} reqa (cFromEnum rtype)
+  `ifNegRaise_` illegalRequest
+
+-- set the body (EXPORTED)
+--
+-- * raise an exception if the request is not valid
+--
+setBody                     :: Request -> String -> IO ()
+setBody (Request reqa) body  =
+  do
+    (box, len) <- listToAddrWithLen body
+    {#call unsafe set_body#} reqa box (cFromInt len)
+      `ifNegRaise_` illegalRequest
+
+-- set whether or not you want to use sync or async mode (EXPORTED)
+--
+-- * raise an exception if the request is not valid
+--
+setSync                      :: Request -> SyncMode -> IO ()
+setSync (Request reqa) smode  =
+  {#call unsafe set_sync#} reqa (cFromEnum smode)
+  `ifNegRaise_` illegalRequest
+
+-- Prepare a request; call this before trying to process a request or if you
+-- change the uri (EXPORTED)
+--
+-- * raise an exception if the request is not valid
+--
+prepare                :: Request -> IO ()
+prepare (Request reqa)  =
+  {#call unsafe prepare#} reqa
+  `ifNegRaise_` illegalRequest
+
+-- set the chunk size; you might want to do this to optimize for different
+-- connection speeds (EXPORTED)
+--
+setChunksize			 :: Request -> Int -> IO ()
+setChunksize (Request reqa) size  =
+  {#call unsafe set_chunksize#} reqa (cFromInt size)
+
+-- set a random request header (EXPORTED)
+--
+setHeader                        :: Request -> String -> String -> IO ()
+setHeader (Request reqa) hdr val  =
+  {#call unsafe set_header#} reqa
+    `marsh2_` (stdAddr hdr :> free)
+    $         (stdAddr val :> free)
+
+-- process a request (EXPORTED)
+--
+process                :: Request -> IO Status
+process (Request reqa)  = liftM cToEnum $ {#call unsafe process#} reqa
+
+-- get the status of a request (EXPORTED)
+--
+getStatus                :: Request -> IO CurrentStatus
+getStatus (Request reqa)  =
+  {#call unsafe ghttpHS_get_status #} reqa >>= cFromCurrentStatus
+
+-- get the value of a random response header (EXPORTED)
+--
+getHeader                    :: Request -> String -> IO String
+getHeader (Request reqa) hdr  =
+  {#call unsafe get_header#} reqa `marsh1_` (stdAddr hdr :> free)
+  >>= addrStd
+
+-- abort a currently running request (EXPORTED)
+--
+-- * raise an exception if the request is not valid
+--
+close                :: Request -> IO ()
+close (Request reqa)  = {#call unsafe close#} reqa
+			`ifNegRaise_` illegalRequest
+
+-- clean a request (EXPORTED)
+--
+clean                :: Request -> IO ()
+clean (Request reqa)  = {#call unsafe clean#} reqa
+
+-- get the socket associated with a particular connection (EXPORTED)
+--
+-- * raise an exception if the request is not valid
+--
+getSocket                :: Request -> IO Int
+getSocket (Request reqa)  = {#call unsafe get_socket#} reqa
+			    `ifNegRaise` illegalRequest
+
+-- get the return entity body (EXPORTED)
+--
+-- * this includes getting the length with `ghttp_get_body_len', as the string 
+--   is not necessarily \0 terminated
+--
+getBody                :: Request -> IO String
+getBody (Request reqa)  = 
+  do
+    bodyAddr <- {#call unsafe get_body#} reqa
+		`ifNullRaise` illegalRequest
+    bodyLen  <- {#call unsafe get_body_len#} reqa
+    addrWithLenToList bodyAddr (cToInt bodyLen)
+
+-- get an error message for a request that has failed (EXPORTED)
+--
+getError :: Request -> IO String
+getError (Request reqa)  = 
+  {#call unsafe get_error#} reqa >>= addrStd
+
+-- parse a date string that is one of the standard date formats (EXPORTED)
+--
+{-parseDate     :: String -> CalendarTime
+parseDate str  = 
+  do
+    time_t <- {#call unsafe parse_date#} `fromString` str
+    time <- toCalendarTime
+ -}
+
+-- return the status code (EXPORTED)
+--
+statusCode                :: Request -> IO Int
+statusCode (Request reqa)  = 
+  liftM cToInt $ {#call unsafe status_code#} reqa
+
+-- return the reason phrase (EXPORTED)
+--
+-- * raise an exception if the request is not valid
+--
+reasonPhrase                :: Request -> IO String
+reasonPhrase (Request reqa)  = 
+  ({#call unsafe reason_phrase#} reqa
+   `ifNullRaise` illegalRequest
+  ) >>= addrStd
+
+-- set your username/password pair (EXPORTED)
+--
+-- * raise an exception if the request is not valid
+--
+setAuthinfo                          :: Request -> String -> String -> IO ()
+setAuthinfo (Request reqa) user pass  =
+  ({#call unsafe set_authinfo#} reqa 
+     `marsh2_` (stdAddr user :> free)
+     $         (stdAddr pass :> free)
+  )
+  `ifNegRaise_` illegalRequest
+
+-- set your username/password pair for proxy (EXPORTED)
+--
+-- * raise an exception if the request is not valid
+--
+setProxyAuthinfo  :: Request -> String -> String -> IO ()
+setProxyAuthinfo (Request reqa) user pass =
+  ({#call unsafe set_proxy_authinfo#} reqa 
+     `marsh2_` (stdAddr user :> free)
+     $         (stdAddr pass :> free)
+  )
+  `ifNegRaise_` illegalRequest
+
+
+-- auxilliary marshalling function
+-- -------------------------------
+
+-- marshal the elements of a `ghttp_current_status' struct to Haskell land
+--
+-- * frees the C struct
+--
+cFromCurrentStatus       :: Addr -> IO CurrentStatus
+cFromCurrentStatus csPtr  = 
+  do
+    proc <- liftM cToEnum$ {#get current_status.proc#}        csPtr
+    read <- liftM cToInt $ {#get current_status.bytes_read#}  csPtr
+    total<- liftM cToInt $ {#get current_status.bytes_total#} csPtr
+    free csPtr
+    return $ CurrentStatus {
+	       proc       = proc,
+	       bytesRead  = read,
+	       bytesTotal = total
+	     }
diff --git a/examples/libghttpHS/Makefile b/examples/libghttpHS/Makefile
new file mode 100644
--- /dev/null
+++ b/examples/libghttpHS/Makefile
@@ -0,0 +1,46 @@
+#  GnomeHaskell bindings: Gnome HTTP library
+#
+#  Author : Manuel M. T. Chakravarty
+#  Created: 8 October 1999
+#
+#  Copyright (c) 1999 Manuel M. T. Chakravarty
+#
+#  This file is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This file is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  = DOCU =====================================================================
+#
+#  = TODO =====================================================================
+#
+#  * Let configure do the dirty work; how about automake
+
+# the commented out variants are to be used if the directory is moved out of 
+# the C->HS source tree
+#
+GHC=ghc
+#C2HS=c2hs
+C2HS=../../c2hs
+GHTTP_HEADER=ghttpHS.h
+#HCFLAGS=`c2hs-config --cflags`
+HCFLAGS=-i../../lib -fglasgow-exts
+
+OBJS=Ghttp.o ghttpHS.o
+
+Ghttp.hs: Ghttp.chs ghttpHS.h
+	$(C2HS) $(GHTTP_HEADER) Ghttp.chs
+
+Ghttp.o: Ghttp.hs ghttpHS.h
+	$(GHC) '-#include"ghttpHS.h"' $(HCFLAGS) -c $<
+
+ghttpHS.o: ghttpHS.h ghttpHS.c
+
+libghttpHS.a: $(OBJS)
+	-$(RM) $@
+	$(AR) -crs $@ $(OBJS)
diff --git a/examples/libghttpHS/ghttpHS.c b/examples/libghttpHS/ghttpHS.c
new file mode 100644
--- /dev/null
+++ b/examples/libghttpHS/ghttpHS.c
@@ -0,0 +1,22 @@
+/* Auxiliary C code for Ghttp.
+ *
+ * Copyright (c) 1999 Manuel M. T. Chakravarty
+ *
+ * This is required due to the inability of GHC's FFI to pass structures from C
+ * to Haskell.
+ */
+
+#include "ghttpHS.h"
+
+ghttp_current_status *ghttpHS_get_status (ghttp_request *a_request)
+{
+  ghttp_current_status *status;
+
+  status = (ghttp_current_status *) malloc (sizeof (ghttp_current_status));
+  if (!status) {
+    printf ("Ghttp: ghttpHS_get_status: Out of memory!");
+    exit (1);
+  }
+  *status = ghttp_get_status (a_request);
+  return status;
+}
diff --git a/examples/libghttpHS/ghttpHS.h b/examples/libghttpHS/ghttpHS.h
new file mode 100644
--- /dev/null
+++ b/examples/libghttpHS/ghttpHS.h
@@ -0,0 +1,21 @@
+/* Auxiliary C code for Ghttp.
+ *
+ * Copyright (c) 1999 Manuel M. T. Chakravarty
+ *
+ * This is required due to the inability of GHC's FFI to pass structures from C
+ * to Haskell.
+ */
+
+#ifndef __GHTTPHS_H__
+#define __GHTTPHS_H__
+
+
+#include <ghttp.h>
+
+/* returns a reference to a newly allocated memory area holding the result of 
+ * the corresponding vanilla `libghttp' function
+ */
+ghttp_current_status *ghttpHS_get_status (ghttp_request *a_request);
+
+
+#endif /* __GHTTPHS_H__ */
diff --git a/import-handling.md b/import-handling.md
new file mode 100644
--- /dev/null
+++ b/import-handling.md
@@ -0,0 +1,104 @@
+## Potentially breaking changes: import handling
+
+#### The problem
+
+Previous releases of C2HS had an annoying misfeature -- you had to
+manage the imports of Haskell library functions in C2HS-generated code
+yourself.  Suppose you had the following code in a `.chs` file:
+
+``` haskell
+#include "issue44.h"
+
+{#pointer *foo as ^ foreign newtype#}
+```
+
+where the contents of the `issue44.h` header are:
+
+``` c
+typedef struct { int a; } foo;
+```
+
+Running C2HS would then generate the following Haskell code:
+
+``` haskell
+newtype Foo = Foo (ForeignPtr (Foo))
+withFoo :: Foo -> (Ptr Foo -> IO b) -> IO b
+withFoo (Foo fptr) = withForeignPtr fptr
+```
+
+Note the use of the names `ForeignPtr`, `Ptr` and `withForeignPtr`.
+These come from the Haskell library modules `Foreign.Ptr` and
+`Foreign.ForeignPtr`, but C2HS didn't generate any `import`
+declarations to make these modules accessible.  This meant that there
+would normally be a bit of back and forth when writing C2HS code:
+write your bindings, run C2HS, try compiling with GHC, have the
+compile fail because of missing imports, add the imports to your
+`.chs` file and repeat.  Kind of annoying.
+
+As well as being annoying, the lack of import declaration generation
+meant that it was sometimes impossible to make internal changes to the
+way that C2HS binds to C functions without breaking existing user
+code.  The example that finally drove me to try to fix this was issue
+130 (https://github.com/haskell/c2hs/issues/130) that required a
+change that would lead to most C2HS code now needing to import
+`unsafePerformIO`.  It didn't seem like a good idea to push a change
+like that (that would break more or less all C2HS code out there!)
+without fixing the import problem (so that the change for issue #130
+could happen transparently to all existing working C2HS code).
+
+
+#### The solution
+
+The solution I ended up with is pretty simple, but I think it's
+robust.  For the example above, C2HS now generates the following
+Haskell code:
+
+``` haskell
+import qualified Foreign.ForeignPtr as C2HSImp
+import qualified Foreign.Ptr as C2HSImp
+
+newtype Foo = Foo (C2HSImp.ForeignPtr (Foo))
+withFoo :: Foo -> (C2HSImp.Ptr Foo -> IO b) -> IO b
+withFoo (Foo fptr) = C2HSImp.withForeignPtr fptr
+```
+
+All library symbols needed to generate Haskell binding code are now
+qualified under the name `C2HSImp` and the relevant library modules
+are imported qualified as `C2HSImp`.
+
+The end result of this is that you still need to import modules only
+for names that you explicitly use (so if you use `alloca` in an input
+marshaller, you need to import `Foreign.Marshal.Alloc`).  All external
+names that C2HS uses in code that it generates should be imported
+automatically.
+
+
+#### Potential complaints
+
+1. Modules compiled with `-Werror` may now fail because of unused
+   import warnings.  This was something I had to deal with for most of
+   the C2HS test cases (since they all imported the required library
+   modules and they're mostly compiled with `-Werror`), but since the
+   community consensus seems to be that `-Werror` shouldn't be used in
+   released code, I think it's reasonable to allow the possibility of
+   this kind of breakage.
+
+2. It's possible that the code I wrote for deciding where to put the
+   extra import declarations isn't quite perfect.  I tried a couple of
+   different solutions, but ended up with a hand-made "find the first
+   safe place to add imports" function that relies quite heavily on
+   the details of C2HS's CHS file parser.  I did try a solution based
+   on `haskell-src-exts`, but this didn't work very well, because
+   `haskell-src-exts` doesn't support all available GHC extensions and
+   I would have needed some mechanism to propagate extension
+   information from Cabal files to C2HS to make the parsing work.
+
+These changes have been tested reasonably extensively -- all of the
+core C2HS tests pass, and the following packages are known to work
+(they're all in the regression suite): abcBridge, alsa-mixer, cuda,
+cufft, gnome-keyring, gnuidn, haskell-mpi, hnetcdf, hpuz, hsndfile,
+hsshellscript, igraph, libssh2.
+
+I'll be adding more packages to the regression suite, but if there's a
+package you're particularly concerned about that's not on this list,
+let me know.
diff --git a/regression-suite-vm/Vagrantfile b/regression-suite-vm/Vagrantfile
new file mode 100644
--- /dev/null
+++ b/regression-suite-vm/Vagrantfile
@@ -0,0 +1,9 @@
+Vagrant.configure("2") do |config|
+  config.vm.box = "c2hs-regression-suite.box"
+
+  config.vm.provider :virtualbox do |vb|
+    vb.gui = false
+    vb.customize ["modifyvm", :id, "--memory", "2048"]
+    vb.customize ["modifyvm", :id, "--cpus", "2"]
+  end
+end
diff --git a/regression-suite-vm/Vagrantfile-full b/regression-suite-vm/Vagrantfile-full
new file mode 100644
--- /dev/null
+++ b/regression-suite-vm/Vagrantfile-full
@@ -0,0 +1,84 @@
+$script = <<SCRIPT
+
+set -e
+
+# Initial APT package installation
+
+sed -i -e 's/us.archive.ubuntu.com/gb.archive.ubuntu.com/g' /etc/apt/sources.list
+sed -i -e '/trusty multiverse/s/^# //' -e '/trusty-updates multiverse/s/^# //' /etc/apt/sources.list
+
+apt-get update
+apt-get install -y python-pip
+pip install awscli
+
+mkdir cuda-packages
+aws s3 sync s3://cuda-packages ./cuda-packages
+dpkg -i ./cuda-packages/cuda-repo-ubuntu1204_6.5-14_amd64.deb
+/bin/rm ./cuda-packages/cuda-repo-ubuntu1204_6.5-14_amd64.deb
+mv ./cuda-packages/*.deb /var/cache/apt/archives
+/bin/rm -fr ./cuda-packages
+
+apt-add-repository -y ppa:igraph/ppa
+apt-get update
+
+PACKAGES="alex build-essential git happy libatlas-base-dev libgmp-dev
+          liblapack-dev libnetcdf-dev unzip zlib1g-dev libopencv-dev
+          libcv-dev libhighgui-dev libgnome-keyring-dev libgsl0-dev
+          libsndfile1-dev libqtscript4-core libqt4-declarative
+          libigraph0-dev acpid consolekit dkms lib32gcc1 libc-bin
+          libc-dev-bin libc6 libc6-dev libc6-i386 libck-connector0
+          libpam-ck-connector libpolkit-agent-1-0
+          libpolkit-backend-1-0 libpolkit-gobject-1-0 libvdpau1
+          libxmu-dev libxmu-headers policykit-1 policykit-1-gnome
+          python-xkit screen-resolution-extra cuda libasound2-dev
+          libidn11-dev libopenmpi-dev libssh2-1-dev"
+
+apt-get install -y $PACKAGES
+
+cd /usr/lib/x86_64-linux-gnu
+ln -s libgmp.so.10 libgmp.so.3
+cd /root
+
+
+# GHC and Cabal installation
+wget https://www.haskell.org/ghc/dist/7.8.3/ghc-7.8.3-x86_64-unknown-linux-deb7.tar.xz
+tar xJf ghc-7.8.3-x86_64-unknown-linux-deb7.tar.xz
+cd ghc-7.8.3
+./configure
+make install
+cd ..
+/bin/rm -fr ghc-7.8.3*
+
+wget https://www.haskell.org/cabal/release/cabal-install-1.20.0.3/cabal-install-1.20.0.3.tar.gz
+tar xzf cabal-install-1.20.0.3.tar.gz
+cd cabal-install-1.20.0.3
+./bootstrap.sh
+cd ..
+/bin/rm -fr cabal-install-1.20.0.3*
+
+if [ ! -f /usr/bin/cabal-1.20 ]; then
+   cp /root/.cabal/bin/cabal /usr/bin/cabal-1.20
+   (cd /usr/bin/ && rm -rf cabal && ln -s cabal-1.20 cabal)
+fi
+
+echo "export PATH=\$HOME/.cabal/bin:\$PATH" >> /etc/bash.bashrc
+echo "export PATH=/usr/local/cuda-6.5/bin:\$PATH" >> /etc/bash.bashrc
+
+su vagrant -c 'cabal update'
+
+SCRIPT
+
+Vagrant.configure("2") do |config|
+  config.vm.box = "trusty-server-cloudimg-amd64-vagrant-disk1.box"
+  config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
+
+  config.vm.synced_folder "..", "/home/vagrant/c2hs"
+
+  config.vm.provider :virtualbox do |vb|
+    vb.gui = false
+    vb.customize ["modifyvm", :id, "--memory", "2048"]
+    vb.customize ["modifyvm", :id, "--cpus", "2"]
+  end
+
+  config.vm.provision "shell", inline: $script
+end
diff --git a/regression-suite-vm/run-regression b/regression-suite-vm/run-regression
new file mode 100644
--- /dev/null
+++ b/regression-suite-vm/run-regression
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+branch=${1:-master}
+
+vagrant up
+vagrant ssh <<EOF
+/bin/rm -fr c2hs
+export LD_LIBRARY_PATH=/usr/local/cuda-6.5/lib64:$LD_LIBRARY_PATH
+git clone https://github.com/haskell/c2hs.git
+cd c2hs
+git checkout $branch
+cabal update
+cabal install --only-dep --enable-tests -fregression
+cabal install
+cabal configure --enable-tests -fregression
+cabal build && cabal test
+export C2HS_REGRESSION_SUITE=1
+./dist/build/regression-suite/regression-suite
+EOF
+vagrant destroy -f
diff --git a/src/C2HS/CHS/Lexer.hs b/src/C2HS/CHS/Lexer.hs
--- a/src/C2HS/CHS/Lexer.hs
+++ b/src/C2HS/CHS/Lexer.hs
@@ -712,7 +712,10 @@
                     s, Nothing)
 
 adjustPosByCLinePragma :: String -> Position -> Position
-adjustPosByCLinePragma str pos = adjustPos fname' row' pos
+adjustPosByCLinePragma str pos =
+  if isSourcePos pos
+  then position (posOffset pos) fname' row' 1 (posParent pos)
+  else pos
   where
     fname           = posFile pos
     str'            = dropWhite str
diff --git a/src/C2HS/Version.hs b/src/C2HS/Version.hs
--- a/src/C2HS/Version.hs
+++ b/src/C2HS/Version.hs
@@ -10,7 +10,7 @@
 name       = "C->Haskell Compiler"
 versnum    = Paths_c2hs.version
 versnick   = "Switcheroo"
-date       = "1 April 2016"
+date       = "25 November 2017"
 version    = name ++ ", version " ++ showVersion versnum ++ " " ++ versnick ++ ", " ++ date
 copyright  = "Copyright (c) 1999-2007 Manuel M T Chakravarty\n"
           ++ "              2005-2008 Duncan Coutts\n"
diff --git a/tests/bugs/issue-192/Issue192.chs b/tests/bugs/issue-192/Issue192.chs
new file mode 100644
--- /dev/null
+++ b/tests/bugs/issue-192/Issue192.chs
@@ -0,0 +1,3 @@
+module Issue192 where
+
+#include "issue-192.h"
diff --git a/tests/bugs/issue-192/issue-192.h b/tests/bugs/issue-192/issue-192.h
new file mode 100644
--- /dev/null
+++ b/tests/bugs/issue-192/issue-192.h
@@ -0,0 +1,2 @@
+extern int __fpclassifyf128 (_Float128 __value) __attribute__ ((__nothrow__ , __leaf__))
+  __attribute__ ((__const__));
diff --git a/tests/bugs/issue-37/Issue37.chs b/tests/bugs/issue-37/Issue37.chs
new file mode 100644
--- /dev/null
+++ b/tests/bugs/issue-37/Issue37.chs
@@ -0,0 +1,17 @@
+module Main where
+
+import Foreign
+import Foreign.C
+
+#include "issue37.h"
+
+{#fun f1 {`Int'} -> `Int'#}
+
+{#fun f2 {`Float'} -> `Float'#}
+
+main :: IO ()
+main = do
+  tst1 <- f1 7
+  tst2 <- f2 23
+  putStrLn $ if tst1 == 14 then "SAME" else "DIFF"
+  putStrLn $ if tst2 == 69 then "SAME" else "DIFF"
diff --git a/tests/bugs/issue-37/issue37.c b/tests/bugs/issue-37/issue37.c
new file mode 100644
--- /dev/null
+++ b/tests/bugs/issue-37/issue37.c
@@ -0,0 +1,12 @@
+#include "issue37.h"
+
+int f1(int *np)
+{
+  return *np * 2;
+}
+
+
+float f2(float *np)
+{
+  return *np * 3;
+}
diff --git a/tests/bugs/issue-37/issue37.h b/tests/bugs/issue-37/issue37.h
new file mode 100644
--- /dev/null
+++ b/tests/bugs/issue-37/issue37.h
@@ -0,0 +1,2 @@
+int f1(int *np);
+float f2(float *np);
diff --git a/tests/bugs/issue-82/include/Availability.h b/tests/bugs/issue-82/include/Availability.h
new file mode 100644
--- /dev/null
+++ b/tests/bugs/issue-82/include/Availability.h
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2007-2009 by Apple Inc.. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+ 
+#ifndef __AVAILABILITY__
+#define __AVAILABILITY__
+ /*     
+    These macros are for use in OS header files. They enable function prototypes
+    and Objective-C methods to be tagged with the OS version in which they
+    were first available; and, if applicable, the OS version in which they 
+    became deprecated.  
+     
+    The desktop Mac OS X and the iPhone OS X each have different version numbers.
+    The __OSX_AVAILABLE_STARTING() macro allows you to specify both the desktop
+    and phone OS version numbers.  For instance:
+        __OSX_AVAILABLE_STARTING(__MAC_10_2,__IPHONE_2_0)
+    means the function/method was first available on Mac OS X 10.2 on the desktop
+    and first available in OS X 2.0 on the iPhone.
+    
+    If a function is available on one platform, but not the other a _NA (not
+    applicable) parameter is used.  For instance:
+            __OSX_AVAILABLE_STARTING(__MAC_10_3,__IPHONE_NA)
+    means that the function/method was first available on Mac OS X 10.3, and it
+    currently not implemented on the iPhone.
+
+    At some point, a function/method may be deprecated.  That means Apple
+    recommends applications stop using the function, either because there is a 
+    better replacement or the functionality is being phased out.  Deprecated
+    functions/methods can be tagged with a __OSX_AVAILABLE_BUT_DEPRECATED()
+    macro which specifies the OS version where the function became available
+    as well as the OS version in which it became deprecated.  For instance:
+        __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0,__MAC_10_5,__IPHONE_NA,__IPHONE_NA)
+    means that the function/method was introduced in Mac OS X 10.0, then
+    became deprecated beginning in Mac OS X 10.5.  On the iPhone the function 
+    has never been availlable.  
+    
+    For these macros to function properly, a program must specify the OS version range 
+    it is targeting.  The min OS version is specified as an option to the compiler:
+    -mmacosx-version-min=10.x when building for Mac OS X, and -miphone-version-min=1.x.x
+    when building for the iPhone.  The upper bound for the OS version is rarely needed,
+    but it can be set on the command line via: -D__MAC_OS_X_VERSION_MAX_ALLOWED=10xx for
+    Mac OS X and __IPHONE_OS_VERSION_MAX_ALLOWED = 1xxx for iPhone.  
+    
+    Examples:
+
+        A function available in Mac OS X 10.5 and later, but not on the phone:
+        
+            extern void mymacfunc() __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_NA);
+
+
+        An Objective-C method in Mac OS X 10.5 and later, but not on the phone:
+        
+            @interface MyClass : NSObject
+            -(void) mymacmethod __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_NA);
+            @end
+
+        
+        An enum available on the phone in 2.1 and later, but not available on Mac OS X:
+        
+            #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 20100
+                enum { myEnum = 1 };
+            #endif
+        Note: this works when targeting the Mac OS X platform because 
+        __IPHONE_OS_VERSION_MIN_REQUIRED is undefined which evaluates to zero, 
+        so test becomes #if 0 >= 20100 which is false.  Also, we use
+        20100 instead of __IPHONE_2_1 to be safe.  The __IPHONE_2_1 macro did not
+        exist in <Availability.h> prior to the 2.1 SDK.  So, if somehow this 
+        conditional was used with an earilier SDK, it would evaluate incorrectly.
+
+
+    It is also possible to use the *_VERSION_MIN_REQUIRED in source code to make one
+    source base that can be compiled to target a range of OS versions.  It is best
+    to not use the _MAC_* and __IPHONE_* macros for comparisons, but rather their values.
+    That is because you might get compiled on an old OS that does not define a later
+    OS version macro, and in the C preprocessor undefined values evaluate to zero
+    in expresssions, which could cause the #if expression to evaluate in an unexpected
+    way.
+    
+        #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED
+            // code only compiled when targeting Mac OS X and not iPhone
+            // note use of 1050 instead of __MAC_10_5
+            #if __MAC_OS_X_VERSION_MIN_REQUIRED < 1050
+                // code in here might run on pre-Leopard OS
+            #else
+                // code here can assume Leopard or later
+            #endif
+        #endif
+
+
+*/
+
+#define __MAC_10_0      1000
+#define __MAC_10_1      1010
+#define __MAC_10_2      1020
+#define __MAC_10_3      1030
+#define __MAC_10_4      1040
+#define __MAC_10_5      1050
+#define __MAC_10_6      1060
+#define __MAC_NA        9999   /* not available */
+
+#define __IPHONE_2_0     20000  
+#define __IPHONE_2_1     20100  
+#define __IPHONE_2_2     20200  
+#define __IPHONE_3_0     30000  
+#define __IPHONE_NA      99999  /* not available */
+
+#include <AvailabilityInternal.h>
+
+
+#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
+    #define __OSX_AVAILABLE_STARTING(_mac, _iphone) __AVAILABILITY_INTERNAL##_iphone
+    #define __OSX_AVAILABLE_BUT_DEPRECATED(_macIntro, _macDep, _iphoneIntro, _iphoneDep) \
+                                                    __AVAILABILITY_INTERNAL##_iphoneIntro##_DEP##_iphoneDep
+
+#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED)
+    #define __OSX_AVAILABLE_STARTING(_mac, _iphone) __AVAILABILITY_INTERNAL##_mac
+    #define __OSX_AVAILABLE_BUT_DEPRECATED(_macIntro, _macDep, _iphoneIntro, _iphoneDep) \
+                                                    __AVAILABILITY_INTERNAL##_macIntro##_DEP##_macDep
+
+#else
+    #define __OSX_AVAILABLE_STARTING(_mac, _iphone)
+    #define __OSX_AVAILABLE_BUT_DEPRECATED(_macIntro, _macDep, _iphoneIntro, _iphoneDep) 
+#endif
+
+
+#endif /* __AVAILABILITY__ */
diff --git a/tests/bugs/issue-82/include/AvailabilityInternal.h b/tests/bugs/issue-82/include/AvailabilityInternal.h
new file mode 100644
--- /dev/null
+++ b/tests/bugs/issue-82/include/AvailabilityInternal.h
@@ -0,0 +1,273 @@
+/*
+ * Copyright (c) 2007-2009 by Apple Inc.. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+/*
+    File:       AvailabilityInternal.h
+ 
+    Contains:   implementation details of __OSX_AVAILABLE_* macros from <Availability.h>
+
+*/
+#ifndef __AVAILABILITY_INTERNAL__
+#define __AVAILABILITY_INTERNAL__
+
+
+/* if we want to support some compiler that does not support these
+   attributes, we can test for the compiler version before defining these */
+#define __AVAILABILITY_INTERNAL_DEPRECATED         __attribute__((deprecated,visibility("default")))
+#define __AVAILABILITY_INTERNAL_UNAVAILABLE        __attribute__((unavailable,visibility("default")))
+#define __AVAILABILITY_INTERNAL_WEAK_IMPORT        __attribute__((weak_import,visibility("default")))
+#define __AVAILABILITY_INTERNAL_REGULAR            __attribute__((visibility("default")))
+
+
+#ifndef __IPHONE_OS_VERSION_MIN_REQUIRED
+    #ifdef __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__
+        /* compiler sets __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ when -miphoneos-version-min is used */
+        #define __IPHONE_OS_VERSION_MIN_REQUIRED __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__
+    #endif
+#endif
+
+
+#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
+    /* make sure a default max version is set */
+    #ifndef __IPHONE_OS_VERSION_MAX_ALLOWED
+        #define __IPHONE_OS_VERSION_MAX_ALLOWED     __IPHONE_3_0
+    #endif
+    /* make sure a valid min is set */
+    #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_2_0
+        #undef __IPHONE_OS_VERSION_MIN_REQUIRED
+        #define __IPHONE_OS_VERSION_MIN_REQUIRED    __IPHONE_2_0 
+    #endif
+    
+    /* set up internal macros (up to 2.0) */
+     #if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_2_0
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_0          __AVAILABILITY_INTERNAL_UNAVAILABLE
+    #elif __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_2_0
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_0          __AVAILABILITY_INTERNAL_WEAK_IMPORT
+    #else
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_0          __AVAILABILITY_INTERNAL_REGULAR
+    #endif
+    #define __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_NA     __AVAILABILITY_INTERNAL__IPHONE_2_0
+    #define __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_0    __AVAILABILITY_INTERNAL_DEPRECATED
+    /* set up internal macros (up to 2.1) */
+    #if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_2_1
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_1                __AVAILABILITY_INTERNAL_UNAVAILABLE
+    #elif __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_2_1
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_1                __AVAILABILITY_INTERNAL_WEAK_IMPORT
+    #else
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_1                __AVAILABILITY_INTERNAL_REGULAR
+    #endif
+    #define __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_NA     __AVAILABILITY_INTERNAL__IPHONE_2_1
+    #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_2_1
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_1    __AVAILABILITY_INTERNAL_REGULAR  
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_1    __AVAILABILITY_INTERNAL_WEAK_IMPORT
+    #else
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_1    __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_1    __AVAILABILITY_INTERNAL_DEPRECATED
+    #endif
+    /* set up internal macros (up to 2.2) */
+    #if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_2_2
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_2                __AVAILABILITY_INTERNAL_UNAVAILABLE
+    #elif __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_2_2
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_2                __AVAILABILITY_INTERNAL_WEAK_IMPORT
+    #else
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_2                __AVAILABILITY_INTERNAL_REGULAR
+    #endif
+    #define __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_NA     __AVAILABILITY_INTERNAL__IPHONE_2_2
+    #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_2_1
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_2    __AVAILABILITY_INTERNAL_REGULAR  
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_2    __AVAILABILITY_INTERNAL_WEAK_IMPORT
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_2_2    __AVAILABILITY_INTERNAL_WEAK_IMPORT
+    #elif __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_2_2
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_2    __AVAILABILITY_INTERNAL_REGULAR    
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_2    __AVAILABILITY_INTERNAL_REGULAR   
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_2_2    __AVAILABILITY_INTERNAL_WEAK_IMPORT
+    #else
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_2    __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_2    __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_2_2    __AVAILABILITY_INTERNAL_DEPRECATED
+    #endif
+    /* set up internal macros (up to 3.0) */
+    #if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_3_0
+        #define __AVAILABILITY_INTERNAL__IPHONE_3_0                __AVAILABILITY_INTERNAL_UNAVAILABLE
+    #elif __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_0
+        #define __AVAILABILITY_INTERNAL__IPHONE_3_0                __AVAILABILITY_INTERNAL_WEAK_IMPORT
+    #else
+        #define __AVAILABILITY_INTERNAL__IPHONE_3_0                __AVAILABILITY_INTERNAL_REGULAR
+    #endif
+    #define __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_NA     __AVAILABILITY_INTERNAL__IPHONE_3_0
+    #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_2_1
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_0    __AVAILABILITY_INTERNAL_REGULAR    
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_0    __AVAILABILITY_INTERNAL_WEAK_IMPORT
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_0    __AVAILABILITY_INTERNAL_WEAK_IMPORT
+        #define __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_0    __AVAILABILITY_INTERNAL_WEAK_IMPORT
+    #elif __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_2_2
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_0    __AVAILABILITY_INTERNAL_REGULAR   
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_0    __AVAILABILITY_INTERNAL_REGULAR   
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_0    __AVAILABILITY_INTERNAL_WEAK_IMPORT
+        #define __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_0    __AVAILABILITY_INTERNAL_WEAK_IMPORT
+    #elif __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_0
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_0    __AVAILABILITY_INTERNAL_REGULAR   
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_0    __AVAILABILITY_INTERNAL_REGULAR   
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_0    __AVAILABILITY_INTERNAL_REGULAR   
+        #define __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_0    __AVAILABILITY_INTERNAL_WEAK_IMPORT
+    #else
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_0    __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_0    __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_0    __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_0    __AVAILABILITY_INTERNAL_DEPRECATED
+    #endif
+    /* set up internal macros (n/a) */
+    #define __AVAILABILITY_INTERNAL__IPHONE_NA                     __AVAILABILITY_INTERNAL_UNAVAILABLE 
+    #define __AVAILABILITY_INTERNAL__IPHONE_NA_DEP__IPHONE_NA      __AVAILABILITY_INTERNAL_UNAVAILABLE
+    
+#elif defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
+    /* compiler for Mac OS X sets __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ */
+    #define __MAC_OS_X_VERSION_MIN_REQUIRED __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
+    /* make sure a default max version is set */
+    #ifndef __MAC_OS_X_VERSION_MAX_ALLOWED
+        #define __MAC_OS_X_VERSION_MAX_ALLOWED __MAC_10_6
+    #endif
+
+    /* set up internal macros */
+    #if __MAC_OS_X_VERSION_MAX_ALLOWED < __MAC_10_6
+        #define __AVAILABILITY_INTERNAL__MAC_10_6        __AVAILABILITY_INTERNAL_UNAVAILABLE
+    #elif __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_6
+        #define __AVAILABILITY_INTERNAL__MAC_10_6        __AVAILABILITY_INTERNAL_WEAK_IMPORT
+    #else    
+        #define __AVAILABILITY_INTERNAL__MAC_10_6        __AVAILABILITY_INTERNAL_REGULAR
+    #endif
+    #if __MAC_OS_X_VERSION_MAX_ALLOWED < __MAC_10_5
+        #define __AVAILABILITY_INTERNAL__MAC_10_5        __AVAILABILITY_INTERNAL_UNAVAILABLE
+    #elif __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_5
+        #define __AVAILABILITY_INTERNAL__MAC_10_5        __AVAILABILITY_INTERNAL_WEAK_IMPORT
+    #else
+        #define __AVAILABILITY_INTERNAL__MAC_10_5        __AVAILABILITY_INTERNAL_REGULAR
+    #endif
+    #if __MAC_OS_X_VERSION_MAX_ALLOWED < __MAC_10_4
+        #define __AVAILABILITY_INTERNAL__MAC_10_4        __AVAILABILITY_INTERNAL_UNAVAILABLE
+    #elif __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_4
+        #define __AVAILABILITY_INTERNAL__MAC_10_4        __AVAILABILITY_INTERNAL_WEAK_IMPORT
+    #else
+        #define __AVAILABILITY_INTERNAL__MAC_10_4        __AVAILABILITY_INTERNAL_REGULAR
+    #endif
+    #if __MAC_OS_X_VERSION_MAX_ALLOWED < __MAC_10_3
+        #define __AVAILABILITY_INTERNAL__MAC_10_3        __AVAILABILITY_INTERNAL_UNAVAILABLE
+    #elif __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_3
+        #define __AVAILABILITY_INTERNAL__MAC_10_3        __AVAILABILITY_INTERNAL_WEAK_IMPORT
+    #else
+        #define __AVAILABILITY_INTERNAL__MAC_10_3        __AVAILABILITY_INTERNAL_REGULAR
+    #endif
+    #if __MAC_OS_X_VERSION_MAX_ALLOWED < __MAC_10_2
+        #define __AVAILABILITY_INTERNAL__MAC_10_2        __AVAILABILITY_INTERNAL_UNAVAILABLE
+    #elif __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_2
+        #define __AVAILABILITY_INTERNAL__MAC_10_2        __AVAILABILITY_INTERNAL_WEAK_IMPORT
+    #else   
+        #define __AVAILABILITY_INTERNAL__MAC_10_2        __AVAILABILITY_INTERNAL_REGULAR
+    #endif
+    #if __MAC_OS_X_VERSION_MAX_ALLOWED < __MAC_10_1
+        #define __AVAILABILITY_INTERNAL__MAC_10_1        __AVAILABILITY_INTERNAL_UNAVAILABLE
+    #elif __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_1
+        #define __AVAILABILITY_INTERNAL__MAC_10_1        __AVAILABILITY_INTERNAL_WEAK_IMPORT
+    #else
+        #define __AVAILABILITY_INTERNAL__MAC_10_1        __AVAILABILITY_INTERNAL_REGULAR
+    #endif
+    #if __MAC_OS_X_VERSION_MAX_ALLOWED < __MAC_10_0
+        #define __AVAILABILITY_INTERNAL__MAC_10_0        __AVAILABILITY_INTERNAL_UNAVAILABLE
+    #elif __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_0
+        #define __AVAILABILITY_INTERNAL__MAC_10_0        __AVAILABILITY_INTERNAL_WEAK_IMPORT
+    #else
+        #define __AVAILABILITY_INTERNAL__MAC_10_0        __AVAILABILITY_INTERNAL_REGULAR
+    #endif
+    #define __AVAILABILITY_INTERNAL__MAC_NA             __AVAILABILITY_INTERNAL_UNAVAILABLE
+    #if __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_1
+        #define __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1        __AVAILABILITY_INTERNAL_DEPRECATED
+    #else
+        #define __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1        __AVAILABILITY_INTERNAL__MAC_10_0
+    #endif
+    #if __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_2
+        #define __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2        __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2        __AVAILABILITY_INTERNAL_DEPRECATED
+    #else
+        #define __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2        __AVAILABILITY_INTERNAL__MAC_10_0
+        #define __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2        __AVAILABILITY_INTERNAL__MAC_10_1
+    #endif
+    #if __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_3
+        #define __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3        __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3        __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3        __AVAILABILITY_INTERNAL_DEPRECATED
+    #else
+        #define __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3        __AVAILABILITY_INTERNAL__MAC_10_0
+        #define __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3        __AVAILABILITY_INTERNAL__MAC_10_1
+        #define __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3        __AVAILABILITY_INTERNAL__MAC_10_2
+    #endif
+    #if __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_4
+        #define __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4        __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4        __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4        __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4        __AVAILABILITY_INTERNAL_DEPRECATED
+    #else
+        #define __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4        __AVAILABILITY_INTERNAL__MAC_10_0
+        #define __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4        __AVAILABILITY_INTERNAL__MAC_10_1
+        #define __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4        __AVAILABILITY_INTERNAL__MAC_10_2
+        #define __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4        __AVAILABILITY_INTERNAL__MAC_10_3
+    #endif
+    #if __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_5
+        #define __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5        __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5        __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5        __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5        __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5        __AVAILABILITY_INTERNAL_DEPRECATED
+    #else
+        #define __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5        __AVAILABILITY_INTERNAL__MAC_10_0
+        #define __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5        __AVAILABILITY_INTERNAL__MAC_10_1
+        #define __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5        __AVAILABILITY_INTERNAL__MAC_10_2
+        #define __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5        __AVAILABILITY_INTERNAL__MAC_10_3
+        #define __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5        __AVAILABILITY_INTERNAL__MAC_10_4
+    #endif
+    #if __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_6
+        #define __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6        __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6        __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6        __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6        __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6        __AVAILABILITY_INTERNAL_DEPRECATED
+        #define __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6        __AVAILABILITY_INTERNAL_DEPRECATED
+    #else
+        #define __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6        __AVAILABILITY_INTERNAL__MAC_10_0
+        #define __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6        __AVAILABILITY_INTERNAL__MAC_10_1
+        #define __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6        __AVAILABILITY_INTERNAL__MAC_10_2
+        #define __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6        __AVAILABILITY_INTERNAL__MAC_10_3
+        #define __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6        __AVAILABILITY_INTERNAL__MAC_10_4
+        #define __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6        __AVAILABILITY_INTERNAL__MAC_10_5
+    #endif
+    #define __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_NA             __AVAILABILITY_INTERNAL__MAC_10_0
+    #define __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_NA             __AVAILABILITY_INTERNAL__MAC_10_1
+    #define __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_NA             __AVAILABILITY_INTERNAL__MAC_10_2
+    #define __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_NA             __AVAILABILITY_INTERNAL__MAC_10_3
+    #define __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_NA             __AVAILABILITY_INTERNAL__MAC_10_4
+    #define __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_NA             __AVAILABILITY_INTERNAL__MAC_10_5
+    #define __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_NA             __AVAILABILITY_INTERNAL__MAC_10_6
+    #define __AVAILABILITY_INTERNAL__MAC_NA_DEP__MAC_NA               __AVAILABILITY_INTERNAL_UNAVAILABLE
+
+#endif
+
+#endif /* __AVAILABILITY_INTERNAL__ */
diff --git a/tests/bugs/issue-82/include/TargetConditionals.h b/tests/bugs/issue-82/include/TargetConditionals.h
new file mode 100644
--- /dev/null
+++ b/tests/bugs/issue-82/include/TargetConditionals.h
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2000-2008 by Apple Inc.. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+ 
+/*
+     File:       TargetConditionals.h
+ 
+     Contains:   Autoconfiguration of TARGET_ conditionals for Mac OS X and iPhone
+     
+                 Note:  TargetConditionals.h in 3.4 Universal Interfaces works
+                        with all compilers.  This header only recognizes compilers
+                        known to run on Mac OS X.
+  
+*/
+
+#ifndef __TARGETCONDITIONALS__
+#define __TARGETCONDITIONALS__
+/****************************************************************************************************
+
+    TARGET_CPU_*    
+    These conditionals specify which microprocessor instruction set is being
+    generated.  At most one of these is true, the rest are false.
+
+        TARGET_CPU_PPC          - Compiler is generating PowerPC instructions for 32-bit mode
+        TARGET_CPU_PPC64        - Compiler is generating PowerPC instructions for 64-bit mode
+        TARGET_CPU_68K          - Compiler is generating 680x0 instructions
+        TARGET_CPU_X86          - Compiler is generating x86 instructions
+        TARGET_CPU_ARM          - Compiler is generating ARM instructions
+        TARGET_CPU_MIPS         - Compiler is generating MIPS instructions
+        TARGET_CPU_SPARC        - Compiler is generating Sparc instructions
+        TARGET_CPU_ALPHA        - Compiler is generating Dec Alpha instructions
+
+
+    TARGET_OS_* 
+    These conditionals specify in which Operating System the generated code will
+    run. The MAC/WIN32/UNIX conditionals are mutually exclusive.  The EMBEDDED/IPHONE 
+	conditionals are variants of TARGET_OS_MAC. 
+
+        TARGET_OS_MAC           - Generate code will run under Mac OS
+        TARGET_OS_WIN32         - Generate code will run under 32-bit Windows
+        TARGET_OS_UNIX          - Generate code will run under some non Mac OS X unix 
+        TARGET_OS_EMBEDDED      - Generate code will run under an embedded OS variant
+                                  of TARGET_OS_MAC
+        TARGET_OS_IPHONE        - Generate code will run under iPhone OS which 
+                                  is a variant of TARGET_OS_MAC.
+
+    TARGET_RT_* 
+    These conditionals specify in which runtime the generated code will
+    run. This is needed when the OS and CPU support more than one runtime
+    (e.g. Mac OS X supports CFM and mach-o).
+
+        TARGET_RT_LITTLE_ENDIAN - Generated code uses little endian format for integers
+        TARGET_RT_BIG_ENDIAN    - Generated code uses big endian format for integers    
+        TARGET_RT_64_BIT        - Generated code uses 64-bit pointers    
+        TARGET_RT_MAC_CFM       - TARGET_OS_MAC is true and CFM68K or PowerPC CFM (TVectors) are used
+        TARGET_RT_MAC_MACHO     - TARGET_OS_MAC is true and Mach-O/dlyd runtime is used
+
+
+    TARGET_IPHONE_SIMULATOR     - Generate code for running under iPhone Simulator
+        
+
+****************************************************************************************************/
+
+
+/*
+ *    gcc based compiler used on Mac OS X
+ */
+#define TARGET_OS_MAC               1
+#define TARGET_OS_WIN32             0
+#define TARGET_OS_UNIX              0
+#define TARGET_OS_EMBEDDED          0
+#define TARGET_OS_IPHONE            0
+#define TARGET_IPHONE_SIMULATOR     0
+#define TARGET_CPU_PPC          0
+#define TARGET_CPU_PPC64        0
+#define TARGET_CPU_68K          0
+#define TARGET_CPU_X86          0
+#define TARGET_CPU_X86_64       1
+#define TARGET_CPU_ARM          0
+#define TARGET_CPU_MIPS         0
+#define TARGET_CPU_SPARC        0
+#define TARGET_CPU_ALPHA        0
+#define TARGET_RT_MAC_CFM       0
+#define TARGET_RT_MAC_MACHO     1
+#define TARGET_RT_LITTLE_ENDIAN 1
+#define TARGET_RT_BIG_ENDIAN    0
+#define TARGET_RT_64_BIT        1
+
+#endif  /* __TARGETCONDITIONALS__ */
diff --git a/tests/bugs/issue-82/include/_types.h b/tests/bugs/issue-82/include/_types.h
new file mode 100644
--- /dev/null
+++ b/tests/bugs/issue-82/include/_types.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2004, 2008, 2009 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#ifndef __TYPES_H_
+#define __TYPES_H_
+
+/*#include <sys/_types.h>*/
+
+#if __GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ >= 7
+#define __strfmonlike(fmtarg, firstvararg) \
+		__attribute__((__format__ (__strfmon__, fmtarg, firstvararg)))
+#define __strftimelike(fmtarg) \
+		__attribute__((__format__ (__strftime__, fmtarg, 0)))
+#else
+#define __strfmonlike(fmtarg, firstvararg)
+#define __strftimelike(fmtarg)
+#endif
+
+/*typedef	int		__darwin_nl_item;*/
+/*typedef	int		__darwin_wctrans_t;*/
+#ifdef __LP64__
+/*typedef	__uint32_t	__darwin_wctype_t;*/
+#else /* !__LP64__ */
+/*typedef	unsigned long	__darwin_wctype_t;*/
+#endif /* __LP64__ */
+
+#ifdef __WCHAR_MAX__
+#define __DARWIN_WCHAR_MAX	__WCHAR_MAX__
+#else /* ! __WCHAR_MAX__ */
+#define __DARWIN_WCHAR_MAX	0x7fffffff
+#endif /* __WCHAR_MAX__ */
+
+#if __DARWIN_WCHAR_MAX > 0xffffU
+#define __DARWIN_WCHAR_MIN	(-0x7fffffff - 1)
+#else
+#define __DARWIN_WCHAR_MIN	0
+#endif
+#define	__DARWIN_WEOF 	((__darwin_wint_t)-1)
+
+#ifndef _FORTIFY_SOURCE
+#  if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && ((__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0) < 1050)
+#    define _FORTIFY_SOURCE 0
+#  else
+#    define _FORTIFY_SOURCE 2	/* on by default */
+#  endif
+#endif
+
+#endif /* __TYPES_H_ */
diff --git a/tests/bugs/issue-82/include/secure/_common.h b/tests/bugs/issue-82/include/secure/_common.h
new file mode 100644
--- /dev/null
+++ b/tests/bugs/issue-82/include/secure/_common.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2007, 2008 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#ifndef _SECURE__COMMON_H_
+#define _SECURE__COMMON_H_
+
+#undef _USE_FORTIFY_LEVEL
+#if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0
+#  if _FORTIFY_SOURCE > 1
+#    define _USE_FORTIFY_LEVEL 2
+#  else
+#    define _USE_FORTIFY_LEVEL 1
+#  endif
+#else
+#  define _USE_FORTIFY_LEVEL 0
+#endif
+
+#define __darwin_obsz0(object) __builtin_object_size (object, 0)
+#define __darwin_obsz(object) __builtin_object_size (object, _USE_FORTIFY_LEVEL > 1 ? 1 : 0)
+
+#endif
diff --git a/tests/bugs/issue-82/include/secure/_string.h b/tests/bugs/issue-82/include/secure/_string.h
new file mode 100644
--- /dev/null
+++ b/tests/bugs/issue-82/include/secure/_string.h
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) 2007 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#ifndef _STRING_H_
+# error "Never use <secure/_string.h> directly; include <string.h> instead."
+#endif
+
+#ifndef _SECURE__STRING_H_
+#define _SECURE__STRING_H_
+
+#include <Availability.h>
+#include <sys/cdefs.h>
+#include <secure/_common.h>
+
+#if _USE_FORTIFY_LEVEL > 0
+
+#ifndef __has_builtin
+#define _undef__has_builtin
+#define __has_builtin(x) 0
+#endif
+
+/* <rdar://problem/12622659> */
+#if defined(__clang__) && \
+    ((defined(__apple_build_version__) && __apple_build_version__ >= 4260006) || \
+     (!defined(__apple_build_version__) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 3))))
+#define __HAS_FIXED_CHK_PROTOTYPES 1
+#else
+#define __HAS_FIXED_CHK_PROTOTYPES 0
+#endif
+
+/* memccpy, memcpy, mempcpy, memmove, memset, strcpy, strlcpy, stpcpy,
+   strncpy, stpncpy, strcat, strlcat, and strncat */
+
+#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 || __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
+#if __has_builtin(__builtin___memccpy_chk) && __HAS_FIXED_CHK_PROTOTYPES
+#undef memccpy
+#define memccpy(dest, src, c, len)                                  \
+  __builtin___memccpy_chk (dest, src, c, len, __darwin_obsz0 (dest))
+#endif
+#endif
+
+#if __has_builtin(__builtin___memcpy_chk) || defined(__GNUC__)
+#undef memcpy
+#define memcpy(dest, src, len)					\
+  __builtin___memcpy_chk (dest, src, len, __darwin_obsz0 (dest))
+#endif
+
+#if __has_builtin(__builtin___memmove_chk) || defined(__GNUC__)
+#undef memmove
+#define memmove(dest, src, len)					\
+  __builtin___memmove_chk (dest, src, len, __darwin_obsz0 (dest))
+#endif
+
+#if __has_builtin(__builtin___memset_chk) || defined(__GNUC__)
+#undef memset
+#define memset(dest, val, len)					\
+  __builtin___memset_chk (dest, val, len, __darwin_obsz0 (dest))
+#endif
+
+#if __has_builtin(__builtin___strcpy_chk) || defined(__GNUC__)
+#undef strcpy
+#define strcpy(dest, src)					\
+  __builtin___strcpy_chk (dest, src, __darwin_obsz (dest))
+#endif
+
+#if __DARWIN_C_LEVEL >= 200809L
+#if __has_builtin(__builtin___stpcpy_chk) || defined(__GNUC__)
+#undef stpcpy
+#define stpcpy(dest, src)					\
+  __builtin___stpcpy_chk (dest, src, __darwin_obsz (dest))
+#endif
+
+#if __has_builtin(__builtin___stpncpy_chk) || __APPLE_CC__ >= 5666 || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)
+#undef stpncpy
+#define stpncpy(dest, src, len)					\
+  __builtin___stpncpy_chk (dest, src, len, __darwin_obsz (dest))
+#endif
+#endif /* _DARWIN_C_LEVEL >= 200809L */
+
+#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
+#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 || __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
+#if __has_builtin(__builtin___strlcpy_chk) && __HAS_FIXED_CHK_PROTOTYPES
+#undef strlcpy
+#define strlcpy(dest, src, len)                                 \
+  __builtin___strlcpy_chk (dest, src, len, __darwin_obsz (dest))
+#endif
+
+#if __has_builtin(__builtin___strlcat_chk) && __HAS_FIXED_CHK_PROTOTYPES
+#undef strlcat
+#define strlcat(dest, src, len)                                 \
+  __builtin___strlcat_chk (dest, src, len, __darwin_obsz (dest))
+#endif
+#endif /* __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 || __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 */
+#endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
+
+#if __has_builtin(__builtin___strncpy_chk) || defined(__GNUC__)
+#undef strncpy
+#define strncpy(dest, src, len)					\
+  __builtin___strncpy_chk (dest, src, len, __darwin_obsz (dest))
+#endif
+
+#if __has_builtin(__builtin___strcat_chk) || defined(__GNUC__)
+#undef strcat
+#define strcat(dest, src)					\
+  __builtin___strcat_chk (dest, src, __darwin_obsz (dest))
+#endif
+
+#if ! (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 32000)
+#if __has_builtin(__builtin___strncat_chk) || defined(__GNUC__)
+#undef strncat
+#define strncat(dest, src, len)					\
+  __builtin___strncat_chk (dest, src, len, __darwin_obsz (dest))
+#endif
+#endif
+
+#ifdef _undef__has_builtin
+#undef _undef__has_builtin
+#undef __has_builtin
+#endif
+
+#undef __HAS_FIXED_CHK_PROTOTYPES
+
+#endif /* _USE_FORTIFY_LEVEL > 0 */
+#endif /* _SECURE__STRING_H_ */
diff --git a/tests/bugs/issue-82/include/string.h b/tests/bugs/issue-82/include/string.h
new file mode 100644
--- /dev/null
+++ b/tests/bugs/issue-82/include/string.h
@@ -0,0 +1,197 @@
+/*
+ * Copyright (c) 2000, 2007, 2010 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*-
+ * Copyright (c) 1990, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)string.h	8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _STRING_H_
+#define	_STRING_H_
+
+#include <_types.h>
+#include <sys/cdefs.h>
+#include <Availability.h>
+/*#include <sys/_types/_size_t.h>*/
+/*#include <sys/_types/_null.h>*/
+
+/* ANSI-C */
+
+__BEGIN_DECLS
+void	*memchr(const void *, int, int);
+int	 memcmp(const void *, const void *, int);
+void	*memcpy(void *, const void *, int);
+void	*memmove(void *, const void *, int);
+void	*memset(void *, int, int);
+char	*strcat(char *, const char *);
+char	*strchr(const char *, int);
+int	 strcmp(const char *, const char *);
+int	 strcoll(const char *, const char *);
+char	*strcpy(char *, const char *);
+int	 strcspn(const char *, const char *);
+//Begin-Libc
+#ifndef LIBC_ALIAS_STRERROR
+//End-Libc
+char	*strerror(int) /*__DARWIN_ALIAS(strerror)*/;
+//Begin-Libc
+#else /* LIBC_ALIAS_STRERROR */
+char	*strerror(int) LIBC_ALIAS(strerror);
+#endif /* !LIBC_ALIAS_STRERROR */
+//End-Libc
+int	 strlen(const char *);
+char	*strncat(char *, const char *, int);
+int	 strncmp(const char *, const char *, int);
+char	*strncpy(char *, const char *, int);
+char	*strpbrk(const char *, const char *);
+char	*strrchr(const char *, int);
+int	 strspn(const char *, const char *);
+char	*strstr(const char *, const char *);
+char	*strtok(char *, const char *);
+int	 strxfrm(char *, const char *, int);
+__END_DECLS
+
+
+
+/* Additional functionality provided by:
+ * POSIX.1c-1995,
+ * POSIX.1i-1995,
+ * and the omnibus ISO/IEC 9945-1: 1996
+ */
+
+#if __DARWIN_C_LEVEL >= 199506L
+__BEGIN_DECLS
+char	*strtok_r(char *, const char *, char **);
+__END_DECLS
+#endif /* __DARWIN_C_LEVEL >= 199506L */
+
+
+
+/* Additional functionality provided by:
+ * POSIX.1-2001
+ */
+
+#if __DARWIN_C_LEVEL >= 200112L
+__BEGIN_DECLS
+int	 strerror_r(int, char *, int);
+char	*strdup(const char *);
+void	*memccpy(void *, const void *, int, int);
+__END_DECLS
+#endif /* __DARWIN_C_LEVEL >= 200112L */
+
+
+
+/* Additional functionality provided by:
+ * POSIX.1-2008
+ */
+
+#if __DARWIN_C_LEVEL >= 200809L
+__BEGIN_DECLS
+char	*stpcpy(char *, const char *);
+char    *stpncpy(char *, const char *, int) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
+char	*strndup(const char *, int) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
+int   strnlen(const char *, int) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
+char	*strsignal(int sig);
+__END_DECLS
+#endif /* __DARWIN_C_LEVEL >= 200809L */
+
+/* C11 Annex K */
+
+#if defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1
+#include <sys/_types/_rsize_t.h>
+#include <sys/_types/_errno_t.h>
+
+__BEGIN_DECLS
+errno_t	memset_s(void *, rsize_t, int, rsize_t) __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0);
+__END_DECLS
+#endif
+
+/* Darwin extensions */
+
+#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
+/*#include <sys/_types/_ssize_t.h>*/
+
+__BEGIN_DECLS
+void	*memmem(const void *, int, const void *, int) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
+void     memset_pattern4(void *, const void *, int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_3_0);
+void     memset_pattern8(void *, const void *, int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_3_0);
+void     memset_pattern16(void *, const void *, int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_3_0);
+
+char	*strcasestr(const char *, const char *);
+char	*strnstr(const char *, const char *, int);
+int	 strlcat(char *, const char *, int);
+int	 strlcpy(char *, const char *, int);
+void	 strmode(int, char *);
+char	*strsep(char **, const char *);
+
+/* SUS places swab() in unistd.h.  It is listed here for source compatibility */
+void	 swab(const void * __restrict, void * __restrict, int);
+__END_DECLS
+
+/* Some functions historically defined in string.h were placed in strings.h
+ * by SUS.  We are using "strings.h" instead of <strings.h> to avoid an issue
+ * where /Developer/Headers/FlatCarbon/Strings.h could be included instead on
+ * case-insensitive file systems.
+ */
+#include "strings.h"
+#endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
+
+
+#ifdef _USE_EXTENDED_LOCALES_
+#include <xlocale/_string.h>
+#endif /* _USE_EXTENDED_LOCALES_ */
+
+#if defined (__GNUC__) && _FORTIFY_SOURCE > 0 && !defined (__cplusplus)
+/* Security checking functions.  */
+#include <secure/_string.h>
+#endif
+
+#endif /* _STRING_H_ */
diff --git a/tests/bugs/issue-82/include/strings.h b/tests/bugs/issue-82/include/strings.h
new file mode 100644
--- /dev/null
+++ b/tests/bugs/issue-82/include/strings.h
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2000, 2007, 2010 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*-
+ * Copyright (c) 1990, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)strings.h	8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _STRINGS_H_
+#define _STRINGS_H_
+
+#include <_types.h>
+
+#include <sys/cdefs.h>
+#include <Availability.h>
+/*#include <sys/_types/_size_t.h>*/
+
+__BEGIN_DECLS
+/* Removed in Issue 7 */
+#if !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200809L
+int	 bcmp(const void *, const void *, size_t) __POSIX_C_DEPRECATED(200112L);
+void	 bcopy(const void *, void *, size_t) __POSIX_C_DEPRECATED(200112L);
+void	 bzero(void *, size_t) __POSIX_C_DEPRECATED(200112L);
+char	*index(const char *, int) __POSIX_C_DEPRECATED(200112L);
+char	*rindex(const char *, int) __POSIX_C_DEPRECATED(200112L);
+#endif
+
+int	 ffs(int);
+int	 strcasecmp(const char *, const char *);
+int	 strncasecmp(const char *, const char *, int);
+__END_DECLS
+
+/* Darwin extensions */
+#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
+__BEGIN_DECLS
+int	 ffsl(long) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
+int	 ffsll(long long) __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0);
+int	 fls(int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
+int	 flsl(long) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
+int	 flsll(long long) __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0);
+__END_DECLS
+
+#include <string.h>
+#endif
+
+#endif  /* _STRINGS_H_ */
+
diff --git a/tests/bugs/issue-82/include/sys/cdefs.h b/tests/bugs/issue-82/include/sys/cdefs.h
new file mode 100644
--- /dev/null
+++ b/tests/bugs/issue-82/include/sys/cdefs.h
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2006 - 2008 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+/***********************************************************************
+ * Not to be installed in /usr/include
+ ***********************************************************************/
+
+#ifndef _LIBC_SYS_CDEFS_H_
+#define _LIBC_SYS_CDEFS_H_
+
+/*
+ * Now include the real sys/cdefs.h.  The checks in libc-features.h will assure
+ * that those macros are consistent with the current build environment.
+ */
+#include_next <sys/cdefs.h>
+#ifndef _LIBC_NO_FEATURE_VERIFICATION
+#if defined(__arm__) || defined(__i386__) || defined(__x86_64__)
+/*#  include "libc-features.h"*/
+#else
+#  error "Unknown architecture."
+#endif
+#endif /* _LIBC_NO_FEATURE_VERIFICATION */
+
+/*
+ * symbol suffixes used for symbol versioning
+ */
+#if defined(VARIANT_LEGACY)
+#  define LIBC_SUF_UNIX03		/* nothing */
+#  define LIBC_SUF_64_BIT_INO_T		/* nothing */
+#  define LIBC_SUF_NON_CANCELABLE	/* nothing */
+#  define LIBC_SUF_1050			/* nothing */
+#else /* !VARIANT_LEGACY */
+#  if __DARWIN_ONLY_UNIX_CONFORMANCE
+#    define LIBC_SUF_UNIX03		/* nothing */
+#  else /* !__DARWIN_ONLY_UNIX_CONFORMANCE */
+#    define LIBC_SUF_UNIX03		"$UNIX2003"
+#  endif /* __DARWIN_ONLY_UNIX_CONFORMANCE */
+
+#  if defined(VARIANT_INODE32)
+#    define LIBC_SUF_64_BIT_INO_T	/* nothing */
+#  else /* !VARIANT_INODE32 */
+#    if __DARWIN_ONLY_64_BIT_INO_T
+#      define LIBC_SUF_64_BIT_INO_T	/* nothing */
+#    else /* !__DARWIN_ONLY_64_BIT_INO_T */
+#      define LIBC_SUF_64_BIT_INO_T	"$INODE64"
+#    endif /* __DARWIN_ONLY_64_BIT_INO_T */
+#  endif /* VARIANT_INODE32 */
+
+#  if defined(VARIANT_CANCELABLE)
+#    define LIBC_SUF_NON_CANCELABLE	/* nothing */
+#  else /* !LIBC_NON_CANCELABLE */
+#    define LIBC_SUF_NON_CANCELABLE	"$NOCANCEL"
+#  endif /* LIBC_NON_CANCELABLE */
+
+#  if defined(VARIANT_PRE1050)
+#    define LIBC_SUF_1050		/* nothing */
+#  else /* !VARIANT_PRE1050 */
+#    if __DARWIN_ONLY_VERS_1050
+#      define LIBC_SUF_1050		/* nothing */
+#    else /* !__DARWIN_ONLY_VERS_1050 */
+#      define LIBC_SUF_1050		"$1050"
+#    endif /* __DARWIN_ONLY_VERS_1050 */
+#  endif /* VARIANT_PRE1050 */
+
+#endif /* LIBC_UNIX03 */
+
+#define LIBC_SUF_EXTSN			"$DARWIN_EXTSN"
+
+/*
+ * symbol versioning macros
+ */
+#define LIBC_ALIAS(sym)		__asm("_" __STRING(sym) LIBC_SUF_UNIX03)
+#define LIBC_ALIAS_C(sym)	__asm("_" __STRING(sym) LIBC_SUF_NON_CANCELABLE LIBC_SUF_UNIX03)
+#define LIBC_ALIAS_I(sym)	__asm("_" __STRING(sym) LIBC_SUF_64_BIT_INO_T LIBC_SUF_UNIX03)
+#define LIBC_INODE64(sym)	__asm("_" __STRING(sym) LIBC_SUF_64_BIT_INO_T)
+
+#define LIBC_1050(sym)		__asm("_" __STRING(sym) LIBC_SUF_1050)
+#define LIBC_1050ALIAS(sym)	__asm("_" __STRING(sym) LIBC_SUF_1050 LIBC_SUF_UNIX03)
+#define LIBC_1050ALIAS_C(sym)	__asm("_" __STRING(sym) LIBC_SUF_1050 LIBC_SUF_NON_CANCELABLE LIBC_SUF_UNIX03)
+#define LIBC_1050ALIAS_I(sym)	__asm("_" __STRING(sym) LIBC_SUF_1050 LIBC_SUF_64_BIT_INO_T LIBC_SUF_UNIX03)
+#define LIBC_1050INODE64(sym)	__asm("_" __STRING(sym) LIBC_SUF_1050 LIBC_SUF_64_BIT_INO_T)
+
+#define LIBC_EXTSN(sym)		__asm("_" __STRING(sym) LIBC_SUF_EXTSN)
+#define LIBC_EXTSN_C(sym)	__asm("_" __STRING(sym) LIBC_SUF_EXTSN LIBC_SUF_NON_CANCELABLE)
+
+extern int pthread_key_init_np(int, void (*)(void *));
+
+#include <TargetConditionals.h>
+#if TARGET_IPHONE_SIMULATOR
+/* Simulator keys are offset by 200 */
+#define	__LIBC_PTHREAD_KEY(x)		(210 + (x))
+#else
+#define	__LIBC_PTHREAD_KEY(x)		(10 + (x))
+#endif
+
+/*
+ * Libc pthread key assignments
+ */
+#define __LIBC_PTHREAD_KEY_XLOCALE	__LIBC_PTHREAD_KEY(0)
+#define __LIBC_PTHREAD_KEY_TTYNAME	__LIBC_PTHREAD_KEY(1)
+#define __LIBC_PTHREAD_KEY_LOCALTIME	__LIBC_PTHREAD_KEY(2)
+#define __LIBC_PTHREAD_KEY_GMTIME	__LIBC_PTHREAD_KEY(3)
+#define __LIBC_PTHREAD_KEY_GDTOA_BIGINT	__LIBC_PTHREAD_KEY(4)
+#define __LIBC_PTHREAD_KEY_PARSEFLOAT	__LIBC_PTHREAD_KEY(5)
+
+#endif /* _LIBC_SYS_CDEFS_H_ */
diff --git a/tests/bugs/issue-82/include/xlocale/_string.h b/tests/bugs/issue-82/include/xlocale/_string.h
new file mode 100644
--- /dev/null
+++ b/tests/bugs/issue-82/include/xlocale/_string.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#ifndef _XLOCALE__STRING_H_
+#define _XLOCALE__STRING_H_
+
+__BEGIN_DECLS
+int	 strcoll_l(const char *, const char *, locale_t);
+size_t	 strxfrm_l(char *, const char *, size_t, locale_t);
+int	 strcasecmp_l(const char *, const char *, locale_t);
+char    *strcasestr_l(const char *, const char *, locale_t);
+int	 strncasecmp_l(const char *, const char *, size_t, locale_t);
+__END_DECLS
+
+#endif /* _XLOCALE__STRING_H_ */
diff --git a/tests/regression-suite.yaml b/tests/regression-suite.yaml
new file mode 100644
--- /dev/null
+++ b/tests/regression-suite.yaml
@@ -0,0 +1,112 @@
+-
+    name: abcBridge
+    on-travis: false
+
+# COMMENTED FOR THE MOMENT BECAUSE OF BOUNDS ON C2HS DEPENDENCY
+# -
+#     name: al
+#     apt-packages: [libopenal-dev]
+
+-
+  name: alsa-mixer
+  apt-packages: [libasound2-dev]
+
+# DEPENDENCY ONLY AVAILABLE IN UBUNTU 14.04+: TRAVIS IS AT 12.04
+#-
+#  name: bullet
+#  apt-packages: [libbullet-dev]
+
+-
+  name: cuda-shared-setup
+  cabal: false
+  on-travis: false
+  special-setup:
+    - mkdir cuda-packages
+    - aws s3 sync s3://cuda-packages ./cuda-packages
+    - sudo dpkg -i ./cuda-packages/cuda-repo-ubuntu1204_6.5-14_amd64.deb
+    - /bin/rm ./cuda-packages/cuda-repo-ubuntu1204_6.5-14_amd64.deb
+    - sudo apt-get update
+    - "sudo bash -c 'mv ./cuda-packages/*.deb /var/cache/apt/archives'"
+    - sudo apt-get install -y cuda
+  apt-packages: [acpid, consolekit, dkms, lib32gcc1, libc-bin,
+                 libc-dev-bin, libc6, libc6-dev, libc6-i386,
+                 libck-connector0, libpam-ck-connector,
+                 libpolkit-agent-1-0, libpolkit-backend-1-0,
+                 libpolkit-gobject-1-0, libvdpau1, libxmu-dev,
+                 libxmu-headers, policykit-1, policykit-1-gnome,
+                 python-xkit, screen-resolution-extra]
+  extra-path: [/usr/local/cuda-6.5/bin]
+  extra-so-path: [/usr/local/cuda-6.5/lib]
+
+-
+  name: cuda
+  on-travis: false
+  extra-include-dirs: [/usr/local/cuda-6.5/include]
+  extra-lib-dirs: [/usr/local/cuda-6.5/lib64]
+
+-
+  name: cufft
+  on-travis: false
+  extra-include-dirs: [/usr/local/cuda-6.5/include]
+  extra-lib-dirs: [/usr/local/cuda-6.5/lib64]
+
+# BROKEN
+#-
+#  name: CV
+#  apt-packages: [libopencv-dev, libcv-dev, libhighgui-dev]
+
+-
+  name: gnome-keyring
+  apt-packages: [libgnome-keyring-dev]
+
+-
+  name: gnuidn
+  apt-packages: [libidn11-dev]
+  on-travis: false
+
+-
+  name: haskell-mpi
+  apt-packages: [libopenmpi-dev]
+  extra-include-dirs: [/usr/include/openmpi]
+  on-travis: false
+
+-
+  name: hnetcdf
+  apt-packages: [libnetcdf-dev, libgsl0-dev, liblapack-dev]
+  run-tests: true
+
+-
+  name: hpuz
+
+-
+  name: hsndfile
+  apt-packages: [libsndfile1-dev]
+
+-
+  name: hsshellscript
+
+# DEPENDENCIES ONLY AVAILABLE IN UBUNTU 14.04+: TRAVIS IS AT 12.04
+# -
+#   name: hsqml
+#   apt-packages: [???]
+#   on-travis: false
+
+-
+  name: igraph
+  apt-ppa: [igraph/ppa]
+  apt-packages: [libigraph0-dev]
+  on-travis: false
+
+-
+  name: libssh2
+  apt-packages: [libssh2-1-dev]
+
+# BUILD PROBLEMS WITH CURRENT C2HS
+#-
+#  name: ncurses
+#  apt-packages: [ncurses-dev]
+
+# NEED TO RETEST
+# -
+#   name: OpenCL
+#   on-travis: false
diff --git a/tests/system/clean b/tests/system/clean
new file mode 100644
--- /dev/null
+++ b/tests/system/clean
@@ -0,0 +1,7 @@
+#!/bin/bash
+find . -name \*.o | xargs /bin/rm 2> /dev/null
+find . -name \*.hs | xargs /bin/rm 2> /dev/null
+find . -name \*.chi | xargs /bin/rm 2> /dev/null
+find . -name \*.chs.h | xargs /bin/rm 2> /dev/null
+find . -name \*.hi | xargs /bin/rm 2> /dev/null
+find . -mindepth 2 -type f -a -executable | xargs /bin/rm 2> /dev/null
diff --git a/tests/test-bugs.hs b/tests/test-bugs.hs
--- a/tests/test-bugs.hs
+++ b/tests/test-bugs.hs
@@ -93,6 +93,7 @@
     , testCase "Issue #152" issue152
     , testCase "Issue #155" issue155
     , testCase "Issue #180" issue180
+    , testCase "Issue #192" issue192
     ] ++
     -- Some tests that won't work on Windows.
     if os /= "cygwin32" && os /= "mingw32"
@@ -112,6 +113,9 @@
   res <- absPath "./Capital" >>= cmd
   let expected = ["upper C();", "lower c();", "upper C();"]
   liftIO $ assertBool "" (T.lines res == expected)
+
+issue192 :: Assertion
+issue192 = hs_only_build_issue 192
 
 issue180 :: Assertion
 issue180 = c2hsShelly $ chdir "tests/bugs/issue-180" $ do
