spf_template gnu &&
spf_url home  'http://haskell.org/ghc/' &&
spf_url watch 'http://haskell.org/ghc/download.html' &&
spf_url src   "http://haskell.org/ghc/dist/${spf_version?}/ghc-${spf_version?}-src.tar.bz2" &&
#http://www.haskell.org/ghc/dist/stable/dist/
#spf_url src_add "http://haskell.org/ghc/dist/${spf_version?}/ghc-${spf_version?}-src-extralibs.tar.bz2" &&
spf_depend gmp &&
spf_depend ncurses &&
spf_depend readline &&
#spf_depend haddock     degree optional flags none &&
#spf_depend greencard   degree optional flags none &&
spf_depend binutils    degree optional && 
#spf_depend xproto      degree optional flags include && 
#spf_depend libx11      degree optional && 
#spf_depend libice      degree optional && 
#spf_depend libxt       degree optional && 
##spf_depend mesalib     degree optional && 
#spf_depend freetype    degree optional && 
#spf_depend fontconfig  degree optional && 
#spf_depend libpng      degree optional && 
#spf_depend kbproto     degree optional flags include && 
#spf_depend renderproto degree optional flags include && 
#spf_depend libxrender  degree optional && 
#spf_depend libxau      degree optional && 
#spf_depend libxdmcp    degree optional && 
#spf_depend glib        degree optional && 
#spf_depend atk         degree optional && 
#spf_depend cairo       degree optional && 
#spf_depend pango       degree optional && 
#spf_depend gtk         degree optional && 
spf_cc hc_args -O2 'The arguments on the first line of this file are passed to the Haskell compiler.' &&
#spf_template_gnu_x &&
#spf_args configure \
#  --with-readline-includes="${spf_path_conf?}"/readline/include && 
#spf_args configure \
#  --with-readline-libraries="${spf_path_conf?}"/readline/library && 
spf_args configure --with-gmp-includes="${spf_path_conf?}"/gmp/include &&
spf_args configure --with-gmp-libraries="${spf_path_conf?}"/gmp/library &&
# --with-greencard=ARG    Use ARG as the path to greencard [default=autodetct]
spf_template_gnu_do_before_configure() {
  prj_x2 prj_append LD_LIBRARY_PATH "${spf_path_conf?}"/gmp/library &&
  prj_u2 prj_set pkg_args_hc "${spf_ccv_hc_args?}" &&
  prj_u2 prj_set pkg_hsc2hs_opts '' &&
  prj_u2 prj_set pkg_args_setup '' &&
  eval "set x ${spf_args_cpp?}" && shift &&
  while test "$#" != 0; do {
    prj_qlist_push pkg_args_hc -optc"$1" &&
    prj_qlist_push pkg_args_hc -opta"$1" &&
    #prj_qlist_push pkg_args_setup --cc-option="$1" &&
    case $1 in
      -I*) prj_qlist_push pkg_hsc2hs_opts "$1";;
      *) :;;
    esac &&
    shift
  } || return "$?"; done &&
  eval "set x ${spf_args_cc?}" && shift &&
  while test "$#" != 0; do {
    prj_qlist_push pkg_args_hc -optc"$1" &&
    prj_qlist_push pkg_args_hc -opta"$1" &&
    prj_qlist_push pkg_args_hc -optl"$1" &&
    #prj_qlist_push pkg_args_setup --cc-option="$1" &&
    #prj_qlist_push pkg_args_setup --ld-option="$1" &&
    shift
  } || return "$?"; done &&
  eval "set x ${spf_args_ld?}" && shift &&
  while test "$#" != 0; do {
    prj_qlist_push pkg_args_hc -optl"$1" &&
    if test -Xlinker = "$1"
      then :
      else prj_qlist_push pkg_args_setup --ld-option="$1"
    fi &&
    shift
  } || return "$?"; done &&
  case ${spf_version?}. in
    6.8.3.)
      prj_sedfile utils/mkdependC/mkdependC.prl \
        "s/dep ne ''/dep=~m:^[^\/]:/" &&
      prj_sedfile libraries/readline/readline.buildinfo.in '
/^cc-options:/s/$/ @CPPFLAGS@ @CFLAGS@/
/^ld-options:/s/$/ @CFLAGS@ @LDFLAGS@/
' &&
      prj_sedfile libraries/Cabal/Distribution/PackageDescription.hs '
