mirror of
https://gitlab.com/ita1024/waf.git
synced 2024-11-22 09:57:15 +01:00
eclipse: add support for generated files management for java and python
added support to search and add into source path also generated source files for both java and python. this is useful when using generated code (ie. protoc and pyqt5) so browsing in eclipse works correclty adding also paths where generated code is done. extended example in playground demostrating generated code
This commit is contained in:
parent
c4f8e20e69
commit
64a582ecc2
12
playground/eclipse/java/protoc/message.proto
Normal file
12
playground/eclipse/java/protoc/message.proto
Normal file
@ -0,0 +1,12 @@
|
||||
package udp.tc.tests;
|
||||
|
||||
option java_package ="com.udp.tc.tests";
|
||||
option java_outer_classname= "MessageProtos";
|
||||
option cc_generic_services = false;
|
||||
option java_generic_services = false;
|
||||
option py_generic_services = false;
|
||||
|
||||
message Message {
|
||||
required int32 test = 1;
|
||||
optional uint32 blah = 2;
|
||||
}
|
@ -21,7 +21,7 @@ def options(opt):
|
||||
pass
|
||||
|
||||
def configure(conf):
|
||||
conf.load('java')
|
||||
conf.load('java protoc')
|
||||
|
||||
try:
|
||||
ret = conf.load('junit', tooldir='.')
|
||||
@ -33,6 +33,7 @@ def configure(conf):
|
||||
conf.check_java_class('FakeClass')
|
||||
|
||||
conf.env.CLASSPATH_NNN = ['aaaa.jar', 'bbbb.jar']
|
||||
conf.env.CLASSPATH_PROTOBUF = ['/tmp/cp/protobuf-java-2.5.0.jar']
|
||||
|
||||
def build(bld):
|
||||
|
||||
@ -54,3 +55,12 @@ def build(bld):
|
||||
|
||||
bld.recurse('animals cats')
|
||||
|
||||
|
||||
bld(
|
||||
features = 'javac protoc',
|
||||
name = 'pbjava',
|
||||
srcdir = 'protoc/',
|
||||
source = ['protoc/message.proto'],
|
||||
use = 'PROTOBUF',
|
||||
protoc_includes = ['protoc'])
|
||||
|
||||
|
130
playground/eclipse/python/withqt5/src/firstgui.ui
Normal file
130
playground/eclipse/python/withqt5/src/firstgui.ui
Normal file
@ -0,0 +1,130 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>myfirstgui</class>
|
||||
<widget class="QDialog" name="myfirstgui">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>411</width>
|
||||
<height>247</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>My First Gui!</string>
|
||||
</property>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>210</y>
|
||||
<width>381</width>
|
||||
<height>32</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Close</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="myTextInput">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>10</y>
|
||||
<width>101</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QListWidget" name="listWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>120</x>
|
||||
<y>10</y>
|
||||
<width>281</width>
|
||||
<height>192</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="clearBtn">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>180</y>
|
||||
<width>101</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>clear</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="addBtn">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>40</y>
|
||||
<width>101</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>add</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>myfirstgui</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>258</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>myfirstgui</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>clearBtn</sender>
|
||||
<signal>clicked()</signal>
|
||||
<receiver>listWidget</receiver>
|
||||
<slot>clear()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>177</x>
|
||||
<y>253</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>177</x>
|
||||
<y>174</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
24
playground/eclipse/python/withqt5/src/sample.py
Normal file
24
playground/eclipse/python/withqt5/src/sample.py
Normal file
@ -0,0 +1,24 @@
|
||||
import sys
|
||||
from PySide2 import QtCore, QtGui, QtWidgets
|
||||
from firstgui import Ui_myfirstgui
|
||||
|
||||
class MyFirstGuiProgram(Ui_myfirstgui):
|
||||
def __init__(self, dialog):
|
||||
Ui_myfirstgui.__init__(self)
|
||||
self.setupUi(dialog)
|
||||
|
||||
# Connect "add" button with a custom function (addInputTextToListbox)
|
||||
self.addBtn.clicked.connect(self.addInputTextToListbox)
|
||||
|
||||
def addInputTextToListbox(self):
|
||||
txt = self.myTextInput.text()
|
||||
self.listWidget.addItem(txt)
|
||||
|
||||
if __name__ == '__main__':
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
dialog = QtWidgets.QDialog()
|
||||
|
||||
prog = MyFirstGuiProgram(dialog)
|
||||
|
||||
dialog.show()
|
||||
sys.exit(app.exec_())
|
@ -3,10 +3,10 @@
|
||||
|
||||
|
||||
def options(opt):
|
||||
opt.load('python')
|
||||
opt.load('python pyqt5')
|
||||
|
||||
def configure(conf):
|
||||
conf.load('python')
|
||||
conf.load('python pyqt5')
|
||||
conf.check_python_version(minver=(2, 7, 0))
|
||||
|
||||
|
||||
@ -15,5 +15,7 @@ def build(bld):
|
||||
bld(name='mod2', features='py', source=bld.path.ant_glob('mod2/src/**/*.py'), install_from='mod2/src')
|
||||
bld(name='mod3', features='py', source=bld.path.ant_glob('mod3/src/**/*.py'), install_from='mod3/src')
|
||||
|
||||
bld(name='withqt5', features='py pyqt5', source=bld.path.ant_glob('withqt5/src/**/*'), install_from='withqt5/src')
|
||||
|
||||
# Example program with module dependencies
|
||||
bld(name='prg', features='py', source=bld.path.ant_glob('prg/src/**/*.py'), install_from='prg/src', use='mod1 mod2 mod3')
|
||||
|
@ -75,38 +75,36 @@ class eclipse(Build.BuildContext):
|
||||
if not isinstance(tg, TaskGen.task_gen):
|
||||
continue
|
||||
|
||||
tg.post()
|
||||
|
||||
# Add local Python modules paths to configuration so object resolving will work in IDE
|
||||
# This may also contain generated files (ie. pyqt5 or protoc) that get picked from build
|
||||
if 'py' in tg.features:
|
||||
pypath = tg.path.relpath()
|
||||
py_installfrom = getattr(tg, 'install_from', None)
|
||||
if py_installfrom:
|
||||
if isinstance(py_installfrom, Node.Node):
|
||||
py_installfrom = py_installfrom.path_from(tg.path)
|
||||
pypath += os.sep + py_installfrom
|
||||
pythonpath.append(pypath)
|
||||
if isinstance(py_installfrom, Node.Node):
|
||||
pypath = py_installfrom.path_from(self.root.make_node(self.top_dir))
|
||||
if pypath not in pythonpath:
|
||||
pythonpath.append(pypath)
|
||||
haspython = True
|
||||
|
||||
|
||||
# Add Java source directories so object resolving works in IDE
|
||||
# This may also contain generated files (ie. protoc) that get picked from build
|
||||
if 'javac' in tg.features:
|
||||
java_src = tg.path.relpath()
|
||||
java_srcdir = getattr(tg, 'srcdir', None)
|
||||
java_srcdir = getattr(tg.javac_task, 'srcdir', None)
|
||||
if java_srcdir:
|
||||
if isinstance(java_srcdir, Node.Node):
|
||||
java_srcdir = [java_srcdir]
|
||||
for x in Utils.to_list(java_srcdir):
|
||||
if isinstance(x, Node.Node):
|
||||
x = x.name
|
||||
if java_src == '.':
|
||||
this_src = x
|
||||
else:
|
||||
this_src = java_src + os.sep + x
|
||||
javasrcpath.append(this_src)
|
||||
x = x.path_from(self.root.make_node(self.top_dir))
|
||||
if x not in javasrcpath:
|
||||
javasrcpath.append(x)
|
||||
else:
|
||||
javasrcpath.append(java_src)
|
||||
if java_src not in javasrcpath:
|
||||
javasrcpath.append(java_src)
|
||||
hasjava = True
|
||||
|
||||
tg.post()
|
||||
if not getattr(tg, 'link_task', None):
|
||||
continue
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user