3547 – for option -od for relative path the path is added twice

D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 3547 - for option -od for relative path the path is added twice
Summary: for option -od for relative path the path is added twice
Status: RESOLVED FIXED
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: All All
: P2 regression
Assignee: No Owner
URL:
Keywords: patch
Depends on:
Blocks:
Reported: 2009年11月24日 04:31 UTC by Michael Rynn
Modified: 2015年06月09日 01:21 UTC (History)
2 users (show)

See Also:


Attachments
Proposed patch (784 bytes, patch)
2009年12月17日 12:04 UTC, Vladimir Panteleev
Details | Diff
Add an attachment (proposed patch, testcase, etc.)

Note You need to log in before you can comment on or make changes to this issue.
Description Michael Rynn 2009年11月24日 04:31:14 UTC
When I specified a -od, <objpath> , a double level of 2 directories was created in my current directory, and the object file place theirin, namely <./objpath/objpath/myobjfile.o, for both linux, dmd, dmd 1.0 and dmd 2.0.
An examination of the mars.c source and module.c source for the string "global.params.objdir" shows under these conditions the string passed in the options is concantenated twice.
In mars.c
line 713 if (global.params.link)
	{..
	if(global.params.objname)
	{
	// name as the exe file.
		if (global.params.objdir)
		{
		..
		global.params.objname = 
FileName::combine(global.params.objdir,name)
And in module.c
line 136
if (global.params.objname)
	// objdir must be already combined by here!
	argobj = global.params.objname;
..
if (!FileName::absolute(argobj))
{
// objdir is combined again, because already in global.params.objname
	argobj = 
FileName::combine(global.params.objdir, argobj);
}
I was testing a little XML configuration build tool, and dmd refused to make just one level of relative directory.
The workaround would seem to be to work out the absolute path and pass that to the option.
Comment 1 Vladimir Panteleev 2009年12月17日 12:04:08 UTC
Some more findings:
 - this is a regression in DMD 2.014 / 1.030
 - the bug only manifests when the -of option is present
Attaching a patch which fixes it. The patch changes the module.c code to not prepend global.params.objdir to filename if global.params.objname is set (in which case, the prepending had already been done in mars.c).
Comment 2 Vladimir Panteleev 2009年12月17日 12:04:40 UTC
Created attachment 525 [details] 
Proposed patch
Comment 3 Walter Bright 2010年06月02日 10:56:47 UTC
http://www.dsource.org/projects/dmd/changeset/516 


AltStyle によって変換されたページ (->オリジナル) /