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

Diff of /eclass/virtualx.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.27 Revision 1.43
1# Copyright 1999-2004 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.27 2007/10/28 12:05:34 eva Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/virtualx.eclass,v 1.43 2012/10/03 22:47:12 chithanh Exp $
4#
5# Author: Martin Schlemmer <azarah@gentoo.org>
6#
7# This eclass can be used for packages that needs a working X environment to build
8 4
9DEPEND="X? ( x11-base/xorg-server x11-apps/xhost )" 5# @ECLASS: virtualx.eclass
10IUSE="X" 6# @MAINTAINER:
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.
11 11
12DESCRIPTION="Based on the $ECLASS eclass" 12# @ECLASS-VARIABLE: VIRTUALX_REQUIRED
13# @DESCRIPTION:
14# Variable specifying the dependency on xorg-server and xhost.
15# Possible special values are "always" and "manual", which specify
16# the dependency to be set unconditionaly or not at all.
17# Any other value is taken as useflag desired to be in control of
18# the dependency (eg. VIRTUALX_REQUIRED="kde" will add the dependency
19# into "kde? ( )" and add kde into IUSE.
20: ${VIRTUALX_REQUIRED:=test}
13 21
14# 22# @ECLASS-VARIABLE: VIRTUALX_DEPEND
15# Brian Harring <ferringb@gentoo.org> 11/04/2004 23# @DESCRIPTION:
16# do not disable the sandbox during the depend phase. 24# Dep string available for use outside of eclass, in case a more
17# ebuilds shouldn't touch the fs during depend phase, nor screw with the sandbox. 25# complicated dep is needed.
18# 26# You can specify the variable BEFORE inherit to add more dependencies.
19if [[ ${EBUILD_PHASE/depend} == "${EBUILD_PHASE}" ]] ; then 27VIRTUALX_DEPEND="${VIRTUALX_DEPEND}
20 [[ -z ${SANDBOX_DISABLED} ]] && export SANDBOX_DISABLED="0" || : 28 !prefix? ( x11-base/xorg-server[xvfb] )
21fi 29 x11-apps/xhost
30"
22 31
32# @ECLASS-VARIABLE: VIRTUALX_COMMAND
33# @DESCRIPTION:
34# Command (or eclass function call) to be run in the X11 environment
35# (within virtualmake function).
36: ${VIRTUALX_COMMAND:="emake"}
37
38has "${EAPI:-0}" 0 1 && die "virtualx eclass require EAPI=2 or newer."
39
40case ${VIRTUALX_REQUIRED} in
41 manual)
42 ;;
43 always)
44 DEPEND="${VIRTUALX_DEPEND}"
45 RDEPEND=""
46 ;;
47 optional|tests)
48 # deprecated section YAY.
49 ewarn "QA: VIRTUALX_REQUIRED=optional and VIRTUALX_REQUIRED=tests are deprecated."
50 ewarn "QA: You can drop the variable definition completely from ebuild,"
51 ewarn "QA: because it is default behaviour."
52
53 if [[ -n ${VIRTUALX_USE} ]]; then
54 # so they like to specify the useflag
55 ewarn "QA: VIRTUALX_USE variable is deprecated."
56 ewarn "QA: Please read eclass manpage to find out how to use VIRTUALX_REQUIRED"
57 ewarn "QA: to achieve the same behaviour."
58 fi
59
60 [[ -z ${VIRTUALX_USE} ]] && VIRTUALX_USE="test"
61 DEPEND="${VIRTUALX_USE}? ( ${VIRTUALX_DEPEND} )"
62 RDEPEND=""
63 IUSE="${VIRTUALX_USE}"
64 ;;
65 *)
66 DEPEND="${VIRTUALX_REQUIRED}? ( ${VIRTUALX_DEPEND} )"
67 RDEPEND=""
68 IUSE="${VIRTUALX_REQUIRED}"
69 ;;
70esac
71
72# @FUNCTION: virtualmake
73# @DESCRIPTION:
74# Function which attach to running X session or start new Xvfb session
75# where the VIRTUALX_COMMAND variable content gets executed.
23virtualmake() { 76virtualmake() {
77 debug-print-function ${FUNCNAME} "$@"
78
79 local i=0
24 local retval=0 80 local retval=0
25 local OLD_SANDBOX_DISABLED="${SANDBOX_DISABLED}" 81 local OLD_SANDBOX_ON="${SANDBOX_ON}"
26 local XVFB=$(type -p Xvfb) 82 local XVFB=$(type -p Xvfb)
27 local XHOST=$(type -p xhost) 83 local XHOST=$(type -p xhost)
84 local xvfbargs="-screen 0 1280x1024x24"
85
86 # backcompat for maketype
87 if [[ -n ${maketype} ]]; then
88 ewarn "QA: ebuild is exporting \$maketype=${maketype}"
89 ewarn "QA: Ebuild should be migrated to use VIRTUALX_COMMAND=${maketype} instead."
90 ewarn "QA: Setting VIRTUALX_COMMAND to \$maketype conveniently for now."
91 VIRTUALX_COMMAND=${maketype}
92 fi
28 93
29 # If $DISPLAY is not set, or xhost cannot connect to an X 94 # If $DISPLAY is not set, or xhost cannot connect to an X
30 # display, then do the Xvfb hack. 95 # display, then do the Xvfb hack.
31 if [[ -n ${XVFB} && -n ${XHOST} ]] && \ 96 if [[ -n ${XVFB} && -n ${XHOST} ]] && \
32 ( [[ -z ${DISPLAY} ]] || ! (${XHOST} &>/dev/null) ) ; then 97 ( [[ -z ${DISPLAY} ]] || ! (${XHOST} &>/dev/null) ) ; then
98 debug-print "${FUNCNAME}: running Xvfb hack"
33 export XAUTHORITY= 99 export XAUTHORITY=
34 # The following is derived from Mandrake's hack to allow 100 # The following is derived from Mandrake's hack to allow
35 # compiling without the X display 101 # compiling without the X display
36 102
37 einfo "Scanning for an open DISPLAY to start Xvfb ..." 103 einfo "Scanning for an open DISPLAY to start Xvfb ..."
38
39 # We really do not want SANDBOX enabled here
40 export SANDBOX_DISABLED="1"
41
42 local i=0
43 XDISPLAY=$(i=0; while [[ -f /tmp/.X${i}-lock ]] ; do i=$((${i}+1));done; echo ${i})
44
45 # If we are in a chrooted environment, and there is already a 104 # If we are in a chrooted environment, and there is already a
46 # X server started outside of the chroot, Xvfb will fail to start 105 # X server started outside of the chroot, Xvfb will fail to start
47 # on the same display (most cases this is :0 ), so make sure 106 # on the same display (most cases this is :0 ), so make sure
48 # Xvfb is started, else bump the display number 107 # Xvfb is started, else bump the display number
49 # 108 #
50 # Azarah - 5 May 2002 109 # Azarah - 5 May 2002
51 # 110 XDISPLAY=$(i=0; while [[ -f /tmp/.X${i}-lock ]] ; do ((i++));done; echo ${i})
52 # Changed the mode from 800x600x32 to 800x600x24 because the mfb 111 debug-print "${FUNCNAME}: XDISPLAY=${XDISPLAY}"
53 # support has been dropped in Xvfb in the xorg-x11 pre-releases. 112
54 # For now only depths up to 24-bit are supported. 113 # We really do not want SANDBOX enabled here
55 # 114 export SANDBOX_ON="0"
56 # Sven Wegener <swegener@gentoo.org> - 22 Aug 2004 115
57 # 116 debug-print "${FUNCNAME}: ${XVFB} :${XDISPLAY} ${xvfbargs}"
58 ${XVFB} :${XDISPLAY} -screen 0 800x600x24 &>/dev/null & 117 ${XVFB} :${XDISPLAY} ${xvfbargs} &>/dev/null &
59 sleep 2 118 sleep 2
60 119
61 local start=${XDISPLAY} 120 local start=${XDISPLAY}
62 while [[ ! -f /tmp/.X${XDISPLAY}-lock ]] ; do 121 while [[ ! -f /tmp/.X${XDISPLAY}-lock ]]; do
63 # Stop trying after 15 tries 122 # Stop trying after 15 tries
64 if [[ $((${XDISPLAY} - ${start})) -gt 15 ]] ; then 123 if ((XDISPLAY - start > 15)) ; then
65 124 eerror "'${XVFB} :${XDISPLAY} ${xvfbargs}' returns:"
66 eerror "" 125 echo
67 eerror "Unable to start Xvfb." 126 ${XVFB} :${XDISPLAY} ${xvfbargs}
68 eerror "" 127 echo
69 eerror "'/usr/X11R6/bin/Xvfb :${XDISPLAY} -screen 0 800x600x24' returns:"
70 eerror ""
71 ${XVFB} :${XDISPLAY} -screen 0 800x600x24
72 eerror ""
73 eerror "If possible, correct the above error and try your emerge again." 128 eerror "If possible, correct the above error and try your emerge again."
74 eerror "" 129 die "Unable to start Xvfb"
75 die
76 fi 130 fi
77 131
78 XDISPLAY=$((${XDISPLAY}+1)) 132 ((XDISPLAY++))
79 ${XVFB} :${XDISPLAY} -screen 0 800x600x24 &>/dev/null & 133 debug-print "${FUNCNAME}: ${XVFB} :${XDISPLAY} ${xvfbargs}"
134 ${XVFB} :${XDISPLAY} ${xvfbargs} &>/dev/null &
80 sleep 2 135 sleep 2
81 done 136 done
82 137
83 # Now enable SANDBOX again if needed. 138 # Now enable SANDBOX again if needed.
84 export SANDBOX_DISABLED="${OLD_SANDBOX_DISABLED}" 139 export SANDBOX_ON="${OLD_SANDBOX_ON}"
85 140
86 einfo "Starting Xvfb on \$DISPLAY=${XDISPLAY} ..." 141 einfo "Starting Xvfb on \$DISPLAY=${XDISPLAY} ..."
87 142
88 export DISPLAY=:${XDISPLAY} 143 export DISPLAY=:${XDISPLAY}
89 #Do not break on error, but setup $retval, as we need 144 # Do not break on error, but setup $retval, as we need
90 #to kill Xvfb 145 # to kill Xvfb
91 ${maketype} $* 146 debug-print "${FUNCNAME}: ${VIRTUALX_COMMAND} \"$@\""
147 if has "${EAPI}" 2 3; then
148 ${VIRTUALX_COMMAND} "$@"
92 retval=$? 149 retval=$?
150 else
151 nonfatal ${VIRTUALX_COMMAND} "$@"
152 retval=$?
153 fi
93 154
94 #Now kill Xvfb 155 # Now kill Xvfb
95 kill $(cat /tmp/.X${XDISPLAY}-lock) 156 kill $(cat /tmp/.X${XDISPLAY}-lock)
96 else 157 else
158 debug-print "${FUNCNAME}: attaching to running X display"
97 #Normal make if we can connect to an X display 159 # Normal make if we can connect to an X display
98 ${maketype} $* 160 debug-print "${FUNCNAME}: ${VIRTUALX_COMMAND} \"$@\""
161 ${VIRTUALX_COMMAND} "$@"
99 retval=$? 162 retval=$?
100 fi 163 fi
101 164
102 return ${retval} 165 # die if our command failed
166 [[ ${retval} -ne 0 ]] && die "${FUNCNAME}: the ${VIRTUALX_COMMAND} failed."
167
168 return 0 # always return 0, it can be altered by failed kill for Xvfb
103} 169}
104 170
171# @FUNCTION: Xmake
172# @DESCRIPTION:
105#Same as "make", but setup the Xvfb hack if needed 173# Same as "make", but set up the Xvfb hack if needed.
174# Deprecated call.
106Xmake() { 175Xmake() {
107 export maketype="make" 176 debug-print-function ${FUNCNAME} "$@"
108 virtualmake "$*" 177
178 ewarn "QA: you should not execute make directly"
179 ewarn "QA: rather execute Xemake -j1 if you have issues with parallel make"
180 VIRTUALX_COMMAND="emake -j1" virtualmake "$@"
109} 181}
110 182
183# @FUNCTION: Xemake
184# @DESCRIPTION:
111#Same as "emake", but setup the Xvfb hack if needed 185# Same as "emake", but set up the Xvfb hack if needed.
112Xemake() { 186Xemake() {
113 export maketype="emake" 187 debug-print-function ${FUNCNAME} "$@"
114 virtualmake "$*" 188
189 VIRTUALX_COMMAND="emake" virtualmake "$@"
115} 190}
116 191
192# @FUNCTION: Xeconf
193# @DESCRIPTION:
117#Same as "econf", but setup the Xvfb hack if needed 194# Same as "econf", but set up the Xvfb hack if needed.
118Xeconf() { 195Xeconf() {
119 export maketype="econf" 196 debug-print-function ${FUNCNAME} "$@"
120 virtualmake "$*" 197
198 VIRTUALX_COMMAND="econf" virtualmake "$@"
121} 199}

Legend:
Removed from v.1.27  
changed lines
  Added in v.1.43

  ViewVC Help
Powered by ViewVC 1.1.20