123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- dnl dolt, a replacement for libtool
- dnl Copyright © 2007-2010 Josh Triplett <josh@joshtriplett.org>
- dnl Copying and distribution of this file, with or without modification,
- dnl are permitted in any medium without royalty provided the copyright
- dnl notice and this notice are preserved.
- dnl
- dnl To use dolt, invoke the DOLT macro immediately after the libtool macros.
- dnl Optionally, copy this file into acinclude.m4, to avoid the need to have it
- dnl installed when running autoconf on your project.
- AC_DEFUN([DOLT], [
- AC_REQUIRE([AC_CANONICAL_HOST])
- # dolt, a replacement for libtool
- # Josh Triplett <josh@freedesktop.org>
- AC_PATH_PROG(DOLT_BASH, bash)
- AC_MSG_CHECKING([if dolt supports this host])
- dolt_supported=yes
- if test x$DOLT_BASH = x; then
- dolt_supported=no
- fi
- if test x$GCC != xyes; then
- dolt_supported=no
- fi
- case $host in
- *-*-linux* \
- |amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*)
- pic_options='-fPIC'
- ;;
- i?86-apple-darwin*)
- pic_options='-fno-common'
- ;;
- *mingw*)
- pic_options=''
- ;;
- *)
- dolt_supported=no
- ;;
- esac
- if test x$dolt_supported = xno ; then
- AC_MSG_RESULT([no, falling back to libtool])
- LTCOMPILE='$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(COMPILE)'
- LTCXXCOMPILE='$(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXXCOMPILE)'
- else
- AC_MSG_RESULT([yes, replacing libtool])
- dnl Start writing out doltcompile.
- cat <<__DOLTCOMPILE__EOF__ >doltcompile
- #!$DOLT_BASH
- __DOLTCOMPILE__EOF__
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
- args=("$[]@")
- for ((arg=0; arg<${#args@<:@@@:>@}; arg++)) ; do
- if test x"${args@<:@$arg@:>@}" = x-o ; then
- objarg=$((arg+1))
- break
- fi
- done
- if test x$objarg = x ; then
- echo 'Error: no -o on compiler command line' 1>&2
- exit 1
- fi
- lo="${args@<:@$objarg@:>@}"
- obj="${lo%.lo}"
- if test x"$lo" = x"$obj" ; then
- echo "Error: libtool object file name \"$lo\" does not end in .lo" 1>&2
- exit 1
- fi
- objbase="${obj##*/}"
- __DOLTCOMPILE__EOF__
- dnl Write out shared compilation code.
- if test x$enable_shared = xyes; then
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
- libobjdir="${obj%$objbase}.libs"
- if test ! -d "$libobjdir" ; then
- mkdir_out="$(mkdir "$libobjdir" 2>&1)"
- mkdir_ret=$?
- if test "$mkdir_ret" -ne 0 && test ! -d "$libobjdir" ; then
- echo "$mkdir_out" 1>&2
- exit $mkdir_ret
- fi
- fi
- pic_object="$libobjdir/$objbase.o"
- args@<:@$objarg@:>@="$pic_object"
- __DOLTCOMPILE__EOF__
- cat <<__DOLTCOMPILE__EOF__ >>doltcompile
- "\${args@<:@@@:>@}" $pic_options -DPIC || exit \$?
- __DOLTCOMPILE__EOF__
- fi
- dnl Write out static compilation code.
- dnl Avoid duplicate compiler output if also building shared objects.
- if test x$enable_static = xyes; then
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
- non_pic_object="$obj.o"
- args@<:@$objarg@:>@="$non_pic_object"
- __DOLTCOMPILE__EOF__
- if test x$enable_shared = xyes; then
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
- "${args@<:@@@:>@}" >/dev/null 2>&1 || exit $?
- __DOLTCOMPILE__EOF__
- else
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
- "${args@<:@@@:>@}" || exit $?
- __DOLTCOMPILE__EOF__
- fi
- fi
- dnl Write out the code to write the .lo file.
- dnl The second line of the .lo file must match "^# Generated by .*libtool"
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
- {
- echo "# $lo - a libtool object file"
- echo "# Generated by doltcompile, not libtool"
- __DOLTCOMPILE__EOF__
- if test x$enable_shared = xyes; then
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
- echo "pic_object='.libs/${objbase}.o'"
- __DOLTCOMPILE__EOF__
- else
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
- echo pic_object=none
- __DOLTCOMPILE__EOF__
- fi
- if test x$enable_static = xyes; then
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
- echo "non_pic_object='${objbase}.o'"
- __DOLTCOMPILE__EOF__
- else
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
- echo non_pic_object=none
- __DOLTCOMPILE__EOF__
- fi
- cat <<'__DOLTCOMPILE__EOF__' >>doltcompile
- } > "$lo"
- __DOLTCOMPILE__EOF__
- dnl Done writing out doltcompile; substitute it for libtool compilation.
- chmod +x doltcompile
- LTCOMPILE='$(top_builddir)/doltcompile $(COMPILE)'
- LTCXXCOMPILE='$(top_builddir)/doltcompile $(CXXCOMPILE)'
- dnl automake ignores LTCOMPILE and LTCXXCOMPILE when it has separate CFLAGS for
- dnl a target, so write out a libtool wrapper to handle that case.
- dnl Note that doltlibtool does not handle inferred tags or option arguments
- dnl without '=', because automake does not use them.
- cat <<__DOLTLIBTOOL__EOF__ > doltlibtool
- #!$DOLT_BASH
- __DOLTLIBTOOL__EOF__
- cat <<'__DOLTLIBTOOL__EOF__' >>doltlibtool
- top_builddir_slash="${0%%doltlibtool}"
- : ${top_builddir_slash:=./}
- args=()
- modeok=false
- tagok=false
- for arg in "$[]@"; do
- case "$arg" in
- --mode=compile) modeok=true ;;
- --tag=CC|--tag=CXX) tagok=true ;;
- --silent|--quiet) ;;
- *) args@<:@${#args[@]}@:>@="$arg" ;;
- esac
- done
- if $modeok && $tagok ; then
- . ${top_builddir_slash}doltcompile "${args@<:@@@:>@}"
- else
- exec ${top_builddir_slash}libtool "$[]@"
- fi
- __DOLTLIBTOOL__EOF__
- dnl Done writing out doltlibtool; substitute it for libtool.
- chmod +x doltlibtool
- LIBTOOL='$(top_builddir)/doltlibtool'
- fi
- AC_SUBST(LTCOMPILE)
- AC_SUBST(LTCXXCOMPILE)
- # end dolt
- ])
|