| 1 | # Copyright 1999-2010 Gentoo Foundation |
1 | # Copyright 1999-2012 Gentoo Foundation |
| 2 | # Distributed under the terms of the GNU General Public License v2 |
2 | # Distributed under the terms of the GNU General Public License v2 |
| 3 | # $Header: /var/cvsroot/gentoo-x86/eclass/virtualx.eclass,v 1.36 2011/03/09 13:31:51 scarabeus Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/virtualx.eclass,v 1.42 2012/10/02 08:14:36 kensington Exp $ |
| 4 | |
|
|
| 5 | # Original author: Martin Schlemmer <azarah@gentoo.org> |
|
|
| 6 | |
4 | |
| 7 | # @ECLASS: virtualx.eclass |
5 | # @ECLASS: virtualx.eclass |
| 8 | # @MAINTAINER: |
6 | # @MAINTAINER: |
| 9 | # x11@gentoo.org |
7 | # x11@gentoo.org |
|
|
8 | # @AUTHOR: |
|
|
9 | # Original author: Martin Schlemmer <azarah@gentoo.org> |
| 10 | # @BLURB: This eclass can be used for packages that needs a working X environment to build. |
10 | # @BLURB: This eclass can be used for packages that needs a working X environment to build. |
| 11 | |
11 | |
| 12 | # @ECLASS-VARIABLE: VIRTUALX_REQUIRED |
12 | # @ECLASS-VARIABLE: VIRTUALX_REQUIRED |
| 13 | # @DESCRIPTION: |
13 | # @DESCRIPTION: |
| 14 | # Variable specifying the dependency on xorg-server and xhost. |
14 | # Variable specifying the dependency on xorg-server and xhost. |
| … | |
… | |
| 23 | # @DESCRIPTION: |
23 | # @DESCRIPTION: |
| 24 | # Dep string available for use outside of eclass, in case a more |
24 | # Dep string available for use outside of eclass, in case a more |
| 25 | # complicated dep is needed. |
25 | # complicated dep is needed. |
| 26 | # You can specify the variable BEFORE inherit to add more dependencies. |
26 | # You can specify the variable BEFORE inherit to add more dependencies. |
| 27 | VIRTUALX_DEPEND="${VIRTUALX_DEPEND} |
27 | VIRTUALX_DEPEND="${VIRTUALX_DEPEND} |
| 28 | !prefix? ( x11-base/xorg-server[-minimal] ) |
28 | !prefix? ( x11-base/xorg-server[xvfb] ) |
| 29 | x11-apps/xhost |
29 | x11-apps/xhost |
| 30 | " |
30 | " |
| 31 | |
31 | |
| 32 | # @ECLASS-VARIABLE: VIRTUALX_COMMAND |
32 | # @ECLASS-VARIABLE: VIRTUALX_COMMAND |
| 33 | # @DESCRIPTION: |
33 | # @DESCRIPTION: |
| … | |
… | |
| 68 | IUSE="${VIRTUALX_REQUIRED}" |
68 | IUSE="${VIRTUALX_REQUIRED}" |
| 69 | ;; |
69 | ;; |
| 70 | esac |
70 | esac |
| 71 | |
71 | |
| 72 | # @FUNCTION: virtualmake |
72 | # @FUNCTION: virtualmake |
| 73 | # @DESCRIPTION: |
73 | # @DESCRIPTION: |
| 74 | # Function which attach to running X session or start new Xvfb session |
74 | # Function which attach to running X session or start new Xvfb session |
| 75 | # where the VIRTUALX_COMMAND variable content gets executed. |
75 | # where the VIRTUALX_COMMAND variable content gets executed. |
| 76 | virtualmake() { |
76 | virtualmake() { |
| 77 | debug-print-function ${FUNCNAME} "$@" |
77 | debug-print-function ${FUNCNAME} "$@" |
| 78 | |
78 | |
| 79 | local i=0 |
79 | local i=0 |
| 80 | local retval=0 |
80 | local retval=0 |
| 81 | local OLD_SANDBOX_ON="${SANDBOX_ON}" |
81 | local OLD_SANDBOX_ON="${SANDBOX_ON}" |
| 82 | local XVFB=$(type -p Xvfb) |
82 | local XVFB=$(type -p Xvfb) |
| 83 | local XHOST=$(type -p xhost) |
83 | local XHOST=$(type -p xhost) |
| 84 | local xvfbargs="-screen 0 800x600x24" |
84 | local xvfbargs="-screen 0 1280x1024x24" |
| 85 | |
85 | |
| 86 | # backcompat for maketype |
86 | # backcompat for maketype |
| 87 | if [[ -n ${maketype} ]]; then |
87 | if [[ -n ${maketype} ]]; then |
| 88 | ewarn "QA: ebuild is exporting \$maketype=${maketype}" |
88 | ewarn "QA: ebuild is exporting \$maketype=${maketype}" |
| 89 | ewarn "QA: Ebuild should be migrated to use VIRTUALX_COMMAND=${maketype} instead." |
89 | ewarn "QA: Ebuild should be migrated to use VIRTUALX_COMMAND=${maketype} instead." |
| … | |
… | |
| 142 | |
142 | |
| 143 | export DISPLAY=:${XDISPLAY} |
143 | export DISPLAY=:${XDISPLAY} |
| 144 | # Do not break on error, but setup $retval, as we need |
144 | # Do not break on error, but setup $retval, as we need |
| 145 | # to kill Xvfb |
145 | # to kill Xvfb |
| 146 | debug-print "${FUNCNAME}: ${VIRTUALX_COMMAND} \"$@\"" |
146 | debug-print "${FUNCNAME}: ${VIRTUALX_COMMAND} \"$@\"" |
| 147 | ${VIRTUALX_COMMAND} "$@" |
147 | nonfatal ${VIRTUALX_COMMAND} "$@" |
| 148 | retval=$? |
148 | retval=$? |
| 149 | |
149 | |
| 150 | # Now kill Xvfb |
150 | # Now kill Xvfb |
| 151 | kill $(cat /tmp/.X${XDISPLAY}-lock) |
151 | kill $(cat /tmp/.X${XDISPLAY}-lock) |
| 152 | else |
152 | else |
| … | |
… | |
| 156 | ${VIRTUALX_COMMAND} "$@" |
156 | ${VIRTUALX_COMMAND} "$@" |
| 157 | retval=$? |
157 | retval=$? |
| 158 | fi |
158 | fi |
| 159 | |
159 | |
| 160 | # die if our command failed |
160 | # die if our command failed |
| 161 | [[ $? -ne 0 ]] && die "${FUNCNAME}: the ${VIRTALX_COMMAND} failed." |
161 | [[ ${retval} -ne 0 ]] && die "${FUNCNAME}: the ${VIRTUALX_COMMAND} failed." |
|
|
162 | |
|
|
163 | return 0 # always return 0, it can be altered by failed kill for Xvfb |
| 162 | } |
164 | } |
| 163 | |
165 | |
| 164 | # @FUNCTION: Xmake |
166 | # @FUNCTION: Xmake |
| 165 | # @DESCRIPTION: |
167 | # @DESCRIPTION: |
| 166 | # Same as "make", but set up the Xvfb hack if needed. |
168 | # Same as "make", but set up the Xvfb hack if needed. |
| 167 | # Deprecated call. |
169 | # Deprecated call. |
| 168 | Xmake() { |
170 | Xmake() { |
| 169 | debug-print-function ${FUNCNAME} "$@" |
171 | debug-print-function ${FUNCNAME} "$@" |
| 170 | |
172 | |
| … | |
… | |
| 172 | ewarn "QA: rather execute Xemake -j1 if you have issues with parallel make" |
174 | ewarn "QA: rather execute Xemake -j1 if you have issues with parallel make" |
| 173 | VIRTUALX_COMMAND="emake -j1" virtualmake "$@" |
175 | VIRTUALX_COMMAND="emake -j1" virtualmake "$@" |
| 174 | } |
176 | } |
| 175 | |
177 | |
| 176 | # @FUNCTION: Xemake |
178 | # @FUNCTION: Xemake |
| 177 | # @DESCRIPTION: |
179 | # @DESCRIPTION: |
| 178 | # Same as "emake", but set up the Xvfb hack if needed. |
180 | # Same as "emake", but set up the Xvfb hack if needed. |
| 179 | Xemake() { |
181 | Xemake() { |
| 180 | debug-print-function ${FUNCNAME} "$@" |
182 | debug-print-function ${FUNCNAME} "$@" |
| 181 | |
183 | |
| 182 | VIRTUALX_COMMAND="emake" virtualmake "$@" |
184 | VIRTUALX_COMMAND="emake" virtualmake "$@" |
| 183 | } |
185 | } |
| 184 | |
186 | |
| 185 | # @FUNCTION: Xeconf |
187 | # @FUNCTION: Xeconf |
| 186 | # @DESCRIPTION: |
188 | # @DESCRIPTION: |
| 187 | # Same as "econf", but set up the Xvfb hack if needed. |
189 | # Same as "econf", but set up the Xvfb hack if needed. |
| 188 | Xeconf() { |
190 | Xeconf() { |
| 189 | debug-print-function ${FUNCNAME} "$@" |
191 | debug-print-function ${FUNCNAME} "$@" |
| 190 | |
192 | |
| 191 | VIRTUALX_COMMAND="econf" virtualmake "$@" |
193 | VIRTUALX_COMMAND="econf" virtualmake "$@" |
| 192 | } |
194 | } |