Merge lp:~uriboni/qt-halide/packaging into lp:qt-halide

Proposed by Ugo Riboni
Status: Merged
Approved by: Florian Boucault
Approved revision: 319
Merged at revision: 308
Proposed branch: lp:~uriboni/qt-halide/packaging
Merge into: lp:qt-halide
Prerequisite: lp:~uriboni/qt-halide/copyright-headers
Diff against target: 396 lines (+212/-12)
18 files modified
.bzrignore (+1/-1)
CMakeLists.txt (+3/-0)
cmake/HalideGenerators.cmake (+12/-0)
debian/changelog (+11/-0)
debian/compat (+1/-0)
debian/control (+40/-0)
debian/copyright (+41/-0)
debian/qt-halide-sampleapp.install (+4/-0)
debian/qt-halide-sampleapp.lintian-overrides (+1/-0)
debian/qtdeclarative5-halide-plugin0.1.install (+1/-0)
debian/qtdeclarative5-halide-plugin0.1.lintian-overrides (+3/-0)
debian/rules (+13/-0)
debian/source/format (+1/-0)
examples/sampleapp/CMakeLists.txt (+16/-8)
examples/sampleapp/config.h.in (+42/-0)
examples/sampleapp/sampleapp.cpp (+5/-3)
src/QtHalide/CMakeLists.txt (+11/-0)
src/QtHalide/halide_function.cpp (+6/-0)
To merge this branch: bzr merge lp:~uriboni/qt-halide/packaging
Reviewer Review Type Date Requested Status
Florian Boucault (community) Needs Fixing
Review via email: mp+255498@code.launchpad.net

This proposal supersedes a proposal from 2015-04-07.

Description of the change

Add debian packaging and the ability to properly run when installed

To post a comment you must log in.
Revision history for this message
Florian Boucault (fboucault) wrote : Posted in a previous version of this proposal

- Does it work on armhf?
- Are tests run during build?

Revision history for this message
Ugo Riboni (uriboni) wrote : Posted in a previous version of this proposal

> - Does it work on armhf?

It does build on armhf now.

When run on the device the sample app comes up and displays the parrot image, but you see only a corner of the image occupying the entire screen. I am still looking into fixing the demo app.

However replacing the sampleapp.qml with a minimal example doing a transform and rendering it works just fine, the transform is applied and rendered correctly on screen, so the library works fine.

> - Are tests run during build?

No. They look for x11 and there is no x11. I was told balloons would be able to help me but he is on vacation, so for the moment I disabled the tests when building.

Revision history for this message
Ugo Riboni (uriboni) wrote : Posted in a previous version of this proposal

After doing some research on running the tests, it appears we can run them via xvfb, as the UI toolkit is doing.
However: xvfb is not supported on ARM, and does not support GL, which our tests seem to require (even if we are not actually explicitly using it in the tests, the library still tries to use it)

So I would prefer to leave the tests disabled for now, and at least commit the rest of the packaging work.

Revision history for this message
Florian Boucault (fboucault) wrote :

Wrong license, should be LGPL

review: Needs Fixing
Revision history for this message
Florian Boucault (fboucault) wrote :

debian/control

"QT Halide example app"
QT is written Qt

review: Needs Fixing
Revision history for this message
Florian Boucault (fboucault) wrote :

"An example application demostrating the QML Halide plugin."

*demonstrating*

review: Needs Fixing
Revision history for this message
Florian Boucault (fboucault) wrote :

Debian package version is 0.5, should match lib version 0.1

review: Needs Fixing
lp:~uriboni/qt-halide/packaging updated
315. By Ugo Riboni

Add version number in the pacakage name, per standards, and fix two spelling mistakes.

316. By Ugo Riboni

Revert changelog to a clean state and use the new package name

Revision history for this message
Ugo Riboni (uriboni) wrote :

Fixed all comments (between this MR and the copyright MR)
Package name now matches library version and has ~ubuntu1 suffix to allow clean versioning.

The package is still in the phablet-team PPA as Bill insisted for this even after I passed along to him your comments.
The PPA is https://launchpad.net/~phablet-team/+archive/ubuntu/ppa/+packages

lp:~uriboni/qt-halide/packaging updated
317. By Ugo Riboni

Rename install and overrides files to match package renaming

318. By Ugo Riboni

Fix debian/copyright

319. By Ugo Riboni

Bump version

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.bzrignore'
2--- .bzrignore 2015-04-02 15:30:17 +0000
3+++ .bzrignore 2015-04-08 16:28:17 +0000
4@@ -1,2 +1,2 @@
5-src/QtHalide/generator_*.h
6+examples/sampleapp/generator_*.h
7 tests/unit/QtHalideTestHelper/generator_*.h
8
9=== modified file 'CMakeLists.txt'
10--- CMakeLists.txt 2015-04-02 16:23:28 +0000
11+++ CMakeLists.txt 2015-04-08 16:28:17 +0000
12@@ -11,6 +11,9 @@
13 pkg_check_modules(HALIDE Halide)
14 pkg_check_modules(FFI libffi)
15
16+# Standard install paths
17+include(GNUInstallDirs)
18+
19 if(HALIDE_FOUND)
20 MESSAGE("Found system wide installation of Halide")
21 else()
22
23=== modified file 'cmake/HalideGenerators.cmake'
24--- cmake/HalideGenerators.cmake 2015-03-31 10:59:30 +0000
25+++ cmake/HalideGenerators.cmake 2015-04-08 16:28:17 +0000
26@@ -31,6 +31,18 @@
27 endif()
28
29 string(REPLACE "_" "-" TARGET_PROCESSOR ${TARGET_PROCESSOR})
30+
31+# CMAKE_SYSTEM_PROCESSOR is calling uname -p to get the value, which on our
32+# device equals to armv7l and on our x86 build machines equals i686, none of
33+# which is not supported by Halide, so we need to fix it.
34+# FIXME: find a better way to retrieve the architecture.
35+if(${TARGET_PROCESSOR} STREQUAL "armv7l")
36+ set(TARGET_PROCESSOR "arm-32")
37+endif()
38+if(${TARGET_PROCESSOR} STREQUAL "i686")
39+ set(TARGET_PROCESSOR "x86-64")
40+endif()
41+
42 string(TOLOWER ${CMAKE_SYSTEM_NAME} TARGET_OS)
43 set(TARGET ${TARGET_PROCESSOR}-${TARGET_OS})
44
45
46=== added directory 'debian'
47=== added file 'debian/changelog'
48--- debian/changelog 1970-01-01 00:00:00 +0000
49+++ debian/changelog 2015-04-08 16:28:17 +0000
50@@ -0,0 +1,11 @@
51+qt-halide (0.1~ubuntu2) vivid; urgency=medium
52+
53+ * Fix debian/copyright
54+
55+ -- Ugo Riboni <ugo.riboni@canonical.com> Wed, 08 Apr 2015 18:27:37 +0200
56+
57+qt-halide (0.1~ubuntu1) vivid; urgency=medium
58+
59+ * Initial release.
60+
61+ -- Ugo Riboni <ugo.riboni@canonical.com> Tue, 07 Apr 2015 15:09:53 +0200
62
63=== added file 'debian/compat'
64--- debian/compat 1970-01-01 00:00:00 +0000
65+++ debian/compat 2015-04-08 16:28:17 +0000
66@@ -0,0 +1,1 @@
67+9
68
69=== added file 'debian/control'
70--- debian/control 1970-01-01 00:00:00 +0000
71+++ debian/control 2015-04-08 16:28:17 +0000
72@@ -0,0 +1,40 @@
73+Source: qt-halide
74+Section: libs
75+Priority: optional
76+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
77+Build-Depends: cmake (>= 2.8.9),
78+ debhelper (>= 9),
79+ pkg-config,
80+ halide-lang,
81+ libffi-dev,
82+ qml-module-qtquick2 (>= 5.4) | qtdeclarative5-qtquick2-plugin (>= 5.4),
83+ qml-module-qttest | qtdeclarative5-test-plugin,
84+ qt5-default,
85+ qt5-qmake,
86+ qtbase5-dev (>= 5.4),
87+ qtbase5-dev-tools,
88+ qtdeclarative5-dev,
89+Standards-Version: 3.9.5
90+Homepage: https://launchpad.net/qt-halide
91+# If you aren't a member of ~phablet-team but need to upload packaging changes,
92+# just go ahead. ~phablet-team will notice and sync up the code again.
93+Vcs-Bzr: https://code.launchpad.net/~phablet-team/qt-halide/trunk
94+
95+Package: qtdeclarative5-halide-plugin0.1
96+Architecture: any
97+Pre-Depends: ${misc:Pre-Depends}
98+Depends: ${misc:Depends},
99+ ${shlibs:Depends},
100+ qml-module-qtquick2 | qtdeclarative5-qtquick2-plugin,
101+Description: Halide QML plugin
102+ A plugin allowing access to Halide from QML.
103+
104+Package: qt-halide-sampleapp
105+Architecture: any
106+Pre-Depends: ${misc:Pre-Depends}
107+Depends: ${misc:Depends},
108+ ${shlibs:Depends},
109+ qtdeclarative5-halide-plugin0.1,
110+ qtdeclarative5-ubuntu-ui-toolkit-plugin
111+Description: Qt Halide example app
112+ An example application demonstrating the QML Halide plugin.
113
114=== added file 'debian/copyright'
115--- debian/copyright 1970-01-01 00:00:00 +0000
116+++ debian/copyright 2015-04-08 16:28:17 +0000
117@@ -0,0 +1,41 @@
118+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
119+
120+Files: *
121+Copyright: 2015 Canonical Ltd.
122+License: LGPL-3
123+ This program is free software; you can redistribute it and/or modify
124+ it under the terms of the GNU Lesser General Public License as published by
125+ the Free Software Foundation; version 3.
126+
127+ This program is distributed in the hope that it will be useful,
128+ but WITHOUT ANY WARRANTY; without even the implied warranty of
129+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
130+ GNU Lesser General Public License for more details.
131+
132+ You should have received a copy of the GNU Lesser General Public License
133+ along with this program. If not, see <http://www.gnu.org/licenses/>.
134+
135+Files: */GenGen.cpp
136+Copyright: 2012-2014 MIT CSAIL, Google Inc., and other contributors
137+Copyright: 2015 Canonical Ltd.
138+License: Expat
139+ Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
140+
141+ Permission is hereby granted, free of charge, to any person obtaining
142+ a copy of this software and associated documentation files (the
143+ "Software"), to deal in the Software without restriction, including
144+ without limitation the rights to use, copy, modify, merge, publish,
145+ distribute, sublicense, and/or sell copies of the Software, and to
146+ permit persons to whom the Software is furnished to do so, subject to
147+ the following conditions:
148+
149+ The above copyright notice and this permission notice shall be included
150+ in all copies or substantial portions of the Software.
151+
152+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
153+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
154+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
155+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
156+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
157+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
158+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
159
160=== added file 'debian/qt-halide-sampleapp.install'
161--- debian/qt-halide-sampleapp.install 1970-01-01 00:00:00 +0000
162+++ debian/qt-halide-sampleapp.install 2015-04-08 16:28:17 +0000
163@@ -0,0 +1,4 @@
164+usr/bin/qt-halide-sampleapp
165+usr/share/qt-halide-sampleapp/*.qml
166+usr/share/qt-halide-sampleapp/*.png
167+usr/share/qt-halide-sampleapp/*.jpg
168
169=== added file 'debian/qt-halide-sampleapp.lintian-overrides'
170--- debian/qt-halide-sampleapp.lintian-overrides 1970-01-01 00:00:00 +0000
171+++ debian/qt-halide-sampleapp.lintian-overrides 2015-04-08 16:28:17 +0000
172@@ -0,0 +1,1 @@
173+qt-halide-sampleapp: binary-without-manpage
174
175=== added file 'debian/qtdeclarative5-halide-plugin0.1.install'
176--- debian/qtdeclarative5-halide-plugin0.1.install 1970-01-01 00:00:00 +0000
177+++ debian/qtdeclarative5-halide-plugin0.1.install 2015-04-08 16:28:17 +0000
178@@ -0,0 +1,1 @@
179+usr/lib/*/qt5/qml/QtHalide/*
180
181=== added file 'debian/qtdeclarative5-halide-plugin0.1.lintian-overrides'
182--- debian/qtdeclarative5-halide-plugin0.1.lintian-overrides 1970-01-01 00:00:00 +0000
183+++ debian/qtdeclarative5-halide-plugin0.1.lintian-overrides 2015-04-08 16:28:17 +0000
184@@ -0,0 +1,3 @@
185+qtdeclarative5-halide-plugin: pkg-has-shlibs-control-file-but-no-actual-shared-libs
186+qtdeclarative5-halide-plugin: postinst-has-useless-call-to-ldconfig
187+qtdeclarative5-halide-plugin: postrm-has-useless-call-to-ldconfig
188
189=== added file 'debian/rules'
190--- debian/rules 1970-01-01 00:00:00 +0000
191+++ debian/rules 2015-04-08 16:28:17 +0000
192@@ -0,0 +1,13 @@
193+#!/usr/bin/make -f
194+# -*- makefile -*-
195+
196+# Uncomment this to turn on verbose mode.
197+# export DH_VERBOSE=1
198+
199+%:
200+ dh $@ --parallel
201+
202+override_dh_install:
203+ dh_install --fail-missing
204+
205+override_dh_auto_test:
206
207=== added directory 'debian/source'
208=== added file 'debian/source/format'
209--- debian/source/format 1970-01-01 00:00:00 +0000
210+++ debian/source/format 2015-04-08 16:28:17 +0000
211@@ -0,0 +1,1 @@
212+1.0
213
214=== modified file 'examples/sampleapp/CMakeLists.txt'
215--- examples/sampleapp/CMakeLists.txt 2015-04-02 16:23:28 +0000
216+++ examples/sampleapp/CMakeLists.txt 2015-04-08 16:28:17 +0000
217@@ -2,10 +2,14 @@
218 find_package(Threads)
219
220 include_directories(
221+ ${CMAKE_CURRENT_BINARY_DIR}
222 ${CMAKE_CURRENT_SOURCE_DIR}/../../src/QtHalide
223 ${HALIDE_INCLUDE_DIRS}
224 )
225
226+set(QT_HALIDE_SAMPLE_DIR ${CMAKE_INSTALL_DATADIR}/qt-halide-sampleapp/)
227+configure_file(config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h @ONLY)
228+
229 set(SAMPLEAPP_SOURCES
230 sampleapp.cpp
231
232@@ -17,19 +21,19 @@
233 generator_auto_enhance.cpp
234 )
235
236-add_executable(sampleapp ${SAMPLEAPP_SOURCES})
237-add_dependencies(sampleapp qthalide-qml)
238-add_dependencies(sampleapp sampleapp-qmlfiles)
239+add_executable(qt-halide-sampleapp ${SAMPLEAPP_SOURCES})
240+add_dependencies(qt-halide-sampleapp qthalide-qml)
241+add_dependencies(qt-halide-sampleapp sampleapp-qmlfiles)
242
243-compile_generators(${CMAKE_CURRENT_SOURCE_DIR} sampleapp)
244-qt5_use_modules(sampleapp Gui Qml Quick Concurrent)
245-target_link_libraries(sampleapp
246+compile_generators(${CMAKE_CURRENT_SOURCE_DIR} qt-halide-sampleapp)
247+qt5_use_modules(qt-halide-sampleapp Gui Qml Quick Concurrent)
248+target_link_libraries(qt-halide-sampleapp
249 ${HALIDE_LIBRARIES}
250- ${sampleapp_GENERATORS_OBJECTS}
251+ ${qt-halide-sampleapp_GENERATORS_OBJECTS}
252 ${CMAKE_THREAD_LIBS_INIT}
253 )
254
255-file(GLOB ASSETS_FILES *.qml *.js *.png *.jpg)
256+file(GLOB ASSETS_FILES *.qml *.png *.jpg)
257
258 # Copy assets files to the build directory
259 add_custom_target(sampleapp-qmlfiles
260@@ -41,3 +45,7 @@
261 add_custom_target(sampleapp-qmlfiles-ide ALL
262 SOURCES ${ASSETS_FILES}
263 )
264+
265+# Install app
266+install(TARGETS qt-halide-sampleapp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
267+install(FILES ${ASSETS_FILES} DESTINATION ${QT_HALIDE_SAMPLE_DIR}/)
268
269=== added file 'examples/sampleapp/config.h.in'
270--- examples/sampleapp/config.h.in 1970-01-01 00:00:00 +0000
271+++ examples/sampleapp/config.h.in 2015-04-08 16:28:17 +0000
272@@ -0,0 +1,42 @@
273+/*
274+ * Copyright (C) 2015 Canonical, Ltd.
275+ *
276+ * This program is free software; you can redistribute it and/or modify
277+ * it under the terms of the GNU General Public License as published by
278+ * the Free Software Foundation; version 3.
279+ *
280+ * This program is distributed in the hope that it will be useful,
281+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
282+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
283+ * GNU General Public License for more details.
284+ *
285+ * You should have received a copy of the GNU General Public License
286+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
287+ */
288+
289+// Qt
290+#include <QtCore/QCoreApplication>
291+#include <QtCore/QDir>
292+
293+inline bool isRunningInstalled() {
294+ static bool installed = (QCoreApplication::applicationDirPath() ==
295+ QDir(("@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@")).canonicalPath());
296+ return installed;
297+}
298+
299+inline QString sampleAppImportDirectory() {
300+ if (isRunningInstalled()) {
301+ return QString("@CMAKE_INSTALL_PREFIX@/@QT_HALIDE_SAMPLE_DIR@/");
302+ } else {
303+ return QString("@CMAKE_BINARY_DIR@/src");
304+ }
305+}
306+
307+inline QString sampleAppSourceQml() {
308+ static QString qmlFile("sampleapp.qml");
309+ if (isRunningInstalled()) {
310+ return QString("@CMAKE_INSTALL_PREFIX@/@QT_HALIDE_SAMPLE_DIR@/") + qmlFile;
311+ } else {
312+ return QString("@CMAKE_BINARY_DIR@/examples/sampleapp/") + qmlFile;
313+ }
314+}
315
316=== modified file 'examples/sampleapp/sampleapp.cpp'
317--- examples/sampleapp/sampleapp.cpp 2015-04-02 15:52:34 +0000
318+++ examples/sampleapp/sampleapp.cpp 2015-04-08 16:28:17 +0000
319@@ -1,13 +1,15 @@
320 #include <QtGui/QGuiApplication>
321 #include <QtQml/QQmlEngine>
322 #include <QtQuick/QQuickView>
323+#include <QtCore/QDebug>
324+#include "config.h"
325
326 int main(int argc, char *argv[]) {
327 QGuiApplication app(argc, argv);
328 QQuickView view;
329- // FIXME: hack retrieval of path
330- view.engine()->addImportPath("../../src");
331- view.setSource(QUrl::fromLocalFile("sampleapp.qml"));
332+
333+ view.engine()->addImportPath(sampleAppImportDirectory());
334+ view.setSource(QUrl::fromLocalFile(sampleAppSourceQml()));
335 view.show();
336 return app.exec();
337 }
338
339=== modified file 'src/QtHalide/CMakeLists.txt'
340--- src/QtHalide/CMakeLists.txt 2015-04-06 10:45:45 +0000
341+++ src/QtHalide/CMakeLists.txt 2015-04-08 16:28:17 +0000
342@@ -3,6 +3,17 @@
343 ${HALIDE_INCLUDE_DIRS}
344 )
345
346+# Qt5's cmake does not export QT_IMPORTS_DIR, lets query qmake on our own for now
347+get_target_property(QMAKE_EXECUTABLE Qt5::qmake LOCATION)
348+function(QUERY_QMAKE VAR RESULT)
349+ exec_program(${QMAKE_EXECUTABLE} ARGS "-query ${VAR}" RETURN_VALUE return_code OUTPUT_VARIABLE output )
350+ if(NOT return_code)
351+ file(TO_CMAKE_PATH "${output}" output)
352+ set(${RESULT} ${output} PARENT_SCOPE)
353+ endif(NOT return_code)
354+endfunction(QUERY_QMAKE)
355+query_qmake(QT_INSTALL_QML QT_IMPORTS_DIR)
356+
357 # Make the files visible on qtcreator
358 add_custom_target(QtHalide_OtherFiles ALL SOURCES
359 halide_generators_common.h
360
361=== modified file 'src/QtHalide/halide_function.cpp'
362--- src/QtHalide/halide_function.cpp 2015-04-02 11:21:00 +0000
363+++ src/QtHalide/halide_function.cpp 2015-04-08 16:28:17 +0000
364@@ -93,6 +93,8 @@
365 return qmlType;
366 }
367
368+// FIXME: On architectures that are not 64 bits Halide::type_of<long> fails to
369+// compile, therefore it has been disabled for now.
370 Halide::Type qMetaTypeToHalideType(int qMetaType)
371 {
372 switch (qMetaType) {
373@@ -109,9 +111,11 @@
374 case QMetaType::Short:
375 return Halide::type_of<short>();
376 break;
377+#if __WORDSIZE == 64
378 case QMetaType::Long:
379 return Halide::type_of<long>();
380 break;
381+#endif
382 case QMetaType::LongLong:
383 return Halide::type_of<int64_t>();
384 break;
385@@ -124,9 +128,11 @@
386 case QMetaType::UShort:
387 return Halide::type_of<unsigned short>();
388 break;
389+#if __WORDSIZE == 64
390 case QMetaType::ULong:
391 return Halide::type_of<unsigned long>();
392 break;
393+#endif
394 case QMetaType::ULongLong:
395 return Halide::type_of<uint64_t>();
396 break;

Subscribers

People subscribed via source and target branches

to all changes: