From patchwork Wed Nov 9 19:31:58 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tobias Burnus X-Patchwork-Id: 124679 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id D7FBC1007DB for ; Thu, 10 Nov 2011 06:32:23 +1100 (EST) Received: (qmail 14789 invoked by alias); 9 Nov 2011 19:32:20 -0000 Received: (qmail 14768 invoked by uid 22791); 9 Nov 2011 19:32:18 -0000 X-SWARE-Spam-Status: No, hits=-1.7 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE, TW_FM X-Spam-Check-By: sourceware.org Received: from mx01.qsc.de (HELO mx01.qsc.de) (213.148.129.14) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 09 Nov 2011 19:32:01 +0000 Received: from [192.168.178.22] (port-92-204-111-228.dynamic.qsc.de [92.204.111.228]) by mx01.qsc.de (Postfix) with ESMTP id 268753DBA7; Wed, 9 Nov 2011 20:31:58 +0100 (CET) Message-ID: <4EBAD52E.5020206@net-b.de> Date: Wed, 09 Nov 2011 20:31:58 +0100 From: Tobias Burnus User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20110929 Thunderbird/7.0.1 MIME-Version: 1.0 To: Janne Blomqvist CC: gcc patches , gfortran , Ralf Wildenhues Subject: Re: [Build, libgfortran, Patch] Make libgfortran's configure more cross-compile friendly References: <4EB1A73E.2060209@net-b.de> In-Reply-To: Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org On 02 Nov 2011 21:52, Janne Blomqvist wrote: > On Wed, Nov 2, 2011 at 22:25, Tobias Burnus wrote: >> at the GSoC Mentor summit, I had a chat with Joel, who asked me whether he >> should try to crosscompile also Fortran. Well, at the end I created the >> attached patch (based on what one had to do for libquadmath) and he >> successfully build fortran to target RTEMS for i386, sparc64, powerpc, mips, >> and m68k. >> >> Additionally, I have bootstrapped it on x86-64-linux. >> OK for the trunk? I have now committed the attached patch after approval by Janne on IRC. The patch consists of the upper part of previous patch and leaves out the more disputed second part. I think Janne is right that that part is better as it is now. Tobias > Looks good otherwise, however, I'm confused why you want to replace > AC_TRY_LINK with AC_LINK_IFELSE, since the former is deprecated and > the suggested replacement is, well, AC_LINK_IFELSE. In fact, this > issue was fixed not that long ago, see > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47883 Committed as Rev. 181212 2011-11-09 Tobias Burnus * configure.ac: Make more cross-compile friendly. * Makefile.in: Regenerate. * aclocal.m4: Regenerate. * config.h.in: Regenerate. * configure: Regenerate. ChangeLog | 26 ++++++---- Makefile.in | 1 aclocal.m4 | 35 ++++++++++++++ config.h.in | 3 + configure | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- configure.ac | 8 +++ 6 files changed, 206 insertions(+), 11 deletions(-) Index: libgfortran/configure =================================================================== --- libgfortran/configure (revision 181211) +++ libgfortran/configure (revision 181212) @@ -691,6 +691,7 @@ INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM +target_noncanonical target_os target_vendor target_cpu @@ -2840,8 +2841,12 @@ NONENONEs,x,x, && program_prefix=${target_alias}- + + + target_alias=${target_alias-$host_alias} + # Sets up automake. Must come after AC_CANONICAL_SYSTEM. Each of the # following is magically included in AUTOMAKE_OPTIONS in each Makefile.am. # 1.9.6: minimum required version @@ -4874,6 +4879,12 @@ # Create a spec file, so that compile/link tests don't fail test -f libgfortran.spec || touch libgfortran.spec +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + # Check the compiler. # The same as in boehm-gc and libstdc++. Have to borrow it from there. # We must force CC to /not/ be precious variables; otherwise @@ -5551,6 +5562,135 @@ + + +if test "x$CC" != xcc; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 +$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 +$as_echo_n "checking whether cc understands -c and -o together... " >&6; } +fi +set dummy $CC; ac_cc=`$as_echo "$2" | + sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +# Make sure it works both with $CC and with simple cc. +# We do the test twice because some compilers refuse to overwrite an +# existing .o file with -o, though they will create one. +ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' +rm -f conftest2.* +if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; +then + eval ac_cv_prog_cc_${ac_cc}_c_o=yes + if test "x$CC" != xcc; then + # Test first that cc exists at all. + if { ac_try='cc -c conftest.$ac_ext >&5' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' + rm -f conftest2.* + if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; + then + # cc works too. + : + else + # cc exists but doesn't like -o. + eval ac_cv_prog_cc_${ac_cc}_c_o=no + fi + fi + fi +else + eval ac_cv_prog_cc_${ac_cc}_c_o=no +fi +rm -f core conftest* + +fi +if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h + +fi + +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi + + + # Add -Wall -fno-repack-arrays -fno-underscoring if we are using GCC. if test "x$GCC" = "xyes"; then AM_FCFLAGS="-I . -Wall -Werror -fimplicit-none -fno-repack-arrays -fno-underscoring" @@ -12114,7 +12254,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12117 "configure" +#line 12257 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12220,7 +12360,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12223 "configure" +#line 12363 "configure" #include "confdefs.h" #if HAVE_DLFCN_H Index: libgfortran/Makefile.in =================================================================== --- libgfortran/Makefile.in (revision 181211) +++ libgfortran/Makefile.in (revision 181212) @@ -470,6 +470,7 @@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ +target_noncanonical = @target_noncanonical@ target_os = @target_os@ target_subdir = @target_subdir@ target_vendor = @target_vendor@ Index: libgfortran/configure.ac =================================================================== --- libgfortran/configure.ac (revision 181211) +++ libgfortran/configure.ac (revision 181212) @@ -51,7 +51,10 @@ # Do not delete or change the following two lines. For why, see # http://gcc.gnu.org/ml/libstdc++/2003-07/msg00451.html AC_CANONICAL_SYSTEM +ACX_NONCANONICAL_TARGET + target_alias=${target_alias-$host_alias} +AC_SUBST(target_alias) # Sets up automake. Must come after AC_CANONICAL_SYSTEM. Each of the # following is magically included in AUTOMAKE_OPTIONS in each Makefile.am. @@ -117,6 +120,7 @@ # Create a spec file, so that compile/link tests don't fail test -f libgfortran.spec || touch libgfortran.spec +AC_LANG_C # Check the compiler. # The same as in boehm-gc and libstdc++. Have to borrow it from there. # We must force CC to /not/ be precious variables; otherwise @@ -128,6 +132,10 @@ AC_PROG_CC m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) +AC_SUBST(CFLAGS) + +AM_PROG_CC_C_O + # Add -Wall -fno-repack-arrays -fno-underscoring if we are using GCC. if test "x$GCC" = "xyes"; then AM_FCFLAGS="-I . -Wall -Werror -fimplicit-none -fno-repack-arrays -fno-underscoring" Index: libgfortran/ChangeLog =================================================================== --- libgfortran/ChangeLog (revision 181211) +++ libgfortran/ChangeLog (revision 181212) @@ -1,3 +1,11 @@ +2011-11-09 Tobias Burnus + + * configure.ac: Make more cross-compile friendly. + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * config.h.in: Regenerate. + * configure: Regenerate. + 2011-11-09 Janne Blomqvist PR fortran/46686 @@ -20,9 +28,9 @@ 2011-11-09 Janne Blomqvist - PR libfortran/50016 - * io/inquire.c (inquire_via_unit): Flush the unit and use ssize. - * io/unix.c (buf_flush): Don't call _commit. + PR libfortran/50016 + * io/inquire.c (inquire_via_unit): Flush the unit and use ssize. + * io/unix.c (buf_flush): Don't call _commit. 2011-11-08 Francois-Xavier Coudert @@ -36,9 +44,9 @@ 2011-11-07 Janne Blomqvist - PR libfortran/45723 - * io/open.c (new_unit): Don't check file size before attempting - seek. + PR libfortran/45723 + * io/open.c (new_unit): Don't check file size before attempting + seek. 2011-11-02 Rainer Orth @@ -538,9 +546,9 @@ 2011-06-18 Janne Blomqvist - PR libfortran/49296 - * io/list_read.c (read_character): Accept EOF as a separator when - reading string. + PR libfortran/49296 + * io/list_read.c (read_character): Accept EOF as a separator when + reading string. 2011-06-17 Daniel Carrera Index: libgfortran/config.h.in =================================================================== --- libgfortran/config.h.in (revision 181211) +++ libgfortran/config.h.in (revision 181212) @@ -865,6 +865,9 @@ */ #undef LT_OBJDIR +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT Index: libgfortran/aclocal.m4 =================================================================== --- libgfortran/aclocal.m4 (revision 181211) +++ libgfortran/aclocal.m4 (revision 181212) @@ -658,6 +658,41 @@ rm -f confinc confmf ]) +# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +dnl Make sure AC_PROG_CC is never called again, or it will override our +dnl setting of CC. +m4_define([AC_PROG_CC], + [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) +]) + # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008