/[gentoo-x86]/eclass/virtualx.eclass
Gentoo

Contents of /eclass/virtualx.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.31 - (hide annotations) (download)
Mon Oct 19 23:52:39 2009 UTC (4 years, 9 months ago) by abcd
Branch: MAIN
Changes since 1.30: +2 -2 lines
Fix typo, thanks to zx2c4 for spotting issue

1 abcd 1.30 # Copyright 1999-2009 Gentoo Foundation
2 vapier 1.9 # Distributed under the terms of the GNU General Public License v2
3 abcd 1.31 # $Header: /var/cvsroot/gentoo-x86/eclass/virtualx.eclass,v 1.30 2009/10/19 21:12:07 abcd Exp $
4 vapier 1.11 #
5 azarah 1.1 # Author: Martin Schlemmer <azarah@gentoo.org>
6 vapier 1.11 #
7 azarah 1.1 # This eclass can be used for packages that needs a working X environment to build
8 vapier 1.9
9 abcd 1.30 # Is a dependency on xorg-server and xhost needed?
10     # Valid values are "always", "tests", and "manual"
11     VIRTUALX_REQUIRED="${VIRTUALX_REQUIRED:-tests}"
12    
13     # Dep string available for use outside of eclass, in case a more
14     # complicated dep is needed
15     VIRTUALX_DEPEND="x11-base/xorg-server
16     x11-apps/xhost"
17    
18     case ${VIRTUALX_REQUIRED} in
19     always)
20     DEPEND="${VIRTUALX_DEPEND}"
21     RDEPEND=""
22     ;;
23     tests)
24 abcd 1.31 DEPEND="test? ( ${VIRTUALX_DEPEND} )"
25 abcd 1.30 RDEPEND=""
26     IUSE="test"
27     ;;
28     manual)
29     ;;
30     *)
31     eerror "Invalid value (${VIRTUALX_REQUIRED}) for VIRTUALX_REQUIRED"
32     eerror "Valid values are:"
33     eerror " always"
34     eerror " tests"
35     eerror " manual"
36     die "Invalid value (${VIRTUALX_REQUIRED}) for VIRTUALX_REQUIRED"
37     ;;
38     esac
39 azarah 1.1
40 vapier 1.13 DESCRIPTION="Based on the $ECLASS eclass"
41 azarah 1.1
42 ferringb 1.19 #
43     # Brian Harring <ferringb@gentoo.org> 11/04/2004
44     # do not disable the sandbox during the depend phase.
45     # ebuilds shouldn't touch the fs during depend phase, nor screw with the sandbox.
46     #
47 azarah 1.20 if [[ ${EBUILD_PHASE/depend} == "${EBUILD_PHASE}" ]] ; then
48     [[ -z ${SANDBOX_DISABLED} ]] && export SANDBOX_DISABLED="0" || :
49 ferringb 1.19 fi
50 azarah 1.8
51 azarah 1.1 virtualmake() {
52     local retval=0
53 azarah 1.8 local OLD_SANDBOX_DISABLED="${SANDBOX_DISABLED}"
54 azarah 1.20 local XVFB=$(type -p Xvfb)
55     local XHOST=$(type -p xhost)
56 azarah 1.1
57 azarah 1.20 # If $DISPLAY is not set, or xhost cannot connect to an X
58     # display, then do the Xvfb hack.
59     if [[ -n ${XVFB} && -n ${XHOST} ]] && \
60     ( [[ -z ${DISPLAY} ]] || ! (${XHOST} &>/dev/null) ) ; then
61 azarah 1.3 export XAUTHORITY=
62 azarah 1.4 # The following is derived from Mandrake's hack to allow
63     # compiling without the X display
64    
65 seemant 1.25 einfo "Scanning for an open DISPLAY to start Xvfb ..."
66 azarah 1.8
67     # We really do not want SANDBOX enabled here
68     export SANDBOX_DISABLED="1"
69 swegener 1.23
70 azarah 1.5 local i=0
71 abcd 1.30 XDISPLAY=$(i=0; while [[ -f /tmp/.X${i}-lock ]] ; do ((i++));done; echo ${i})
72 swegener 1.23
73 azarah 1.5 # If we are in a chrooted environment, and there is already a
74     # X server started outside of the chroot, Xvfb will fail to start
75     # on the same display (most cases this is :0 ), so make sure
76     # Xvfb is started, else bump the display number
77     #
78     # Azarah - 5 May 2002
79     #
80 swegener 1.17 # Changed the mode from 800x600x32 to 800x600x24 because the mfb
81     # support has been dropped in Xvfb in the xorg-x11 pre-releases.
82     # For now only depths up to 24-bit are supported.
83     #
84     # Sven Wegener <swegener@gentoo.org> - 22 Aug 2004
85     #
86 remi 1.29 # Use "-fp built-ins" because it's only part of the default font path
87     # for Xorg but not the other DDXs (Xvfb, Kdrive, etc). Temporarily fixes
88     # bug 278487 until xorg-server is properly patched
89     #
90     # RĂ©mi Cardona <remi@gentoo.org> (10 Aug 2009)
91     ${XVFB} :${XDISPLAY} -fp built-ins -screen 0 800x600x24 &>/dev/null &
92 azarah 1.5 sleep 2
93 swegener 1.23
94 jrray 1.10 local start=${XDISPLAY}
95 azarah 1.20 while [[ ! -f /tmp/.X${XDISPLAY}-lock ]] ; do
96 jrray 1.10 # Stop trying after 15 tries
97 abcd 1.30 if ((XDISPLAY - start > 15)) ; then
98 jrray 1.10
99     eerror ""
100     eerror "Unable to start Xvfb."
101     eerror ""
102 abcd 1.30 eerror "'${XVFB} :${XDISPLAY} -fp built-ins -screen 0 800x600x24' returns:"
103 jrray 1.10 eerror ""
104 remi 1.29 ${XVFB} :${XDISPLAY} -fp built-ins -screen 0 800x600x24
105 jrray 1.10 eerror ""
106     eerror "If possible, correct the above error and try your emerge again."
107     eerror ""
108     die
109     fi
110    
111 abcd 1.30 ((XDISPLAY++))
112 remi 1.29 ${XVFB} :${XDISPLAY} -fp built-ins -screen 0 800x600x24 &>/dev/null &
113 azarah 1.5 sleep 2
114     done
115    
116 azarah 1.8 # Now enable SANDBOX again if needed.
117     export SANDBOX_DISABLED="${OLD_SANDBOX_DISABLED}"
118    
119 azarah 1.6 einfo "Starting Xvfb on \$DISPLAY=${XDISPLAY} ..."
120 swegener 1.23
121 azarah 1.1 export DISPLAY=:${XDISPLAY}
122     #Do not break on error, but setup $retval, as we need
123     #to kill Xvfb
124 abcd 1.30 ${maketype} "$@"
125 azarah 1.1 retval=$?
126    
127     #Now kill Xvfb
128     kill $(cat /tmp/.X${XDISPLAY}-lock)
129     else
130     #Normal make if we can connect to an X display
131 abcd 1.30 ${maketype} "$@"
132 azarah 1.1 retval=$?
133     fi
134 azarah 1.8
135 azarah 1.20 return ${retval}
136 azarah 1.1 }
137    
138     #Same as "make", but setup the Xvfb hack if needed
139 azarah 1.2 Xmake() {
140 azarah 1.1 export maketype="make"
141 abcd 1.30 virtualmake "$@"
142 azarah 1.1 }
143    
144     #Same as "emake", but setup the Xvfb hack if needed
145 azarah 1.2 Xemake() {
146 azarah 1.1 export maketype="emake"
147 abcd 1.30 virtualmake "$@"
148 azarah 1.1 }
149    
150 jje 1.14 #Same as "econf", but setup the Xvfb hack if needed
151     Xeconf() {
152     export maketype="econf"
153 abcd 1.30 virtualmake "$@"
154 jje 1.14 }

  ViewVC Help
Powered by ViewVC 1.1.20