Native PowerPC AIX tools do accept only 32 bit objects by default. They either need the -X32_64 commandline flag to accept both, or the OBJECT_MODE=64 environment variable to switch to accepting 64 bit objects only, while the GNU toolchain ignores both the -X32_64 flag and the environment variable. As this affects the whole toolchain, we separately set the gl_cv_powerpc_aix_object_mode configure variable to either '32' or '64', or to 'no' when not compiling for PowerPC AIX. * m4/gnulib-common.m4 (gl_POWERPC_AIX_OBJECT_MODE): New. (gl_PROG_AR_RANLIB): Require gl_POWERPC_AIX_OBJECT_MODE. Search for AR and RANLIB accepting the -X32_64 flag when gl_cv_powerpc_aix_object_mode != no. --- ChangeLog | 16 ++++++++++++++++ m4/gnulib-common.m4 | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+)
diff --git a/ChangeLog b/ChangeLog index 49180d9..75cc906 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2016-03-17 Michael Haubenwallner <michael.haubenwall...@ssi-schaefer.com> + + early check for PowerPC AIX object mode + + Native PowerPC AIX tools do accept only 32 bit objects by default. + They either need the -X32_64 commandline flag to accept both, or the + OBJECT_MODE=64 environment variable to switch to accepting 64 bit + objects only, while the GNU toolchain ignores both the -X32_64 flag + and the environment variable. As this affects the whole toolchain, we + separately set the gl_cv_powerpc_aix_object_mode configure variable to + either '32' or '64', or to 'no' when not compiling for PowerPC AIX. + * m4/gnulib-common.m4 (gl_POWERPC_AIX_OBJECT_MODE): New. + (gl_PROG_AR_RANLIB): Require gl_POWERPC_AIX_OBJECT_MODE. + Search for AR and RANLIB accepting the -X32_64 flag when + gl_cv_powerpc_aix_object_mode != no. + 2016-03-15 Paul Eggert <egg...@cs.ucla.edu> time_rz: port to clang -Wunused-const-variable diff --git a/m4/gnulib-common.m4 b/m4/gnulib-common.m4 index f8454c8..727b7d6 100644 --- a/m4/gnulib-common.m4 +++ b/m4/gnulib-common.m4 @@ -245,6 +245,37 @@ AC_DEFUN([gl_PROG_CC_C99], [AC_REQUIRE([AC_PROG_CC_STDC])]) ]) +# gl_POWERPC_AIX_OBJECT_MODE +# Determines the current object mode used by the compiler for AIX. +AC_DEFUN([gl_POWERPC_AIX_OBJECT_MODE], +[ + AC_CACHE_CHECK([for PowerPC AIX object mode], + [gl_cv_powerpc_aix_object_mode], + [ + dnl like AS_EGREP_CPP but with AS_CASE instead of AS_IF + dnl to run preprocessor once for multiple variants + AC_LANG_PREPROC_REQUIRE() + AC_LANG_CONFTEST([AC_LANG_SOURCE( + [ +#if defined(_AIX) && defined(_POWER) +# if defined(__64BIT__) +OBJECT_MODE=64 +# else +OBJECT_MODE=32 +# endif +#else +OBJECT_MODE=no +#endif + ])]) + AS_CASE( + [`(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD`], + [*'OBJECT_MODE=64'*], [gl_cv_powerpc_aix_object_mode=64], + [*'OBJECT_MODE=32'*], [gl_cv_powerpc_aix_object_mode=32], + [gl_cv_powerpc_aix_object_mode=no]) + rm -f conftest* + ]) +]) + # gl_PROG_AR_RANLIB # Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler. # The user can set the variables AR, ARFLAGS, RANLIB if he wants to override @@ -256,6 +287,7 @@ AC_DEFUN([gl_PROG_AR_RANLIB], dnl library formats. In particular, the GNU binutils programs ar and ranlib dnl produce libraries that work only with gcc, not with cc. AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_POWERPC_AIX_OBJECT_MODE]) AC_BEFORE([$0], [AM_PROG_AR]) AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], [ @@ -278,6 +310,10 @@ Amsterdam if test -z "$ARFLAGS"; then ARFLAGS='-o' fi + elif test $gl_cv_powerpc_aix_object_mode != no; then + dnl PowerPC AIX toolchain accepts only 32 bit objects by default. + AC_CHECK_TOOL([AR], [ar -X32_64], [ar]) + AC_CHECK_TOOL([RANLIB], [ranlib -X32_64], [ranlib]) else dnl AM_PROG_AR was added in automake v1.11.2. AM_PROG_AR does not AC_SUBST dnl ARFLAGS variable (it is filed into Makefile.in directly by automake -- 2.4.6