755,770{
s/= combine/= combine nub/
s/nub cppOptions/id  cppOptions/
s/nub ccOptions/id  ccOptions/
s/nub ldOptions/id  ldOptions/
s/nub extraLibs/id  extraLibs/
}
s/combine :: (Eq a) => (BuildInfo -> \[a\]) -> \[a\]/combine :: (Eq a) => ([a] -> [a]) -> (BuildInfo -> [a]) -> [a]/
s/combine f = nub/combine nubOrId f = nubOrId/
' &&
      prj_u2 prj_capture pkg_q_args_hc prj_quote_sed : "${pkg_args_hc?}" &&
      prj_sedfile configure '
s:\(\$WithGhc\)\( -v0 --make pwd -o pwd\):\1 '"${pkg_q_args_hc?}"'\2:
' &&
      prj_sedfile utils/ghc-pkg/Makefile 's:\$(HC) :&$(SRC_HC_OPTS) :' &&
      prj_sedfile compiler/Makefile      's:\$(HC) :&$(SRC_HC_OPTS) :' &&
      prj_sedfile libraries/Makefile     's:--make:$(SRC_HC_OPTS) &:' &&
      prj_sedfile utils/hsc2hs/Makefile  's:--make:$(SRC_HC_OPTS) &:';;
    6.12.[23].)
      prj_sedfile mk/config.mk.in 's:^GZIP\( *=\):GZIP_CMD\1:' &&
      prj_sedfile libffi/ghc.mk 's:\$(GZIP):$(GZIP_CMD):';;
    *) :;;
  esac &&
  case ${spf_version?} in
    6.12.[23]|7.0.1)
      ( cd utils/ghc-pwd &&
        eval "ghc ${pkg_args_hc?} -v0 --make ghc-pwd -o ghc-pwd"
      );;
    7.0.3)
      prj_u2 prj_capture pkg_args_hc_sed prj_quote_sed : "${pkg_args_hc?}" &&
      prj_sedfile configure \
        's:if ! "\$WithGhc".*/ghc-pwd$:& '"${pkg_args_hc_sed?}:";;
    *) :;;
  esac &&
  prj_echo "
SRC_HC_OPTS+= ${pkg_args_hc?}
SRC_HSC2HS_OPTS+= ${pkg_hsc2hs_opts?}
SRC_CC_OPTS+= ${spf_args_cpp?} ${spf_args_cc?}
GHC_CC_OPTS+= ${pkg_args_hc?}
#GhcRtsCcOpts+= ${pkg_args_hc?}
#GhcLibHcOpts+= ${pkg_args_hc?}
" > mk/build.mk &&
  case ${spf_version?} in
    6.8.*|6.10.*) :;;
    *) prj_echo "
SRC_LD_OPTS+= ${spf_args_ld?}
libraries/integer-gmp_CONFIGURE_OPTS=--extra-include-dirs=${spf_path_conf?}/gmp/include --extra-lib-dirs=${spf_path_conf?}/gmp/library
libraries/terminfo_CONFIGURE_OPTS=--extra-include-dirs=${spf_path_conf?}/ncurses/include --extra-lib-dirs=${spf_path_conf?}/ncurses/library
#libraries/integer-gmp_CONFIGURE_OPTS=--configure-option=--with-gmp-includes=${spf_path_conf?}/gmp/include --configure-option=--with-gmp-libraries=${spf_path_conf?}/gmp/library
#libraries/terminfo_CONFIGURE_OPTS=--configure-option=--with-curses-includes=${spf_path_conf?}/ncurses/include --configure-option=--with-curses-libraries=${spf_path_conf?}/ncurses/library
" >> mk/build.mk;;
  esac
} &&
case ${spf_version?} in
  6.8.*|6.10.*) :;;
  *) spf_no_check;; ## the tests are not included
esac &&
spf_tested_version 7.0.3 &&
spf_tested_version 7.0.1 &&
spf_tested_version 6.12.3 &&
spf_tested_version 6.12.2 &&
spf_tested_version 6.12.1 &&
spf_tested_version 6.10.4 &&
spf_tested_version 6.10.3 &&
spf_tested_version 6.10.1 &&
spf_tested_version 6.8.3

