[Bug 58217] Implement custom build tools (jam, scons, ... instead of make)

Andreas Pakulat apaku at gmx.de
Wed Feb 28 02:10:23 UTC 2007


------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
         
http://bugs.kde.org/show_bug.cgi?id=58217         
apaku gmx de changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED



------- Additional Comments From apaku gmx de  2007-02-28 03:10 -------
SVN commit 637881 by apaku:

Add the possibility to run a buildtool other than make or ant

Initial patch from Achim Herwig <achim.herwig wodca de>, thanks.
BUG:58217


 M  +3 -2      Makefile.am  
 M  +26 -3     custombuildoptionswidget.cpp  
 M  +8 -4      custombuildoptionswidget.h  
 M  +26 -4     custombuildoptionswidgetbase.ui  
 A             customotherconfigwidget.cpp   [License: GPL (v2+)]
 A             customotherconfigwidget.h   [License: GPL (v2+)]
 A             customotherconfigwidgetbase.ui  
 M  +27 -9     customprojectpart.cpp  


--- branches/kdevelop/3.4/buildtools/custommakefiles/Makefile.am #637880:637881
 @ -12,7 +12,8  @
 
 libkdevcustomproject_la_SOURCES = custombuildoptionswidget.cpp \
 	custombuildoptionswidgetbase.ui custommakeconfigwidget.cpp custommakeconfigwidgetbase.ui \
-	custommanagerwidget.cpp custommanagerwidgetbase.ui customprojectpart.cpp
+	custommanagerwidget.cpp custommanagerwidgetbase.ui customotherconfigwidget.cpp \
+	customotherconfigwidgetbase.ui customprojectpart.cpp
 
 METASOURCES = AUTO
 
 @ -21,4 +22,4  @
 
 rcdir = $(kde_datadir)/kdevcustomproject
 rc_DATA = kdevcustomproject.rc
-noinst_HEADERS = custommanagerwidget.h
+noinst_HEADERS = custommanagerwidget.h customotherconfigwidget.h
--- branches/kdevelop/3.4/buildtools/custommakefiles/custombuildoptionswidget.cpp #637880:637881
 @ -26,6 +26,7  @
       m_dom(dom)
 {
     ant_button->setChecked(DomUtil::readEntry(dom, "/kdevcustomproject/build/buildtool") == "ant");
+    other_button->setChecked(DomUtil::readEntry(dom, "/kdevcustomproject/build/buildtool") == "other");
     builddir_edit->setURL(DomUtil::readEntry(dom, "/kdevcustomproject/build/builddir"));
     builddir_edit->completionObject()->setMode(KURLCompletion::DirCompletion);
     builddir_edit->setMode( KFile::Directory | KFile::ExistingOnly | KFile::LocalOnly );
 @ -33,7 +34,9  @
     // This connection must not be made before the ant->setChecked() line,
     // because at this time makeToggled() would crash
     connect( make_button, SIGNAL(toggled(bool)),
-             this, SLOT(makeToggled(bool)) );
+            this, SLOT(makeToggled(bool)) );
+    connect( other_button, SIGNAL(toggled(bool)),
+             this, SLOT(otherToggled(bool)) );
 }
 
 
 @ -43,19 +46,37  @
 
 void CustomBuildOptionsWidget::accept()
 {
-    QString buildtool = ant_button->isChecked()? "ant" : "make";
+    QString buildtool;
+    if (ant_button->isChecked())
+    {
+        buildtool = "ant";
+    }
+    else if (other_button->isChecked())
+    {
+        buildtool = "other";
+    }
+    else
+    {
+        buildtool = "make";
+    }
     DomUtil::writeEntry(m_dom, "/kdevcustomproject/build/buildtool", buildtool);
     DomUtil::writeEntry(m_dom, "/kdevcustomproject/build/builddir", builddir_edit->url());
 }
 
 
-void CustomBuildOptionsWidget::setMakeOptionsWidget(QTabWidget *tw, QWidget *mow)
+void CustomBuildOptionsWidget::setMakeOptionsWidget(QTabWidget *tw, QWidget *mow, QWidget* oow)
 {
     m_tabWidget = tw;
     m_makeOptions = mow;
+    m_otherOptions = oow;
     makeToggled(make_button->isChecked());
+    otherToggled(other_button->isChecked());
 }
 
