commercialhaskell / commercialhaskell/stack

System.Teminal.hsc fails to compile on a Solaris-family OS

Open
#6,811 5 comments 0 reactions 2 assignees Claimed by @Bodigrim View on GitHub
component: Oracle Solaris resolution: upstream issue resolution: wontfix type: question
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.