summaryrefslogtreecommitdiff
path: root/idlc/source/idlcproduce.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'idlc/source/idlcproduce.cxx')
-rw-r--r--idlc/source/idlcproduce.cxx46
1 files changed, 45 insertions, 1 deletions
diff --git a/idlc/source/idlcproduce.cxx b/idlc/source/idlcproduce.cxx
index 04ee34f94b19..f4ca2d998e5d 100644
--- a/idlc/source/idlcproduce.cxx
+++ b/idlc/source/idlcproduce.cxx
@@ -132,7 +132,8 @@ void removeIfExists(const OString& pathname)
unlink(pathname.getStr());
}
-sal_Int32 SAL_CALL produceFile(const OString& regFileName)
+sal_Int32 SAL_CALL
+produceFile(const OString& regFileName, sPair_t const*const pDepFile)
{
Options* pOptions = idlc()->getOptions();
@@ -145,6 +146,20 @@ sal_Int32 SAL_CALL produceFile(const OString& regFileName)
return 1;
}
+ OString depTmpName;
+ if (pDepFile)
+ {
+ depTmpName = pDepFile->first.replaceAt(
+ regFileName.getLength() -3, 3, "_idlc_");
+ if ( !checkOutputPath(depTmpName) )
+ {
+ fprintf(stderr, "%s: could not create path of dep file '%s'.\n",
+ pOptions->getProgramName().getStr(), pDepFile->first.getStr());
+ return 1;
+ }
+ removeIfExists(depTmpName);
+ }
+
removeIfExists(regTmpName);
OString urlRegTmpName = convertToFileUrl(regTmpName);
@@ -192,6 +207,18 @@ sal_Int32 SAL_CALL produceFile(const OString& regFileName)
return 1;
}
+ if (pDepFile && !idlc()->dumpDeps(depTmpName, pDepFile->second))
+ {
+ fprintf(stderr, "%s: could not write dep file '%s'\n",
+ pOptions->getProgramName().getStr(), pDepFile->first.getStr());
+ removeIfExists(depTmpName);
+ removeIfExists(pDepFile->first);
+ removeIfExists(regTmpName);
+ removeIfExists(regFileName);
+ cleanPath();
+ return 1;
+ }
+
removeIfExists(regFileName);
if ( File::move(OStringToOUString(regTmpName, osl_getThreadTextEncoding()),
@@ -205,6 +232,23 @@ sal_Int32 SAL_CALL produceFile(const OString& regFileName)
}
removeIfExists(regTmpName);
+ if (pDepFile)
+ {
+ removeIfExists(pDepFile->first);
+ if ( File::move(OStringToOUString(depTmpName, osl_getThreadTextEncoding()),
+ OStringToOUString(pDepFile->first, osl_getThreadTextEncoding())) != FileBase::E_None ) {
+ fprintf(stderr, "%s: cannot rename dep file '%s' to '%s'\n",
+ idlc()->getOptions()->getProgramName().getStr(),
+ depTmpName.getStr(), pDepFile->first.getStr());
+ removeIfExists(depTmpName);
+ removeIfExists(pDepFile->first);
+ removeIfExists(regFileName);
+ cleanPath();
+ return 1;
+ }
+ removeIfExists(depTmpName);
+ }
+
return 0;
}