Found 754662 3.3.3+dfsg-2
Thanks
The -2 upload made the build-depends satisfiable on all of the current
release architectures However there still build problems that need to be
addessed.
Firstly there have been build-failures on many architectures in the
official archive including a couple that built -1 successfully.
The armel failure looks like it was caused by the introduction of
paralell builds combined with with inadequate dependencies in the build
system leading to race conditions. In particular we see a symlink is
created after it is needed.
CMake Error in src/CMakeLists.txt:
Cannot find source file:
/«BUILDDIR»/witty-3.3.3+dfsg/src/web/skeleton/jquery.min.js
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx
<--snip-->
make: *** [build-static/Makefile] Error 1
make: *** Waiting for unfinished jobs....
<--snip-->
ln -s /usr/share/javascript/jquery/jquery.min.js src/web/skeleton/
The kfreebsd-i386 failure seems to be a hang in documentation
generation, I would guess this was just a random failure.
mipsel looks like the same issue as armel.
powerpc and s390x failed with
(cd src/js; for I in *.js; do -c --no-seqs -nc $I > `basename $I .js`.min.js;
done)
/bin/sh: 1: -c: not found
Some investigation showed that the block of code in debian/rules to
select the minifier is broken. In particular ifdef only tests if a
variable is defined, not if it's value is non-empty.
mips hasn't attempted a build yet.
Secondly the packages build-depends are still unsatisfiable on all the
debian-ports.org architectures (alpha, arm64, hppa, m68k, powerpcspe,
ppc64, sh4 sparc64 and x32) and one architecture that has lost it's
release status but is still in the offiical archive at present (sparc)
Given that nodejs is only available on a relatively small number of
architectures it probablly makes more sense to use a list of
architectures where it is available than a list of architectures where
it is not available.
The attatched debdiff changes the lists of architectures in
debian/control to specify a list of architectures where nodejs is known
to be available rather than an incomplete list of architectures where it
is not available, Fixes the minifier selection code in debian/rules and
disables paralell builds. It has been build-tested on powerpc.
I do not have any immediate intent to NMU.
P.S. a little note on the version number in the debdiff. I was
inititally testing in an arm64 qemu chroot but ran into the issue that
qemu-aarch64 and openjdk don't get along (real arm64 hardware is fine
afaict) so I moved to testing on the powerpc porterbox.
diff -u witty-3.3.3+dfsg/debian/changelog witty-3.3.3+dfsg/debian/changelog
--- witty-3.3.3+dfsg/debian/changelog
+++ witty-3.3.3+dfsg/debian/changelog
@@ -1,3 +1,14 @@
+witty (3.3.3+dfsg-2+arm64) unreleased; urgency=medium
+
+ * Fix minifier detection logic in debian/rules Closes: #754662
+ * Disable paralell builds again. They don't seem to work reliablly.
+ Reopens: 739436
+ * Change dependencies in debian/rules to use list of architectures where
+ nodejs is available rathe than incomplete list of architectures where
+ it is available.
+
+ -- Peter Michael Green <plugw...@debian.org> Sat, 16 Aug 2014 05:05:31 +0000
+
witty (3.3.3+dfsg-2) unstable; urgency=medium
* Use yui-compressor where uglifyjs is not available. Closes: #754662
diff -u witty-3.3.3+dfsg/debian/control witty-3.3.3+dfsg/debian/control
--- witty-3.3.3+dfsg/debian/control
+++ witty-3.3.3+dfsg/debian/control
@@ -11,8 +11,9 @@
mtasc, libgraphicsmagick1-dev, lsb-release, hardening-wrapper, libjs-jquery,
libpango1.0-dev, python-pygments, firebird2.5-dev, libjs-jquery-jplayer,
jquery-jplayer-bluemonday, libmysqlclient-dev, fonts-font-awesome,
- libglew-dev (>= 1.10), libqt4-dev, yui-compressor [mips powerpc s390x],
- node-uglify [!mips !powerpc !s390x]
+ libglew-dev (>= 1.10), libqt4-dev,
+ yui-compressor [!amd64 !armel !armhf !i386 !kfreebsd-amd64 !kfreebsd-i386
!mipsel],
+ node-uglify [amd64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 mipsel]
Standards-Version: 3.9.5.0
Section: libdevel
Homepage: http://www.webtoolkit.eu/
diff -u witty-3.3.3+dfsg/debian/rules witty-3.3.3+dfsg/debian/rules
--- witty-3.3.3+dfsg/debian/rules
+++ witty-3.3.3+dfsg/debian/rules
@@ -48,7 +48,7 @@
# yui-compressor (what upstream used in the past) where there is no UglifyJS
MINIFIER=$(shell which uglifyjs)
-ifdef MINIFIER
+ifneq ($(MINIFIER),)
MINIFIER_FLAGS=-c --no-seqs -nc
else
MINIFIER=/usr/bin/yui-compressor
@@ -65,10 +65,12 @@
CFLAGS += -O2
endif
-ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
- NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
- MAKEFLAGS += -j$(NUMJOBS)
-endif
+# Paralell build failed on armel and mipsel, presumablly due to inadequate
+# target dependencies. Disable it for now.
+#ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
+# NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
+# MAKEFLAGS += -j$(NUMJOBS)
+#endif
### End parallel build
CMAKEVERSION:=$(shell cmake --version | grep -o -P \(\\d\\.\\d\) | tr -d '\n')
only in patch2:
unchanged:
--- witty-3.3.3+dfsg.orig/doc/tutorial/asciidoc.js
+++ witty-3.3.3+dfsg/doc/tutorial/asciidoc.js
@@ -0,0 +1,189 @@
+var asciidoc = { // Namespace.
+
+/////////////////////////////////////////////////////////////////////
+// Table Of Contents generator
+/////////////////////////////////////////////////////////////////////
+
+/* Author: Mihai Bazon, September 2002
+ * http://students.infoiasi.ro/~mishoo
+ *
+ * Table Of Content generator
+ * Version: 0.4
+ *
+ * Feel free to use this script under the terms of the GNU General Public
+ * License, as long as you do not remove or alter this notice.
+ */
+
+ /* modified by Troy D. Hanson, September 2006. License: GPL */
+ /* modified by Stuart Rackham, 2006, 2009. License: GPL */
+
+// toclevels = 1..4.
+toc: function (toclevels) {
+
+ function getText(el) {
+ var text = "";
+ for (var i = el.firstChild; i != null; i = i.nextSibling) {
+ if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
+ text += i.data;
+ else if (i.firstChild != null)
+ text += getText(i);
+ }
+ return text;
+ }
+
+ function TocEntry(el, text, toclevel) {
+ this.element = el;
+ this.text = text;
+ this.toclevel = toclevel;
+ }
+
+ function tocEntries(el, toclevels) {
+ var result = new Array;
+ var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
+ // Function that scans the DOM tree for header elements (the DOM2
+ // nodeIterator API would be a better technique but not supported by all
+ // browsers).
+ var iterate = function (el) {
+ for (var i = el.firstChild; i != null; i = i.nextSibling) {
+ if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
+ var mo = re.exec(i.tagName);
+ if (mo && (i.getAttribute("class") || i.getAttribute("className"))
!= "float") {
+ result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
+ }
+ iterate(i);
+ }
+ }
+ }
+ iterate(el);
+ return result;
+ }
+
+ var toc = document.getElementById("toc");
+ if (!toc) {
+ return;
+ }
+
+ // Delete existing TOC entries in case we're reloading the TOC.
+ var tocEntriesToRemove = [];
+ var i;
+ for (i = 0; i < toc.childNodes.length; i++) {
+ var entry = toc.childNodes[i];
+ if (entry.nodeName.toLowerCase() == 'div'
+ && entry.getAttribute("class")
+ && entry.getAttribute("class").match(/^toclevel/))
+ tocEntriesToRemove.push(entry);
+ }
+ for (i = 0; i < tocEntriesToRemove.length; i++) {
+ toc.removeChild(tocEntriesToRemove[i]);
+ }
+
+ // Rebuild TOC entries.
+ var entries = tocEntries(document.getElementById("content"), toclevels);
+ for (var i = 0; i < entries.length; ++i) {
+ var entry = entries[i];
+ if (entry.element.id == "")
+ entry.element.id = "_toc_" + i;
+ var a = document.createElement("a");
+ a.href = "#" + entry.element.id;
+ a.appendChild(document.createTextNode(entry.text));
+ var div = document.createElement("div");
+ div.appendChild(a);
+ div.className = "toclevel" + entry.toclevel;
+ toc.appendChild(div);
+ }
+ if (entries.length == 0)
+ toc.parentNode.removeChild(toc);
+},
+
+
+/////////////////////////////////////////////////////////////////////
+// Footnotes generator
+/////////////////////////////////////////////////////////////////////
+
+/* Based on footnote generation code from:
+ * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
+ */
+
+footnotes: function () {
+ // Delete existing footnote entries in case we're reloading the footnodes.
+ var i;
+ var noteholder = document.getElementById("footnotes");
+ if (!noteholder) {
+ return;
+ }
+ var entriesToRemove = [];
+ for (i = 0; i < noteholder.childNodes.length; i++) {
+ var entry = noteholder.childNodes[i];
+ if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class")
== "footnote")
+ entriesToRemove.push(entry);
+ }
+ for (i = 0; i < entriesToRemove.length; i++) {
+ noteholder.removeChild(entriesToRemove[i]);
+ }
+
+ // Rebuild footnote entries.
+ var cont = document.getElementById("content");
+ var spans = cont.getElementsByTagName("span");
+ var refs = {};
+ var n = 0;
+ for (i=0; i<spans.length; i++) {
+ if (spans[i].className == "footnote") {
+ n++;
+ var note = spans[i].getAttribute("data-note");
+ if (!note) {
+ // Use [\s\S] in place of . so multi-line matches work.
+ // Because JavaScript has no s (dotall) regex flag.
+ note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
+ spans[i].innerHTML =
+ "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
+ "' title='View footnote' class='footnote'>" + n + "</a>]";
+ spans[i].setAttribute("data-note", note);
+ }
+ noteholder.innerHTML +=
+ "<div class='footnote' id='_footnote_" + n + "'>" +
+ "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
+ n + "</a>. " + note + "</div>";
+ var id =spans[i].getAttribute("id");
+ if (id != null) refs["#"+id] = n;
+ }
+ }
+ if (n == 0)
+ noteholder.parentNode.removeChild(noteholder);
+ else {
+ // Process footnoterefs.
+ for (i=0; i<spans.length; i++) {
+ if (spans[i].className == "footnoteref") {
+ var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
+ href = href.match(/#.*/)[0]; // Because IE return full URL.
+ n = refs[href];
+ spans[i].innerHTML =
+ "[<a href='#_footnote_" + n +
+ "' title='View footnote' class='footnote'>" + n + "</a>]";
+ }
+ }
+ }
+},
+
+install: function(toclevels) {
+ var timerId;
+
+ function reinstall() {
+ asciidoc.footnotes();
+ if (toclevels) {
+ asciidoc.toc(toclevels);
+ }
+ }
+
+ function reinstallAndRemoveTimer() {
+ clearInterval(timerId);
+ reinstall();
+ }
+
+ timerId = setInterval(reinstall, 500);
+ if (document.addEventListener)
+ document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer,
false);
+ else
+ window.onload = reinstallAndRemoveTimer;
+}
+
+}