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

Diff of /eclass/virtualx.eclass

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

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

Legend:
Removed from v.1.20  
changed lines
  Added in v.1.35

  ViewVC Help
Powered by ViewVC 1.1.20