File indexing completed on 2024-04-28 04:38:24
0001 /* 0002 SPDX-FileCopyrightText: 2010 Andreas Pakulat <apaku@gmx.de> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-or-later 0005 */ 0006 0007 #include "custombuildsystemplugin.h" 0008 0009 #include <KPluginFactory> 0010 #include <KLocalizedString> 0011 0012 #include <project/projectmodel.h> 0013 #include <interfaces/iproject.h> 0014 #include "configconstants.h" 0015 #include "kcm_custombuildsystem.h" 0016 0017 #include "custombuildjob.h" 0018 0019 using KDevelop::ProjectTargetItem; 0020 using KDevelop::ProjectFolderItem; 0021 using KDevelop::ProjectBuildFolderItem; 0022 using KDevelop::ProjectBaseItem; 0023 using KDevelop::ProjectFileItem; 0024 using KDevelop::IPlugin; 0025 using KDevelop::ICore; 0026 using KDevelop::IOutputView; 0027 using KDevelop::IProjectFileManager; 0028 using KDevelop::IProjectBuilder; 0029 using KDevelop::IProject; 0030 using KDevelop::Path; 0031 0032 K_PLUGIN_FACTORY_WITH_JSON(CustomBuildSystemFactory, "kdevcustombuildsystem.json", registerPlugin<CustomBuildSystem>(); ) 0033 0034 CustomBuildSystem::CustomBuildSystem( QObject *parent, const QVariantList & ) 0035 : AbstractFileManagerPlugin( QStringLiteral("kdevcustombuildsystem"), parent ) 0036 { 0037 } 0038 0039 CustomBuildSystem::~CustomBuildSystem() 0040 { 0041 } 0042 0043 bool CustomBuildSystem::addFilesToTarget( const QList<ProjectFileItem*>&, ProjectTargetItem* ) 0044 { 0045 return false; 0046 } 0047 0048 bool CustomBuildSystem::hasBuildInfo( ProjectBaseItem* ) const 0049 { 0050 return false; 0051 } 0052 0053 KJob* CustomBuildSystem::build( ProjectBaseItem* dom ) 0054 { 0055 return new CustomBuildJob( this, dom, CustomBuildSystemTool::Build ); 0056 } 0057 0058 Path CustomBuildSystem::buildDirectory( ProjectBaseItem* item ) const 0059 { 0060 Path p; 0061 if( item->folder() ) { 0062 p = item->path(); 0063 } else { 0064 ProjectBaseItem* parent = item; 0065 while( !parent->folder() ) { 0066 parent = parent->parent(); 0067 } 0068 p = parent->path(); 0069 } 0070 const QString relative = item->project()->path().relativePath(p); 0071 KConfigGroup grp = configuration( item->project() ); 0072 if(!grp.isValid()) { 0073 return Path(); 0074 } 0075 0076 Path builddir(grp.readEntry(ConfigConstants::buildDirKey(), QUrl())); 0077 if(!builddir.isValid() ) // set builddir to default if project contains a buildDirKey that does not have a value 0078 { 0079 builddir = item->project()->path(); 0080 } 0081 builddir.addPath( relative ); 0082 return builddir; 0083 } 0084 0085 IProjectBuilder* CustomBuildSystem::builder() const 0086 { 0087 return const_cast<IProjectBuilder*>(dynamic_cast<const IProjectBuilder*>(this)); 0088 } 0089 0090 KJob* CustomBuildSystem::clean( ProjectBaseItem* dom ) 0091 { 0092 return new CustomBuildJob( this, dom, CustomBuildSystemTool::Clean ); 0093 } 0094 0095 KJob* CustomBuildSystem::configure( IProject* project ) 0096 { 0097 return new CustomBuildJob( this, project->projectItem(), CustomBuildSystemTool::Configure ); 0098 } 0099 0100 ProjectTargetItem* CustomBuildSystem::createTarget( const QString&, ProjectFolderItem* ) 0101 { 0102 return nullptr; 0103 } 0104 0105 QHash<QString, QString> CustomBuildSystem::defines( ProjectBaseItem* ) const 0106 { 0107 return {}; 0108 } 0109 0110 IProjectFileManager::Features CustomBuildSystem::features() const 0111 { 0112 return IProjectFileManager::Files | IProjectFileManager::Folders; 0113 } 0114 0115 ProjectFolderItem* CustomBuildSystem::createFolderItem( IProject* project, 0116 const Path& path, ProjectBaseItem* parent ) 0117 { 0118 return new ProjectBuildFolderItem( project, path, parent ); 0119 } 0120 0121 Path::List CustomBuildSystem::includeDirectories( ProjectBaseItem* ) const 0122 { 0123 return {}; 0124 } 0125 0126 Path::List CustomBuildSystem::frameworkDirectories( ProjectBaseItem* ) const 0127 { 0128 return {}; 0129 } 0130 0131 QString CustomBuildSystem::extraArguments(KDevelop::ProjectBaseItem*) const 0132 { 0133 return {}; 0134 } 0135 0136 KJob* CustomBuildSystem::install( KDevelop::ProjectBaseItem* item, const QUrl &installPrefix ) 0137 { 0138 auto job = new CustomBuildJob( this, item, CustomBuildSystemTool::Install ); 0139 job->setInstallPrefix(installPrefix); 0140 return job; 0141 } 0142 0143 KJob* CustomBuildSystem::prune( IProject* project ) 0144 { 0145 return new CustomBuildJob( this, project->projectItem(), CustomBuildSystemTool::Prune ); 0146 } 0147 0148 bool CustomBuildSystem::removeFilesFromTargets( const QList<ProjectFileItem*>& ) 0149 { 0150 return false; 0151 } 0152 0153 bool CustomBuildSystem::removeTarget( ProjectTargetItem* ) 0154 { 0155 return false; 0156 } 0157 0158 QList<ProjectTargetItem*> CustomBuildSystem::targets( ProjectFolderItem* ) const 0159 { 0160 return QList<ProjectTargetItem*>(); 0161 } 0162 0163 KConfigGroup CustomBuildSystem::configuration( IProject* project ) const 0164 { 0165 KConfigGroup grp = project->projectConfiguration()->group(ConfigConstants::customBuildSystemGroup()); 0166 if (grp.isValid() && grp.hasKey(ConfigConstants::currentConfigKey())) 0167 return grp.group(grp.readEntry(ConfigConstants::currentConfigKey())); 0168 else 0169 return KConfigGroup(); 0170 } 0171 0172 int CustomBuildSystem::perProjectConfigPages() const 0173 { 0174 return 1; 0175 } 0176 0177 KDevelop::ConfigPage* CustomBuildSystem::perProjectConfigPage(int number, const KDevelop::ProjectConfigOptions& options, QWidget* parent) 0178 { 0179 if (number == 0) { 0180 return new CustomBuildSystemKCModule(this, options, parent); 0181 } 0182 return nullptr; 0183 } 0184 0185 KDevelop::Path CustomBuildSystem::compiler(KDevelop::ProjectTargetItem* item) const 0186 { 0187 Q_UNUSED(item); 0188 return {}; 0189 } 0190 0191 #include "custombuildsystemplugin.moc" 0192 #include "moc_custombuildsystemplugin.cpp"