With a bit more hacks, there is some progress,
```
$ echo 'import ssl; int main() { return 0; }' > foo2.d
```
```
$ gdc foo2.d
ssl.i:1200:20: error: type-specifier missing for declaration of
‘nullptr_t’
1200 | typedef __typeof__(nullptr) nullptr_t;
| ^
```
```
$ gcc -E -P -D__restrict="" -D__inline="" -D__extension__=""
'-D__asm__(x)= ' '-D__typeof__(x)=void*'
/usr/include/openssl/ssl.h > ssl.i
/usr/include/openssl/ssl.h:21:9: warning: ‘#pragma once’ in main
file [-Wpragma-once-outside-header]
21 | #pragma once
| ^~~~
```
However better way is doing this for this `nullptr` and
`nullptr_t` stuff, and `__inline` (this second part might be
accidental somehow) - just preprocess with older C standard:
`-std=c11`
so
```
$ gcc -E -P -D__restrict="" -D__extension__="" '-D__asm__(x)= '
-std=c11 /usr/include/openssl/ssl.h > ssl.i
/usr/include/openssl/ssl.h:21:9: warning: ‘#pragma once’ in main
file [-Wpragma-once-outside-header]
21 | #pragma once
|
```
```
$ gdc foo2.d
ssl.i:875:63: warning: conflicting types for built-in function
‘vfprintf’; expected ‘extern (C) int(void*, const(char)*,
__va_list_tag[1])’ [-Wbuiltin-declaration-mismatch]
875 | __gnuc_va_list __arg) __attribute__ ((__nonnull__
(1)));
|
^
ssl.i:876:65: warning: conflicting types for built-in function
‘vprintf’; expected ‘extern (C) int(const(char)*,
__va_list_tag[1])’ [-Wbuiltin-declaration-mismatch]
876 | extern int vprintf (const char * __format, __gnuc_va_list
__arg);
|
^
ssl.i:878:59: warning: conflicting types for built-in function
‘vsprintf’; expected ‘extern (C) int(char*, const(char)*,
__va_list_tag[1])’ [-Wbuiltin-declaration-mismatch]
878 | __gnuc_va_list __arg) __attribute__
((__nothrow__));
|
^
ssl.i:884:83: warning: conflicting types for built-in function
‘vsnprintf’; expected ‘extern (C) int(char*, ulong, const(char)*,
__va_list_tag[1])’ [-Wbuiltin-declaration-mismatch]
884 | __attribute__ ((__nothrow__)) __attribute__
((__format__ (__printf__, 3, 0)));
|
^
ssl.i:909:86: warning: conflicting types for built-in function
‘vfscanf’; expected ‘extern (C) int(void*, const(char)*,
__va_list_tag[1])’ [-Wbuiltin-declaration-mismatch]
909 | __attribute__ ((__format__ (__scanf__, 2, 0)))
__attribute__ ((__nonnull__ (1)));
|
^
ssl.i:911:53: warning: conflicting types for built-in function
‘vscanf’; expected ‘extern (C) int(const(char)*,
__va_list_tag[1])’ [-Wbuiltin-declaration-mismatch]
911 | __attribute__ ((__format__ (__scanf__, 1, 0))) ;
| ^
ssl.i:914:93: warning: conflicting types for built-in function
‘vsscanf’; expected ‘extern (C) int(const(char)*, const(char)*,
__va_list_tag[1])’ [-Wbuiltin-declaration-mismatch]
914 | __attribute__ ((__nothrow__ , __leaf__))
__attribute__ ((__format__ (__scanf__, 2, 0)));
|
^
ssl.i:916:86: warning: conflicting types for built-in function
‘vfscanf’; expected ‘extern (C) int(void*, const(char)*,
__va_list_tag[1])’ [-Wbuiltin-declaration-mismatch]
916 | __attribute__ ((__format__ (__scanf__, 2, 0)))
__attribute__ ((__nonnull__ (1)));
|
^
ssl.i:918:53: warning: conflicting types for built-in function
‘vscanf’; expected ‘extern (C) int(const(char)*,
__va_list_tag[1])’ [-Wbuiltin-declaration-mismatch]
918 | __attribute__ ((__format__ (__scanf__, 1, 0))) ;
| ^
ssl.i:920:52: warning: conflicting types for built-in function
‘vsscanf’; expected ‘extern (C) int(const(char)*, const(char)*,
__va_list_tag[1])’ [-Wbuiltin-declaration-mismatch]
920 | __attribute__ ((__format__ (__scanf__, 2, 0)));
| ^
```
So it appears to work.