Conversation
LGTM |
Win32 error: Great. I guess it's time to use this little DMD feature. |
016077b
to
b805dc0
Compare
Didn't seem to help. @braddr , am I correct that Win_32_64 is using DigitalMars' Make ? Could you offer some advice on this issue (Command too long) ? |
That's likely a limitation of the Digital Mars make: the win64 build command line is slightly above 10000 characters, while the win32 is just a couple of characters below. It used to be 8192 in the command line interpreter, but it's 32768 for the CreateProcess function (https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx). The usual workaround is to place the command line arguments into a temporary file and use |
According to the manual that's what using |
Ah, I wasn't aware of this functionlity. It actually seems to work here until a higher length (probably 32768 as the limit of environment strings). |
CC @WalterBright : I tried using |
If the issue here is windows make, can't we do something different for it? Clearly windows doesn't need linux headers. |
No, that's something else. Those cause DigitalMars Make to pass the command line in an environment variable, not a file. This is functionality specific to the DigitalMars toolchain, and although it is apparently supported by OPTLINK, it is not supported by dmd itself. I suggest trying manually write the list to a temporary file in the Makefile target rule. |
Unfortunately, it does support it: https://github.com/dlang/dmd/blob/master/src/ddmd/root/response.d#L65 Nevertheless, I'd also suggest to use an explicit temporary file, too. |
We had a discussion with @WalterBright at DConf about it. He offered to give me access to DM Make to track the problem down. I'd rather fix the issue than add another workaround. |
The trouble is just that you have applied the "~" fix to win32.mak, but not to win64.mak. |
2b9a99d
to
96c327e
Compare
Some files were not part of `mak/SRCS`, and thus were not compiled it. Since they are C bindings, it was unnoticed for a long time, as most operations won't require the rare symbols this module defined. However for things such as static array declarations, the `__init` of the struct might be required, which triggers a linker error. One simple way to trigger the issue was to use the function `timersub` defined in `core.sys.linux.sys.time`: --- src/ocean/core/UnitTestRunner.d:671: undefined reference to 'core.sys.linux.sys.time.timersub(const(core.sys.posix.sys.time.timeval*), const(core.sys.posix.sys.time.timeval*), core.sys.posix.sys.time.timeval*)' --- The change to win{32,64}.mak was mandatory as the toolchain on the auto-tester cannot cope with that number of files, and errors with "Command too long". DMD support 'response file' for that purpose. Using `*` is a DigitalMars MAKE extension which will pass commands > 996 chars via the env.
Oh damn, it was that simple, thanks !
|
@Geod24: Jenkins is Linux only (ATM) and unfortunately broken since a couple of days. It's not related to this PR. |
So it won't prevent a merge, despite being |
It does, but @CyberShadow can disable it |
Was a temporary failure with the interactive dub remove test, not exactly sure why it failed. I just reran it, need to change Jenkins auth to allow more people to rerun tests (but am still traveling atm.). |
1 similar comment
Was a temporary failure with the interactive dub remove test, not exactly sure why it failed. I just reran it, need to change Jenkins auth to allow more people to rerun tests (but am still traveling atm.). |
Some files were not part of
mak/SRCS
, and thus were not compiled it.Since they are C bindings, it was unnoticed for a long time,
as most operations won't require the rare symbols this module defined.
However for things such as static array declarations,
the
__init
of the struct might be required, which triggers a linker error.One simple way to trigger the issue was to use the function
timersub
defined incore.sys.linux.sys.time
:The patch is a superset of: https://github.com/sociomantic-tsunami/ocean/blob/fef725ca9643af4ffcccb44bcc8a2ff7598c4e24/docker/dmd-transitional/patches/druntime/0010-Add-missing-binding-in-SRCS.patch