You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/app-emulation/wine/files/wine-1.5.23-winebuild-CCAS....

215 lines
6.0 KiB

From 57c57e9dfae50f045503ae9f3107fa3748512483 Mon Sep 17 00:00:00 2001
From: Alexandre Rostovtsev <tetromino@gentoo.org>
Date: Sun, 3 Feb 2013 19:19:36 -0500
Subject: [PATCH] winebuild: Use $CCAS to assemble if found
Commit c14bdaf1 made winebuild use Clang to assemble if found.
However, just because a user has some version of Clang installed, it
does not mean that she wants to use Clang to assemble Wine. For example,
a user who has both Clang and GAS installed may want to use GAS to avoid
textrels (see https://bugs.gentoo.org/show_bug.cgi?id=455308).
This patch allows the user to override which assembler gets used by
exporting CCAS at Wine configure time; the name CCAS was chosen for
compatibility with automake's standard AM_PROG_AS macro.
---
configure | 106 ++++++++++++++++++++++++++++++++++++++++++++
configure.ac | 4 ++
tools/winebuild/Makefile.in | 5 ++-
tools/winebuild/utils.c | 12 +++++
4 files changed, 126 insertions(+), 1 deletion(-)
diff --git a/configure b/configure
index e3253ee..d0b7777 100755
--- a/configure
+++ b/configure
@@ -732,6 +732,8 @@ FLEX
TOOLSDIR
WOW64_DISABLE
TARGETFLAGS
+ac_ct_CCAS
+CCAS
CPPBIN
ac_ct_CXX
CXXFLAGS
@@ -861,6 +863,7 @@ CPPFLAGS
CXX
CXXFLAGS
CCC
+CCAS
CPP
XMKMF'
@@ -1549,6 +1552,7 @@ Some influential environment variables:
you have headers in a nonstandard directory <include dir>
CXX C++ compiler command
CXXFLAGS C++ compiler flags
+ CCAS Assembler command
CPP C preprocessor
XMKMF Path to xmkmf, Makefile generator for X Window System
@@ -4075,6 +4079,108 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
+
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in clang gas as
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CCAS+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CCAS"; then
+ ac_cv_prog_CCAS="$CCAS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CCAS="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CCAS=$ac_cv_prog_CCAS
+if test -n "$CCAS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CCAS" >&5
+$as_echo "$CCAS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CCAS" && break
+ done
+fi
+if test -z "$CCAS"; then
+ ac_ct_CCAS=$CCAS
+ for ac_prog in clang gas as
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CCAS+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CCAS"; then
+ ac_cv_prog_ac_ct_CCAS="$ac_ct_CCAS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CCAS="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CCAS=$ac_cv_prog_ac_ct_CCAS
+if test -n "$ac_ct_CCAS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CCAS" >&5
+$as_echo "$ac_ct_CCAS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CCAS" && break
+done
+
+ if test "x$ac_ct_CCAS" = x; then
+ CCAS=""$CC""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CCAS=$ac_ct_CCAS
+ fi
+fi
+
+
case $host in
*-darwin*)
if test "x$enable_win64" = "xyes"
diff --git a/configure.ac b/configure.ac
index c93cd08..760f325 100644
--- a/configure.ac
+++ b/configure.ac
@@ -126,6 +126,10 @@ dnl We can't use AC_PROG_CPP for winegcc, it uses by default $(CC) -E
AC_CHECK_TOOL(CPPBIN,cpp,cpp)
AC_DEFINE_UNQUOTED(EXEEXT,["$ac_exeext"],[Define to the file extension for executables.])
+dnl Analogous to AM_PROG_AS
+AC_ARG_VAR([CCAS],[Assembler command])
+AC_CHECK_TOOLS(CCAS,[clang gas as],["$CC"])
+
case $host in
*-darwin*)
if test "x$enable_win64" = "xyes"
diff --git a/tools/winebuild/Makefile.in b/tools/winebuild/Makefile.in
index 2017129..3fe47a3 100644
--- a/tools/winebuild/Makefile.in
+++ b/tools/winebuild/Makefile.in
@@ -1,4 +1,7 @@
-DEFS = -D__WINESRC__ $(EXTRADEFS)
+DEFS = \
+ -DCCAS="\"@CCAS@\"" \
+ -D__WINESRC__ \
+ $(EXTRADEFS)
PROGRAMS = winebuild$(EXEEXT)
MANPAGE = winebuild.man
diff --git a/tools/winebuild/utils.c b/tools/winebuild/utils.c
index 262ff3a..1c5f918 100644
--- a/tools/winebuild/utils.c
+++ b/tools/winebuild/utils.c
@@ -352,6 +352,18 @@ struct strarray *get_as_command(void)
static int as_is_clang = 0;
struct strarray *args = strarray_init();
+ if (!as_command && strlen( CCAS ))
+ {
+ struct stat st;
+
+ if (!stat( CCAS, &st ))
+ as_command = CCAS;
+ else
+ as_command = find_tool( CCAS, NULL );
+
+ if (as_command && strstr( as_command, "clang" )) as_is_clang = 1;
+ }
+
if (!as_command)
{
as_command = find_tool( "clang", NULL );
--
1.8.1.2