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.

Reply via email to