+void CustomBuildOptionsWidget::otherToggled(bool b)
+{
+    m_tabWidget->setTabEnabled(m_otherOptions, b);
+}
 
 void CustomBuildOptionsWidget::makeToggled(bool b)
 {
 @ -63,3 +84,5  @
 }
 
 #include "custombuildoptionswidget.moc"
+
+// kate: space-indent on; indent-width 4; tab-width 4; replace-tabs on
--- branches/kdevelop/3.4/buildtools/custommakefiles/custombuildoptionswidget.h #637880:637881
 @ -21,22 +21,26  @
 class CustomBuildOptionsWidget : public CustomBuildOptionsWidgetBase
 {
     Q_OBJECT
-    
+
 public:
     CustomBuildOptionsWidget( QDomDocument &dom, QWidget *parent=0, const char *name=0 );
     ~CustomBuildOptionsWidget();
 
-    void setMakeOptionsWidget(QTabWidget *tw, QWidget *mow);
-    
+    void setMakeOptionsWidget(QTabWidget *tw, QWidget *mow, QWidget *oow);
+
 public slots:
     void accept();
 
 private:
     virtual void makeToggled(bool b);
-    
+    virtual void otherToggled(bool b);
+
     QDomDocument &m_dom;
     QTabWidget *m_tabWidget;
     QWidget *m_makeOptions;
+    QWidget *m_otherOptions;
 };
 
 #endif
+
+// kate: space-indent on; indent-width 4; tab-width 4; replace-tabs on
--- branches/kdevelop/3.4/buildtools/custommakefiles/custombuildoptionswidgetbase.ui #637880:637881
 @ -37,6 +37,9  @
                     <property name="text">
                         <string>&Make</string>
                     </property>
+                    <property name="accel">
+                        <string>Alt+M</string>
+                    </property>
                     <property name="checked">
                         <bool>true</bool>
                     </property>
 @ -46,9 +49,29  @
                         <cstring>ant_button</cstring>
                     </property>
                     <property name="text">
-                        <string>&Ant</string>
+                        <string>A&nt</string>
                     </property>
+                    <property name="accel">
+                        <string>Alt+N</string>
+                    </property>
                 </widget>
+                <widget class="QRadioButton">
+                    <property name="name">
+                        <cstring>other_button</cstring>
+                    </property>
+                    <property name="text">
+                        <string>Other</string>
+                    </property>
+                    <property name="accel">
+                        <string></string>
+                    </property>
+                    <property name="toolTip" stdset="0">
+                        <string>other custom build tool, e.g. script</string>
+                    </property>
+                    <property name="whatsThis" stdset="0">
+                        <string>There are myriads of buildtools out there that are not ant or make. If you use one of them (or have your own scripts), select this option.</string>
+                    </property>
+                </widget>
             </vbox>
         </widget>
         <spacer>
 @ -73,7 +96,7  @
                 <cstring>builddir_label</cstring>
             </property>
             <property name="text">
-                <string>Run the &build tool in the following directory:</string>
+                <string>Run &the build tool in the following directory:</string>
             </property>
             <property name="buddy" stdset="0">
                 <cstring>builddir_edit</cstring>
 @ -130,13 +153,12  @
         </spacer>
     </vbox>
 </widget>
-<customwidgets>
-</customwidgets>
 <includes>
     <include location="global" impldecl="in implementation">kdialog.h</include>
 </includes>
 <slots>
     <slot access="protected">makeToggled(bool)</slot>
+    <slot access="protected">otherToggled(bool)</slot>
 </slots>
 <layoutdefaults spacing="6" margin="11"/>
 <layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/>
--- branches/kdevelop/3.4/buildtools/custommakefiles/customprojectpart.cpp #637880:637881
 @ -48,6 +48,7  @
 #include "makeoptionswidget.h"
 #include "custombuildoptionswidget.h"
 #include "custommakeconfigwidget.h"
+#include "customotherconfigwidget.h"
 #include "custommanagerwidget.h"
 #include "config.h"
 #include "envvartools.h"
 @ -185,10 +186,15  @
     connect( dlg, SIGNAL( okClicked() ), w2, SLOT( accept() ) );
     buildtab->addTab( w2, i18n( "&Build" ) );
 
