commercialhaskell / commercialhaskell/stack
System.Teminal.hsc fails to compile on a Solaris-family OS
- Dominant language
- Haskell
- Stars
- 4.1k
- Forks
- 850
- Avg merge
- 10h 37m
- Merged PRs (30d)
- 4
Description
This has been reported at https://www.reddit.com/r/haskell/comments/1nrt23b/comment/ngka3xp/ as a failure to a build Stack itself:
```
: 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
https://github.com/commercialhaskell/stack/blob/b2457a8f147c228bd2aba9c00cb16e3c28cd0a3a/src/unix/System/Terminal.hsc#L27-L32
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?
Contributor guide
Assessment
This issue has not been assessed yet.