public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Thomas Preudhomme <thomas.preudhomme@foss.arm.com>
To: JonY <10walls@gmail.com>,
	"gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH, GCC/x86 mingw32] Add configure option to force wildcard behavior on Windows
Date: Thu, 26 Jan 2017 13:19:00 -0000	[thread overview]
Message-ID: <35f8542e-df08-62ac-da0e-824a974b96e6@foss.arm.com> (raw)
In-Reply-To: <3c3cd900-7d38-a66d-d306-12c968d26f0b@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 2113 bytes --]

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  <thomas.preudhomme@arm.com>

         * 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

[-- Attachment #2: force_windows_wildcard_behavior.patch --]
[-- Type: text/x-patch, Size: 7053 bytes --]

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
+<http://www.gnu.org/licenses/>.  */
+
+#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

  parent reply	other threads:[~2017-01-26 13:05 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-18  9:49 Thomas Preudhomme
2017-01-19  2:05 ` JonY
2017-01-20  9:06   ` Thomas Preudhomme
2017-01-26 13:19   ` Thomas Preudhomme [this message]
2017-02-07  8:48     ` JonY
2017-02-14  9:46       ` Thomas Preudhomme
2017-02-14 10:58         ` JonY
2017-02-17 11:01           ` JonY
2017-02-17 11:51             ` Thomas Preudhomme
2017-02-17 23:05               ` JonY
2017-02-22 16:07                 ` Thomas Preudhomme
     [not found]                   ` <CAF1jjLtsw10najrRwzJ7MJSSKxqmX0Wy4gKyf=dhmcAebS+JOA@mail.gmail.com>
2017-03-02 16:58                     ` Thomas Preudhomme
2017-03-04 14:25                       ` [wwwdocs] gcc-8/porting_to.html (was: [PATCH, GCC/x86 mingw32] Add configure option to force wildcard behavior on Windows) Gerald Pfeifer
2017-03-09 10:51                         ` [wwwdocs] gcc-8/porting_to.html Thomas Preudhomme
2017-03-09 10:59                           ` Jakub Jelinek
2017-03-09 11:22                             ` Thomas Preudhomme
2017-03-09 13:16                               ` JonY
2017-03-12 14:08                           ` Gerald Pfeifer
2017-03-12 23:51                             ` JonY
2017-03-22 17:39                               ` Thomas Preudhomme
2017-03-22 22:51                                 ` JonY
2017-03-23  6:47                                 ` Gerald Pfeifer
2017-03-23 10:47                                   ` Thomas Preudhomme
2017-05-04 11:10                                     ` JonY
2017-05-04 14:37                                       ` Thomas Preudhomme
2017-05-04 14:43                                   ` Thomas Preudhomme
2017-05-04 15:17                 ` [arm-embedded] [PATCH, GCC/x86 mingw32] Add configure option to force wildcard behavior on Windows Thomas Preudhomme

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=35f8542e-df08-62ac-da0e-824a974b96e6@foss.arm.com \
    --to=thomas.preudhomme@foss.arm.com \
    --cc=10walls@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).