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

Contents of /eclass/autotools.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.17 - (show annotations) (download)
Wed Aug 31 01:54:15 2005 UTC (8 years, 10 months ago) by azarah
Branch: MAIN
Changes since 1.16: +88 -72 lines
Reorder function order a bit, and add some summary comments at the top.

1 # Copyright 1999-2005 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo-x86/eclass/autotools.eclass,v 1.16 2005/08/31 01:44:02 azarah Exp $
4 #
5 # Author: Diego Pettenò <flameeyes@gentoo.org>
6 # Enhancements: Martin Schlemmer <azarah@gentoo.org>
7 #
8 # This eclass is for handling autotooled software packages that
9 # needs to regenerate their build scripts.
10 #
11 # NB: If you add anything, please comment it!
12
13 inherit eutils gnuconfig
14
15 #DEPEND="sys-devel/automake
16 # sys-devel/autoconf
17 # sys-devel/libtool"
18 #
19 # Ebuilds should rather depend on the proper version of the tool.
20
21 # Variables:
22 #
23 # AT_M4DIR - Additional director(y|ies) aclocal should search
24 # AT_GNUCONF_UPDATE - Should gnuconfig_update() be run (normally handled by
25 # econf()) [yes|no]
26
27 # Functions:
28 #
29 # eautoreconf() - Should do a full autoreconf - normally what most people
30 # will be interested in. Also should handle additional
31 # directories specified by AC_CONFIG_SUBDIRS.
32 # eaclocal() - Runs aclocal. Respects AT_M4DIR for additional directories
33 # to search for macro's.
34 # _elibtoolize() - Runs libtoolize. Note the '_' prefix .. to not collide
35 # with elibtoolize() from libtool.eclass
36 # eautoconf - Runs autoconf.
37 # eautoheader - Runs autoheader.
38 # eautomake - Runs automake
39 #
40
41 # XXX: M4DIR should be depreciated
42 AT_M4DIR=${AT_M4DIR:-${M4DIR}}
43 AT_GNUCONF_UPDATE="no"
44
45
46 # This function mimes the behavior of autoreconf, but uses the different
47 # eauto* functions to run the tools. It doesn't accept parameters, but
48 # the directory with include files can be specified with AT_M4DIR variable.
49 #
50 # Note: doesn't run autopoint right now, but runs gnuconfig_update.
51 eautoreconf() {
52 local pwd=$(pwd) x
53
54 # Take care of subdirs
55 for x in $(autotools_get_subdirs); do
56 if [[ -d ${x} ]] ; then
57 cd "${x}"
58 eautoreconf
59 cd "${pwd}"
60 fi
61 done
62
63 eaclocal
64 _elibtoolize --copy --force
65 eautoconf
66 eautoheader
67 eautomake
68
69 # Normally run by econf()
70 [[ ${AT_GNUCONF_UPDATE} == "yes" ]] && gnuconfig_update
71 }
72
73 # These functions runs the autotools using autotools_run_tool with the
74 # specified parametes. The name of the tool run is the same of the function
75 # without e prefix.
76 # They also force installing the support files for safety.
77 eaclocal() {
78 local aclocal_opts
79
80 # XXX: M4DIR should be depreciated
81 AT_M4DIR=${AT_M4DIR:-${M4DIR}}
82
83 if [[ -n ${AT_M4DIR} ]] ; then
84 for x in ${AT_M4DIR} ; do
85 case "${x}" in
86 "-I")
87 # We handle it below
88 ;;
89 "-I"*)
90 # Invalid syntax, but maybe we should help out ...
91 ewarn "eaclocal: Proper syntax is (note the space after '-I'): aclocal -I <dir>"
92 aclocal_opts="${aclocal_opts} -I ${x}"
93 ;;
94 *)
95 [[ ! -d ${x} ]] && ewarn "eaclocal: '${x}' does not exist"
96 aclocal_opts="${aclocal_opts} -I ${x}"
97 ;;
98 esac
99 done
100 fi
101
102 [[ -f aclocal.m4 && -n $(grep -e 'generated.*by aclocal' aclocal.m4) ]] && \
103 autotools_run_tool aclocal "$@" ${aclocal_opts}
104 }
105
106 _elibtoolize() {
107 # Check if we should run libtoolize
108 [[ -n $(autotools_check_macro "AC_PROG_LIBTOOL") ]] || return 0
109 use userland_Darwin && LIBTOOLIZE="glibtoolize"
110 autotools_run_tool ${LIBTOOLIZE:-libtoolize} "$@"
111
112 # Need to rerun aclocal
113 eaclocal
114 }
115
116 eautoheader() {
117 # Check if we should run autoheader
118 [[ -n $(autotools_check_macro "AC_CONFIG_HEADERS") ]] || return 0
119 autotools_run_tool autoheader "$@"
120 }
121
122 eautoconf() {
123 if [[ ! -f configure.ac && ! -f configure.in ]] ; then
124 echo
125 eerror "No configure.{ac,in} present in '$(pwd | sed -e 's:.*/::')'!"
126 echo
127 die "No configure.{ac,in} present!"
128 fi
129
130 autotools_run_tool autoconf "$@"
131 }
132
133 eautomake() {
134 [[ -f Makefile.am ]] || return 0
135 # --force-missing seems not to be recognized by some flavours of automake
136 autotools_run_tool automake --add-missing --copy "$@"
137 }
138
139
140
141 # Internal function to run an autotools' tool
142 autotools_run_tool() {
143 local STDERR_TARGET="${T}/$$.out"
144 local PATCH_TARGET="${T}/$$.patch"
145 local ris
146
147 echo "***** $1 *****" > ${STDERR_TARGET%/*}/$1-${STDERR_TARGET##*/}
148 echo >> ${STDERR_TARGET%/*}/$1-${STDERR_TARGET##*/}
149
150 ebegin "Running $1"
151 $@ >> ${STDERR_TARGET%/*}/$1-${STDERR_TARGET##*/} 2>&1
152 ris=$?
153 eend ${ris}
154
155 if [[ ${ris} != 0 ]]; then
156 echo
157 eerror "Failed Running $1 !"
158 eerror
159 eerror "Include in your bugreport the contents of:"
160 eerror
161 eerror " ${STDERR_TARGET%/*}/$1-${STDERR_TARGET##*/}"
162 echo
163 die "Failed Running $1 !"
164 fi
165 }
166
167 # Internal function to check for support
168 autotools_check_macro() {
169 [[ -f configure.ac || -f configure.in ]] && \
170 autoconf --trace=$1 2>/dev/null
171 return 0
172 }
173
174 # Internal function to get additional subdirs to configure
175 autotools_get_subdirs() {
176 local subdirs_scan_out
177
178 subdirs_scan_out=$(autotools_check_macro "AC_CONFIG_SUBDIRS")
179 [[ -n ${subdirs_scan_out} ]] || return 0
180
181 echo "${subdirs_scan_out}" | gawk \
182 '($0 !~ /^[[:space:]]*(#|dnl)/) {
183 if (match($0, "AC_CONFIG_SUBDIRS\\(\\[?([^\\])]*)", res)) {
184 split(res[1], DIRS, /[\])]/)
185 print DIRS[1]
186 }
187 }' | uniq
188
189 return 0
190 }

  ViewVC Help
Powered by ViewVC 1.1.20