]> git.ipfire.org Git - thirdparty/kmod.git/blame - m4/dolt.m4
man/depmod.d: add external keyword description
[thirdparty/kmod.git] / m4 / dolt.m4
CommitLineData
da6c0d2f
LDM
1dnl dolt, a replacement for libtool
2dnl Copyright © 2007-2010 Josh Triplett <josh@joshtriplett.org>
3dnl Copying and distribution of this file, with or without modification,
4dnl are permitted in any medium without royalty provided the copyright
5dnl notice and this notice are preserved.
6dnl
7dnl To use dolt, invoke the DOLT macro immediately after the libtool macros.
8dnl Optionally, copy this file into acinclude.m4, to avoid the need to have it
9dnl installed when running autoconf on your project.
10
11AC_DEFUN([DOLT], [
12AC_REQUIRE([AC_CANONICAL_HOST])
13# dolt, a replacement for libtool
14# Josh Triplett <josh@freedesktop.org>
9cc8a20d 15AC_PATH_PROG([DOLT_BASH], [bash])
da6c0d2f
LDM
16AC_MSG_CHECKING([if dolt supports this host])
17dolt_supported=yes
9cc8a20d
LDM
18AS_IF([test x$DOLT_BASH = x], [dolt_supported=no])
19AS_IF([test x$GCC != xyes], [dolt_supported=no])
20
21AS_CASE([$host],
22 [*-*-linux*|*-*-freebsd*], [pic_options='-fPIC'],
23 [*-apple-darwin*], [pic_options='-fno-common'],
24 [*mingw*|*nacl*], [pic_options='']
25 [*], [dolt_supported=no]
26)
27AS_IF([test x$dolt_supported = xno], [
da6c0d2f 28 AC_MSG_RESULT([no, falling back to libtool])
9cc8a20d
LDM
29 LTCOMPILE='$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(COMPILE)'
30 LTCXXCOMPILE='$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXXCOMPILE)'
31 m4_pattern_allow([AM_V_lt])
32], [
da6c0d2f
LDM
33 AC_MSG_RESULT([yes, replacing libtool])
34
35dnl Start writing out doltcompile.
36 cat <<__DOLTCOMPILE__EOF__ >doltcompile
37#!$DOLT_BASH
38__DOLTCOMPILE__EOF__
39 cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
40args=("$[]@")
41for ((arg=0; arg<${#args@<:@@@:>@}; arg++)) ; do
42 if test x"${args@<:@$arg@:>@}" = x-o ; then
43 objarg=$((arg+1))
44 break
45 fi
46done
47if test x$objarg = x ; then
48 echo 'Error: no -o on compiler command line' 1>&2
49 exit 1
50fi
51lo="${args@<:@$objarg@:>@}"
52obj="${lo%.lo}"
53if test x"$lo" = x"$obj" ; then
54 echo "Error: libtool object file name \"$lo\" does not end in .lo" 1>&2
55 exit 1
56fi
57objbase="${obj##*/}"
58__DOLTCOMPILE__EOF__
59
60dnl Write out shared compilation code.
61 if test x$enable_shared = xyes; then
62 cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
63libobjdir="${obj%$objbase}.libs"
64if test ! -d "$libobjdir" ; then
65 mkdir_out="$(mkdir "$libobjdir" 2>&1)"
66 mkdir_ret=$?
67 if test "$mkdir_ret" -ne 0 && test ! -d "$libobjdir" ; then
68 echo "$mkdir_out" 1>&2
69 exit $mkdir_ret
70 fi
71fi
72pic_object="$libobjdir/$objbase.o"
73args@<:@$objarg@:>@="$pic_object"
74__DOLTCOMPILE__EOF__
75 cat <<__DOLTCOMPILE__EOF__ >>doltcompile
9cc8a20d
LDM
76 pic_options="$pic_options"
77 if test x\$passthrough = xtrue; then
78 pic_options=""
79 fi
80__DOLTCOMPILE__EOF__
81 cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
82"${args@<:@@@:>@}" $pic_options -DPIC || exit $?
da6c0d2f
LDM
83__DOLTCOMPILE__EOF__
84 fi
85
86dnl Write out static compilation code.
87dnl Avoid duplicate compiler output if also building shared objects.
88 if test x$enable_static = xyes; then
89 cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
90non_pic_object="$obj.o"
91args@<:@$objarg@:>@="$non_pic_object"
92__DOLTCOMPILE__EOF__
93 if test x$enable_shared = xyes; then
94 cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
95"${args@<:@@@:>@}" >/dev/null 2>&1 || exit $?
96__DOLTCOMPILE__EOF__
97 else
98 cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
99"${args@<:@@@:>@}" || exit $?
100__DOLTCOMPILE__EOF__
101 fi
102 fi
103
104dnl Write out the code to write the .lo file.
105dnl The second line of the .lo file must match "^# Generated by .*libtool"
106 cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
107{
108echo "# $lo - a libtool object file"
109echo "# Generated by doltcompile, not libtool"
110__DOLTCOMPILE__EOF__
111
112 if test x$enable_shared = xyes; then
113 cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
114echo "pic_object='.libs/${objbase}.o'"
115__DOLTCOMPILE__EOF__
116 else
117 cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
118echo pic_object=none
119__DOLTCOMPILE__EOF__
120 fi
121
122 if test x$enable_static = xyes; then
123 cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
124echo "non_pic_object='${objbase}.o'"
125__DOLTCOMPILE__EOF__
126 else
127 cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
128echo non_pic_object=none
129__DOLTCOMPILE__EOF__
130 fi
131
132 cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
133} > "$lo"
134__DOLTCOMPILE__EOF__
135
136dnl Done writing out doltcompile; substitute it for libtool compilation.
137 chmod +x doltcompile
138 LTCOMPILE='$(top_builddir)/doltcompile $(COMPILE)'
139 LTCXXCOMPILE='$(top_builddir)/doltcompile $(CXXCOMPILE)'
140
141dnl automake ignores LTCOMPILE and LTCXXCOMPILE when it has separate CFLAGS for
142dnl a target, so write out a libtool wrapper to handle that case.
143dnl Note that doltlibtool does not handle inferred tags or option arguments
144dnl without '=', because automake does not use them.
145 cat <<__DOLTLIBTOOL__EOF__ > doltlibtool
146#!$DOLT_BASH
147__DOLTLIBTOOL__EOF__
148 cat <<'__DOLTLIBTOOL__EOF__' >>doltlibtool
149top_builddir_slash="${0%%doltlibtool}"
150: ${top_builddir_slash:=./}
151args=()
152modeok=false
153tagok=false
154for arg in "$[]@"; do
155 case "$arg" in
da6c0d2f
LDM
156 --mode=compile) modeok=true ;;
157 --tag=CC|--tag=CXX) tagok=true ;;
9cc8a20d
LDM
158 --tag=disable-static) tagok=true ;;
159 --tag=ASM|--tag=YASM) tagok=true; passthrough=true;;
160 --silent|--quiet) ;;
da6c0d2f
LDM
161 *) args@<:@${#args[@]}@:>@="$arg" ;;
162 esac
163done
164if $modeok && $tagok ; then
165 . ${top_builddir_slash}doltcompile "${args@<:@@@:>@}"
166else
167 exec ${top_builddir_slash}libtool "$[]@"
168fi
169__DOLTLIBTOOL__EOF__
170
171dnl Done writing out doltlibtool; substitute it for libtool.
172 chmod +x doltlibtool
173 LIBTOOL='$(top_builddir)/doltlibtool'
9cc8a20d
LDM
174
175DOLT_CLEANFILES="doltlibtool doltcompile"
176AC_SUBST(DOLT_CLEANFILES)
177])
da6c0d2f
LDM
178AC_SUBST(LTCOMPILE)
179AC_SUBST(LTCXXCOMPILE)
180# end dolt
181])