diff mbox

[GCC/x86,mingw32] Add configure option to force wildcard behavior on Windows

Message ID 35f8542e-df08-62ac-da0e-824a974b96e6@foss.arm.com
State New
Headers show

Commit Message

Thomas Preudhomme Jan. 26, 2017, 1:04 p.m. UTC
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

Comments

Jonathan Yong Feb. 7, 2017, 8:47 a.m. UTC | #1
On 01/26/2017 01:04 PM, Thomas Preudhomme wrote:
> 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?
>>>

Looks good, be sure to emphasize this option affects mingw hosted GCC
only, not the compiler output.
Thomas Preudhomme Feb. 14, 2017, 9:32 a.m. UTC | #2
Hi Jonathan,

Sorry for the delay answering.

On 07/02/17 08:47, JonY wrote:
> On 01/26/2017 01:04 PM, Thomas Preudhomme wrote:
>> 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?
>>>>
>
> Looks good, be sure to emphasize this option affects mingw hosted GCC
> only, not the compiler output.

I think that should be pretty clear in the latest version of the patch, 
doc/install.texi contains:

"Note that this option only affects wildcard expansion for GCC itself.  It does
not affect wildcard expansion of executables built by the resulting GCC."

If you think a part of that sentence is still confusing please let me know and 
I'll improve it.

Best regards,

Thomas
Jonathan Yong Feb. 14, 2017, 10:42 a.m. UTC | #3
On 02/14/2017 09:32 AM, Thomas Preudhomme wrote:
>>
>> Looks good, be sure to emphasize this option affects mingw hosted GCC
>> only, not the compiler output.
> 
> I think that should be pretty clear in the latest version of the patch,
> doc/install.texi contains:
> 
> "Note that this option only affects wildcard expansion for GCC itself. 
> It does
> not affect wildcard expansion of executables built by the resulting GCC."
> 
> If you think a part of that sentence is still confusing please let me
> know and I'll improve it.
> 
> Best regards,
> 
> Thomas
> 

Yes, that should be good, no more objections.
Jonathan Yong Feb. 17, 2017, 10:52 a.m. UTC | #4
On 02/14/2017 10:42 AM, JonY wrote:
> On 02/14/2017 09:32 AM, Thomas Preudhomme wrote:
>>>
>>> Looks good, be sure to emphasize this option affects mingw hosted GCC
>>> only, not the compiler output.
>>
>> I think that should be pretty clear in the latest version of the patch,
>> doc/install.texi contains:
>>
>> "Note that this option only affects wildcard expansion for GCC itself. 
>> It does
>> not affect wildcard expansion of executables built by the resulting GCC."
>>
>> If you think a part of that sentence is still confusing please let me
>> know and I'll improve it.
>>
>> Best regards,
>>
>> Thomas
>>
> 
> Yes, that should be good, no more objections.
> 
> 

Before I forget, please also provide a changelog, thanks.
Thomas Preudhomme Feb. 17, 2017, 11:31 a.m. UTC | #5
Here you are:

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.

Must have forgotten to paste it.

On 17/02/17 10:52, JonY wrote:
> On 02/14/2017 10:42 AM, JonY wrote:
>> On 02/14/2017 09:32 AM, Thomas Preudhomme wrote:
>>>>
>>>> Looks good, be sure to emphasize this option affects mingw hosted GCC
>>>> only, not the compiler output.
>>>
>>> I think that should be pretty clear in the latest version of the patch,
>>> doc/install.texi contains:
>>>
>>> "Note that this option only affects wildcard expansion for GCC itself.
>>> It does
>>> not affect wildcard expansion of executables built by the resulting GCC."
>>>
>>> If you think a part of that sentence is still confusing please let me
>>> know and I'll improve it.
>>>
>>> Best regards,
>>>
>>> Thomas
>>>
>>
>> Yes, that should be good, no more objections.
>>
>>
>
> Before I forget, please also provide a changelog, thanks.
>
>
Jonathan Yong Feb. 17, 2017, 10:52 p.m. UTC | #6
On 02/17/2017 11:31 AM, Thomas Preudhomme wrote:
> Here you are:
> 
> 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.
> 
> Must have forgotten to paste it.

Thanks, I'll stage it locally until stage 1 opens.
Thomas Preudhomme Feb. 22, 2017, 4:06 p.m. UTC | #7
Oh great thanks!

Best regards,

Thomas

On 17/02/17 22:52, JonY wrote:
> On 02/17/2017 11:31 AM, Thomas Preudhomme wrote:
>> Here you are:
>>
>> 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.
>>
>> Must have forgotten to paste it.
>
> Thanks, I'll stage it locally until stage 1 opens.
>
>
>
Thomas Preudhomme March 2, 2017, 4:58 p.m. UTC | #8
On 27/02/17 05:48, NightStrike wrote:
>
>
> On Feb 22, 2017 10:06 AM, "Thomas Preudhomme" <thomas.preudhomme@foss.arm.com
> <mailto:thomas.preudhomme@foss.arm.com>> wrote:
>
>     Oh great thanks!
>
>     Best regards,
>
>     Thomas
>
>
>     On 17/02/17 22:52, JonY wrote:
>
>         On 02/17/2017 11:31 AM, Thomas Preudhomme wrote:
>
>             Here you are:
>
>             2017-01-24  Thomas Preud'homme  <thomas.preudhomme@arm.com
>             <mailto:thomas.preudhomme@arm.com>>
>
>                     * configure.ac <http://configure.ac>
>             (--enable-mingw-wildcard): Add new configurable
>             feature.
>                     * configure: Regenerate.
>                     * config.in <http://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.
>
>             Must have forgotten to paste it.
>
>
>         Thanks, I'll stage it locally until stage 1 opens.
>
>
> This should be mentioned in the "porting to" page when it eventually goes in, as
> it may be surprising behavior.
>

Will do once the file is created for gcc-8. Thanks for the suggestion

Best regards,

Thomas
diff mbox

Patch

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