This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: Configure x86_64 in sysdeps/x86_64/preconfigure


On Wed, Mar 21, 2012 at 11:50 AM, Roland McGrath <roland@hack.frob.com> wrote:
>> Here is a patcn to implement #1. ?Tested on Linux/x86-64. ?OK to install?
>
> That is #0 and #1.
>
>> 2012-03-21 ?H.J. Lu ?<hongjiu.lu@intel.com>
>>
>> ? ? ? * sysdeps/unix/sysv/linux/configure.in: Check x86_64* instead
>> ? ? ? of x86_64 when setting libc_cv_slibdir, libdir and
>> ? ? ? libc_cv_localedir.
>> ? ? ? * sysdeps/unix/sysv/linux/configure: Regenerated.
>
> This part is OK. ?Commit it alone.
>
>> --- /dev/null
>> +++ b/sysdeps/x86_64/preconfigure
>> @@ -0,0 +1,12 @@
>> +test "$machine" != "x86_64" ||
>> +if echo __LP64__ | ${CC-cc} $CFLAGS $CPPFLAGS -E - | grep __LP64__ > /dev/null; then
>> + ?machine=x86_64/x32
>> +else
>> + ?machine=x86_64/64
>> +fi
>> +
>> +test -n "$base_machine" || case "$machine" in
>> +x86_64*)
>> + ?base_machine=x86_64
>> + ?;;
>> +esac
>
> I would put the x32 test inside the case statement after setting base_machine.
>
> I think that any compilation test should be done using autoconf macros
> rather than manual sh code like this. ?i.e., write a preconfigure.in
> instead. ?I don't think grepping -E output is a good idea. ?Instead, you
> can write a compile test that does something like:
>
> #ifndef __LP64__
> # error not lp64
> #endif
>
> and use its success/failure to decide.
>

Here is the patch to add sysdeps/x86_64/preconfigure.  Tested on
Linux/x86-64.  OK to install?

Thanks.

-- 
H.J.
2012-03-21  H.J. Lu  <hongjiu.lu@intel.com>

	* sysdeps/x86_64/preconfigure: New file.

diff --git a/sysdeps/x86_64/preconfigure b/sysdeps/x86_64/preconfigure
new file mode 100644
index 0000000..175a0a7
--- /dev/null
+++ b/sysdeps/x86_64/preconfigure
@@ -0,0 +1,120 @@
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+# This file is generated from configure.in by Autoconf.  DO NOT EDIT!
+ # Local preconfigure fragment for sysdeps/x86_64
+
+test -n "$base_machine" || case "$machine" in
+x86_64*)
+  base_machine=x86_64
+  # Check if we are building for x32.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we are building for x32" >&5
+$as_echo_n "checking if we are building for x32... " >&6; }
+if ${libc_cv_x32+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat > conftest.c <<\EOF
+#ifdef __LP64__
+# error not x32
+#endif
+EOF
+    if { ac_try='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.c 1>&5'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    libc_cv_x32=yes
+  else
+    libc_cv_x32=no
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_x32" >&5
+$as_echo "$libc_cv_x32" >&6; }
+  if test $libc_cv_x32 = yes; then
+    machine=x86_64/x32
+  else
+    machine=x86_64/64
+  fi
+  ;;
+esac
diff --git a/sysdeps/x86_64/preconfigure.in b/sysdeps/x86_64/preconfigure.in
new file mode 100644
index 0000000..a41e146
--- /dev/null
+++ b/sysdeps/x86_64/preconfigure.in
@@ -0,0 +1,27 @@
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+# Local preconfigure fragment for sysdeps/x86_64
+
+test -n "$base_machine" || case "$machine" in
+x86_64*)
+  base_machine=x86_64
+  # Check if we are building for x32.
+  AC_CACHE_CHECK(if we are building for x32, libc_cv_x32, [dnl
+cat > conftest.c <<\EOF
+#ifdef __LP64__
+# error not x32
+#endif
+EOF
+  dnl
+  if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS $CPPFLAGS conftest.c 1>&AS_MESSAGE_LOG_FD); then
+    libc_cv_x32=yes
+  else
+    libc_cv_x32=no
+  fi
+  rm -f conftest*])
+  if test $libc_cv_x32 = yes; then
+    machine=x86_64/x32
+  else
+    machine=x86_64/64
+  fi
+  ;;
+esac

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]