wilzbach / tools-test

1 stars 0 forks source link

rdmd --build-only --force -c main.d fails: ./main: No such file or directory #154

Closed wilzbach closed 7 years ago

wilzbach commented 7 years ago

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

wilzbach commented 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

std.file.FileException@ std/file.d(679): ./main: No such file or directory

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

wilzbach commented 7 years ago

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

wilzbach commented 7 years ago

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

wilzbach commented 7 years ago

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

wilzbach commented 7 years ago

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.

wilzbach commented 7 years ago

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.

wilzbach commented 7 years ago

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.

wilzbach commented 7 years ago

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?

wilzbach commented 7 years ago

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.

wilzbach commented 7 years ago

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)

wilzbach commented 7 years ago

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?

wilzbach commented 7 years ago

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-.

wilzbach commented 7 years ago

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?

wilzbach commented 7 years ago

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

wilzbach commented 7 years ago

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.

wilzbach commented 7 years ago

Comment author: Vladimir Panteleev <dlang-bugzilla@thecybershadow.net>

https://github.com/dlang/tools/pull/207

wilzbach commented 7 years ago

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>

wilzbach commented 7 years ago

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

wilzbach commented 7 years ago

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

wilzbach commented 7 years ago

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