diff --git a/tests/manual/proparser/main.cpp b/tests/manual/proparser/main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a51e6d9b0b6e81ac8da5a61f7ccb48bf21e4380e --- /dev/null +++ b/tests/manual/proparser/main.cpp @@ -0,0 +1,142 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#include "profileevaluator.h" + +#include <QtCore/QCoreApplication> +#include <QtCore/QDebug> +#include <QtCore/QDir> +#include <QtCore/QFile> +#include <QtCore/QFileInfo> +#include <QtCore/QLibraryInfo> +#include <QtCore/QString> +#include <QtCore/QStringList> +#include <QtCore/QTextCodec> + +static QString value(ProFileEvaluator &reader, const QString &variable) +{ + QStringList vals = reader.values(variable); + if (!vals.isEmpty()) + return vals.first(); + + return QString(); +} + +static int evaluate(const QString &fileName, const QString &in_pwd, const QString &out_pwd, + bool cumulative, ProFileOption *option) +{ + static QSet<QString> visited; + if (visited.contains(fileName)) + return 0; + visited.insert(fileName); + + ProFileEvaluator visitor(option); + visitor.setVerbose(true); + visitor.setCumulative(cumulative); + visitor.setOutputDir(out_pwd); + + ProFile *pro; + if (!(pro = visitor.parsedProFile(fileName))) + return 2; + if (!visitor.accept(pro)) + return 2; + + if (visitor.templateType() == ProFileEvaluator::TT_Subdirs) { + foreach (const QString &subDirVar, visitor.values(QLatin1String("SUBDIRS"))) { + QString realDir; + const QString subDirKey = subDirVar + QLatin1String(".subdir"); + const QString subDirFileKey = subDirVar + QLatin1String(".file"); + if (visitor.contains(subDirKey)) + realDir = QFileInfo(value(visitor, subDirKey)).filePath(); + else if (visitor.contains(subDirFileKey)) + realDir = QFileInfo(value(visitor, subDirFileKey)).filePath(); + else + realDir = subDirVar; + QFileInfo info(realDir); + if (!info.isAbsolute()) + info.setFile(in_pwd + QLatin1Char('/') + realDir); + if (info.isDir()) + info.setFile(QString::fromLatin1("%1/%2.pro").arg(info.filePath(), info.fileName())); + if (!info.exists()) { + qDebug() << "Could not find find sub dir" << info.filePath(); + continue; + } + + evaluate(QDir::cleanPath(info.absoluteFilePath()), + QDir::cleanPath(info.path()), + QDir::cleanPath(QDir(out_pwd).absoluteFilePath( + QDir(in_pwd).relativeFilePath(info.path()))), + cumulative, option); + } + } + + return 0; +} + +int main(int argc, char **argv) +{ + QCoreApplication app(argc, argv); + + QStringList args = app.arguments(); + args.removeFirst(); + if (args.count() < 2) + qFatal("need at least two arguments: <cumulative?> <filenme> [<out_pwd>]"); + + ProFileOption option; + + static const struct { + const char * const name; + QLibraryInfo::LibraryLocation index; + } props[] = { + { "QT_INSTALL_DATA", QLibraryInfo::DataPath }, + { "QT_INSTALL_LIBS", QLibraryInfo::LibrariesPath }, + { "QT_INSTALL_HEADERS", QLibraryInfo::HeadersPath }, + { "QT_INSTALL_DEMOS", QLibraryInfo::DemosPath }, + { "QT_INSTALL_EXAMPLES", QLibraryInfo::ExamplesPath }, + { "QT_INSTALL_CONFIGURATION", QLibraryInfo::SettingsPath }, + { "QT_INSTALL_TRANSLATIONS", QLibraryInfo::TranslationsPath }, + { "QT_INSTALL_PLUGINS", QLibraryInfo::PluginsPath }, + { "QT_INSTALL_BINS", QLibraryInfo::BinariesPath }, + { "QT_INSTALL_DOCS", QLibraryInfo::DocumentationPath }, + { "QT_INSTALL_PREFIX", QLibraryInfo::PrefixPath } + }; + for (unsigned i = 0; i < sizeof(props)/sizeof(props[0]); ++i) + option.properties.insert(QLatin1String(props[i].name), + QLibraryInfo::location(props[i].index)); + + option.properties.insert(QLatin1String("QT_VERSION"), QLatin1String(qVersion())); + + bool cumulative = args[0] == QLatin1String("true"); + QFileInfo infi(args[1]); + QString file = infi.absoluteFilePath(); + QString in_pwd = infi.absolutePath(); + QString out_pwd = (args.count() > 2) ? QFileInfo(args[2]).absoluteFilePath() : in_pwd; + + return evaluate(file, in_pwd, out_pwd, cumulative, &option); +} diff --git a/tests/manual/proparser/testreader.pro b/tests/manual/proparser/testreader.pro new file mode 100644 index 0000000000000000000000000000000000000000..794d1ba10d37b392acc370eadbdfc9fc4c7ba45a --- /dev/null +++ b/tests/manual/proparser/testreader.pro @@ -0,0 +1,20 @@ +VPATH += ../../../src/shared/proparser +INCLUDEPATH += ../../../src/shared/proparser + +TEMPLATE = app +TARGET = testreader + +QT -= gui + +CONFIG += qt warn_on console +CONFIG -= app_bundle + +build_all:!build_pass { + CONFIG -= build_all + CONFIG += release +} + +SOURCES = main.cpp profileevaluator.cpp proitems.cpp ioutils.cpp +HEADERS = profileevaluator.h proitems.h abstractproitemvisitor.h ioutils.h + +DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII