[GHC] #15758: hsc2hs broken due to incorrect argument passing to the hsc2hs executable

GHC ghc-devs at haskell.org
Thu Oct 18 08:36:43 UTC 2018


#15758: hsc2hs broken due to incorrect argument passing to the hsc2hs executable
-------------------------------------+-------------------------------------
        Reporter:  osa1              |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by hvr):

 It's remarkable how many bugs this issue entails... :-)

 I've quickly addressed part of the issue via
 https://github.com/haskell/hsc2hs/commit/8807b4cd9b9efc719828b52cd9aecb9892d3d80b

 (one problem to consider is that we have at least two lib:Cabal releases
 out there eligible to custom Setup.hs scripts as well as included in the
 cabal-install-2.4.0.0 release  which have the `>= 0.68.4` logic hardwired;
 so the metadata revision is the most economical way to mitigate that
 issue)

 So the next thing that needs fixing is the hsc2hs wrapper script used for
 inplace; moreoever I noticed yet another bug that wasn't mentioned here:

 GHC also installs a wrapper script into its installed `bin/` folder, e.g.
 `/opt/ghc/8.6.1/bin/hsc2hs`:

 {{{#!bash
 #!/bin/sh
 exedir="/opt/ghc/8.6.1/lib/ghc-8.6.1/bin"
 exeprog="hsc2hs"
 executablename="$exedir/$exeprog"
 datadir="/opt/ghc/8.6.1/share"
 bindir="/opt/ghc/8.6.1/bin"
 topdir="/opt/ghc/8.6.1/lib/ghc-8.6.1"
 HSC2HS_EXTRA="--cflag=-fno-stack-protector --lflag=-fuse-ld=gold"
 #!/bin/sh

 tflag="--template=$topdir/template-hsc.h"
 Iflag="-I$topdir/include/"
 for arg do
     case "$arg" in
 # On OS X, we need to specify -m32 or -m64 in order to get gcc to
 # build binaries for the right target. We do that by putting it in
 # HSC2HS_EXTRA. When cabal runs hsc2hs, it passes a flag saying which
 # gcc to use, so if we set HSC2HS_EXTRA= then we don't get binaries
 # for the right platform. So for now we just don't set HSC2HS_EXTRA=
 # but we probably want to revisit how this works in the future.
 #        -c*)          HSC2HS_EXTRA=;;
 #        --cc=*)       HSC2HS_EXTRA=;;
         -t*)          tflag=;;
         --template=*) tflag=;;
         --)           break;;
     esac
 done

 exec "$executablename" ${tflag:+"$tflag"} $HSC2HS_EXTRA ${1+"$@"} "$Iflag"
 }}}

 while this script doesn't inject any `--`s before response-file args, it
 exhibits a different problem: it's logic is completely bypassed when you
 use response files, as the script then cannot rewrite the flags because it
 doesn't look into the response files!

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15758#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list