Closed wilzbach closed 7 years ago
Comment author: Timothee Cour <timothee.cour2@gmail.com>
main.d: void main(){}
rdmd --build-only --force -c main.d fails: ./main: No such file or directory
also tried with -of=main.o and -ofmain.o
IIRC that used to work.
rdmd build 20161118 DMD64 D Compiler v2.072.0
4 rdmd 0x000000010d8648ca @ trusted bool std.file.cenforce!(bool).cenforce(bool, const(char)[], const(char), immutable(char)[], ulong) + 150 5 rdmd 0x000000010d8c64c8 @ trusted void std.file.renameImpl(const(char)[], const(char)[], const(char), const(char)*) + 84 6 rdmd 0x000000010d866308 @ safe void std.file.rename!(immutable(char)[], immutable(char)[]).rename(immutable(char)[], immutable(char)[]) + 252 7 rdmd 0x000000010d84645d int rdmd.rebuild(immutable(char)[], immutable(char)[], immutable(char)[], immutable(char)[], const(immutable(char)[][immutable(char)[]]), immutable(char)[][]) + 2649 8 rdmd 0x000000010d844827 _Dmain + 5327 9 rdmd 0x000000010d8ac3f7 D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZ9__lambda1MFZv + 39 10 rdmd 0x000000010d8ac323 void rt.dmain2._d_run_main(int, char, extern (C) int function(char[][])*).tryExec(scope void delegate()) + 35 11 rdmd 0x000000010d8ac39c void rt.dmain2._d_run_main(int, char*, extern (C) int function(char[][])).runAll() + 44 12 rdmd 0x000000010d8ac323 void rt.dmain2._d_run_main(int, char, extern (C) int function(char[][])*).tryExec(scope void delegate()) + 35 13 rdmd 0x000000010d8ac289 _d_run_main + 497 14 rdmd 0x000000010d844a2f main + 15 15 libdyld.dylib 0x00007fff85a195ac start + 0 16 ??? 0x0000000000000004 0x0 + 4
Comment author: Timothee Cour <timothee.cour2@gmail.com>
these also fail:
mkdir temp rdmd --build-only --force -lib -od=temp/ main.d core.exception.AssertError@ rdmd.d(489): should have been created by compileRootAndGetDeps
rdmd --build-only --force -lib -of=temp/main.a main.d core.exception.AssertError@ rdmd.d(489): should have been created by compileRootAndGetDeps
rdmd --build-only --force -lib -oftemp/main.a main.d std.file.FileException@ std/file.d(679): temp/main.a: No such file or directory
rdmd --build-only --force -lib -odtemp/ main.d std.file.FileException@ std/file.d(679): temp/main.a: No such file or directory
Comment author: Timothee Cour <timothee.cour2@gmail.com>
as well as:
rdmd --build-only --force -lib -odtemp/ -o- main.d object.Exception@ rdmd.d(95): Option -o- currently not supported by rdmd
Comment author: Timothee Cour <timothee.cour2@gmail.com>
also broken: rdmd --build-only --force -od=/tmp/bar/ main.d
std.file.FileException@ std/file.d(679): =/tmp/bar/main: No such file or directory => rdmd doesn't seem to understand the new '=' syntax in '-od=' even though dmd does (DMD64 D Compiler v2.072.1)
the only thing that works is:
rdmd --build-only --force -lib -od/tmp/bar/ main.d rdmd --build-only --force -od/tmp/bar/ main.d
but NOT these: s/-od/-od=/ s/-lib/-c/ or when we replace absolute path in od by relative path
Comment author: Andrej Mitrovic <andrej.mitrovich@gmail.com>
https://github.com/dlang/tools/commit/a63233c22dce33ff91141c5706cdc7d66a8c0099 seems to have caused the regression for the first test-case.
Comment author: Andrej Mitrovic <andrej.mitrovich@gmail.com>
(In reply to Andrej Mitrovic from comment BZ#4)
https://github.com/dlang/tools/commit/ a63233c22dce33ff91141c5706cdc7d66a8c0099 seems to have caused the regression for the first test-case.
That's a merge commit, it was specifically 10ca158.
Comment author: ag0aep6g@gmail.com
Found another one while looking into this: https://issues.dlang.org/show_bug.cgi?id=16966
Regarding the bugs here:
The -of=/-od= thing (comment 3) seems to be a simple oversight. rdmd has just not been thought of when the feature was implemented in dmd. Should be easy to fix.
-o- not working (comment 2) seems to a deliberate restriction.
Supporting -c as in the summary may be some work. I must have missed that scenario completely when doing https://github.com/dlang/tools/pull/194. Problem is that rdmd now treats the root module specially: compiles it separately, links everything together in a separate step. That doesn't go naturally with -c, as far as I see. May have to detect -c and do things completely different then.
-lib not working with relative paths (comment 3) seems odd. I hope it's just a simple bug, and not a design flaw. I haven't investigated.
I'm going to look into this further, but it may take me a while. If anyone else wants to have a go, that would be great.
Comment author: Vladimir Panteleev <dlang-bugzilla@thecybershadow.net>
Sorry, what is the use case of using -c ? I think it working was a mere accident. If you want to syntax-check the file, use dmd (not rdmd) with -o-. Or do you want to compile everything into a single object file for some reason?
Comment author: Vladimir Panteleev <dlang-bugzilla@thecybershadow.net>
There is a known problem with -lib and -od:
https://issues.dlang.org/show_bug.cgi?id=14296
Admittedly it's my fault as my commit introduced the regression, however the underlying bug is that DMD treats -od differently depending on whether -lib is passed or not, which I did not expect.
Comment author: Timothee Cour <timothee.cour2@gmail.com>
Sorry, what is the use case of using -c ? I think it working was a mere accident. If you want to syntax-check the file, use dmd (not rdmd) with -o-. Or do you want to compile everything into a single object file for some reason?
Use case: when dmd's built-in linker magic isn't good enough (eg http://forum.dlang.org/post/mailman.765.1481492407.9448.digitalmars-d@ puremagic.com where i have to first compile then link to get -pie but I keep running into similar issues where i want to link seperately because the default isn't good enough)
Comment author: @andralex
It may indeed be worthwhile to support -c as in "solve all dependencies and produce a big .o file ready for linking". There is no easy way to do that with either dmd or rdmd. Alternatively we could use a --no-link flag but -c seems more direct. Vladimir, what do you think?
Comment author: Vladimir Panteleev <dlang-bugzilla@thecybershadow.net>
ag0aep6g: Since implementing -c directly is more complicated with the recent changes, can we emulate by using -lib and extracting the lib file's contents or such?
Timothee, can you substitute -c with -lib in your use case? If so, we could fix the -od problem and make -c an explicitly unsupported switch like -o-.
Comment author: Vladimir Panteleev <dlang-bugzilla@thecybershadow.net>
ag0aep6g: There is now an outdated comment in rdmd:
// When building libraries, DMD does not generate object files. // Instead, it uses the -od parameter as the location for the library file. // Thus, override objDir (which is normally a temporary directory) // to be the target output directory.
DMD will now use -c even with -lib. Was this something that changed due to your recent changes?
Comment author: Vladimir Panteleev <dlang-bugzilla@thecybershadow.net>
(In reply to Vladimir Panteleev from comment BZ#12)
DMD will now use -c even with -lib.
rdmd, not DMD
Comment author: Vladimir Panteleev <dlang-bugzilla@thecybershadow.net>
Another regression: issue 16978
Since there has been no reply from ag0aep6g for 5 days, I am going to revert that PR and add tests for the regressions. Then they or anyone else can have a go at it.
Comment author: Vladimir Panteleev <dlang-bugzilla@thecybershadow.net>
Comment author: github-bugzilla@puremagic.com
Commits pushed to stable at https://github.com/dlang/tools
https://github.com/dlang/tools/commit/b6ec807712a452a47f712364b86d02335af2a93f Fix Issue 16962 - rdmd --build-only --force -c main.d fails: ./main: No such file or directory
The actual fix was done by the revert. This simply adds a test.
https://github.com/dlang/tools/commit/bfbcd086bad634066ba142964823f1689e879aaf Merge pull request BZ#207 from CyberShadow/issue-16962
rdmd fixes (issues 14296, 16962 and 16978) merged-on-behalf-of: Martin Nowak <code@ dawg.eu>
Comment author: github-bugzilla@puremagic.com
Commits pushed to master at https://github.com/dlang/tools
https://github.com/dlang/tools/commit/b6ec807712a452a47f712364b86d02335af2a93f Fix Issue 16962 - rdmd --build-only --force -c main.d fails: ./main: No such file or directory
https://github.com/dlang/tools/commit/bfbcd086bad634066ba142964823f1689e879aaf Merge pull request BZ#207 from CyberShadow/issue-16962
Comment author: Timothee Cour <timothee.cour2@gmail.com>
Split of the bug pertaining to -of= -od= to https://issues.dlang.org/show_bug.cgi?id=17064
Comment author: github-bugzilla@puremagic.com
Commits pushed to newCTFE at https://github.com/dlang/tools
https://github.com/dlang/tools/commit/b6ec807712a452a47f712364b86d02335af2a93f Fix Issue 16962 - rdmd --build-only --force -c main.d fails: ./main: No such file or directory
https://github.com/dlang/tools/commit/bfbcd086bad634066ba142964823f1689e879aaf Merge pull request BZ#207 from CyberShadow/issue-16962
Note: the issue was created automatically migrated from https://issues.dlang.org
Original bug ID: BZ#16962 From: Timothee Cour <timothee.cour2@gmail.com> Reported version: D2 CC: ag0aep6g@gmail.com, @andralex, andrej.mitrovich@gmail.com, dlang-bugzilla@thecybershadow.net, timothee.cour2@gmail.com
See also: BZ#16978