summaryrefslogtreecommitdiffstats
path: root/languages/cpp/qtbuildconfig.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'languages/cpp/qtbuildconfig.cpp')
-rw-r--r--languages/cpp/qtbuildconfig.cpp216
1 files changed, 216 insertions, 0 deletions
diff --git a/languages/cpp/qtbuildconfig.cpp b/languages/cpp/qtbuildconfig.cpp
new file mode 100644
index 00000000..809767bc
--- /dev/null
+++ b/languages/cpp/qtbuildconfig.cpp
@@ -0,0 +1,216 @@
+/*
+ Copyright (C) 2005 by Tobias Erbsland <[email protected]>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ version 2, License as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+#include "qtbuildconfig.h"
+#include "cppsupportpart.h"
+
+#include <domutil.h>
+
+#include <kdebug.h>
+#include <qdom.h>
+
+#include <stdlib.h>
+
+const QString QtBuildConfig::m_configRoot = QString( "/kdevcppsupport/qt" );
+
+QtBuildConfig::QtBuildConfig( CppSupportPart * part, QDomDocument* dom )
+ : QObject( part ), m_part( part ), m_dom( dom )
+{
+ init();
+}
+
+QtBuildConfig::~QtBuildConfig()
+{
+}
+
+void QtBuildConfig::init( )
+{
+ m_used = DomUtil::readBoolEntry( *m_dom, m_configRoot + "/used", false );
+ m_version = DomUtil::readIntEntry( *m_dom, m_configRoot + "/version", 3 );
+ if( m_version < 3 || m_version > 4 )
+ {
+ m_version = 3;
+ }
+ m_includeStyle = DomUtil::readIntEntry( *m_dom, m_configRoot + "/includestyle", 3 );
+ if( m_includeStyle < 3 || m_includeStyle > 4 )
+ {
+ m_includeStyle = m_version;
+ }
+ m_root = DomUtil::readEntry( *m_dom, m_configRoot + "/root", "" );
+ m_qmakePath = DomUtil::readEntry(*m_dom, m_configRoot + "/qmake", "");
+ m_designerPath = DomUtil::readEntry(*m_dom, m_configRoot + "/designer", "");
+ m_designerPluginPaths = DomUtil::readListEntry(*m_dom, m_configRoot + "/designerpluginpaths", "path" );
+
+ if( m_root.isEmpty() || !isValidQtDir( m_root ) )
+ {
+ findQtDir();
+ }
+ if( m_qmakePath.isEmpty() || !isExecutable( m_qmakePath ) )
+ {
+ m_qmakePath = findExecutable( "qmake-qt"+ QString::number( m_version ) );
+ if( m_qmakePath.isEmpty() || !isExecutable( m_qmakePath ) )
+ m_qmakePath = findExecutable( "qmake" );
+ }
+ if( m_designerPath.isEmpty() || !isExecutable( m_designerPath ) )
+ {
+ m_designerPath = findExecutable( "designer-qt"+QString::number( m_version ) );
+ if( m_designerPath.isEmpty() || !isExecutable( m_designerPath ) )
+ m_designerPath = findExecutable( "designer" );
+ }
+
+
+ m_designerIntegration = DomUtil::readEntry( *m_dom, m_configRoot + "/designerintegration" );
+ if( m_designerIntegration.isEmpty() )
+ {
+ if ( m_version == 3 )
+ m_designerIntegration = "EmbeddedKDevDesigner";
+ else
+ m_designerIntegration = "ExternalDesigner";
+ }
+}
+
+bool QtBuildConfig::isValidQtDir( const QString& path ) const
+{
+ QFileInfo inc( path + QString( QChar( QDir::separator() ) )+
+ "include"+QString( QChar( QDir::separator() ) )+
+ "qt.h" );
+ return ( m_version == 4 || ( m_version != 4 && inc.exists() ) );
+}
+
+void QtBuildConfig::buildBinDirs( QStringList & dirs ) const
+{
+ if( m_version == 3 )
+ {
+ if( !m_root.isEmpty() )
+ dirs << (m_root + QString( QChar( QDir::separator() ) ) + "bin");
+ dirs << (::getenv("QTDIR") + QString( QChar( QDir::separator() ) ) + "bin");
+ }
+ QStringList paths = QStringList::split(":",::getenv("PATH"));
+ dirs += paths;
+ QString binpath = QDir::rootDirPath() + "bin";
+ if( dirs.findIndex( binpath ) != -1 )
+ dirs << binpath;
+
+ binpath = QDir::rootDirPath() + "usr" + QString( QChar( QDir::separator() ) ) + "bin";
+ if( dirs.findIndex( binpath ) != -1 )
+ dirs << binpath;
+ binpath = QDir::rootDirPath() + "usr" + QString( QChar( QDir::separator() ) ) + "local" + QString( QChar( QDir::separator() ) ) + "bin";
+ if( dirs.findIndex( binpath ) != -1 )
+ dirs << binpath;
+}
+
+
+QString QtBuildConfig::findExecutable( const QString& execname ) const
+{
+ QStringList dirs;
+ buildBinDirs( dirs );
+
+ for( QStringList::Iterator it=dirs.begin(); it!=dirs.end(); ++it )
+ {
+ QString designer = *it + QString( QChar( QDir::separator() ) ) + execname;
+ if( !designer.isEmpty() && isExecutable( designer ) )
+ {
+ return designer;
+ }
+ }
+ return "";
+}
+
+bool QtBuildConfig::isExecutable( const QString& path ) const
+{
+ QFileInfo fi(path);
+ return( fi.exists() && fi.isExecutable() );
+}
+
+void QtBuildConfig::findQtDir()
+{
+ QStringList qtdirs;
+ if( m_version == 3 )
+ qtdirs.push_back( ::getenv("QTDIR") );
+ qtdirs.push_back( QDir::rootDirPath()+"usr"+QString( QChar( QDir::separator() ) )+"lib"+QString( QChar( QDir::separator() ) )+"qt"+QString("%1").arg( m_version ) );
+ qtdirs.push_back( QDir::rootDirPath()+"usr"+QString( QChar( QDir::separator() ) )+"lib"+QString( QChar( QDir::separator() ) )+"qt"+QString( QChar( QDir::separator() ) )+QString("%1").arg( m_version ) );
+ qtdirs.push_back( QDir::rootDirPath()+"usr"+QString( QChar( QDir::separator() ) )+"share"+QString( QChar( QDir::separator() ) )+"qt"+QString("%1").arg( m_version ) );
+ qtdirs.push_back( QDir::rootDirPath()+"usr" );
+ qtdirs.push_back( QDir::rootDirPath()+"usr"+QString( QChar( QDir::separator() ) )+"lib"+QString( QChar( QDir::separator() ) )+"qt" );
+
+ for( QStringList::Iterator it=qtdirs.begin(); it!=qtdirs.end(); ++it )
+ {
+ QString qtdir = *it;
+ if( !qtdir.isEmpty() && isValidQtDir(qtdir) )
+ {
+ m_root = qtdir;
+ return;
+ }
+ }
+}
+
+void QtBuildConfig::store( )
+{
+ DomUtil::writeBoolEntry( *m_dom, m_configRoot + "/used", m_used );
+ DomUtil::writeIntEntry( *m_dom, m_configRoot + "/version", m_version );
+ DomUtil::writeIntEntry( *m_dom, m_configRoot + "/includestyle", m_includeStyle );
+ DomUtil::writeEntry( *m_dom, m_configRoot + "/root", m_root );
+ DomUtil::writeEntry( *m_dom, m_configRoot + "/designerintegration", m_designerIntegration );
+ DomUtil::writeEntry(*m_dom, m_configRoot + "/qmake", m_qmakePath );
+ DomUtil::writeEntry(*m_dom, m_configRoot + "/designer", m_designerPath );
+ DomUtil::writeListEntry(*m_dom, m_configRoot + "/designerpluginpaths", "path", m_designerPluginPaths );
+
+ emit stored();
+}
+
+void QtBuildConfig::setUsed( bool used )
+{
+ m_used = used;
+}
+
+void QtBuildConfig::setVersion( int version )
+{
+ m_version = version;
+}
+
+void QtBuildConfig::setIncludeStyle( int style )
+{
+ m_includeStyle = style;
+}
+
+void QtBuildConfig::setRoot( const QString& root )
+{
+ m_root = root;
+}
+
+void QtBuildConfig::setQMakePath( const QString& path )
+{
+ m_qmakePath = path;
+}
+
+void QtBuildConfig::setDesignerPluginPaths( const QStringList& pfx )
+{
+ m_designerPluginPaths = pfx;
+}
+
+void QtBuildConfig::setDesignerPath( const QString& path )
+{
+ m_designerPath = path;
+}
+
+void QtBuildConfig::setDesignerIntegration( const QString& designerIntegration )
+{
+ m_designerIntegration = designerIntegration;
+}
+#include "qtbuildconfig.moc"
+
+//kate: space-indent on; indent-width 4; tab-width 4; replace-tabs on