summaryrefslogtreecommitdiff
path: root/qmake/tools/qgpluginmanager.cpp
Side-by-side diff
Diffstat (limited to 'qmake/tools/qgpluginmanager.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--qmake/tools/qgpluginmanager.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/qmake/tools/qgpluginmanager.cpp b/qmake/tools/qgpluginmanager.cpp
index 46c85f5..72246ac 100644
--- a/qmake/tools/qgpluginmanager.cpp
+++ b/qmake/tools/qgpluginmanager.cpp
@@ -1,54 +1,54 @@
/****************************************************************************
** $Id$
**
** Implementation of QGPluginManager class
**
-** Copyright (C) 2000-2001 Trolltech AS. All rights reserved.
+** Copyright (C) 2000-2003 Trolltech AS. All rights reserved.
**
** This file is part of the tools module of the Qt GUI Toolkit.
**
** This file may be distributed under the terms of the Q Public License
** as defined by Trolltech AS of Norway and appearing in the file
** LICENSE.QPL included in the packaging of this file.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
** licenses may use this file in accordance with the Qt Commercial License
** Agreement provided with the Software.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
** information about Qt Commercial License Agreements.
** See http://www.trolltech.com/qpl/ for QPL licensing information.
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "qgpluginmanager_p.h"
#ifndef QT_NO_COMPONENT
#include "qcomlibrary_p.h"
#include "qmap.h"
#include "qdir.h"
/*
The following co-occurrence code is borrowed from Qt Linguist.
How similar are two texts? The approach used here relies on
co-occurrence matrices and is very efficient.
Let's see with an example: how similar are "here" and "hither"? The
co-occurrence matrix M for "here" is M[h,e] = 1, M[e,r] = 1,
M[r,e] = 1 and 0 elsewhere; the matrix N for "hither" is N[h,i] = 1,
N[i,t] = 1, ..., N[h,e] = 1, N[e,r] = 1 and 0 elsewhere. The union
U of both matrices is the matrix U[i,j] = max { M[i,j], N[i,j] },
and the intersection V is V[i,j] = min { M[i,j], N[i,j] }. The score
for a pair of texts is
@@ -430,97 +430,97 @@ QStringList QGPluginManager::featureList() const
continue;
QComLibrary* library = new QComLibrary( *it );
if ( library->qtVersion() == QT_VERSION ) {
that->addLibrary( library );
phase2Deny << QFileInfo( *it ).baseName();
} else {
delete library;
phase2Libs << *it;
}
}
for ( it = phase2Libs.begin(); it != phase2Libs.end(); ++it )
if ( !phase2Deny.contains( QFileInfo( *it ).baseName() ) )
that->addLibrary( new QComLibrary( *it ) );
for ( QDictIterator<QLibrary> pit( plugDict ); pit.current(); ++pit )
features << pit.currentKey();
return features;
}
bool QGPluginManager::addLibrary( QLibrary* lib )
{
if ( !enabled() || !lib )
return FALSE;
QComLibrary* plugin = (QComLibrary*)lib;
bool useful = FALSE;
QUnknownInterface* iFace = 0;
plugin->queryInterface( interfaceId, &iFace );
if ( iFace ) {
QFeatureListInterface *fliFace = 0;
QComponentInformationInterface *cpiFace = 0;
iFace->queryInterface( IID_QFeatureList, (QUnknownInterface**)&fliFace );
if ( !fliFace )
plugin->queryInterface( IID_QFeatureList, (QUnknownInterface**)&fliFace );
if ( !fliFace ) {
iFace->queryInterface( IID_QComponentInformation, (QUnknownInterface**)&cpiFace );
if ( !cpiFace )
plugin->queryInterface( IID_QComponentInformation, (QUnknownInterface**)&cpiFace );
}
QStringList fl;
if ( fliFace )
// Map all found features to the library
fl = fliFace->featureList();
else if ( cpiFace )
fl << cpiFace->name();
- for ( QStringList::Iterator f = fl.begin(); f != fl.end(); f++ ) {
+ for ( QStringList::Iterator f = fl.begin(); f != fl.end(); ++f ) {
QLibrary *old = plugDict[*f];
if ( !old ) {
useful = TRUE;
plugDict.replace( *f, plugin );
} else {
// we have old *and* plugin, which one to pick?
QComLibrary* first = (QComLibrary*)old;
QComLibrary* second = (QComLibrary*)plugin;
bool takeFirst = TRUE;
if ( first->qtVersion() != QT_VERSION ) {
if ( second->qtVersion() == QT_VERSION )
takeFirst = FALSE;
else if ( second->qtVersion() < QT_VERSION &&
first->qtVersion() > QT_VERSION )
takeFirst = FALSE;
}
if ( !takeFirst ) {
useful = TRUE;
plugDict.replace( *f, plugin );
qWarning("%s: Discarding feature %s in %s!",
(const char*) QFile::encodeName( plugin->library()),
(*f).latin1(),
(const char*) QFile::encodeName( old->library() ) );
} else {
qWarning("%s: Feature %s already defined in %s!",
(const char*) QFile::encodeName( old->library() ),
(*f).latin1(),
(const char*) QFile::encodeName( plugin->library() ) );
}
}
}
if ( fliFace )
fliFace->release();
if ( cpiFace )
cpiFace->release();
iFace->release();
}
if ( useful ) {
libDict.replace( plugin->library(), plugin );
if ( !libList.contains( plugin->library() ) )
libList.append( plugin->library() );
return TRUE;
}
delete plugin;
return FALSE;
}