git@vger.kernel.org list mirror (unofficial, one of many)
 help / color / mirror / code / Atom feed
* [PATCH] mingw: avoid fallback for {local,gm}time_r()
@ 2021-11-25  5:23 Carlo Marcelo Arenas Belón via GitGitGadget
  2021-11-26  6:28 ` Junio C Hamano
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Carlo Marcelo Arenas Belón via GitGitGadget @ 2021-11-25  5:23 UTC (permalink / raw)
  To: git; +Cc: Carlo Marcelo Arenas Belón, Carlo Marcelo Arenas Belón

From: =?UTF-8?q?Carlo=20Marcelo=20Arenas=20Bel=C3=B3n?= <carenas@gmail.com>

mingw-w64's pthread_unistd.h had a bug that mistakenly (because there is
no support for the *lockfile() functions required[1]) defined
_POSIX_THREAD_SAFE_FUNCTIONS and that was being worked around since
3ecd153a3b (compat/mingw: support MSys2-based MinGW build, 2016-01-14).

the bug was fixed in winphtreads, but as a sideeffect, leaves the
reentrant functions from time.h not longer visible and therefore breaks
the build.

since the intention all along was to avoid using the fallback functions,
formalize the use of POSIX by setting the corresponding feature flag and
to make the intention clearer compile out the fallback functions.

[1] https://unix.org/whitepapers/reentrant.html

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
---
    mingw: avoid fallback for {local,gm}time_r()
    
    This is a cherry-pick from git-for-windows/git@adf0cd8, that is needed
    to be able to build recent master with the Git for Windows SDK or recent
    MinGW64.
    
    It was discussed recently on list[1], and might need further
    adjustements if the 32-bit Git for Windows SDK also updates their
    winpthread headers, requiring a similar fix, but since without it a
    plain build from master wouldn't work in Windows I think it is worth
    reviewing on its own merits, and had withstood the test of time in the
    git for windows fork since it was originally merged there late August.
    
    [1] https://lore.kernel.org/git/20211005063936.588874-1-mh@glandium.org/

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1142%2Fcarenas%2Fwinbuild-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1142/carenas/winbuild-v1
Pull-Request: https://github.com/git/git/pull/1142

 compat/mingw.c    | 2 ++
 git-compat-util.h | 4 +++-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/compat/mingw.c b/compat/mingw.c
index 9e0cd1e097f..e14f2d5f77c 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -1083,6 +1083,7 @@ int pipe(int filedes[2])
 	return 0;
 }
 
+#ifndef __MINGW64__
 struct tm *gmtime_r(const time_t *timep, struct tm *result)
 {
 	if (gmtime_s(result, timep) == 0)
@@ -1096,6 +1097,7 @@ struct tm *localtime_r(const time_t *timep, struct tm *result)
 		return result;
 	return NULL;
 }
+#endif
 
 char *mingw_getcwd(char *pointer, int len)
 {
diff --git a/git-compat-util.h b/git-compat-util.h
index d70ce142861..c8005db3fb6 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -127,7 +127,9 @@
 /* Approximation of the length of the decimal representation of this type. */
 #define decimal_length(x)	((int)(sizeof(x) * 2.56 + 0.5) + 1)
 
-#if defined(__sun__)
+#ifdef __MINGW64__
+#define _POSIX_C_SOURCE 1
+#elif defined(__sun__)
  /*
   * On Solaris, when _XOPEN_EXTENDED is set, its header file
   * forces the programs to be XPG4v2, defeating any _XOPEN_SOURCE

base-commit: cd3e606211bb1cf8bc57f7d76bab98cc17a150bc
-- 
gitgitgadget

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] mingw: avoid fallback for {local,gm}time_r()
  2021-11-25  5:23 [PATCH] mingw: avoid fallback for {local,gm}time_r() Carlo Marcelo Arenas Belón via GitGitGadget
@ 2021-11-26  6:28 ` Junio C Hamano
  2021-11-26 13:55 ` Johannes Schindelin
  2021-11-27 10:15 ` [PATCH v2] " Carlo Marcelo Arenas Belón via GitGitGadget
  2 siblings, 0 replies; 5+ messages in thread
From: Junio C Hamano @ 2021-11-26  6:28 UTC (permalink / raw)
  To: Carlo Marcelo Arenas Belón via GitGitGadget
  Cc: git, Carlo Marcelo Arenas Belón

"Carlo Marcelo Arenas Belón via GitGitGadget"
<gitgitgadget@gmail.com> writes:

> From: =?UTF-8?q?Carlo=20Marcelo=20Arenas=20Bel=C3=B3n?= <carenas@gmail.com>
>
> mingw-w64's pthread_unistd.h had a bug that mistakenly (because there is
> no support for the *lockfile() functions required[1]) defined
> _POSIX_THREAD_SAFE_FUNCTIONS and that was being worked around since
> 3ecd153a3b (compat/mingw: support MSys2-based MinGW build, 2016-01-14).
>
> the bug was fixed in winphtreads, but as a sideeffect, leaves the

s/the/The/; s/sideeffect/side effect/;

> reentrant functions from time.h not longer visible and therefore breaks

s/not longer/no longer/

> the build.
>
> since the intention all along was to avoid using the fallback functions,

s/since/Since/;

> formalize the use of POSIX by setting the corresponding feature flag and
> to make the intention clearer compile out the fallback functions.

I cannot parse the last sentence.  I am guessing "... make the
intention clearer by compiling out..." or "... make the intention
clearer to compile out...", but I cannot quite tell.

> diff --git a/compat/mingw.c b/compat/mingw.c
> index 9e0cd1e097f..e14f2d5f77c 100644
> --- a/compat/mingw.c
> +++ b/compat/mingw.c
> @@ -1083,6 +1083,7 @@ int pipe(int filedes[2])
>  	return 0;
>  }
>  
> +#ifndef __MINGW64__
>  struct tm *gmtime_r(const time_t *timep, struct tm *result)
>  {
>  	if (gmtime_s(result, timep) == 0)
> @@ -1096,6 +1097,7 @@ struct tm *localtime_r(const time_t *timep, struct tm *result)
>  		return result;
>  	return NULL;
>  }
> +#endif
>  
>  char *mingw_getcwd(char *pointer, int len)
>  {
> diff --git a/git-compat-util.h b/git-compat-util.h
> index d70ce142861..c8005db3fb6 100644
> --- a/git-compat-util.h
> +++ b/git-compat-util.h
> @@ -127,7 +127,9 @@
>  /* Approximation of the length of the decimal representation of this type. */
>  #define decimal_length(x)	((int)(sizeof(x) * 2.56 + 0.5) + 1)
>  
> -#if defined(__sun__)
> +#ifdef __MINGW64__
> +#define _POSIX_C_SOURCE 1
> +#elif defined(__sun__)
>   /*
>    * On Solaris, when _XOPEN_EXTENDED is set, its header file
>    * forces the programs to be XPG4v2, defeating any _XOPEN_SOURCE
>
> base-commit: cd3e606211bb1cf8bc57f7d76bab98cc17a150bc

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] mingw: avoid fallback for {local,gm}time_r()
  2021-11-25  5:23 [PATCH] mingw: avoid fallback for {local,gm}time_r() Carlo Marcelo Arenas Belón via GitGitGadget
  2021-11-26  6:28 ` Junio C Hamano
@ 2021-11-26 13:55 ` Johannes Schindelin
  2021-11-27 10:15 ` [PATCH v2] " Carlo Marcelo Arenas Belón via GitGitGadget
  2 siblings, 0 replies; 5+ messages in thread
From: Johannes Schindelin @ 2021-11-26 13:55 UTC (permalink / raw)
  To: Carlo Marcelo Arenas Belón via GitGitGadget
  Cc: git, Carlo Marcelo Arenas Belón, Carlo Marcelo Arenas Belón

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

Hi Carlo,

On Thu, 25 Nov 2021, Carlo Marcelo Arenas Belón via GitGitGadget wrote:

> From: =?UTF-8?q?Carlo=20Marcelo=20Arenas=20Bel=C3=B3n?= <carenas@gmail.com>
>
> mingw-w64's pthread_unistd.h had a bug that mistakenly (because there is
> no support for the *lockfile() functions required[1]) defined
> _POSIX_THREAD_SAFE_FUNCTIONS and that was being worked around since
> 3ecd153a3b (compat/mingw: support MSys2-based MinGW build, 2016-01-14).
>
> the bug was fixed in winphtreads, but as a sideeffect, leaves the
> reentrant functions from time.h not longer visible and therefore breaks
> the build.
>
> since the intention all along was to avoid using the fallback functions,
> formalize the use of POSIX by setting the corresponding feature flag and
> to make the intention clearer compile out the fallback functions.
>
> [1] https://unix.org/whitepapers/reentrant.html
>
> Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>

Yep, this patch works well for Git for Windows already for a good while.

ACK,
Dscho

>     mingw: avoid fallback for {local,gm}time_r()
>
>     This is a cherry-pick from git-for-windows/git@adf0cd8, that is needed
>     to be able to build recent master with the Git for Windows SDK or recent
>     MinGW64.
>
>     It was discussed recently on list[1], and might need further
>     adjustements if the 32-bit Git for Windows SDK also updates their
>     winpthread headers, requiring a similar fix, but since without it a
>     plain build from master wouldn't work in Windows I think it is worth
>     reviewing on its own merits, and had withstood the test of time in the
>     git for windows fork since it was originally merged there late August.
>
>     [1] https://lore.kernel.org/git/20211005063936.588874-1-mh@glandium.org/
>
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1142%2Fcarenas%2Fwinbuild-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1142/carenas/winbuild-v1
> Pull-Request: https://github.com/git/git/pull/1142
>
>  compat/mingw.c    | 2 ++
>  git-compat-util.h | 4 +++-
>  2 files changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/compat/mingw.c b/compat/mingw.c
> index 9e0cd1e097f..e14f2d5f77c 100644
> --- a/compat/mingw.c
> +++ b/compat/mingw.c
> @@ -1083,6 +1083,7 @@ int pipe(int filedes[2])
>  	return 0;
>  }
>
> +#ifndef __MINGW64__
>  struct tm *gmtime_r(const time_t *timep, struct tm *result)
>  {
>  	if (gmtime_s(result, timep) == 0)
> @@ -1096,6 +1097,7 @@ struct tm *localtime_r(const time_t *timep, struct tm *result)
>  		return result;
>  	return NULL;
>  }
> +#endif
>
>  char *mingw_getcwd(char *pointer, int len)
>  {
> diff --git a/git-compat-util.h b/git-compat-util.h
> index d70ce142861..c8005db3fb6 100644
> --- a/git-compat-util.h
> +++ b/git-compat-util.h
> @@ -127,7 +127,9 @@
>  /* Approximation of the length of the decimal representation of this type. */
>  #define decimal_length(x)	((int)(sizeof(x) * 2.56 + 0.5) + 1)
>
> -#if defined(__sun__)
> +#ifdef __MINGW64__
> +#define _POSIX_C_SOURCE 1
> +#elif defined(__sun__)
>   /*
>    * On Solaris, when _XOPEN_EXTENDED is set, its header file
>    * forces the programs to be XPG4v2, defeating any _XOPEN_SOURCE
>
> base-commit: cd3e606211bb1cf8bc57f7d76bab98cc17a150bc
> --
> gitgitgadget
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2] mingw: avoid fallback for {local,gm}time_r()
  2021-11-25  5:23 [PATCH] mingw: avoid fallback for {local,gm}time_r() Carlo Marcelo Arenas Belón via GitGitGadget
  2021-11-26  6:28 ` Junio C Hamano
  2021-11-26 13:55 ` Johannes Schindelin
@ 2021-11-27 10:15 ` Carlo Marcelo Arenas Belón via GitGitGadget
  2021-11-29 17:30   ` Junio C Hamano
  2 siblings, 1 reply; 5+ messages in thread
From: Carlo Marcelo Arenas Belón via GitGitGadget @ 2021-11-27 10:15 UTC (permalink / raw)
  To: git
  Cc: Johannes Schindelin, Carlo Marcelo Arenas Belón,
	Carlo Marcelo Arenas Belón

From: =?UTF-8?q?Carlo=20Marcelo=20Arenas=20Bel=C3=B3n?= <carenas@gmail.com>

mingw-w64's pthread_unistd.h had a bug that mistakenly (because there is
no support for the *lockfile() functions required[1]) defined
_POSIX_THREAD_SAFE_FUNCTIONS and that was being worked around since
3ecd153a3b (compat/mingw: support MSys2-based MinGW build, 2016-01-14).

The bug was fixed in winphtreads, but as a side effect, leaves the
reentrant functions from time.h no longer visible and therefore breaks
the build.

Since the intention all along was to avoid using the fallback functions,
formalize the use of POSIX by setting the corresponding feature flag and
compile out the implementation for the fallback functions.

[1] https://unix.org/whitepapers/reentrant.html

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
---
    mingw: fix 64 bit build because of missing *time_r() function
    definitions
    
    This is a cherry-pick from git-for-windows/git#3398, that is needed to
    be able to build recent master with the Git for Windows SDK or recent
    MinGW64.
    
    It was discussed recently on list[1], and might need further
    adjustements if the 32-bit Git for Windows SDK also updates their
    winpthread headers, requiring a similar fix, but since without it a
    plain build from master wouldn't work in Windows I think it is worth
    reviewing on its own merits, and had withstood the test of time in the
    Git for Windows fork since it was originally merged there late August.
    
    Changes since v1:
    
     * Fixed grammar in the commit message (suggested by Junio)
     * Added ACK (proposed by dscho)
    
    [1] https://lore.kernel.org/git/20211005063936.588874-1-mh@glandium.org/

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1142%2Fcarenas%2Fwinbuild-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1142/carenas/winbuild-v2
Pull-Request: https://github.com/git/git/pull/1142

Range-diff vs v1:

 1:  363b644f801 ! 1:  c6b3fc5a16a mingw: avoid fallback for {local,gm}time_r()
     @@ Commit message
          _POSIX_THREAD_SAFE_FUNCTIONS and that was being worked around since
          3ecd153a3b (compat/mingw: support MSys2-based MinGW build, 2016-01-14).
      
     -    the bug was fixed in winphtreads, but as a sideeffect, leaves the
     -    reentrant functions from time.h not longer visible and therefore breaks
     +    The bug was fixed in winphtreads, but as a side effect, leaves the
     +    reentrant functions from time.h no longer visible and therefore breaks
          the build.
      
     -    since the intention all along was to avoid using the fallback functions,
     +    Since the intention all along was to avoid using the fallback functions,
          formalize the use of POSIX by setting the corresponding feature flag and
     -    to make the intention clearer compile out the fallback functions.
     +    compile out the implementation for the fallback functions.
      
          [1] https://unix.org/whitepapers/reentrant.html
      
          Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
     +    Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
      
       ## compat/mingw.c ##
      @@ compat/mingw.c: int pipe(int filedes[2])


 compat/mingw.c    | 2 ++
 git-compat-util.h | 4 +++-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/compat/mingw.c b/compat/mingw.c
index 9e0cd1e097f..e14f2d5f77c 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -1083,6 +1083,7 @@ int pipe(int filedes[2])
 	return 0;
 }
 
+#ifndef __MINGW64__
 struct tm *gmtime_r(const time_t *timep, struct tm *result)
 {
 	if (gmtime_s(result, timep) == 0)
@@ -1096,6 +1097,7 @@ struct tm *localtime_r(const time_t *timep, struct tm *result)
 		return result;
 	return NULL;
 }
+#endif
 
 char *mingw_getcwd(char *pointer, int len)
 {
diff --git a/git-compat-util.h b/git-compat-util.h
index d70ce142861..c8005db3fb6 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -127,7 +127,9 @@
 /* Approximation of the length of the decimal representation of this type. */
 #define decimal_length(x)	((int)(sizeof(x) * 2.56 + 0.5) + 1)
 
-#if defined(__sun__)
+#ifdef __MINGW64__
+#define _POSIX_C_SOURCE 1
+#elif defined(__sun__)
  /*
   * On Solaris, when _XOPEN_EXTENDED is set, its header file
   * forces the programs to be XPG4v2, defeating any _XOPEN_SOURCE

base-commit: cd3e606211bb1cf8bc57f7d76bab98cc17a150bc
-- 
gitgitgadget

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] mingw: avoid fallback for {local,gm}time_r()
  2021-11-27 10:15 ` [PATCH v2] " Carlo Marcelo Arenas Belón via GitGitGadget
@ 2021-11-29 17:30   ` Junio C Hamano
  0 siblings, 0 replies; 5+ messages in thread
From: Junio C Hamano @ 2021-11-29 17:30 UTC (permalink / raw)
  To: Carlo Marcelo Arenas Belón via GitGitGadget
  Cc: git, Johannes Schindelin, Carlo Marcelo Arenas Belón

"Carlo Marcelo Arenas Belón via GitGitGadget"
<gitgitgadget@gmail.com> writes:

> From: =?UTF-8?q?Carlo=20Marcelo=20Arenas=20Bel=C3=B3n?= <carenas@gmail.com>
>
> mingw-w64's pthread_unistd.h had a bug that mistakenly (because there is
> no support for the *lockfile() functions required[1]) defined
> _POSIX_THREAD_SAFE_FUNCTIONS and that was being worked around since
> 3ecd153a3b (compat/mingw: support MSys2-based MinGW build, 2016-01-14).
> ...
>     Changes since v1:
>     
>      * Fixed grammar in the commit message (suggested by Junio)
>      * Added ACK (proposed by dscho)

Thanks. Queued.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-11-29 17:32 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-25  5:23 [PATCH] mingw: avoid fallback for {local,gm}time_r() Carlo Marcelo Arenas Belón via GitGitGadget
2021-11-26  6:28 ` Junio C Hamano
2021-11-26 13:55 ` Johannes Schindelin
2021-11-27 10:15 ` [PATCH v2] " Carlo Marcelo Arenas Belón via GitGitGadget
2021-11-29 17:30   ` Junio C Hamano

Code repositories for project(s) associated with this inbox:

	https://80x24.org/mirrors/git.git

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).