aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek.chauhan@gmail.com>2016-05-31 00:28:26 +0530
committerJussi Pakkanen <jpakkane@gmail.com>2016-05-30 21:58:26 +0300
commit71f18226d1997a12009e3b17a0a84d45f1d25fae (patch)
tree817b6f55f549f8e387c9736fb1a34989fac627c7
parent9f4d963bd98cc4cecac48abf7341fc8808dd859f (diff)
downloadmeson-71f18226d1997a12009e3b17a0a84d45f1d25fae.zip
meson-71f18226d1997a12009e3b17a0a84d45f1d25fae.tar.gz
meson-71f18226d1997a12009e3b17a0a84d45f1d25fae.tar.bz2
Remove unmaintained and broken PyQt5 GUI (#574)
-rw-r--r--man/mesongui.124
-rw-r--r--mesonbuild/mesonmain.ui248
-rw-r--r--mesonbuild/mesonrunner.ui52
-rw-r--r--mesonbuild/mesonstart.ui119
-rw-r--r--mesonbuild/mgui.py543
-rwxr-xr-xmesongui.py20
-rw-r--r--setup.py3
7 files changed, 0 insertions, 1009 deletions
diff --git a/man/mesongui.1 b/man/mesongui.1
deleted file mode 100644
index 976c3f7..0000000
--- a/man/mesongui.1
+++ /dev/null
@@ -1,24 +0,0 @@
-.TH MESONGUI "1" "April 2016" "mesongui 0.31.0" "User Commands"
-.SH NAME
-mesongui - a gui for the Meson build system
-.SH DESCRIPTION
-
-Mesongui provides a graphical user interface to the Meson
-build system. It can be used for two main purposes: configuring
-an existing build or creating a new build for the given source.
-
-.B mesongui [
-.I source or build directory
-.B ]
-
-If the argument is a directory with a Meson project, the
-Gui will allow you to configure and generate a build tree
-for it.
-
-If the argument is an existing build directory, Mesongui will
-start a gui that will show all your configuration
-options and allows you to change them as desired. The
-gui can also be used to build and install the project.
-
-.SH SEE ALSO
-http://mesonbuild.com/
diff --git a/mesonbuild/mesonmain.ui b/mesonbuild/mesonmain.ui
deleted file mode 100644
index 209584b..0000000
--- a/mesonbuild/mesonmain.ui
+++ /dev/null
@@ -1,248 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>MainWindow</class>
- <widget class="QMainWindow" name="MainWindow">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>740</width>
- <height>613</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Meson</string>
- </property>
- <widget class="QWidget" name="centralwidget">
- <layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Project</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="project_label">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>1</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>TextLabel</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Source directory</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLabel" name="srcdir_label">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>1</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>TextLabel</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_5">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Build directory</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLabel" name="builddir_label">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>1</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>TextLabel</string>
- </property>
- </widget>
- </item>
- <item row="3" column="0">
- <widget class="QLabel" name="label_7">
- <property name="text">
- <string>Build type</string>
- </property>
- </widget>
- </item>
- <item row="3" column="1">
- <widget class="QLabel" name="buildtype_label">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>1</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>TextLabel</string>
- </property>
- </widget>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Backend</string>
- </property>
- </widget>
- </item>
- <item row="4" column="1">
- <widget class="QLabel" name="backend_label">
- <property name="text">
- <string>Ninja</string>
- </property>
- </widget>
- </item>
- <item row="5" column="0" colspan="2">
- <widget class="QTabWidget" name="tabWidget">
- <property name="currentIndex">
- <number>2</number>
- </property>
- <widget class="QWidget" name="core_tab">
- <attribute name="title">
- <string>Core data</string>
- </attribute>
- <layout class="QGridLayout" name="gridLayout_6">
- <item row="0" column="0">
- <widget class="QTreeView" name="core_view"/>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="path_tab">
- <attribute name="title">
- <string>Paths</string>
- </attribute>
- <layout class="QGridLayout" name="gridLayout_3">
- <item row="0" column="0">
- <widget class="QTreeView" name="path_view"/>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="option_tab">
- <attribute name="title">
- <string>Options</string>
- </attribute>
- <layout class="QGridLayout" name="gridLayout_4">
- <item row="0" column="0">
- <layout class="QFormLayout" name="option_form"/>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="dependency_tab">
- <attribute name="title">
- <string>Dependencies</string>
- </attribute>
- <layout class="QGridLayout" name="gridLayout_5">
- <item row="0" column="0">
- <widget class="QTreeView" name="dep_view"/>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="target_tab">
- <attribute name="title">
- <string>Build targets</string>
- </attribute>
- <layout class="QGridLayout" name="gridLayout_2">
- <item row="0" column="0">
- <widget class="QTreeView" name="target_view"/>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- <item row="6" column="0" colspan="2">
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QPushButton" name="save_button">
- <property name="text">
- <string>Save</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="compile_button">
- <property name="text">
- <string>Compile</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="test_button">
- <property name="text">
- <string>Run tests</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="install_button">
- <property name="text">
- <string>Install</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="clean_button">
- <property name="text">
- <string>Clean</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <widget class="QMenuBar" name="menubar">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>740</width>
- <height>25</height>
- </rect>
- </property>
- <widget class="QMenu" name="menuFile">
- <property name="title">
- <string>File</string>
- </property>
- <addaction name="actionSave"/>
- <addaction name="actionQuit"/>
- </widget>
- <addaction name="menuFile"/>
- </widget>
- <widget class="QStatusBar" name="statusbar"/>
- <action name="actionSave">
- <property name="text">
- <string>&amp;Save</string>
- </property>
- </action>
- <action name="actionQuit">
- <property name="text">
- <string>&amp;Quit</string>
- </property>
- </action>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/mesonbuild/mesonrunner.ui b/mesonbuild/mesonrunner.ui
deleted file mode 100644
index 942c6bd..0000000
--- a/mesonbuild/mesonrunner.ui
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>rundialog</class>
- <widget class="QDialog" name="rundialog">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>581</width>
- <height>368</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>External process output</string>
- </property>
- <property name="modal">
- <bool>true</bool>
- </property>
- <layout class="QGridLayout" name="gridLayout">
- <item row="1" column="0">
- <widget class="QLabel" name="timelabel">
- <property name="text">
- <string>Compile time: 0:0</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QPushButton" name="termbutton">
- <property name="text">
- <string>Terminate</string>
- </property>
- </widget>
- </item>
- <item row="0" column="0" colspan="2">
- <widget class="QTextEdit" name="console">
- <property name="readOnly">
- <bool>true</bool>
- </property>
- <property name="html">
- <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/mesonbuild/mesonstart.ui b/mesonbuild/mesonstart.ui
deleted file mode 100644
index c6c5f96..0000000
--- a/mesonbuild/mesonstart.ui
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>MainWindow</class>
- <widget class="QMainWindow" name="MainWindow">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>644</width>
- <height>192</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Meson</string>
- </property>
- <widget class="QWidget" name="centralwidget">
- <layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Source directory</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="source_entry">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- <horstretch>1</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- <item row="0" column="2">
- <widget class="QPushButton" name="source_browse_button">
- <property name="text">
- <string>Browse</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Build directory</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="build_entry">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- <horstretch>1</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- <item row="1" column="2">
- <widget class="QPushButton" name="build_browse_button">
- <property name="text">
- <string>Browse</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Cross file</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLineEdit" name="cross_entry">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- <horstretch>1</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- <item row="2" column="2">
- <widget class="QPushButton" name="cross_browse_button">
- <property name="text">
- <string>Browse</string>
- </property>
- </widget>
- </item>
- <item row="3" column="2">
- <widget class="QPushButton" name="generate_button">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Generate</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QMenuBar" name="menubar">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>644</width>
- <height>25</height>
- </rect>
- </property>
- </widget>
- <widget class="QStatusBar" name="statusbar"/>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/mesonbuild/mgui.py b/mesonbuild/mgui.py
deleted file mode 100644
index ffd1800..0000000
--- a/mesonbuild/mgui.py
+++ /dev/null
@@ -1,543 +0,0 @@
-#!/usr/bin/env python3
-
-# Copyright 2013-2016 The Meson development team
-
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-
-# http://www.apache.org/licenses/LICENSE-2.0
-
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import sys, os, pickle, time, shutil
-from . import build, coredata, environment, mesonlib
-from PyQt5 import uic
-from PyQt5.QtWidgets import QApplication, QMainWindow, QHeaderView
-from PyQt5.QtWidgets import QComboBox, QCheckBox
-from PyQt5.QtCore import QAbstractItemModel, QModelIndex, QVariant, QTimer
-import PyQt5.QtCore
-import PyQt5.QtWidgets
-
-priv_dir = os.path.split(os.path.abspath(os.path.realpath(__file__)))[0]
-
-class PathModel(QAbstractItemModel):
- def __init__(self, coredata):
- super().__init__()
- self.coredata = coredata
- self.names = ['Prefix', 'Library dir', 'Binary dir', 'Include dir', 'Data dir',\
- 'Man dir', 'Locale dir']
- self.attr_name = ['prefix', 'libdir', 'bindir', 'includedir', 'datadir', \
- 'mandir', 'localedir']
-
- def args(self, index):
- if index.column() == 1:
- editable = PyQt5.QtCore.Qt.ItemIsEditable
- else:
- editable= 0
- return PyQt5.QtCore.Qt.ItemIsSelectable | PyQt5.QtCore.Qt.ItemIsEnabled | editable
-
- def rowCount(self, index):
- if index.isValid():
- return 0
- return len(self.names)
-
- def columnCount(self, index):
- return 2
-
- def headerData(self, section, orientation, role):
- if role != PyQt5.QtCore.Qt.DisplayRole:
- return QVariant()
- if section == 1:
- return QVariant('Path')
- return QVariant('Type')
-
- def index(self, row, column, parent):
- return self.createIndex(row, column)
-
- def data(self, index, role):
- if role != PyQt5.QtCore.Qt.DisplayRole:
- return QVariant()
- row = index.row()
- column = index.column()
- if column == 0:
- return self.names[row]
- return getattr(self.coredata, self.attr_name[row])
-
- def parent(self, index):
- return QModelIndex()
-
- def setData(self, index, value, role):
- if role != PyQt5.QtCore.Qt.EditRole:
- return False
- row = index.row()
- column = index.column()
- s = str(value)
- setattr(self.coredata, self.attr_name[row], s)
- self.dataChanged.emit(self.createIndex(row, column), self.createIndex(row, column))
- return True
-
-class TargetModel(QAbstractItemModel):
- def __init__(self, builddata):
- super().__init__()
- self.targets = []
- for target in builddata.get_targets().values():
- name = target.get_basename()
- num_sources = len(target.get_sources()) + len(target.get_generated_sources())
- if isinstance(target, build.Executable):
- typename = 'executable'
- elif isinstance(target, build.SharedLibrary):
- typename = 'shared library'
- elif isinstance(target, build.StaticLibrary):
- typename = 'static library'
- elif isinstance(target, build.CustomTarget):
- typename = 'custom'
- else:
- typename = 'unknown'
- if target.should_install():
- installed = 'Yes'
- else:
- installed = 'No'
- self.targets.append((name, typename, installed, num_sources))
-
- def args(self, index):
- return PyQt5.QtCore.Qt.ItemIsSelectable | PyQt5.QtCore.Qt.ItemIsEnabled
-
- def rowCount(self, index):
- if index.isValid():
- return 0
- return len(self.targets)
-
- def columnCount(self, index):
- return 4
-
- def headerData(self, section, orientation, role):
- if role != PyQt5.QtCore.Qt.DisplayRole:
- return QVariant()
- if section == 3:
- return QVariant('Source files')
- if section == 2:
- return QVariant('Installed')
- if section == 1:
- return QVariant('Type')
- return QVariant('Name')
-
- def data(self, index, role):
- if role != PyQt5.QtCore.Qt.DisplayRole:
- return QVariant()
- row = index.row()
- column = index.column()
- return self.targets[row][column]
-
- def index(self, row, column, parent):
- return self.createIndex(row, column)
-
- def parent(self, index):
- return QModelIndex()
-
-class DependencyModel(QAbstractItemModel):
- def __init__(self, coredata):
- super().__init__()
- self.deps = []
- for k in coredata.deps.keys():
- bd = coredata.deps[k]
- name = k
- found = bd.found()
- if found:
- cflags = str(bd.get_compile_args())
- libs = str(bd.get_link_args())
- found = 'yes'
- else:
- cflags = ''
- libs = ''
- found = 'no'
- self.deps.append((name, found, cflags, libs))
-
- def args(self, index):
- return PyQt5.QtCore.Qt.ItemIsSelectable | PyQt5.QtCore.Qt.ItemIsEnabled
-
- def rowCount(self, index):
- if index.isValid():
- return 0
- return len(self.deps)
-
- def columnCount(self, index):
- return 4
-
- def headerData(self, section, orientation, role):
- if role != PyQt5.QtCore.Qt.DisplayRole:
- return QVariant()
- if section == 3:
- return QVariant('Link args')
- if section == 2:
- return QVariant('Compile args')
- if section == 1:
- return QVariant('Found')
- return QVariant('Name')
-
- def data(self, index, role):
- if role != PyQt5.QtCore.Qt.DisplayRole:
- return QVariant()
- row = index.row()
- column = index.column()
- return self.deps[row][column]
-
- def index(self, row, column, parent):
- return self.createIndex(row, column)
-
- def parent(self, index):
- return QModelIndex()
-
-class CoreModel(QAbstractItemModel):
- def __init__(self, core_data):
- super().__init__()
- self.elems = []
- for langname, comp in core_data.compilers.items():
- self.elems.append((langname + ' compiler', str(comp.get_exelist())))
- for langname, comp in core_data.cross_compilers.items():
- self.elems.append((langname + ' cross compiler', str(comp.get_exelist())))
-
- def args(self, index):
- return PyQt5.QtCore.Qt.ItemIsSelectable | PyQt5.QtCore.Qt.ItemIsEnabled
-
- def rowCount(self, index):
- if index.isValid():
- return 0
- return len(self.elems)
-
- def columnCount(self, index):
- return 2
-
- def headerData(self, section, orientation, role):
- if role != PyQt5.QtCore.Qt.DisplayRole:
- return QVariant()
- if section == 1:
- return QVariant('Value')
- return QVariant('Name')
-
- def data(self, index, role):
- if role != PyQt5.QtCore.Qt.DisplayRole:
- return QVariant()
- row = index.row()
- column = index.column()
- return self.elems[row][column]
-
- def index(self, row, column, parent):
- return self.createIndex(row, column)
-
- def parent(self, index):
- return QModelIndex()
-
-class OptionForm:
- def __init__(self, coredata, form):
- self.coredata = coredata
- self.form = form
- form.addRow(PyQt5.QtWidgets.QLabel("Meson options"))
- combo = QComboBox()
- combo.addItem('plain')
- combo.addItem('debug')
- combo.addItem('debugoptimized')
- combo.addItem('release')
- combo.setCurrentText(self.coredata.get_builtin_option('buildtype'))
- combo.currentTextChanged.connect(self.build_type_changed)
- self.form.addRow('Build type', combo)
- strip = QCheckBox("")
- strip.setChecked(self.coredata.get_builtin_option('strip'))
- strip.stateChanged.connect(self.strip_changed)
- self.form.addRow('Strip on install', strip)
- unity = QCheckBox("")
- unity.setChecked(self.coredata.get_builtin_option('unity'))
- unity.stateChanged.connect(self.unity_changed)
- self.form.addRow('Unity build', unity)
- form.addRow(PyQt5.QtWidgets.QLabel("Project options"))
- self.set_user_options()
-
- def set_user_options(self):
- options = self.coredata.user_options
- keys = list(options.keys())
- keys.sort()
- self.opt_keys = keys
- self.opt_widgets = []
- for key in keys:
- opt = options[key]
- if isinstance(opt, mesonlib.UserStringOption):
- w = PyQt5.QtWidgets.QLineEdit(opt.value)
- w.textChanged.connect(self.user_option_changed)
- elif isinstance(opt, mesonlib.UserBooleanOption):
- w = QCheckBox('')
- w.setChecked(opt.value)
- w.stateChanged.connect(self.user_option_changed)
- elif isinstance(opt, mesonlib.UserComboOption):
- w = QComboBox()
- for i in opt.choices:
- w.addItem(i)
- w.setCurrentText(opt.value)
- w.currentTextChanged.connect(self.user_option_changed)
- else:
- raise RuntimeError("Unknown option type")
- self.opt_widgets.append(w)
- self.form.addRow(opt.description, w)
-
- def user_option_changed(self, dummy=None):
- for i in range(len(self.opt_keys)):
- key = self.opt_keys[i]
- w = self.opt_widgets[i]
- if isinstance(w, PyQt5.QtWidgets.QLineEdit):
- newval = w.text()
- elif isinstance(w, QComboBox):
- newval = w.currentText()
- elif isinstance(w, QCheckBox):
- if w.checkState() == 0:
- newval = False
- else:
- newval = True
- else:
- raise RuntimeError('Unknown widget type')
- self.coredata.user_options[key].set_value(newval)
-
- def build_type_changed(self, newtype):
- self.coredata.buildtype = newtype
-
- def strip_changed(self, newState):
- if newState == 0:
- ns = False
- else:
- ns = True
- self.coredata.strip = ns
-
- def unity_changed(self, newState):
- if newState == 0:
- ns = False
- else:
- ns = True
- self.coredata.unity = ns
-
-class ProcessRunner():
- def __init__(self, rundir, cmdlist):
- self.cmdlist = cmdlist
- self.ui = uic.loadUi(os.path.join(priv_dir, '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.return_value = 100
-
- def run(self):
- self.process.start(self.cmdlist[0], self.cmdlist[1:])
- self.timer.start()
- self.start_time = time.time()
- return 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()
- self.return_value = self.process.exitCode()
-
- def terminated(self, foo):
- self.process.kill()
- self.timer.stop()
- self.ui.done(self.return_value)
-
- def timeout(self):
- now = time.time()
- duration = int(now - self.start_time)
- msg = 'Elapsed time: %d:%d' % (duration // 60, duration % 60)
- self.ui.timelabel.setText(msg)
-
-class MesonGui():
- def __init__(self, respawner, build_dir):
- self.respawner = respawner
- uifile = os.path.join(priv_dir, 'mesonmain.ui')
- self.ui = uic.loadUi(uifile)
- self.coredata_file = os.path.join(build_dir, 'meson-private/coredata.dat')
- self.build_file = os.path.join(build_dir, 'meson-private/build.dat')
- if not os.path.exists(self.coredata_file):
- print("Argument is not build directory.")
- sys.exit(1)
- self.coredata = pickle.load(open(self.coredata_file, 'rb'))
- self.build = pickle.load(open(self.build_file, 'rb'))
- self.build_dir = self.build.environment.build_dir
- self.src_dir = self.build.environment.source_dir
- self.build_models()
- self.options = OptionForm(self.coredata, self.ui.option_form)
- self.ui.show()
-
- def hide(self):
- self.ui.hide()
-
- def geometry(self):
- return self.ui.geometry()
-
- def move(self, x, y):
- return self.ui.move(x, y)
-
- def size(self):
- return self.ui.size()
-
- def resize(self, s):
- return self.ui.resize(s)
-
- def build_models(self):
- self.path_model = PathModel(self.coredata)
- self.target_model = TargetModel(self.build)
- self.dep_model = DependencyModel(self.coredata)
- self.core_model = CoreModel(self.coredata)
- self.fill_data()
- self.ui.core_view.setModel(self.core_model)
- hv = QHeaderView(1)
- hv.setModel(self.core_model)
- self.ui.core_view.setHeader(hv)
- self.ui.path_view.setModel(self.path_model)
- hv = QHeaderView(1)
- hv.setModel(self.path_model)
- self.ui.path_view.setHeader(hv)
- self.ui.target_view.setModel(self.target_model)
- hv = QHeaderView(1)
- hv.setModel(self.target_model)
- self.ui.target_view.setHeader(hv)
- self.ui.dep_view.setModel(self.dep_model)
- 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.clean_button.clicked.connect(self.clean)
- self.ui.save_button.clicked.connect(self.save)
-
- def fill_data(self):
- self.ui.project_label.setText(self.build.projects[''])
- self.ui.srcdir_label.setText(self.src_dir)
- self.ui.builddir_label.setText(self.build_dir)
- if self.coredata.cross_file is None:
- btype = 'Native build'
- else:
- 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)
- dialog.run()
- # All processes (at the moment) may change cache state
- # so reload.
- self.respawner.respawn()
-
- def compile(self, foo):
- self.run_process([])
-
- def run_tests(self, foo):
- self.run_process(['test'])
-
- def install(self, foo):
- self.run_process(['install'])
-
- def clean(self, foo):
- self.run_process(['clean'])
-
- def save(self, foo):
- pickle.dump(self.coredata, open(self.coredata_file, 'wb'))
-
-class Starter():
- def __init__(self, sdir):
- uifile = os.path.join(priv_dir, 'mesonstart.ui')
- self.ui = uic.loadUi(uifile)
- self.ui.source_entry.setText(sdir)
- self.dialog = PyQt5.QtWidgets.QFileDialog()
- if len(sdir) == 0:
- self.dialog.setDirectory(os.getcwd())
- else:
- self.dialog.setDirectory(sdir)
- self.ui.source_browse_button.clicked.connect(self.src_browse_clicked)
- self.ui.build_browse_button.clicked.connect(self.build_browse_clicked)
- self.ui.cross_browse_button.clicked.connect(self.cross_browse_clicked)
- self.ui.source_entry.textChanged.connect(self.update_button)
- self.ui.build_entry.textChanged.connect(self.update_button)
- self.ui.generate_button.clicked.connect(self.generate)
- self.update_button()
- self.ui.show()
-
- def generate(self):
- srcdir = self.ui.source_entry.text()
- builddir = self.ui.build_entry.text()
- cross = self.ui.cross_entry.text()
- cmdlist = [os.path.join(os.path.split(__file__)[0], 'meson.py'), srcdir, builddir]
- if cross != '':
- cmdlist += ['--cross', cross]
- pr = ProcessRunner(os.getcwd(), cmdlist)
- rvalue = pr.run()
- if rvalue == 0:
- os.execl(__file__, 'dummy', builddir)
-
- def update_button(self):
- if self.ui.source_entry.text() == '' or self.ui.build_entry.text() == '':
- self.ui.generate_button.setEnabled(False)
- else:
- self.ui.generate_button.setEnabled(True)
-
- def src_browse_clicked(self):
- self.dialog.setFileMode(2)
- if self.dialog.exec():
- self.ui.source_entry.setText(self.dialog.selectedFiles()[0])
-
- def build_browse_clicked(self):
- self.dialog.setFileMode(2)
- if self.dialog.exec():
- self.ui.build_entry.setText(self.dialog.selectedFiles()[0])
-
- def cross_browse_clicked(self):
- self.dialog.setFileMode(1)
- if self.dialog.exec():
- self.ui.cross_entry.setText(self.dialog.selectedFiles()[0])
-
-# Rather than rewrite all classes and arrays to be
-# updateable, just rebuild the entire GUI from
-# scratch whenever data on disk changes.
-
-class MesonGuiRespawner():
- def __init__(self, arg):
- self.arg = arg
- self.gui = MesonGui(self, self.arg)
-
- def respawn(self):
- geo = self.gui.geometry()
- s = self.gui.size()
- self.gui.hide()
- self.gui = MesonGui(self, self.arg)
- self.gui.move(geo.x(), geo.y())
- self.gui.resize(s)
- # Garbage collection takes care of the old gui widget
-
-
-def run(args): # SPECIAL, Qt wants all args, including command name.
- app = QApplication(sys.argv)
- if len(args) == 1:
- arg = ""
- elif len(args) == 2:
- arg = sys.argv[1]
- else:
- print(sys.argv[0], "<build or source dir>")
- return 1
- if os.path.exists(os.path.join(arg, 'meson-private/coredata.dat')):
- guirespawner = MesonGuiRespawner(arg)
- else:
- runner = Starter(arg)
- return app.exec_()
-
-if __name__ == '__main__':
- sys.exit(run(sys.argv))
diff --git a/mesongui.py b/mesongui.py
deleted file mode 100755
index 9e16b00..0000000
--- a/mesongui.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env python3
-
-# Copyright 2016 The Meson development team
-
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-
-# http://www.apache.org/licenses/LICENSE-2.0
-
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-from mesonbuild import mgui
-import sys
-
-sys.exit(mgui.run(sys.argv))
diff --git a/setup.py b/setup.py
index 1c96435..d5b79ae 100644
--- a/setup.py
+++ b/setup.py
@@ -42,15 +42,12 @@ setup(name='meson',
'mesonbuild.scripts',
'mesonbuild.backend',
'mesonbuild.wrap'],
- package_data={'mesonbuild': ['*.ui']},
scripts=['meson.py',
'mesonconf.py',
- 'mesongui.py',
'mesonintrospect.py',
'wraptool.py'],
data_files=[('share/man/man1', ['man/meson.1',
'man/mesonconf.1',
- 'man/mesongui.1',
'man/mesonintrospect.1',
'man/wraptool.1'])],
classifiers=['Development Status :: 5 - Production/Stable',