Skip to content

Instantly share code, notes, and snippets.

@AlainODea
Created January 10, 2016 17:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AlainODea/bd5b3e0e6f7c4227f009 to your computer and use it in GitHub Desktop.
Save AlainODea/bd5b3e0e6f7c4227f009 to your computer and use it in GitHub Desktop.
GHC 7.10.3 build fails with cpphs
/* DO NOT EDIT: This file is automatically generated by Cabal */
/* package rts-1.0 */
#define VERSION_rts "1.0"
#define MIN_VERSION_rts(major1,major2,minor) (\
(major1) < 1 || \
(major1) == 1 && (major2) < 0 || \
(major1) == 1 && (major2) == 0 && (minor) <= 0)
/* package ghc-prim-0.4.0.0 */
#define VERSION_ghc_prim "0.4.0.0"
#define MIN_VERSION_ghc_prim(major1,major2,minor) (\
(major1) < 0 || \
(major1) == 0 && (major2) < 4 || \
(major1) == 0 && (major2) == 4 && (minor) <= 0)
/* package integer-gmp-1.0.0.0 */
#define VERSION_integer_gmp "1.0.0.0"
#define MIN_VERSION_integer_gmp(major1,major2,minor) (\
(major1) < 1 || \
(major1) == 1 && (major2) < 0 || \
(major1) == 1 && (major2) == 0 && (minor) <= 0)
/* tool cpphs-1.19.3 */
#define TOOL_VERSION_cpphs "1.19.3"
#define MIN_TOOL_VERSION_cpphs(major1,major2,minor) (\
(major1) < 1 || \
(major1) == 1 && (major2) < 19 || \
(major1) == 1 && (major2) == 19 && (minor) <= 3)
/* tool gcc-4.8 */
#define TOOL_VERSION_gcc "4.8"
#define MIN_TOOL_VERSION_gcc(major1,major2,minor) (\
(major1) < 4 || \
(major1) == 4 && (major2) < 8 || \
(major1) == 4 && (major2) == 8 && (minor) <= 0)
/* tool ghc-7.10.3 */
#define TOOL_VERSION_ghc "7.10.3"
#define MIN_TOOL_VERSION_ghc(major1,major2,minor) (\
(major1) < 7 || \
(major1) == 7 && (major2) < 10 || \
(major1) == 7 && (major2) == 10 && (minor) <= 3)
/* tool ghc-pkg-7.10.3 */
#define TOOL_VERSION_ghc_pkg "7.10.3"
#define MIN_TOOL_VERSION_ghc_pkg(major1,major2,minor) (\
(major1) < 7 || \
(major1) == 7 && (major2) < 10 || \
(major1) == 7 && (major2) == 10 && (minor) <= 3)
/* tool haddock-2.14.3 */
#define TOOL_VERSION_haddock "2.14.3"
#define MIN_TOOL_VERSION_haddock(major1,major2,minor) (\
(major1) < 2 || \
(major1) == 2 && (major2) < 14 || \
(major1) == 2 && (major2) == 14 && (minor) <= 3)
/* tool hpc-0.67 */
#define TOOL_VERSION_hpc "0.67"
#define MIN_TOOL_VERSION_hpc(major1,major2,minor) (\
(major1) < 0 || \
(major1) == 0 && (major2) < 67 || \
(major1) == 0 && (major2) == 67 && (minor) <= 0)
/* tool hsc2hs-0.67 */
#define TOOL_VERSION_hsc2hs "0.67"
#define MIN_TOOL_VERSION_hsc2hs(major1,major2,minor) (\
(major1) < 0 || \
(major1) == 0 && (major2) < 67 || \
(major1) == 0 && (major2) == 67 && (minor) <= 0)
/* tool pkg-config-0.26 */
#define TOOL_VERSION_pkg_config "0.26"
#define MIN_TOOL_VERSION_pkg_config(major1,major2,minor) (\
(major1) < 0 || \
(major1) == 0 && (major2) < 26 || \
(major1) == 0 && (major2) == 26 && (minor) <= 0)
/* tool strip-2.24 */
#define TOOL_VERSION_strip "2.24"
#define MIN_TOOL_VERSION_strip(major1,major2,minor) (\
(major1) < 2 || \
(major1) == 2 && (major2) < 24 || \
(major1) == 2 && (major2) == 24 && (minor) <= 0)
#define CURRENT_PACKAGE_KEY "base_HQfYBxpPvuw8OunzQu6JGM"
@AlainODea
Copy link
Author

Iterative narrowing.

broken2.hs:

{-# LANGUAGE CPP #-}

#define EXAMPLE_MACRO(arg1,arg2) (\
                               arg1 > arg2)

#if defined(EXAMPLE_MACRO)
#endif

can't be preprocessed correctly:

$ cpphs --cpp broken2.hs -o $tempfile
cpphs: macro EXAMPLE_MACRO expected 2 arguments, but was given 0
$

@AlainODea
Copy link
Author

Iterative narrowing.

working2.hs:

{-# LANGUAGE CPP #-}

#define EXAMPLE_MACRO(arg1,arg2) (\
                               arg1 > arg2)

#ifdef EXAMPLE_MACRO
#endif

can be preprocessed correctly:

$ cpphs --cpp working2.hs -o $tempfile
$

@AlainODea
Copy link
Author

I've isolated the issue to the handling of if defined on multi-argument macros.

if defined works on single-argument macros.

working1.hs:

{-# LANGUAGE CPP #-}

#define EXAMPLE_MACRO(arg) (\
                               arg)

#if defined(EXAMPLE_MACRO)
#endif

preprocess it (it works!):

$ cpphs --cpp working1.hs -o $tempfile
$

ifdef works on multiple-argument macros.

working2.hs:

{-# LANGUAGE CPP #-}

#define EXAMPLE_MACRO(arg1,arg2) (\
                               arg1 > arg2)

#ifdef EXAMPLE_MACRO
#endif

preprocess it (it works!):

$ cpphs --cpp working2.hs -o $tempfile
$

if defined fails on multi-argument macros.

broken2.hs:

{-# LANGUAGE CPP #-}

#define EXAMPLE_MACRO(arg1,arg2) (\
                               arg1 > arg2)

#if defined(EXAMPLE_MACRO)
#endif

preprocess it (it fails!):

$ cpphs --cpp broken2.hs -o $tempfile
cpphs: macro EXAMPLE_MACRO expected 2 arguments, but was given 0
$

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment