[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Build now works on i386 :) - but setup doesn't :(



I've found the problem that was stopping builds on i386.  It was because
xvfb-run sets XAUTHORITY to ./Xauthority, which is fine as long as you don't
change working directory - which we do in dmake!

I've modified xvfb-run to incorporate a fix and also remove the hardcoded
display :99.  If we have no further problems I'll submit a patch to the
maintainer.  For now I've made it into a script to be included in
debian/local/scripts.

So, now the build completes (it took about 8 hours on my 700Mhz PIII) and
the setup program is run.  Unfortunately setup exits with return code 1 and
no explaination.  I've looked though the Issuezilla and can't find anything
related to the problem.  I tried using strace, but the only line which looks
vaguely suspicious is this one:

open("/tmp/sv003.tmp/setup_writerdb.rdb", O_RDWR) = -1 ENOENT (No such file or directory)

I haven't found the place in the source that does this yet.

The other issue that I am aware of is that the build will hang during
configure if the JDK home directory is not found, because it asks the user
for input.  I think we could prevent the hang by redirecting stdin from
/dev/null for the configure step, but I haven't tried it out.  That would
stop the hang, but the warning messages that are subsequently generated do
not cause the build to stop.  Really, we should stop if one of these
warnings is generated.  Are there any takers for this job?  The code that I
think needs to be looked at is in

openoffice-0.641c/build-tree/oo_641c_src/config_office/set_soenv:

if ( $Warning ne "" )
{  print "$Warning*";
   print "$newline";
}

Well, have fun everyone making your machines get busy :)  Don't forget, Jan
& I are often around the #debian-oo IRC channel on openprojects.

Thanks,
Chris

(Attached - patches against current build tree)
-- 
Chris Halls | Frankfurt, Germany
Yahoo:hagga12000 ICQ:36940860 MSN:chris.halls@nikocity.de
--- /dev/null	Thu Jan  1 01:00:00 1970
+++ openoffice-0.641c/debian/local/scripts/oo-xvfb-run	Fri Mar 15 10:16:39 2002
@@ -0,0 +1,119 @@
+#!/bin/sh
+
+# xvfb-run - run the specified command in a virtual X server
+
+# This script starts an instance of Xvfb, the "fake" X server, runs a
+# command with that server available, and kills the X server when
+# done.  The return value of the command becomes the return value of
+# this script.
+#
+# If anyone is using this to build a Debian package, make sure the
+# package Build-Depends on xvfb, xbase-clients and xfonts-base.
+
+set -e
+
+DISPLAYNUM=99
+AUTHFILE=$(pwd)/Xauthority
+STARTWAIT=3
+LISTENTCP="-nolisten tcp"
+unset AUTODISPLAYNUM
+
+usage()
+{
+  echo "Usage: $0 [OPTION]... [command]"
+  echo
+  echo "run specified X client or command in a virtual X server environment"
+  echo
+  echo "  -a --auto-displaynum      Try to get a free display number, starting at --display-num"
+  echo "  -f --auth-file=FILE       File to store auth cookie (default:./Xauthority)"
+  echo "  -n --display-num=NUM      Display number to use (default:$DISPLAYNUM)"
+  echo "  -l --listen-tcp           Enable TCP port listening in the X server"
+  echo "  -w --wait=DELAY           Delay in seconds to wait for Xvfb to start (default:$STARTWAIT)"
+  echo "  -h --help                 Display this help and exit"
+}
+
+# Find free display number by looking at .X-lock files in /tmp
+find-free-display()
+{
+    i=$DISPLAYNUM
+    while [ -f /tmp/.X$i-lock ]; do
+      i=$(($i+1))
+    done
+    echo $i
+}
+
+# Parse command line
+ARGS=`getopt --options +af:n:lw:h \
+	--long auto-displaynum,authority-file:,display-num:,listen-tcp,wait:,help \
+	--name "$0" -- "$@"`
+if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
+
+eval set -- "$ARGS"
+while true ; do
+    case "$1" in
+      '-a'|'--auto-displaynum')
+      	    AUTODISPLAYNUM=y
+      	    ;;
+      '-f'|'--auth-file')
+	    AUTHFILE="$2"
+	    shift
+	    ;;
+      '-n'|'--display-num')
+	    DISPLAYNUM="$2"
+	    shift
+	    ;;
+      '-l'|'--listen-tcp')
+	    LISTENTCP=
+	    ;;
+      '-w'|'--wait')
+	    STARTWAIT="$2"
+	    shift
+	    ;;
+      '-h'|'--help')
+	    usage
+	    exit 1
+	    ;;
+      '--')
+	    # end of options
+	    shift
+	    break
+	    ;;
+      *)
+            echo "Internal error!"; exit 1;;
+    esac
+
+    shift
+done
+
+[ -n "$AUTODISPLAYNUM" ] && DISPLAYNUM=`find-free-display`
+
+# start Xvfb
+rm -f "$AUTHFILE"
+MCOOKIE=$(mcookie)
+XAUTHORITY="$AUTHFILE" xauth add :$DISPLAYNUM . $MCOOKIE > /dev/null
+XAUTHORITY="$AUTHFILE" Xvfb :$DISPLAYNUM -screen 0 640x480x8 $LISTENTCP \
+	> /dev/null  &
+XVFBPID=$!
+sleep $STARTWAIT
+
+set +e
+
+# Check that server has not exited
+if ! kill -0 $XVFBPID; then
+  echo "Xvfb server has died" >&2
+  exit 1
+fi
+
+# start the command and save its exit status
+echo $@
+DISPLAY=:$DISPLAYNUM XAUTHORITY="$AUTHFILE" $@ 2>&1
+RETVAL=$?
+set -e
+
+# kill Xvfb and clean up
+kill $XVFBPID
+XAUTHORITY="$AUTHFILE" xauth remove :$DISPLAYNUM > /dev/null
+rm "$AUTHFILE"
+
+# return the executed command's exit status
+exit $RETVAL
--- openoffice-0.641c/debian/rules.orig	Thu Mar 14 15:42:22 2002
+++ openoffice-0.641c/debian/rules	Thu Mar 14 15:32:56 2002
@@ -42,6 +42,10 @@
 #export DISPLAY=$(XDISPLAY)
 export XAUTHORITY=
 
