-
Notifications
You must be signed in to change notification settings - Fork 848
Open
Description
This has been reported at https://www.reddit.com/r/haskell/comments/1nrt23b/comment/ngka3xp/ as a failure to a build Stack itself:
<command-line>: note: this is the location of the previous definition
In file included from /root/stack-3.7.1/dist-newstyle/build/x86_64-solaris/ghc-9.8.2/stack-3.7.1/build/System/Terminal_hsc_make.c:1:
Terminal.hsc: In function 'main':
Terminal.hsc:28:15: error: invalid application of 'sizeof' to incomplete type 'struct winsize'
/opt/local/lib/ghc-9.8.2/lib/template-hsc.h:96:39: note: in definition of macro 'hsc_size'
96 | hsc_printf("(%ld)", (long) sizeof(t));
| ^
/opt/local/lib/ghc-9.8.2/lib/template-hsc.h:102:9: error: field 'b' has incomplete type
102 | x b; \
| ^
Terminal.hsc:29:5: note: in expansion of macro 'hsc_alignment'
In file included from /opt/local/lib/ghc-9.8.2/lib/template-hsc.h:11:
/opt/local/lib/ghc-9.8.2/lib/template-hsc.h:82:24: error: invalid use of undefined type 'struct winsize'
82 | (long) offsetof (t, f));
|
This seemingly stems from
stack/src/unix/System/Terminal.hsc
Lines 27 to 32 in b2457a8
| instance Storable WindowWidth where | |
| sizeOf _ = (#size struct winsize) | |
| alignment _ = (#alignment struct winsize) | |
| peek p = WindowWidth <$> (#peek struct winsize, ws_col) p | |
| poke p (WindowWidth w) = do | |
| (#poke struct winsize, ws_col) p w |
I have no idea what's going on. Looking at a similar functionality in https://github.com/biegunka/terminal-size/blob/master/src/System/Console/Terminal/Posix.hsc, I notice a suspicious line
#let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__)
which might or might not have to do something with the latter error.
BTW is there a reason stack does not use terminal-size to get the terminal width and rolls out its own implementation?