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

Contents of /eclass/gnustep-base.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.26 - (hide annotations) (download)
Tue Jun 19 09:06:40 2012 UTC (2 years, 4 months ago) by voyageur
Branch: MAIN
Changes since 1.25: +3 -2 lines
Revert to built_with_use for correct libobjc detection and EAPI 0 ebuilds support

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.26 # $Header: /var/cvsroot/gentoo-x86/eclass/gnustep-base.eclass,v 1.25 2012/05/29 08:05:05 phajdan.jr 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 voyageur 1.24 if [[ ! -f ${WORKDIR}/GNUstep.conf ]]; then
125     cp "${EPREFIX}"/etc/GNUstep/GNUstep.conf "${WORKDIR}" \
126 voyageur 1.17 || die "GNUstep.conf copy failed"
127 voyageur 1.24 sed -e "s#\(GNUSTEP_USER_.*DIR.*=\)#\1${WORKDIR}/#" \
128     -i "${WORKDIR}"/GNUstep.conf || die "GNUstep.conf sed failed"
129 voyageur 1.17 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.24 GNUSTEP_CONFIG_FILE="${WORKDIR}"/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.26 # About 20 gnustep packages still use EAPI 0
161     if built_with_use gnustep-base/gnustep-make libobjc2;
162 voyageur 1.22 then
163     # Set clang for packages that do not respect gnustep-make
164     # settings (gnustep-base's configure for example)
165     export CC=clang CXX=clang CPP="clang -E" LD="clang"
166     fi
167    
168 grobian 1.1 return 0
169     fi
170     die "gnustep-make not installed!"
171     }
172    
173     # Make utilizing GNUstep Makefiles
174     egnustep_make() {
175 grobian 1.11 if [[ -f ./Makefile || -f ./makefile || -f ./GNUmakefile ]] ; then
176 grobian 1.1 emake ${*} "${GS_ENV[@]}" all || die "package make failed"
177     return 0
178     fi
179     die "no Makefile found"
180     }
181    
182     # Make-install utilizing GNUstep Makefiles
183     egnustep_install() {
184 voyageur 1.16 if [[ ! -d ${EPREFIX}/usr/share/GNUstep/Makefiles ]]; then
185     # avoid problems due to our "weird" prefix, make sure it exists
186     mkdir -p "${D}"${GNUSTEP_SYSTEM_TOOLS}
187     fi
188 grobian 1.1 if [[ -f ./[mM]akefile || -f ./GNUmakefile ]] ; then
189     emake ${*} "${GS_ENV[@]}" install || die "package install failed"
190     return 0
191     fi
192     die "no Makefile found"
193     }
194    
195     # Make and install docs using GNUstep Makefiles
196     egnustep_doc() {
197 phajdan.jr 1.25 if [[ -d "${S}"/Documentation ]] ; then
198 grobian 1.1 # Check documentation presence
199 phajdan.jr 1.25 pushd "${S}"/Documentation || die
200 grobian 1.1 if [[ -f ./[mM]akefile || -f ./GNUmakefile ]] ; then
201     emake "${GS_ENV[@]}" all || die "doc make failed"
202     emake "${GS_ENV[@]}" install || die "doc install failed"
203     fi
204 phajdan.jr 1.25 popd || die
205 grobian 1.1 fi
206     }
207    
208     egnustep_install_config() {
209     [[ $(type -t gnustep_config_script) != "function" ]] && return 0
210    
211     local cfile=config-${PN}.sh
212    
213 voyageur 1.5 cat << 'EOF' > "${T}"/${cfile}
214 voyageur 1.4 #!/usr/bin/env bash
215     gnustep_append_default() {
216 voyageur 1.5 if [[ -z $1 || -z $2 || -z $3 ]]; then
217 voyageur 1.4 echo "warning: invalid script invocation"
218     return
219     fi
220 voyageur 1.5 dom=$1
221     key=$2
222     val=$3
223     cur=$(defaults read ${dom} ${key}) 2> /dev/null
224     if [[ -z $cur ]] ; then
225     echo " * setting ${dom} ${key}"
226     defaults write ${dom} ${key} "( ${val} )"
227     elif [[ ${cur} != *${val}* ]] ; then
228     echo " * adding ${val} to ${dom} ${key}"
229     echo "${cur%)\'}, \"${val}\" )'" | defaults write
230 voyageur 1.4 else
231 voyageur 1.5 echo " * ${val} already present in ${dom} ${key}"
232 voyageur 1.4 fi
233     }
234    
235     gnustep_set_default() {
236 opfer 1.7 if [[ -z $1 || -z $2 || -z $3 ]]; then
237     echo "warning: invalid script invocation"
238     return
239     fi
240     dom=$1
241     key=$2
242     val=$3
243     echo " * setting ${dom} ${key}"
244 voyageur 1.5 defaults write ${dom} ${key} ${val}
245 voyageur 1.4 }
246    
247     EOF
248    
249 voyageur 1.5 echo "echo \"Applying ${P} default configuration ...\"" >> "${T}"/${cfile}
250    
251 grobian 1.1 gnustep_config_script | \
252     while read line ; do
253     echo "${line}" >> "${T}"/${cfile}
254     done
255 grobian 1.2 echo 'echo "done"' >> "${T}"/${cfile}
256 grobian 1.1
257 voyageur 1.16 if [[ -d ${EPREFIX}/usr/share/GNUstep/Makefiles ]]; then
258     exeinto /usr/bin
259     else
260     exeinto ${GNUSTEP_SYSTEM_TOOLS#${EPREFIX}}/Gentoo
261     fi
262 grobian 1.1 doexe "${T}"/${cfile}
263     }
264    
265 voyageur 1.8 case ${EAPI:-0} in
266     0|1) EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_postinst ;;
267 voyageur 1.15 *) EXPORT_FUNCTIONS pkg_setup src_prepare src_configure src_compile src_install pkg_postinst ;;
268 voyageur 1.8 esac

  ViewVC Help
Powered by ViewVC 1.1.20