Skip to content

Commit

Permalink
Merge pull request #1513 from WalterBright/b17
Browse files Browse the repository at this point in the history
refactor output file name generation
  • Loading branch information
WalterBright committed Jan 20, 2013
2 parents c956ce7 + 2103779 commit 73b3b2e
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 83 deletions.
121 changes: 40 additions & 81 deletions src/module.c
Expand Up @@ -59,7 +59,6 @@ Module::Module(char *filename, Identifier *ident, int doDocComment, int doHdrGen
: Package(ident)
{
FileName *srcfilename;
FileName *objfilename;
FileName *symfilename;

// printf("Module::Module(filename = '%s', ident = '%s')\n", filename, ident->toChars());
Expand Down Expand Up @@ -122,110 +121,70 @@ Module::Module(char *filename, Identifier *ident, int doDocComment, int doHdrGen
error("source file name '%s' must have .%s extension", srcfilename->toChars(), global.mars_ext);
fatal();
}
srcfile = new File(srcfilename);

char *argobj;
if (global.params.objname)
argobj = global.params.objname;
#if 0
else if (global.params.preservePaths)
argobj = filename;
else
argobj = FileName::name(filename);
if (!FileName::absolute(argobj))
{
argobj = FileName::combine(global.params.objdir, argobj);
}
#else // Bugzilla 3547
else
{
if (global.params.preservePaths)
argobj = filename;
else
argobj = FileName::name(filename);
if (!FileName::absolute(argobj))
{
argobj = FileName::combine(global.params.objdir, argobj);
}
}
#endif

if (global.params.objname)
objfilename = new FileName(argobj);
else
objfilename = FileName::forceExt(argobj, global.obj_ext);
objfile = setOutfile(global.params.objname, global.params.objdir, filename, global.obj_ext);

symfilename = FileName::forceExt(filename, global.sym_ext);

srcfile = new File(srcfilename);

if (doDocComment)
{
setDocfile();
}

if (doHdrGen)
{
setHdrfile();
}
hdrfile = setOutfile(global.params.hdrname, global.params.hdrdir, arg, global.hdr_ext);

objfile = new File(objfilename);
//objfile = new File(objfilename);
symfile = new File(symfilename);
}

void Module::setDocfile()
{
FileName *docfilename;
char *argdoc;

if (global.params.docname)
argdoc = global.params.docname;
else if (global.params.preservePaths)
argdoc = (char *)arg;
else
argdoc = FileName::name((char *)arg);
if (!FileName::absolute(argdoc))
{ //FileName::ensurePathExists(global.params.docdir);
argdoc = FileName::combine(global.params.docdir, argdoc);
}
if (global.params.docname)
docfilename = new FileName(argdoc);
else
docfilename = FileName::forceExt(argdoc, global.doc_ext);

if (docfilename->equals(srcfile->name))
{ error("Source file and documentation file have same name '%s'", srcfile->name->str);
fatal();
}

docfile = new File(docfilename);
docfile = setOutfile(global.params.docname, global.params.docdir, arg, global.doc_ext);
}

void Module::setHdrfile()
{
FileName *hdrfilename;
char *arghdr;
/*********************************************
* Combines things into output file name for .html and .di files.
* Input:
* name Command line name given for the file, NULL if none
* dir Command line directory given for the file, NULL if none
* arg Name of the source file
* ext File name extension to use if 'name' is NULL
* global.params.preservePaths get output path from arg
* srcfile Input file - output file name must not match input file
*/

if (global.params.hdrname)
arghdr = global.params.hdrname;
else if (global.params.preservePaths)
arghdr = (char *)arg;
File *Module::setOutfile(const char *name, const char *dir, const char *arg, const char *ext)
{
const char *argdoc;
if (name)
argdoc = name;
else
arghdr = FileName::name((char *)arg);
if (!FileName::absolute(arghdr))
{ //FileName::ensurePathExists(global.params.hdrdir);
arghdr = FileName::combine(global.params.hdrdir, arghdr);
{
if (global.params.preservePaths)
argdoc = (char *)arg;
else
argdoc = FileName::name((char *)arg);

// If argdoc doesn't have an absolute path, make it relative to dir
if (!FileName::absolute(argdoc))
{ //FileName::ensurePathExists(dir);
argdoc = FileName::combine(dir, argdoc);
}
}
if (global.params.hdrname)
hdrfilename = new FileName(arghdr);

FileName *docfilename;
if (name)
docfilename = new FileName((char *)argdoc);
else
hdrfilename = FileName::forceExt(arghdr, global.hdr_ext);
// 'name' not provided, so force the correct extension
docfilename = FileName::forceExt(argdoc, ext);

if (hdrfilename->equals(srcfile->name))
{ error("Source file and 'header' file have same name '%s'", srcfile->name->str);
if (docfilename->equals(srcfile->name))
{ error("Source file and output file have same name '%s'", srcfile->name->str);
fatal();
}

hdrfile = new File(hdrfilename);
return new File(docfilename);
}

void Module::deleteObjFile()
Expand Down
4 changes: 2 additions & 2 deletions src/module.h
Expand Up @@ -118,15 +118,15 @@ struct Module : Package
void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
void toJsonBuffer(OutBuffer *buf);
const char *kind();
void setDocfile(); // set docfile member
File *setOutfile(const char *name, const char *dir, const char *arg, const char *ext);
void setDocfile();
bool read(Loc loc); // read file, returns 'true' if succeed, 'false' otherwise.
void parse(); // syntactic parse
void importAll(Scope *sc);
void semantic(); // semantic analysis
void semantic2(); // pass 2 semantic analysis
void semantic3(); // pass 3 semantic analysis
void inlineScan(); // scan for functions to inline
void setHdrfile(); // set hdrfile member
void genhdrfile(); // generate D import file
void genobjfile(int multiobj);
void gensymfile();
Expand Down

0 comments on commit 73b3b2e

Please sign in to comment.