MOC: Avoiding MAX_PATH limit on Windows
authorYuchen Deng <loaden@gmail.com>
Thu, 14 Jun 2012 12:27:02 +0000 (20:27 +0800)
committerQt by Nokia <qt-info@nokia.com>
Wed, 20 Jun 2012 06:39:41 +0000 (08:39 +0200)
See: http://msdn.microsoft.com/en-us/library/aa365247(v=VS.85).aspx
Task-number: QTBUG-26157

Change-Id: Ie74481cd06c31149a060a432352da5b2731caaef
Reviewed-by: Debao Zhang <dbzhang800@gmail.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
src/tools/moc/main.cpp

index 08c180f..7db8737 100644 (file)
@@ -67,7 +67,15 @@ static QByteArray combinePath(const QByteArray &infile, const QByteArray &outfil
 {
     QFileInfo inFileInfo(QDir::current(), QFile::decodeName(infile));
     QFileInfo outFileInfo(QDir::current(), QFile::decodeName(outfile));
-    return QFile::encodeName(outFileInfo.dir().relativeFilePath(inFileInfo.filePath()));
+    const QByteArray relativePath = QFile::encodeName(outFileInfo.dir().relativeFilePath(inFileInfo.filePath()));
+#ifdef Q_OS_WIN
+    // It's a system limitation.
+    // It depends on the Win API function which is used by the program to open files.
+    // cl apparently uses the functions that have the MAX_PATH limitation.
+    if (outFileInfo.dir().absolutePath().length() + relativePath.length() + 1 >= 260)
+        return QFile::encodeName(inFileInfo.absoluteFilePath());
+#endif
+    return relativePath;
 }