aboutsummaryrefslogtreecommitdiff
path: root/mesongui.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-09-27 22:50:06 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2013-09-27 22:50:06 +0300
commitcfce43b5a24ad39c85c3713b0874d444ccc10be5 (patch)
treef8182a1b4baadf9e4f244e0074f2340fe4130816 /mesongui.py
parent369ff9727887ed061d78485021586b2d8acb1f4b (diff)
downloadmeson-cfce43b5a24ad39c85c3713b0874d444ccc10be5.zip
meson-cfce43b5a24ad39c85c3713b0874d444ccc10be5.tar.gz
meson-cfce43b5a24ad39c85c3713b0874d444ccc10be5.tar.bz2
Can compile and test via GUI.
Diffstat (limited to 'mesongui.py')
-rwxr-xr-xmesongui.py61
1 files changed, 58 insertions, 3 deletions
diff --git a/mesongui.py b/mesongui.py
index 6dd42c3..d998624 100755
--- a/mesongui.py
+++ b/mesongui.py
@@ -14,11 +14,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import sys, os, pickle
-import build, coredata
+import sys, os, pickle, time, shutil
+import build, coredata, environment
from PyQt5 import uic
from PyQt5.QtWidgets import QApplication, QMainWindow, QHeaderView
-from PyQt5.QtCore import QAbstractItemModel, QModelIndex, QVariant
+from PyQt5.QtCore import QAbstractItemModel, QModelIndex, QVariant, QTimer
import PyQt5.QtCore
class PathModel(QAbstractItemModel):
@@ -183,6 +183,45 @@ class DependencyModel(QAbstractItemModel):
def parent(self, index):
return QModelIndex()
+class ProcessRunner():
+ def __init__(self, rundir, cmdlist):
+ self.cmdlist = cmdlist
+ self.ui = uic.loadUi('mesonrunner.ui')
+ self.timer = QTimer(self.ui)
+ self.timer.setInterval(1000)
+ self.timer.timeout.connect(self.timeout)
+ self.process = PyQt5.QtCore.QProcess()
+ self.process.setProcessChannelMode(PyQt5.QtCore.QProcess.MergedChannels)
+ self.process.setWorkingDirectory(rundir)
+ self.process.readyRead.connect(self.read_data)
+ self.process.finished.connect(self.finished)
+ self.ui.termbutton.clicked.connect(self.terminated)
+ self.process.start(self.cmdlist[0], self.cmdlist[1:])
+ self.timer.start()
+ self.start_time = time.time()
+ self.ui.exec()
+
+ def read_data(self):
+ while(self.process.canReadLine()):
+ txt = bytes(self.process.readLine()).decode('utf8')
+ self.ui.console.append(txt)
+
+ def finished(self):
+ self.read_data()
+ self.ui.termbutton.setText('Done')
+ self.timer.stop()
+
+ def terminated(self, foo):
+ self.process.kill()
+ self.timer.stop()
+ self.ui.done(0)
+
+ def timeout(self):
+ now = time.time()
+ duration = int(now - self.start_time)
+ msg = 'Compile time: %d:%d' % (duration // 60, duration % 60)
+ self.ui.timelabel.setText(msg)
+
class MesonGui():
def __init__(self, build_dir):
uifile = 'mesonmain.ui'
@@ -212,6 +251,9 @@ class MesonGui():
hv = QHeaderView(1)
hv.setModel(self.dep_model)
self.ui.dep_view.setHeader(hv)
+ self.ui.compile_button.clicked.connect(self.compile)
+ self.ui.test_button.clicked.connect(self.run_tests)
+ self.ui.install_button.clicked.connect(self.install)
self.ui.show()
def fill_data(self):
@@ -224,6 +266,19 @@ class MesonGui():
btype = 'Cross build'
self.ui.buildtype_label.setText(btype)
+ def run_process(self, cmdlist):
+ cmdlist = [shutil.which(environment.detect_ninja())] + cmdlist
+ dialog = ProcessRunner(self.build.environment.build_dir, cmdlist)
+
+ def compile(self, foo):
+ self.run_process([])
+
+ def run_tests(self, foo):
+ self.run_process(['test'])
+
+ def install(self, foo):
+ self.run_process(['install'])
+
if __name__ == '__main__':
app = QApplication(sys.argv)
if len(sys.argv) != 2: