forked from qt-creator/qt-creator
bugfix
This commit is contained in:
@@ -281,6 +281,7 @@ plugins/sqldrivers/libqsqlite.so
|
|||||||
plugins/sqldrivers/libqsqlite2.so
|
plugins/sqldrivers/libqsqlite2.so
|
||||||
plugins/sqldrivers/libqsqlmysql.so
|
plugins/sqldrivers/libqsqlmysql.so
|
||||||
plugins/sqldrivers/libqsqlpsql.so
|
plugins/sqldrivers/libqsqlpsql.so
|
||||||
|
%%
|
||||||
lib/libQtCore.la
|
lib/libQtCore.la
|
||||||
lib/libQt3Support.la
|
lib/libQt3Support.la
|
||||||
lib/libQtCLucene.la
|
lib/libQtCLucene.la
|
||||||
|
@@ -9,7 +9,7 @@ int main(int argc, char *argv[])
|
|||||||
args.removeFirst();
|
args.removeFirst();
|
||||||
|
|
||||||
if (args.size() != 3) {
|
if (args.size() != 3) {
|
||||||
std::cerr << "Usage: qpatch file oldQtDir newQtDir" << std::endl;
|
std::cerr << "Usage: qpatch file.list oldQtDir newQtDir" << std::endl;
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -17,10 +17,6 @@ int main(int argc, char *argv[])
|
|||||||
const QByteArray qtDirPath = QFile::encodeName(args.takeFirst());
|
const QByteArray qtDirPath = QFile::encodeName(args.takeFirst());
|
||||||
const QByteArray newQtPath = QFile::encodeName(args.takeFirst());
|
const QByteArray newQtPath = QFile::encodeName(args.takeFirst());
|
||||||
|
|
||||||
QString suffix;
|
|
||||||
if (! args.isEmpty())
|
|
||||||
suffix = args.takeFirst();
|
|
||||||
|
|
||||||
if (qtDirPath.size() < newQtPath.size()) {
|
if (qtDirPath.size() < newQtPath.size()) {
|
||||||
std::cerr << "qpatch: error: newQtDir needs to be less than " << qtDirPath.size() << " characters."
|
std::cerr << "qpatch: error: newQtDir needs to be less than " << qtDirPath.size() << " characters."
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
@@ -33,44 +29,54 @@ int main(int argc, char *argv[])
|
|||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList filesToPatch;
|
QStringList filesToPatch, textFilesToPatch;
|
||||||
|
bool readingTextFilesToPatch = false;
|
||||||
|
|
||||||
|
// read the input file
|
||||||
QTextStream in(&fn);
|
QTextStream in(&fn);
|
||||||
|
|
||||||
forever {
|
forever {
|
||||||
QString line;
|
const QString line = in.readLine();
|
||||||
line = in.readLine();
|
|
||||||
|
|
||||||
if (line.isNull())
|
if (line.isNull())
|
||||||
break;
|
break;
|
||||||
|
|
||||||
filesToPatch.append(line);
|
else if (line.isEmpty())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
else if (line.startsWith(QLatin1String("%%")))
|
||||||
|
readingTextFilesToPatch = true;
|
||||||
|
|
||||||
|
else if (readingTextFilesToPatch)
|
||||||
|
textFilesToPatch.append(line);
|
||||||
|
|
||||||
|
else
|
||||||
|
filesToPatch.append(line);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
foreach (QString fileName, filesToPatch) {
|
foreach (QString fileName, filesToPatch) {
|
||||||
|
QString prefix = newQtPath;
|
||||||
|
|
||||||
QString prefix;
|
|
||||||
prefix += newQtPath;
|
|
||||||
if (! prefix.endsWith(QLatin1Char('/')))
|
if (! prefix.endsWith(QLatin1Char('/')))
|
||||||
prefix += QLatin1Char('/');
|
prefix += QLatin1Char('/');
|
||||||
|
|
||||||
fileName.prepend(prefix);
|
fileName.prepend(prefix);
|
||||||
|
|
||||||
qDebug() << "patch file:" << fileName;
|
|
||||||
continue;
|
|
||||||
|
|
||||||
QFile file(fileName);
|
QFile file(fileName);
|
||||||
if (! file.open(QFile::ReadOnly)) {
|
if (! file.open(QFile::ReadOnly)) {
|
||||||
std::cerr << "qpatch: warning: file not found" << std::endl;
|
std::cerr << "qpatch: warning: file `" << qPrintable(fileName) << "' not found" << std::endl;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QFile::Permissions permissions = file.permissions();
|
|
||||||
|
|
||||||
const QByteArray source = file.readAll();
|
const QByteArray source = file.readAll();
|
||||||
file.close();
|
file.close();
|
||||||
|
|
||||||
int index = 0;
|
int index = 0;
|
||||||
|
|
||||||
QVector<char> patched;
|
if (! file.open(QFile::WriteOnly | QFile::Truncate)) {
|
||||||
|
std::cerr << "qpatch: error: file `" << qPrintable(fileName) << "' not writable" << std::endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
forever {
|
forever {
|
||||||
int start = source.indexOf(qtDirPath, index);
|
int start = source.indexOf(qtDirPath, index);
|
||||||
@@ -78,26 +84,26 @@ int main(int argc, char *argv[])
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
int endOfString = start;
|
int endOfString = start;
|
||||||
while (source.at(endOfString))
|
for (; endOfString < source.size(); ++endOfString) {
|
||||||
++endOfString;
|
if (! source.at(endOfString))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
++endOfString; // include the '\0'
|
++endOfString; // include the '\0'
|
||||||
|
|
||||||
//qDebug() << "*** found string:" << source.mid(start, endOfString - start);
|
if (index != start)
|
||||||
|
file.write(source.constData() + index, start - index);
|
||||||
for (int i = index; i < start; ++i)
|
|
||||||
patched.append(source.at(i));
|
|
||||||
|
|
||||||
int length = endOfString - start;
|
int length = endOfString - start;
|
||||||
QVector<char> s;
|
QVector<char> s;
|
||||||
|
|
||||||
for (const char *x = newQtPath.constData(); x != newQtPath.constEnd() - 1; ++x)
|
for (const char *x = newQtPath.constData(); x != newQtPath.constEnd(); ++x)
|
||||||
s.append(*x);
|
s.append(*x);
|
||||||
|
|
||||||
const int qtDirPathLength = qtDirPath.size();
|
const int qtDirPathLength = qtDirPath.size();
|
||||||
|
|
||||||
for (const char *x = source.constData() + start + qtDirPathLength - 1;
|
for (const char *x = source.constData() + start + qtDirPathLength;
|
||||||
x != source.constData() + endOfString; ++x)
|
x != source.constData() + endOfString; ++x)
|
||||||
s.append(*x);
|
s.append(*x);
|
||||||
|
|
||||||
const int oldSize = s.size();
|
const int oldSize = s.size();
|
||||||
@@ -105,20 +111,44 @@ int main(int argc, char *argv[])
|
|||||||
for (int i = oldSize; i < length; ++i)
|
for (int i = oldSize; i < length; ++i)
|
||||||
s.append('\0');
|
s.append('\0');
|
||||||
|
|
||||||
for (int i = 0; i < s.size(); ++i)
|
#if 0
|
||||||
patched.append(s.at(i));
|
std::cout << "replace string: " << source.mid(start, endOfString - start).constData()
|
||||||
|
<< " with: " << s.constData() << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
file.write(s.constData(), s.size());
|
||||||
|
|
||||||
index = endOfString;
|
index = endOfString;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = index; i < source.size(); ++i)
|
if (index != source.size())
|
||||||
patched.append(source.at(i));
|
file.write(source.constData() + index, source.size() - index);
|
||||||
|
}
|
||||||
|
|
||||||
QFile out(fileName /* + suffix*/);
|
foreach (QString fileName, textFilesToPatch) {
|
||||||
out.setPermissions(permissions);
|
QString prefix = newQtPath;
|
||||||
if (out.open(QFile::WriteOnly)) {
|
|
||||||
out.write(patched.constData(), patched.size());
|
if (! prefix.endsWith(QLatin1Char('/')))
|
||||||
|
prefix += QLatin1Char('/');
|
||||||
|
|
||||||
|
fileName.prepend(prefix);
|
||||||
|
|
||||||
|
QFile file(fileName);
|
||||||
|
if (! file.open(QFile::ReadOnly)) {
|
||||||
|
std::cerr << "qpatch: warning: file `" << qPrintable(fileName) << "' not found" << std::endl;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QByteArray source = file.readAll();
|
||||||
|
file.close();
|
||||||
|
|
||||||
|
if (! file.open(QFile::WriteOnly | QFile::Truncate)) {
|
||||||
|
std::cerr << "qpatch: error: file `" << qPrintable(fileName) << "' not writable" << std::endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
source.replace(qtDirPath, newQtPath);
|
||||||
|
file.write(source);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user