Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
wilzbach opened this issue Dec 11, 2016 · 20 comments
Closed

Comments

@wilzbach
Copy link
Owner

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
Copy link
Owner Author

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
Copy link
Owner Author

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
Copy link
Owner Author

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
Copy link
Owner Author

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
Copy link
Owner Author

Comment author: Andrej Mitrovic <andrej.mitrovich@gmail.com>

dlang/tools@a63233c seems to have caused the regression for the first test-case.

@wilzbach
Copy link
Owner Author

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
Copy link
Owner Author

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 dlang/tools#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
Copy link
Owner Author

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
Copy link
Owner Author

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
Copy link
Owner Author

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
Copy link
Owner Author

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
Copy link
Owner Author

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
Copy link
Owner Author

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
Copy link
Owner Author

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
Copy link
Owner Author

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
Copy link
Owner Author

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

dlang/tools#207

@wilzbach
Copy link
Owner Author

Comment author: github-bugzilla@puremagic.com

Commits pushed to stable at https://github.com/dlang/tools

dlang/tools@b6ec807
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.

dlang/tools@bfbcd08
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
Copy link
Owner Author

wilzbach commented Jan 7, 2017

Comment author: github-bugzilla@puremagic.com

Commits pushed to master at https://github.com/dlang/tools

dlang/tools@b6ec807
Fix Issue 16962 - rdmd --build-only --force -c main.d fails: ./main: No such file or directory

dlang/tools@bfbcd08
Merge pull request BZ#207 from CyberShadow/issue-16962

@wilzbach
Copy link
Owner Author

wilzbach commented Jan 7, 2017

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
Copy link
Owner Author

Comment author: github-bugzilla@puremagic.com

Commits pushed to newCTFE at https://github.com/dlang/tools

dlang/tools@b6ec807
Fix Issue 16962 - rdmd --build-only --force -c main.d fails: ./main: No such file or directory

dlang/tools@bfbcd08
Merge pull request BZ#207 from CyberShadow/issue-16962

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant