Patchwork Building on Windows with mingw

login
register
about
Submitter Antonio Ospite
Date 2018-02-27 22:13:58
Message ID <20180227231358.0fbc9f9d3a544f01133c0195@ao2.it>
Download mbox | patch
Permalink /patch/4522/
State New
Headers show

Comments

Antonio Ospite - 2018-02-27 22:13:58
On Tue, 27 Feb 2018 20:12:20 +0100
Márton Miklós <martonmiklosqdev@gmail.com> wrote:

[...]
> Hey Antonio,
> 
> Thank you very much for your email, it solves one part of the problem on 
> Windows.
> Now I got the following warnings:
> 
> dummyflasher.c: In function 'dummy_init':
> dummyflasher.c:379:12: warning: unknown conversion type character 'j' in 
> format [-Wformat=]
>     msg_pdbg("Found persistent image %s, %jd B ",
>              ^
> flash.h:350:49: note: in definition of macro 'msg_pdbg'
>   #define msg_pdbg(...) print(FLASHROM_MSG_DEBUG, __VA_ARGS__) /* 
> programmer debug */
>                                                   ^~~~~~~~~~~
> dummyflasher.c:379:12: warning: too many arguments for format 
> [-Wformat-extra-args]
>     msg_pdbg("Found persistent image %s, %jd B ",
>              ^
> 

This is one of the possible warnings I was talking about, and it
derives from the very fact that __MINGW_PRINTF_FORMAT is not defined in
your installation, and the default "printf" format is not enough.

The proper solution would be to get a MinGW version which defines
__MINGW_PRINTF_FORMAT, I see that it has been added "only" in 2012 :)
https://sourceforge.net/p/mingw-w64/mingw-w64/ci/77bc5d6103b5fb9f59fbddab1583e69549913312/

Anyways, one possible workaround to support older MinGW versions would
be to use "gnu_printf" directly as a printf format, like this:




This should be OK because the define is only applied when using MinGW.                                           

JFYI I decided for a less backward compatible solution in the other
project:
https://git.ao2.it/libam7xxx.git/commitdiff/bbebd199987581ee6f344c89bfb02237dc0ab0bd

Ciao,
   Antonio
Márton Miklós - 2018-02-28 19:31:13
> diff --git a/flash.h b/flash.h
> index a80a9c2..40a7f1a 100644
> --- a/flash.h
> +++ b/flash.h
> @@ -360,6 +360,9 @@ int flashrom_print_cb(enum flashrom_log_level level, const char *fmt, va_list ap
>   /* Let gcc and clang check for correct printf-style format strings. */
>   int print(enum flashrom_log_level level, const char *fmt, ...)
>   #ifdef __MINGW32__
> +#  ifndef __MINGW_PRINTF_FORMAT
> +#    define __MINGW_PRINTF_FORMAT gnu_printf
> +#  endif
>   __attribute__((format(__MINGW_PRINTF_FORMAT, 2, 3)));
>   #else
>   __attribute__((format(printf, 2, 3)));
>
>
> This should be OK because the define is only applied when using MinGW.
>
> JFYI I decided for a less backward compatible solution in the other
> project:
> https://git.ao2.it/libam7xxx.git/commitdiff/bbebd199987581ee6f344c89bfb02237dc0ab0bd
>
> Ciao,
>     Antonio
This method compiles without warnings. Thank you very much!
Are you planning to submit a patch to flashrom, or should we handle that?

Best regards,
Miklos Marton
Antonio Ospite - 2018-02-28 21:19:44
On Wed, 28 Feb 2018 20:31:13 +0100
Miklos Marton <martonmiklosqdev@gmail.com> wrote:

> > diff --git a/flash.h b/flash.h
> > index a80a9c2..40a7f1a 100644
> > --- a/flash.h
> > +++ b/flash.h
> > @@ -360,6 +360,9 @@ int flashrom_print_cb(enum flashrom_log_level level, const char *fmt, va_list ap
> >   /* Let gcc and clang check for correct printf-style format strings. */
> >   int print(enum flashrom_log_level level, const char *fmt, ...)
> >   #ifdef __MINGW32__
> > +#  ifndef __MINGW_PRINTF_FORMAT
> > +#    define __MINGW_PRINTF_FORMAT gnu_printf
> > +#  endif
> >   __attribute__((format(__MINGW_PRINTF_FORMAT, 2, 3)));
> >   #else
> >   __attribute__((format(printf, 2, 3)));
> >
> >
> > This should be OK because the define is only applied when using MinGW.
> >
[...]

> This method compiles without warnings. Thank you very much!
> Are you planning to submit a patch to flashrom, or should we handle that?
> 

I can do it during the week-end.

Ciao,
   Antonio

Patch

diff --git a/flash.h b/flash.h
index a80a9c2..40a7f1a 100644
--- a/flash.h
+++ b/flash.h
@@ -360,6 +360,9 @@  int flashrom_print_cb(enum flashrom_log_level level, const char *fmt, va_list ap
 /* Let gcc and clang check for correct printf-style format strings. */
 int print(enum flashrom_log_level level, const char *fmt, ...)
 #ifdef __MINGW32__
+#  ifndef __MINGW_PRINTF_FORMAT
+#    define __MINGW_PRINTF_FORMAT gnu_printf
+#  endif
 __attribute__((format(__MINGW_PRINTF_FORMAT, 2, 3)));
 #else
 __attribute__((format(printf, 2, 3)));