diff options
Diffstat (limited to 'idlc/source/idlcproduce.cxx')
-rw-r--r-- | idlc/source/idlcproduce.cxx | 46 |
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; } |