X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=acinclude.m4;h=16c7da8151bda9f2c6c512a00f9596900ffe66b7;hb=8e1b1dc60931c2cb309cf446c98f9ab7451ea7d9;hp=dae9468cd23669022121604c7e1dbbda9c2f8b16;hpb=a63539450f6c12c3b9b2695921d91a5d395825be;p=mono.git diff --git a/acinclude.m4 b/acinclude.m4 index dae9468cd23..16c7da8151b 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -13,8 +13,6 @@ AC_REQUIRE([AC_CANONICAL_HOST]) # dolt, a replacement for libtool # Josh Triplett AC_PATH_PROG(DOLT_BASH, bash) -AC_MSG_CHECKING([if libtool sucks]) -AC_MSG_RESULT([yup, it does]) AC_MSG_CHECKING([if dolt supports this host]) dolt_supported=yes if test x$DOLT_BASH = x; then @@ -24,11 +22,24 @@ if test x$GCC != xyes; then dolt_supported=no fi case $host in -i?86-*-linux*|x86_64-*-linux*) ;; -*) dolt_supported=no ;; +i?86-*-linux*|x86_64-*-linux*|powerpc-*-linux*|powerpc64-*-linux* \ +|amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*|arm*-*-linux*|sparc*-*-linux*|mips*-*-linux*) + pic_options='-fPIC' + ;; +?86-pc-cygwin*|i?86-pc-cygwin*) + pic_options='-DDLL_EXPORT' + ;; +i?86-apple-darwin*) + pic_options='-fno-common' + ;; +*) + 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]) @@ -62,15 +73,18 @@ dnl Write out shared compilation code. cat <<'__DOLTCOMPILE__EOF__' >>doltcompile libobjdir="${obj%$objbase}.libs" if test ! -d "$libobjdir" ; then - mkdir "$libobjdir" + 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" -"${args@<:@@@:>@}" -fPIC -DPIC +__DOLTCOMPILE__EOF__ + cat <<__DOLTCOMPILE__EOF__ >>doltcompile +"\${args@<:@@@:>@}" $pic_options -DPIC || exit \$? __DOLTCOMPILE__EOF__ fi @@ -83,11 +97,11 @@ args@<:@$objarg@:>@="$non_pic_object" __DOLTCOMPILE__EOF__ if test x$enable_shared = xyes; then cat <<'__DOLTCOMPILE__EOF__' >>doltcompile -"${args@<:@@@:>@}" >/dev/null 2>&1 +"${args@<:@@@:>@}" >/dev/null 2>&1 || exit $? __DOLTCOMPILE__EOF__ else cat <<'__DOLTCOMPILE__EOF__' >>doltcompile -"${args@<:@@@:>@}" +"${args@<:@@@:>@}" || exit $? __DOLTCOMPILE__EOF__ fi fi @@ -102,7 +116,7 @@ __DOLTCOMPILE__EOF__ if test x$enable_shared = xyes; then cat <<'__DOLTCOMPILE__EOF__' >>doltcompile -echo "pic_object='$pic_object'" +echo "pic_object='.libs/${objbase}.o'" __DOLTCOMPILE__EOF__ else cat <<'__DOLTCOMPILE__EOF__' >>doltcompile @@ -112,7 +126,7 @@ __DOLTCOMPILE__EOF__ if test x$enable_static = xyes; then cat <<'__DOLTCOMPILE__EOF__' >>doltcompile -echo "non_pic_object='$non_pic_object'" +echo "non_pic_object='${objbase}.o'" __DOLTCOMPILE__EOF__ else cat <<'__DOLTCOMPILE__EOF__' >>doltcompile @@ -127,9 +141,41 @@ __DOLTCOMPILE__EOF__ dnl Done writing out doltcompile; substitute it for libtool compilation. chmod +x doltcompile LTCOMPILE='$(top_builddir)/doltcompile $(COMPILE)' - AC_SUBST(LTCOMPILE) LTCXXCOMPILE='$(top_builddir)/doltcompile $(CXXCOMPILE)' - AC_SUBST(LTCXXCOMPILE) + +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 ;; + --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 ])