/[gentoo-x86]/eclass/gnustep-base.eclass
Gentoo

Contents of /eclass/gnustep-base.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.23 - (hide annotations) (download)
Thu Feb 9 16:06:39 2012 UTC (2 years, 6 months ago) by voyageur
Branch: MAIN
Changes since 1.22: +2 -2 lines
Use check on configuration file instead of has_version for EAPI0 ebuilds

1 voyageur 1.22 # Copyright 1999-2012 Gentoo Foundation
2 grobian 1.1 # Distributed under the terms of the GNU General Public License v2
3 voyageur 1.23 # $Header: /var/cvsroot/gentoo-x86/eclass/gnustep-base.eclass,v 1.22 2012/02/08 14:05:26 voyageur Exp $
4 grobian 1.1
5 voyageur 1.16 # @ECLASS: gnustep-base.eclass
6     # @MAINTAINER:
7     # GNUstep Herd <gnustep@gentoo.org>
8     # @BLURB: Internal handling of GNUstep pacakges
9     # @DESCRIPTION:
10 grobian 1.1 # Inner gnustep eclass, should only be inherited directly by gnustep-base
11     # packages
12 voyageur 1.16
13     inherit eutils flag-o-matic
14 grobian 1.1
15     # IUSE variables across all GNUstep packages
16     # "debug": enable code for debugging
17     # "doc": build and install documentation, if available
18     IUSE="debug doc"
19    
20     # packages needed to build any base gnustep package
21 patrick 1.12 GNUSTEP_CORE_DEPEND="doc? ( virtual/texi2dvi dev-tex/latex2html app-text/texi2html )"
22 grobian 1.1
23 voyageur 1.16 # New layout is used when ${EPREFIX}/usr/share/GNUstep/Makefiles exists
24     # Where to install GNUstep (with old layout)
25 grobian 1.14 GNUSTEP_PREFIX="${EPREFIX}/usr/GNUstep"
26 grobian 1.1
27     # GNUstep environment array
28     typeset -a GS_ENV
29    
30     # Ebuild function overrides
31     gnustep-base_pkg_setup() {
32     if test_version_info 3.3 ; then
33     strip-unsupported-flags
34     elif test_version_info 3.4 ; then
35     # strict-aliasing is known to break obj-c stuff in gcc-3.4*
36     filter-flags -fstrict-aliasing
37     fi
38    
39     # known to break ObjC (bug 86089)
40     filter-flags -fomit-frame-pointer
41     }
42    
43     gnustep-base_src_unpack() {
44     unpack ${A}
45     cd "${S}"
46    
47 voyageur 1.13 gnustep-base_src_prepare
48     }
49    
50     gnustep-base_src_prepare() {
51 grobian 1.1 if [[ -f ./GNUmakefile ]] ; then
52     # Kill stupid includes that are simply overdone or useless on normal
53     # Gentoo, but (may) cause major headaches on Prefixed Gentoo. If this
54     # only removes a part of a path it's good that it bails out, as we want
55     # to know when they use some direct include.
56     ebegin "Cleaning paths from GNUmakefile"
57     sed -i \
58 voyageur 1.19 -e 's|-I/usr/X11R6/include/\?||g' \
59     -e 's|-I/usr/include/\?||g' \
60     -e 's|-L/usr/X11R6/lib/\?||g' \
61     -e 's|-L/usr/lib/\?||g' \
62 grobian 1.1 GNUmakefile
63     eend $?
64     fi
65     }
66    
67 voyageur 1.8 gnustep-base_src_configure() {
68 grobian 1.1 egnustep_env
69     if [[ -x ./configure ]] ; then
70     econf || die "configure failed"
71     fi
72 voyageur 1.8 }
73    
74     gnustep-base_src_compile() {
75     egnustep_env
76     case ${EAPI:-0} in
77     0|1) gnustep-base_src_configure ;;
78     esac
79    
80 grobian 1.1 egnustep_make
81     }
82    
83     gnustep-base_src_install() {
84     egnustep_env
85     egnustep_install
86     if use doc ; then
87     egnustep_env
88     egnustep_doc
89     fi
90     egnustep_install_config
91     }
92    
93     gnustep-base_pkg_postinst() {
94     [[ $(type -t gnustep_config_script) != "function" ]] && return 0
95    
96 voyageur 1.16 local SCRIPT_PATH
97     if [[ -d ${EPREFIX}/usr/share/GNUstep/Makefiles ]]; then
98     SCRIPT_PATH="/usr/bin"
99     else
100     SCRIPT_PATH=${GNUSTEP_SYSTEM_TOOLS}/Gentoo
101     fi
102 grobian 1.1 elog "To use this package, as *user* you should run:"
103 voyageur 1.16 elog " ${SCRIPT_PATH}/config-${PN}.sh"
104 grobian 1.1 }
105    
106     # Clean/reset an ebuild to the installed GNUstep environment
107     egnustep_env() {
108     # Get additional variables
109     GNUSTEP_SH_EXPORT_ALL_VARIABLES="true"
110    
111 voyageur 1.16 # Makefiles path
112     local GS_MAKEFILES
113     if [[ -d ${EPREFIX}/usr/share/GNUstep/Makefiles ]]; then
114     GS_MAKEFILES=${EPREFIX}/usr/share/GNUstep/Makefiles
115     else
116     GS_MAKEFILES=${GNUSTEP_PREFIX}/System/Library/Makefiles
117     fi
118     if [[ -f ${GS_MAKEFILES}/GNUstep.sh ]] ; then
119 grobian 1.1 # Reset GNUstep variables
120 voyageur 1.16 source "${GS_MAKEFILES}"/GNUstep-reset.sh
121     source "${GS_MAKEFILES}"/GNUstep.sh
122 grobian 1.1
123 voyageur 1.17 # Create compilation GNUstep.conf if it does not exist yet
124     if [[ ! -f ${T}/GNUstep.conf ]]; then
125     cp "${EPREFIX}"/etc/GNUstep/GNUstep.conf "${T}" \
126     || die "GNUstep.conf copy failed"
127 voyageur 1.20 sed -e "s#\(GNUSTEP_USER_.*DIR.*=\)#\1${T}/#" \
128 voyageur 1.17 -i "${T}"/GNUstep.conf || die "GNUstep.conf sed failed"
129     fi
130    
131 grobian 1.1
132 voyageur 1.16 if [[ ! -d ${EPREFIX}/usr/share/GNUstep/Makefiles ]]; then
133     # Set rpath in ldflags when available
134     case ${CHOST} in
135     *-linux-gnu|*-solaris*)
136     is-ldflagq -Wl,-rpath="${GNUSTEP_SYSTEM_LIBRARIES}" \
137     || append-ldflags \
138     -Wl,-rpath="${GNUSTEP_SYSTEM_LIBRARIES}"
139     ;;
140     esac
141     fi
142 grobian 1.1
143     # Set up env vars for make operations
144     GS_ENV=( AUXILIARY_LDFLAGS="${LDFLAGS}" \
145 voyageur 1.6 ADDITIONAL_NATIVE_LIB_DIRS="${GNUSTEP_SYSTEM_LIBRARIES}" \
146 grobian 1.1 DESTDIR="${D}" \
147     HOME="${T}" \
148 voyageur 1.17 GNUSTEP_CONFIG_FILE="${T}"/GNUstep.conf \
149 grobian 1.1 GNUSTEP_INSTALLATION_DOMAIN=SYSTEM \
150     TAR_OPTIONS="${TAR_OPTIONS} --no-same-owner" \
151 voyageur 1.18 messages=yes )
152 grobian 1.1
153 voyageur 1.21 use doc \
154     && GS_ENV=( "${GS_ENV[@]}" VARTEXFONTS="${T}"/fonts )
155    
156 grobian 1.1 use debug \
157     && GS_ENV=( "${GS_ENV[@]}" "debug=yes" ) \
158     || GS_ENV=( "${GS_ENV[@]}" "debug=no" )
159    
160 voyageur 1.23 if grep -q libobjc.so.4 "${GS_MAKEFILES}"/config.make;
161 voyageur 1.22 then
162     # Set clang for packages that do not respect gnustep-make
163     # settings (gnustep-base's configure for example)
164     export CC=clang CXX=clang CPP="clang -E" LD="clang"
165     fi
166    
167 grobian 1.1 return 0
168     fi
169     die "gnustep-make not installed!"
170     }
171    
172     # Make utilizing GNUstep Makefiles
173     egnustep_make() {
174 grobian 1.11 if [[ -f ./Makefile || -f ./makefile || -f ./GNUmakefile ]] ; then
175 grobian 1.1 emake ${*} "${GS_ENV[@]}" all || die "package make failed"
176     return 0
177     fi
178     die "no Makefile found"
179     }
180    
181     # Make-install utilizing GNUstep Makefiles
182     egnustep_install() {
183 voyageur 1.16 if [[ ! -d ${EPREFIX}/usr/share/GNUstep/Makefiles ]]; then
184     # avoid problems due to our "weird" prefix, make sure it exists
185     mkdir -p "${D}"${GNUSTEP_SYSTEM_TOOLS}
186     fi
187 grobian 1.1 if [[ -f ./[mM]akefile || -f ./GNUmakefile ]] ; then
188     emake ${*} "${GS_ENV[@]}" install || die "package install failed"
189     return 0
190     fi
191     die "no Makefile found"
192     }
193    
194     # Make and install docs using GNUstep Makefiles
195     egnustep_doc() {
196     if [[ -d ./Documentation ]] ; then
197     # Check documentation presence
198     cd "${S}"/Documentation
199     if [[ -f ./[mM]akefile || -f ./GNUmakefile ]] ; then
200     emake "${GS_ENV[@]}" all || die "doc make failed"
201     emake "${GS_ENV[@]}" install || die "doc install failed"
202     fi
203     cd ..
204     fi
205     }
206    
207     egnustep_install_config() {
208     [[ $(type -t gnustep_config_script) != "function" ]] && return 0
209    
210     local cfile=config-${PN}.sh
211    
212 voyageur 1.5 cat << 'EOF' > "${T}"/${cfile}
213 voyageur 1.4 #!/usr/bin/env bash
214     gnustep_append_default() {
215 voyageur 1.5 if [[ -z $1 || -z $2 || -z $3 ]]; then
216 voyageur 1.4 echo "warning: invalid script invocation"
217     return
218     fi
219 voyageur 1.5 dom=$1
220     key=$2
221     val=$3
222     cur=$(defaults read ${dom} ${key}) 2> /dev/null
223     if [[ -z $cur ]] ; then
224     echo " * setting ${dom} ${key}"
225     defaults write ${dom} ${key} "( ${val} )"
226     elif [[ ${cur} != *${val}* ]] ; then
227     echo " * adding ${val} to ${dom} ${key}"
228     echo "${cur%)\'}, \"${val}\" )'" | defaults write
229 voyageur 1.4 else
230 voyageur 1.5 echo " * ${val} already present in ${dom} ${key}"
231 voyageur 1.4 fi
232     }
233    
234     gnustep_set_default() {
235 opfer 1.7 if [[ -z $1 || -z $2 || -z $3 ]]; then
236     echo "warning: invalid script invocation"
237     return
238     fi
239     dom=$1
240     key=$2
241     val=$3
242     echo " * setting ${dom} ${key}"
243 voyageur 1.5 defaults write ${dom} ${key} ${val}
244 voyageur 1.4 }
245    
246     EOF
247    
248 voyageur 1.5 echo "echo \"Applying ${P} default configuration ...\"" >> "${T}"/${cfile}
249    
250 grobian 1.1 gnustep_config_script | \
251     while read line ; do
252     echo "${line}" >> "${T}"/${cfile}
253     done
254 grobian 1.2 echo 'echo "done"' >> "${T}"/${cfile}
255 grobian 1.1
256 voyageur 1.16 if [[ -d ${EPREFIX}/usr/share/GNUstep/Makefiles ]]; then
257     exeinto /usr/bin
258     else
259     exeinto ${GNUSTEP_SYSTEM_TOOLS#${EPREFIX}}/Gentoo
260     fi
261 grobian 1.1 doexe "${T}"/${cfile}
262     }
263    
264 voyageur 1.8 case ${EAPI:-0} in
265     0|1) EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_postinst ;;
266 voyageur 1.15 *) EXPORT_FUNCTIONS pkg_setup src_prepare src_configure src_compile src_install pkg_postinst ;;
267 voyageur 1.8 esac

  ViewVC Help
Powered by ViewVC 1.1.20