From patchwork Thu Jan 26 13:04:49 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Preudhomme X-Patchwork-Id: 720154 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3v8MbC6T4bz9t1T for ; Fri, 27 Jan 2017 00:05:11 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="oZvvtUP5"; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :subject:to:references:from:message-id:date:mime-version :in-reply-to:content-type; q=dns; s=default; b=wz9HtXgbW2yJwwuLO khaE5qFb6/mmLLroyW21sG2dZ8FcVJwr+2c+9IEPQ09MnMvtRNfTKgwarOoTMnML 0zx6IYiuf32VvzSIhy1yhzGKUb3k7GhOU8OULl9sf5+5fSm6/YTdVG2h359M6HHI dFFJlCxsNnTfFg21+8trP4lAnk= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :subject:to:references:from:message-id:date:mime-version :in-reply-to:content-type; s=default; bh=FkCvtQhsxyfG1Iwtbf8i3bM Dumo=; b=oZvvtUP57ofcmrNSGIlHeLzoh5FuDgFfswty9GbeXU/A8a7Cb10TkEj G5xoJrK1e73xApcQnncecsNqclWR5Yh85pB36Btoaawv2o70VEl9diOQYyEuDjzr 2C4E3dUjPJXb5Hw7/+ZM+o5i9aVt3at53fG77KqFAy6SB6HH1kRQ= Received: (qmail 5622 invoked by alias); 26 Jan 2017 13:05:03 -0000 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 Received: (qmail 5604 invoked by uid 89); 26 Jan 2017 13:05:03 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=BAYES_05, KAM_LAZY_DOMAIN_SECURITY, KAM_LOTSOFHASH, RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=2396, 2476, AS_HELP_STRING, as_help_string X-HELO: foss.arm.com Received: from foss.arm.com (HELO foss.arm.com) (217.140.101.70) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 26 Jan 2017 13:04:52 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id F069B1516; Thu, 26 Jan 2017 05:04:50 -0800 (PST) Received: from [10.2.206.52] (usa-sjc-imap-foss1.foss.arm.com [10.72.51.249]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8021B3F318; Thu, 26 Jan 2017 05:04:50 -0800 (PST) Subject: Re: [PATCH, GCC/x86 mingw32] Add configure option to force wildcard behavior on Windows To: JonY <10walls@gmail.com>, "gcc-patches@gcc.gnu.org" References: <3c3cd900-7d38-a66d-d306-12c968d26f0b@gmail.com> From: Thomas Preudhomme Message-ID: <35f8542e-df08-62ac-da0e-824a974b96e6@foss.arm.com> Date: Thu, 26 Jan 2017 13:04:49 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 MIME-Version: 1.0 In-Reply-To: <3c3cd900-7d38-a66d-d306-12c968d26f0b@gmail.com> X-IsSubscribed: yes Hi JonY, On 19/01/17 01:37, JonY wrote: > On 01/18/2017 09:48 AM, Thomas Preudhomme wrote: >> By default, wildcard support on Windows for programs compiled with mingw >> depends on how the mingw runtime was configured. This means if one wants >> to build GCC for Windows with a consistent behavior with Wildcard >> (enabled or disabled) the mingw runtime must be built as well. This >> patch adds an option to GCC configuration to force the behavior with >> wildcard when building GCC for Windows host. It does so by setting the >> _dowildcard variable in the driver to a given value depending on the >> configure option value (yes or no), thus overriding the variable from >> mingw runtime. >> >> Testing: I've successfully done a build of the arm-none-eabi cross GCC >> for Windows with Ubuntu system mingw runtime (configured without >> wildcard support by default) with the three configure options: >> 1) --enable-wildcard: wildcard can be used successfully and nm of >> driver-mingw32.o shows that _dowildcard is in .data section >> 2) --disable-wildcard: wildcard cannot be used and nm of >> driver-mingw32.o shows that _dowildcard is in .bss section >> 3) no option: wildcard cannot be used and nm of driver-mingw32.o shows >> no _dowildcard defined and all sections are empty >> >> Is this ok for stage1? >> >> Best regards, >> >> Thomas > > No objections, but documentation should mention that wildcard expansion > is not handled by the CMD shell on Windows, it is up to individual > programs to interpret it. How about the attached updated patch? Here's the associated ChangeLog entry: 2017-01-24 Thomas Preud'homme * configure.ac (--enable-mingw-wildcard): Add new configurable feature. * configure: Regenerate. * config.in: Regenerate. * config/i386/driver-mingw32.c: new file. * config/i386/x-mingw32: Add rule to build driver-mingw32.o. * config.host: Link driver-mingw32.o on MinGW host. * doc/install.texi: Document new --enable-mingw-wildcard configure option. Best regards, Thomas diff --git a/gcc/config.host b/gcc/config.host index 6b28f3033ef92f1f0e09cc41f3a90be05c5e1e43..5e2db5327e3094a19cd29c81ceb1a9e2b11797c9 100644 --- a/gcc/config.host +++ b/gcc/config.host @@ -239,6 +239,7 @@ case ${host} in host_xmake_file="${host_xmake_file} i386/x-mingw32" host_exeext=.exe out_host_hook_obj=host-mingw32.o + host_extra_gcc_objs="${host_extra_gcc_objs} driver-mingw32.o" host_lto_plugin_soname=liblto_plugin-0.dll ;; x86_64-*-mingw*) @@ -247,6 +248,7 @@ case ${host} in host_xmake_file="${host_xmake_file} i386/x-mingw32" host_exeext=.exe out_host_hook_obj=host-mingw32.o + host_extra_gcc_objs="${host_extra_gcc_objs} driver-mingw32.o" host_lto_plugin_soname=liblto_plugin-0.dll ;; i[34567]86-*-darwin* | x86_64-*-darwin*) diff --git a/gcc/config.in b/gcc/config.in index 1959dd7a603f121b6f2a3e0f80563d6290299c8a..b1f8018acfc5e8bf12503130a4707a2f6c21a1fd 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -2015,6 +2015,12 @@ #endif +/* Value to set MinGW's _dowildcard to. */ +#ifndef USED_FOR_TARGET +#undef MINGW_DOWILDCARD +#endif + + /* Define if host mkdir takes a single argument. */ #ifndef USED_FOR_TARGET #undef MKDIR_TAKES_ONE_ARG diff --git a/gcc/config/i386/driver-mingw32.c b/gcc/config/i386/driver-mingw32.c new file mode 100644 index 0000000000000000000000000000000000000000..b70363ad26a7dc8ffccbb273e46d4dd6de1a6f8c --- /dev/null +++ b/gcc/config/i386/driver-mingw32.c @@ -0,0 +1,26 @@ +/* Host OS specific configuration for the gcc driver. + Copyright (C) 2017 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#include "config.h" + +/* When defined, force the use (if non null) or not (otherwise) of CLI + globbing. */ +#ifdef MINGW_DOWILDCARD +int _dowildcard = MINGW_DOWILDCARD; +#endif diff --git a/gcc/config/i386/x-mingw32 b/gcc/config/i386/x-mingw32 index b5cef97512032a223605fb4db592fab05b1bb521..d0fa05245c4566c56aab6a1a6683a13a4392f864 100644 --- a/gcc/config/i386/x-mingw32 +++ b/gcc/config/i386/x-mingw32 @@ -63,3 +63,6 @@ host-mingw32.o : $(srcdir)/config/i386/host-mingw32.c $(CONFIG_H) $(SYSTEM_H) \ coretypes.h hosthooks.h hosthooks-def.h toplev.h $(DIAGNOSTIC_H) $(HOOKS_H) $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ $(srcdir)/config/i386/host-mingw32.c + +driver-mingw32.o : $(srcdir)/config/i386/driver-mingw32.c $(CONFIG_H) + $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< diff --git a/gcc/configure b/gcc/configure index 60cb979b558431949a20fc83482b198a091c5efe..db2d114a52d8795265ca4d4348dfc695455e56f5 100755 --- a/gcc/configure +++ b/gcc/configure @@ -919,6 +919,7 @@ enable_rpath with_libiconv_prefix enable_sjlj_exceptions enable_secureplt +enable_mingw_wildcard enable_leading_mingw64_underscores enable_cld enable_frame_pointer @@ -1631,6 +1632,8 @@ Optional Features: --enable-sjlj-exceptions arrange to use setjmp/longjmp exception handling --enable-secureplt enable -msecure-plt by default for PowerPC + --enable-mingw-wildcard Set whether to expand wildcard on command-line. + Default to platform configuration --enable-leading-mingw64-underscores enable leading underscores on 64 bit mingw targets --enable-cld enable -mcld by default for 32bit x86 @@ -11944,6 +11947,21 @@ if test "${enable_secureplt+set}" = set; then : fi +# Check whether --enable-mingw-wildcard was given. +if test "${enable_mingw_wildcard+set}" = set; then : + enableval=$enable_mingw_wildcard; +else + enable_mingw_wildcard=platform +fi + +if test x"$enable_mingw_wildcard" != xplatform ; then : + +cat >>confdefs.h <<_ACEOF +#define MINGW_DOWILDCARD $(test x"$enable_mingw_wildcard" = xno; echo $?) +_ACEOF + +fi + # Check whether --enable-leading-mingw64-underscores was given. if test "${enable_leading_mingw64_underscores+set}" = set; then : enableval=$enable_leading_mingw64_underscores; @@ -18414,7 +18432,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 18417 "configure" +#line 18435 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -18520,7 +18538,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 18523 "configure" +#line 18541 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/gcc/configure.ac b/gcc/configure.ac index b73a807ed14b5aafa51570a2449d9ac6e3c1f446..a8c323b60cc3c8af808934b023fd1689e421cadf 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -1808,6 +1808,16 @@ AC_ARG_ENABLE(secureplt, [enable -msecure-plt by default for PowerPC])], [], []) +AC_ARG_ENABLE(mingw-wildcard, +[AS_HELP_STRING([--enable-mingw-wildcard], + [Set whether to expand wildcard on command-line. + Default to platform configuration])], +[],[enable_mingw_wildcard=platform]) +AS_IF([test x"$enable_mingw_wildcard" != xplatform ], + [AC_DEFINE_UNQUOTED(MINGW_DOWILDCARD, + $(test x"$enable_mingw_wildcard" = xno; echo $?), + [Value to set MinGW's _dowildcard to.])]) + AC_ARG_ENABLE(leading-mingw64-underscores, AS_HELP_STRING([--enable-leading-mingw64-underscores], [enable leading underscores on 64 bit mingw targets]), diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 4958773818bba3318a20e555e9f00ea1c9b116fc..365d587a5a0ec6dad5b0fc62a04f022fcb33c386 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -1688,6 +1688,18 @@ Using the GNU Compiler Collection (GCC)}, See ``i386 and x86-64 Options'' in the main manual @end ifhtml +@item --enable-mingw-wildcard +@itemx --disable-mingw-wildcard +The @option{--enable-mingw-wildcard} option enables Microsoft Windows-hosted +GCC to perform wildcard expansion of its arguments, irregardless of the default +configuration of MinGW runtime. Conversely, @option{--disable-mingw-wildcard} +option disables wildcard expansion. When none of these options is specified, +wildcard expansion will be decided according to the way the MinGW runtime was +configured. + +Note that this option only affects wildcard expansion for GCC itself. It does +not affect wildcard expansion of executables built by the resulting GCC. + @item --enable-win32-registry @itemx --enable-win32-registry=@var{key} @itemx --disable-win32-registry