+# hacked xvfb-run automatically finds a display 
+# and checks that Xvfb didn't die
+XVFB=$(CURDIR)/debian/local/scripts/oo-xvfb-run -a -w 5
+
 # debhelper
 export DH_COMPAT=2
 export DH_OPTIONS
@@ -177,9 +181,9 @@
 $(STAMP_DIR)/build.dmake: $(STAMP_DIR)/build.bootstrap	
 	dh_testdir
 
-	# Start Xvfb, run dmake and kill Xfvb
+	# Start Xvfb and run dmake
 	cd $(SOURCE_TREE) && \
-	    csh -c 'setenv HOME $(SOURCE_TREE); source $(ENVFILE); xvfb-run dmake'
+	    csh -c 'setenv HOME $(SOURCE_TREE); source $(ENVFILE); $(XVFB) dmake'
 	 
 	touch $@
 	
@@ -200,7 +204,7 @@
 
 	# run dmake with xfvb-run
 	cd $(SOURCE_TREE) && \
-	    csh -c 'setenv HOME $(SOURCE_TREE); source $(ENVFILE); cd $(PRJ) &&	xvfb-run $(SOLVER)'\
+	    csh -c 'setenv HOME $(SOURCE_TREE); source $(ENVFILE); cd $(PRJ) &&	$(XVFB) $(SOLVER)'\
 	
 	-echo Project $(PRJ) build successful
 
@@ -229,7 +233,7 @@
 
 	mkdir -p $(PKGOPENOFFICEDIR)
 	sed -e "s#DESTDIR#$(PKGOPENOFFICEDIR)#" debian/local/rsfile.global.txt > debian/local/rsfile.txt
-	LD_PRELOAD= xvfb-run $(SOURCE_TREE)/instsetoo/$(ARCHBUILDDIR)/01/normal/setup -R:$(CURDIR)/debian/local/rsfile.txt
+	LD_PRELOAD= $(XVFB) $(SOURCE_TREE)/instsetoo/$(ARCHBUILDDIR)/01/normal/setup -R:$(CURDIR)/debian/local/rsfile.txt
 	rm -f debian/local/rsfile.txt
 	touch $@
 
--- openoffice-0.641c/debian/setperms.orig	Thu Mar 14 16:02:03 2002
+++ openoffice-0.641c/debian/setperms	Thu Mar 14 16:03:05 2002
@@ -17,7 +17,7 @@
   chmod 755 debian/scripts/$FILE
 done
 
-for FILE in find-free-display; do
+for FILE in oo-xvfb-run; do
   chmod 755 debian/local/scripts/$FILE
 done
 

Attachment: pgp5MRNRH4TQw.pgp
Description: PGP signature


Reply to: