The following reply was made to PR ports/155949; it has been noted by GNATS.
From: Kalten <[email protected]> To: [email protected], [email protected] Cc: Subject: Re: ports/155949: www/firefox: firefox 4, WITH_PGO, better Text against DISPLAY problem Date: Fri, 22 Apr 2011 20:57:22 +0200 --=-=-= Content-Type: text/plain > That [USE_DISPLAY=yes] is already there but obviously does not work or > isn't enough. I see--sorry for not having had a look into the Makfile prior to writing full of joy and hope--I had a look into ports/Mk/bsd.port.mk now: Let's have a deeper look into the matter: (I think, I have solved it) :-) bsd.port.mk adds the Xvfb (alongside a couple of other ports) to the build dependencies and if not building a package (our case) sets the DISPLAY variable in the configure- as well as in the make-environment. The error `cannot open display: localhost:1001' tells us, that the python script realiced that fact, but did try to really connect to the X server--that is not running (as I assume). Better saied: the Xvfb(1) is not started at display localhost:1001. The Xvfb realy is being installed (x11-servers/xorg-vfbserver) prior to the error, but am I right, that noone did start it? `Xvfb :1001 &' and be aware that you must not use `Xvfb $DISPLAY' as it does not understand `localhost:1001' but solely `:1001', and besides: USE_DISPLAY=yes does only set DISPLAY in the make- and the configure-environment, not in the environment of the Makefile in www/firefox/! (BTW: courageous; profileserver.py uses a line `PORT=8888' and if something else was running there?) Some not very nice adjustment of www/firefox/Makefile (see attachment). It is just meant as an idea of how to do it! (Even too many ${ECHO}s for debuging purpose). I adopted the version of the same problem I happened to find in accessibility/accercise/Makefile. One shoule, at least, write some example like this in ports/Mk/bsd.port.mk at USE_DISPLAY: better: introduce two functions: one for starting, one for terminating the Xvfb. One could try to read DISPLAY out of MAKE_ENV or CONFIGURE_ENV, but I lost my patience trying; so I set it in the lines below USE_DISPLAY=yes. Some questions remain open: *) What to do, if the build has an error and terminates? post-build will not be called and the server will continue to run. If one calls `make clean', the pid-file is gone and noone can terminate the Xvfb server. Restarting one at the same DISPLAY just terminates the new one, all will compile. We could place the pid file elsewhere--still no good solution (leads back to some functions mentioned earlier). Is there a target being called regardless of failiour in the Makfile in <portname>/work/*? *) What if some other port is being built paralelly and uses the same mechanism: should there be some kind of `smart pointer' to terminate the Xvfb, when all currently running port-builds do not need it any more? All will use `:1001' as it es written down in ports/Mk/bsd.port.mk at USE_DISPLAY. Remember: Only the last one hast to terminate Xvfb but the others must not do so (at least, I think so). I hope, that `solved' the problem! Greetings, Kalten --=-=-= Content-Type: text/plain Content-Disposition: attachment; filename=patch.txt Content-Description: patch-Makefile-PGO --- Makefile.orig 2011-04-09 01:31:32.000000000 +0200 +++ Makefile 2011-04-22 20:53:39.000000000 +0200 @@ -78,6 +78,8 @@ BUILD_DEPENDS+= ${PYTHON_SITELIBDIR}/_sqlite3.so:${PORTSDIR}/databases/py-sqlite3 USE_PYTHON_BUILD= yes USE_DISPLAY= yes +# in make and config environment, but not accessable here: +DISPLAYat= "localhost:1001" .include "${PORTSDIR}/Mk/bsd.python.mk" MAKEFILE= client.mk @@ -134,6 +136,30 @@ (cd ${WRKSRC} && ${GMAKE} distclean) .endif +pre-build: +.if defined(WITH_PGO) + @if [ -f ${WRKDIR}/.Xvfb.pid ]; then \ + @${ECHO} "Killing ${LOCALBASE}/bin/Xvfb at PID `${CAT} ${WRKDIR}/.Xvfb.pid`" \ + @sleep 5 \ + ${CAT} ${WRKDIR}/.Xvfb.pid | ${XARGS} kill || ${TRUE} ; \ + ${RM} -f ${WRKDIR}/.Xvfb.pid ; \ + fi + @${LOCALBASE}/bin/Xvfb `${ECHO_CMD} ${DISPLAYat} | ${SED} -e 's|localhost\(:.*\)|\1|'` \ + -screen 0 800x600x24 > /dev/null 2>&1 & ${ECHO_CMD} $$! > ${WRKDIR}/.Xvfb.pid + @${ECHO} "Started ${LOCALBASE}/bin/Xvfb `${ECHO_CMD} ${DISPLAYat} | ${SED} -e 's|localhost\(:.*\)|\1|'` at PID `${CAT} ${WRKDIR}/.Xvfb.pid` on ${DISPLAYat}" + @sleep 10 +.endif + +post-build: +.if defined(WITH_PGO) + @if [ -f ${WRKDIR}/.Xvfb.pid ]; then \ + @${ECHO} "Killing ${LOCALBASE}/bin/Xvfb at PID `${CAT} ${WRKDIR}/.Xvfb.pid`" \ + @sleep 5 \ + ${CAT} ${WRKDIR}/.Xvfb.pid | ${XARGS} kill || ${TRUE} ; \ + ${RM} -f ${WRKDIR}/.Xvfb.pid ; \ + fi +.endif + port-pre-install: ${ECHO_CMD} 'share/applications/${MOZILLA}.desktop' >> ${PLISTF} ${ECHO_CMD} "@dirrmtry share/applications" >> ${PLISTD} --=-=-=-- _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-gecko To unsubscribe, send any mail to "[email protected]"