+    CustomOtherConfigWidget *w4 = new CustomOtherConfigWidget(this, "/kdevcustomproject", buildtab);
+    connect( dlg, SIGNAL( okClicked() ), w4, SLOT( accept() ) );
+    buildtab->addTab(w4, i18n("&Other"));
+
     CustomMakeConfigWidget *w3 = new CustomMakeConfigWidget( this, "/kdevcustomproject", buildtab );
     buildtab->addTab( w3, i18n( "Ma&ke" ) );
-    w2->setMakeOptionsWidget( buildtab, w3 );
+    w2->setMakeOptionsWidget( buildtab, w3, w4 );
     connect( dlg, SIGNAL( okClicked() ), w3, SLOT( accept() ) );
+
 }
 
 
 @ -378,11 +384,12  @
     }
 
     // check if there is an old envvars entry (from old project file with single make environment)
+    QString buildtool = DomUtil::readEntry(dom , "/kdevcustomproject/build/buildtool" );
     QDomElement el =
-        DomUtil::elementByPath( dom , "/kdevcustomproject/make/envvars" );
+        DomUtil::elementByPath( dom , "/kdevcustomproject/"+buildtool+"/envvars" );
     if ( !el.isNull() )
     {
-        QDomElement envs = DomUtil::createElementByPath( dom , "/kdevcustomproject/make/environments" );
+        QDomElement envs = DomUtil::createElementByPath( dom , "/kdevcustomproject/"+buildtool+"/environments" );
         DomUtil::makeEmpty( envs );
         el.setTagName( "default" );
         envs.appendChild( el );
 @ -712,8 +719,9  @
     // in the form of: "ENV_VARIABLE=ENV_VALUE"
     // Note that we quote the variable value due to the possibility of
     // embedded spaces
+    QString buildtool = DomUtil::readEntry( *projectDom(), "/kdevcustomproject/build/buildtool" );
     DomUtil::PairList envvars =
-        DomUtil::readPairListEntry( *projectDom(), "/kdevcustomproject/make/environments/" + currentMakeEnvironment(), "envvar", "name", "value" );
+        DomUtil::readPairListEntry( *projectDom(), "/kdevcustomproject/"+buildtool+"/environments/" + currentMakeEnvironment(), "envvar", "name", "value" );
 
     QString environstr;
     DomUtil::PairList::ConstIterator it;
 @ -734,15 +742,23  @
         return; //user cancelled
 
     QDomDocument &dom = *projectDom();
-    bool ant = DomUtil::readEntry( dom, "/kdevcustomproject/build/buildtool" ) == "ant";
+    QString buildtool = DomUtil::readEntry( dom, "/kdevcustomproject/build/buildtool" );
 
     QString cmdline;
-    if ( ant )
+    if ( buildtool == "ant" )
     {
         cmdline = "ant";
     }
-    else
+    else if( buildtool == "other" )
     {
+        cmdline = DomUtil::readEntry(dom, "/kdevcustomproject/other/otherbin");
+        if (cmdline.isEmpty())
+            cmdline = "echo";
+        else if( cmdline.find("/") == -1 )
+            cmdline = "./"+cmdline;
+        cmdline += " " + DomUtil::readEntry(dom, "/kdevcustomproject/other/otheroptions");
+    }else
+    {
         cmdline = DomUtil::readEntry( dom, "/kdevcustomproject/make/makebin" );
         if ( cmdline.isEmpty() )
             cmdline = MAKE_COMMAND;
 @ -767,7 +783,7  @
     dircmd += KProcess::quote( dir );
     dircmd += " && ";
 
-    int prio = DomUtil::readIntEntry( dom, "/kdevcustomproject/make/prio" );
+    int prio = DomUtil::readIntEntry( dom, "/kdevcustomproject/"+buildtool+"/prio" );
     QString nice;
     if ( prio != 0 )
     {
 @ -789,7 +805,9  @
 void CustomProjectPart::slotBuild()
 {
     m_lastCompilationFailed = false;
-    startMakeCommand( buildDirectory(), DomUtil::readEntry( *projectDom(), "/kdevcustomproject/make/defaulttarget" ) );
+    QString buildtool = DomUtil::readEntry( *projectDom(), "/kdevcustomproject/build/buildtool" );
+    startMakeCommand( buildDirectory(), DomUtil::readEntry( *projectDom(),
+            "/kdevcustomproject/"+buildtool+"/defaulttarget" ) );
 }




More information about the KDevelop-devel mailing list