/[gentoo-x86]/eclass/autotools-utils.eclass
Gentoo

Contents of /eclass/autotools-utils.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Sat Jul 17 10:42:55 2010 UTC (4 years, 5 months ago) by reavertm
Branch: MAIN
Add new eclass, emerge -1 eclass-manpages and see autotool-utils.eclass manual page for details

1 reavertm 1.1 # Copyright 1999-2010 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3     # $Header: $
4    
5     # @ECLASS: autotools-utils.eclass
6     # @MAINTAINER:
7     # Maciej Mrozowski <reavertm@gentoo.org>
8     # @BLURB: common ebuild functions for autotools-based packages
9     # @DESCRIPTION:
10     # autotools-utils.eclass is autotools.eclass(5) and base.eclass(5) wrapper
11     # providing all inherited features along with econf arguments as Bash array,
12     # out of source build with overridable build dir location, static archives
13     # handling, libtool files removal, enable/disable debug handling.
14     #
15     # @EXAMPLE:
16     # Typical ebuild using autotools-utils.eclass:
17     #
18     # @CODE
19     # EAPI="2"
20     #
21     # inherit autotools-utils
22     #
23     # DESCRIPTION="Foo bar application"
24     # HOMEPAGE="http://example.org/foo/"
25     # SRC_URI="mirror://sourceforge/foo/${P}.tar.bz2"
26     #
27     # LICENSE="LGPL-2.1"
28     # KEYWORDS=""
29     # SLOT="0"
30     # IUSE="debug doc examples qt4 static-libs tiff"
31     #
32     # CDEPEND="
33     # media-libs/libpng:0
34     # qt4? (
35     # x11-libs/qt-core:4
36     # x11-libs/qt-gui:4
37     # )
38     # tiff? ( media-libs/tiff:0 )
39     # "
40     # RDEPEND="${CDEPEND}
41     # !media-gfx/bar
42     # "
43     # DEPEND="${CDEPEND}
44     # doc? ( app-doc/doxygen )
45     # "
46     #
47     # # bug 123456
48     # AUTOTOOLS_IN_SOURCE_BUILD=1
49     #
50     # DOCS=(AUTHORS ChangeLog README "Read me.txt" TODO)
51     #
52     # PATCHES=(
53     # "${FILESDIR}/${P}-gcc44.patch" # bug 123458
54     # "${FILESDIR}/${P}-as-needed.patch"
55     # "${FILESDIR}/${P}-unbundle_libpng.patch"
56     # )
57     #
58     # src_configure() {
59     # myeconfargs=(
60     # $(use_with qt4)
61     # $(use_enable threads multithreading)
62     # $(use_with tiff)
63     # )
64     # autotools-utils_src_configure
65     # }
66     #
67     # src_compile() {
68     # autotools-utils_src_compile
69     # use doc && autotools-utils_src_compile docs
70     # }
71     #
72     # src_install() {
73     # use doc && HTML_DOCS=("${AUTOTOOLS_BUILD_DIR}/apidocs/html/")
74     # autotools-utils_src_install
75     # if use examples; then
76     # dobin "${AUTOTOOLS_BUILD_DIR}"/foo_example{1,2,3} \\
77     # || die 'dobin examples failed'
78     # fi
79     # }
80     #
81     # @CODE
82    
83     # Keep variable names synced with cmake-utils and the other way around!
84    
85     case ${EAPI:-0} in
86     2|3|4) ;;
87     *) DEPEND="EAPI-TOO-OLD" ;;
88     esac
89    
90     inherit autotools base
91    
92     EXPORT_FUNCTIONS src_prepare src_configure src_compile src_install src_test
93    
94     # @ECLASS-VARIABLE: AUTOTOOLS_BUILD_DIR
95     # @DESCRIPTION:
96     # Build directory, location where all autotools generated files should be
97     # placed. For out of source builds it defaults to ${WORKDIR}/${P}_build.
98    
99     # @ECLASS-VARIABLE: AUTOTOOLS_IN_SOURCE_BUILD
100     # @DESCRIPTION:
101     # Set to enable in-source build.
102    
103     # @ECLASS-VARIABLE: ECONF_SOURCE
104     # @DESCRIPTION:
105     # Specify location of autotools' configure script. By default it uses ${S}.
106    
107     # @ECLASS-VARIABLE: myeconfargs
108     # @DESCRIPTION:
109     # Optional econf arguments as Bash array. Should be defined before calling src_configure.
110     # @CODE
111     # src_configure() {
112     # myeconfargs=(
113     # --disable-readline
114     # --with-confdir="/etc/nasty foo confdir/"
115     # $(use_enable debug cnddebug)
116     # $(use_enable threads multithreading)
117     # )
118     # autotools-utils_src_configure
119     # }
120     # @CODE
121    
122     # Determine using IN or OUT source build
123     _check_build_dir() {
124     : ${ECONF_SOURCE:=${S}}
125     if [[ -n ${AUTOTOOLS_IN_SOURCE_BUILD} ]]; then
126     AUTOTOOLS_BUILD_DIR="${ECONF_SOURCE}"
127     else
128     : ${AUTOTOOLS_BUILD_DIR:=${WORKDIR}/${P}_build}
129     fi
130     echo ">>> Working in BUILD_DIR: \"$AUTOTOOLS_BUILD_DIR\""
131     }
132    
133     # @FUNCTION: remove_libtool_files
134     # @USAGE: [all|none]
135     # @DESCRIPTION:
136     # Determines unnecessary libtool files (.la) and libtool static archives (.a)
137     # and removes them from installation image.
138     # To unconditionally remove all libtool files, pass 'all' as argument.
139     # To leave all libtool files alone, pass 'none' as argument.
140     # Unnecessary static archives are removed in any case.
141     #
142     # In most cases it's not necessary to manually invoke this function.
143     # See autotools-utils_src_install for reference.
144     remove_libtool_files() {
145     debug-print-function ${FUNCNAME} "$@"
146    
147     local f
148     for f in $(find "${D}" -type f -name '*.la'); do
149     # Keep only .la files with shouldnotlink=yes - likely plugins
150     local shouldnotlink=$(sed -ne '/^shouldnotlink=yes$/p' "${f}")
151     if [[ "$1" == 'all' || -z ${shouldnotlink} ]]; then
152     if [[ "$1" != 'none' ]]; then
153     echo "Removing unnecessary ${f}"
154     rm -f "${f}"
155     fi
156     fi
157     # Remove static libs we're not supposed to link against
158     if [[ -n ${shouldnotlink} ]]; then
159     local remove=${f/%.la/.a}
160     [[ "${f}" != "${remove}" ]] || die 'regex sanity check failed'
161     echo "Removing unnecessary ${remove}"
162     rm -f "${remove}"
163     fi
164     done
165     }
166    
167     # @FUNCTION: autotools-utils_src_prepare
168     # @DESCRIPTION:
169     # The src_prepare function.
170     #
171     # Supporting PATCHES array and user patches. See base.eclass(5) for reference.
172     autotools-utils_src_prepare() {
173     debug-print-function ${FUNCNAME} "$@"
174    
175     base_src_prepare
176     }
177    
178     # @FUNCTION: autotools-utils_src_configure
179     # @DESCRIPTION:
180     # The src_configure function. For out of source build it creates build
181     # directory and runs econf there. Configuration parameters defined
182     # in myeconfargs are passed here to econf. Additionally following USE
183     # flags are known:
184     #
185     # IUSE="debug" passes --disable-debug/--enable-debug to econf respectively.
186     #
187     # IUSE="static-libs" passes --enable-shared and either --disable-static/--enable-static
188     # to econf respectively.
189     autotools-utils_src_configure() {
190     debug-print-function ${FUNCNAME} "$@"
191    
192     # Common args
193     local econfargs=()
194    
195     # Handle debug found in IUSE
196     if has debug ${IUSE//+}; then
197     econfargs+=($(use_enable debug))
198     fi
199    
200     # Handle static-libs found in IUSE, disable them by default
201     if has static-libs ${IUSE//+}; then
202     econfargs+=(
203     --enable-shared
204     $(use_enable static-libs static)
205     )
206     fi
207    
208     # Append user args
209     econfargs+=(${myeconfargs[@]})
210    
211     _check_build_dir
212     mkdir -p "${AUTOTOOLS_BUILD_DIR}" || die "mkdir '${AUTOTOOLS_BUILD_DIR}' failed"
213     pushd "${AUTOTOOLS_BUILD_DIR}" > /dev/null
214     base_src_configure "${econfargs[@]}"
215     popd > /dev/null
216     }
217    
218     # @FUNCTION: autotools-utils_src_compile
219     # @DESCRIPTION:
220     # The autotools src_compile function, invokes emake in specified AUTOTOOLS_BUILD_DIR.
221     autotools-utils_src_compile() {
222     debug-print-function ${FUNCNAME} "$@"
223    
224     _check_build_dir
225     pushd "${AUTOTOOLS_BUILD_DIR}" > /dev/null
226     base_src_compile "$@"
227     popd > /dev/null
228     }
229    
230     # @FUNCTION: autotools-utils_src_install
231     # @DESCRIPTION:
232     # The autotools src_install function. Runs emake install, unconditionally
233     # removes unnecessary static libs (based on shouldnotlink libtool property)
234     # and removes unnecessary libtool files when static-libs USE flag is defined
235     # and unset.
236     #
237     # DOCS and HTML_DOCS arrays are supported. See base.eclass(5) for reference.
238     autotools-utils_src_install() {
239     debug-print-function ${FUNCNAME} "$@"
240    
241     _check_build_dir
242     pushd "${AUTOTOOLS_BUILD_DIR}" > /dev/null
243     base_src_install
244     popd > /dev/null
245    
246     # Remove libtool files and unnecessary static libs
247     local args
248     has static-libs ${IUSE//+} && ! use static-libs || args='none'
249     remove_libtool_files ${args}
250     }
251    
252     # @FUNCTION: autotools-utils_src_test
253     # @DESCRIPTION:
254     # The autotools src_test function. Runs emake check in build directory.
255     autotools-utils_src_test() {
256     debug-print-function ${FUNCNAME} "$@"
257    
258     _check_build_dir
259     pushd "${AUTOTOOLS_BUILD_DIR}" > /dev/null
260     # Run default src_test as defined in ebuild.sh
261     default_src_test
262     popd > /dev/null
263     }

  ViewVC Help
Powered by ViewVC 1.1.20