-
Notifications
You must be signed in to change notification settings - Fork 192
Upstream some more Git for Windows' patches #2195
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
fd594ff
47fc974
53f1fd5
ad96aed
d67201f
b49c42c
b00d242
9de4ea7
60a2999
1dd6ac9
d44d05c
679d1fd
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -465,14 +465,8 @@ ifeq ($(uname_S),Windows) | |
| GIT_VERSION := $(GIT_VERSION).MSVC | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Junio C Hamano wrote on the Git mailing list (how to reply to this email): "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
writes:
> - ifeq (CLANGARM64,$(MSYSTEM))
> - prefix = /clangarm64
> - else
> - prefix = /mingw64
> - endif
> + ifneq (,$(MSYSTEM))
> + prefix = $(MINGW_PREFIX)
> endif
Mental note: if $(MSYSTEM) is not an empty string, we set prefix to
$(MINGW_PREFIX).
> @@ -755,6 +749,10 @@ ifeq ($(uname_S),MINGW)
> BASIC_LDFLAGS += -Wl,--dynamicbase
> endif
> ifneq (,$(MSYSTEM))
> + ifeq ($(MINGW_PREFIX),$(filter-out /%,$(MINGW_PREFIX)))
> + # Override if empty or does not start with a slash
> + MINGW_PREFIX := /$(shell echo '$(MSYSTEM)' | tr A-Z a-z)
> + endif
Mental note: MINGW_PREFIX that does not begin with a slash is forced
to begin with a slash.
> prefix = $(MINGW_PREFIX)
And that becomes $(prefix).
> diff --git a/meson.build b/meson.build
> index 7073d5844d..6ddc461873 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1318,7 +1318,6 @@ elif host_machine.system() == 'windows'
>
> libgit_c_args += [
> '-DDETECT_MSYS_TTY',
> - '-DENSURE_MSYSTEM_IS_SET',
> '-DNATIVE_CRLF',
> '-DNOGDI',
> '-DNO_POSIX_GOODIES',
> @@ -1328,6 +1327,18 @@ elif host_machine.system() == 'windows'
> '-D__USE_MINGW_ANSI_STDIO=0',
> ]
>
> + msystem = get_option('msystem')
> + if msystem != ''
> + mingw_prefix = get_option('mingw_prefix')
> + if mingw_prefix == ''
> + mingw_prefix = '/' + msystem.to_lower()
> + endif
> + libgit_c_args += [
> + '-DENSURE_MSYSTEM_IS_SET="' + msystem + '"',
> + '-DMINGW_PREFIX="' + mingw_prefix + '"'
> + ]
> + endif
Lowercase mingw_prefix in Meson world corresponds to MINGW_PREFIX in
Make world, I guess. -DMINGW_PRFIX gets mingw_prefix which begins
with a slash.
I do not do Windows or Meson, but doesn't this contradict with what
we have in [12/12], part of which says:
diff --git a/config.mak.uname b/config.mak.uname
index 2f7d445eb3..0b63be10b7 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -535,7 +535,9 @@ endif
compat/win32/pthread.o compat/win32/syslog.o \
compat/win32/trace2_win32_process_info.o \
compat/win32/dirent.o
- COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY -DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
+ COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY \
+ -DENSURE_MSYSTEM_IS_SET="\"$(MSYSTEM)\"" -DMINGW_PREFIX="\"$(patsubst /%,%,$(MINGW_PREFIX))\"" \
+ -DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -ENTRY:wmainCRTStartup -SUBSYSTEM:CONSOLE
# invalidcontinue.obj allows Git's source code to close the same file
# handle twice, or to access the osfhandle of an already-closed stdout
IOW, -DMINGW_PREFIX passed to the compiler strips leading slash from
$(MINGW_PREFIX).
Isn't it necessary to strip the leading slash from ming_prefix also
on the Meson side?There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Johannes Schindelin wrote on the Git mailing list (how to reply to this email): Hi Junio,
On Wed, 5 Aug 2026, Junio C Hamano wrote:
> "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
> writes:
> [...]
> > diff --git a/meson.build b/meson.build
> > index 7073d5844d..6ddc461873 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -1318,7 +1318,6 @@ elif host_machine.system() == 'windows'
> >
> > libgit_c_args += [
> > '-DDETECT_MSYS_TTY',
> > - '-DENSURE_MSYSTEM_IS_SET',
> > '-DNATIVE_CRLF',
> > '-DNOGDI',
> > '-DNO_POSIX_GOODIES',
> > @@ -1328,6 +1327,18 @@ elif host_machine.system() == 'windows'
> > '-D__USE_MINGW_ANSI_STDIO=0',
> > ]
> >
> > + msystem = get_option('msystem')
> > + if msystem != ''
> > + mingw_prefix = get_option('mingw_prefix')
> > + if mingw_prefix == ''
> > + mingw_prefix = '/' + msystem.to_lower()
> > + endif
> > + libgit_c_args += [
> > + '-DENSURE_MSYSTEM_IS_SET="' + msystem + '"',
> > + '-DMINGW_PREFIX="' + mingw_prefix + '"'
> > + ]
> > + endif
>
> Lowercase mingw_prefix in Meson world corresponds to MINGW_PREFIX in
> Make world, I guess. -DMINGW_PRFIX gets mingw_prefix which begins
> with a slash.
>
> I do not do Windows or Meson, but doesn't this contradict with what
> we have in [12/12], part of which says:
>
> diff --git a/config.mak.uname b/config.mak.uname
> index 2f7d445eb3..0b63be10b7 100644
> --- a/config.mak.uname
> +++ b/config.mak.uname
> @@ -535,7 +535,9 @@ endif
> compat/win32/pthread.o compat/win32/syslog.o \
> compat/win32/trace2_win32_process_info.o \
> compat/win32/dirent.o
> - COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY -DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
> + COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY \
> + -DENSURE_MSYSTEM_IS_SET="\"$(MSYSTEM)\"" -DMINGW_PREFIX="\"$(patsubst /%,%,$(MINGW_PREFIX))\"" \
> + -DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
> BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -ENTRY:wmainCRTStartup -SUBSYSTEM:CONSOLE
> # invalidcontinue.obj allows Git's source code to close the same file
> # handle twice, or to access the osfhandle of an already-closed stdout
>
>
> IOW, -DMINGW_PREFIX passed to the compiler strips leading slash from
> $(MINGW_PREFIX).
>
> Isn't it necessary to strip the leading slash from ming_prefix also
> on the Meson side?
Correct. Since Git for Windows does not use Meson to build the project,
and since the Visual C-based builds (including CI's `windows-meson-build`)
do not use `MSYSTEM`, this was not caught earlier. The next iteration will
have the fix.
Ciao,
Johannes |
||
| pathsep = ; | ||
| # Assume that this is built in Git for Windows' SDK | ||
| ifeq (MINGW32,$(MSYSTEM)) | ||
| prefix = /mingw32 | ||
| else | ||
| ifeq (CLANGARM64,$(MSYSTEM)) | ||
| prefix = /clangarm64 | ||
| else | ||
| prefix = /mingw64 | ||
| endif | ||
| ifneq (,$(MSYSTEM)) | ||
| prefix = $(MINGW_PREFIX) | ||
| endif | ||
| # Prepend MSVC 64-bit tool-chain to PATH. | ||
| # | ||
|
|
@@ -524,7 +518,8 @@ ifeq ($(uname_S),Windows) | |
| NO_POSIX_GOODIES = UnfortunatelyYes | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Junio C Hamano wrote on the Git mailing list (how to reply to this email): "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
writes:
> The "dashed form" has been officially deprecated in Git version 1.5.4,
> which was released on February 2nd, 2008, i.e. a very long time ago.
> This deprecation was never finalized by skipping these hard-links, but
> we can start the process now, in Git for Windows.
Good. Perhaps somebody (you do not have to volunteer) can champion
their removal from everywhere at Git 3.0 version boundary?
Thanks. |
||
| NATIVE_CRLF = YesPlease | ||
| DEFAULT_HELP_FORMAT = html | ||
| ifeq (/mingw64,$(subst 32,64,$(subst clangarm,mingw,$(prefix)))) | ||
| SKIP_DASHED_BUILT_INS = YabbaDabbaDoo | ||
| ifneq (,$(MINGW_PREFIX)) | ||
| # Move system config into top-level /etc/ | ||
| ETC_GITCONFIG = ../etc/gitconfig | ||
| ETC_GITATTRIBUTES = ../etc/gitattributes | ||
|
|
@@ -540,7 +535,9 @@ endif | |
| compat/win32/pthread.o compat/win32/syslog.o \ | ||
| compat/win32/trace2_win32_process_info.o \ | ||
| compat/win32/dirent.o | ||
| COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY -DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\" | ||
| COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY \ | ||
| -DENSURE_MSYSTEM_IS_SET="\"$(MSYSTEM)\"" -DMINGW_PREFIX="\"$(patsubst /%,%,$(MINGW_PREFIX))\"" \ | ||
| -DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\" | ||
| BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -ENTRY:wmainCRTStartup -SUBSYSTEM:CONSOLE | ||
| # invalidcontinue.obj allows Git's source code to close the same file | ||
| # handle twice, or to access the osfhandle of an already-closed stdout | ||
|
|
@@ -716,6 +713,7 @@ ifeq ($(uname_S),MINGW) | |
| FSMONITOR_DAEMON_BACKEND = win32 | ||
| FSMONITOR_OS_SETTINGS = win32 | ||
|
|
||
| SKIP_DASHED_BUILT_INS = YabbaDabbaDoo | ||
| RUNTIME_PREFIX = YesPlease | ||
| HAVE_WPGMPTR = YesWeDo | ||
| NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease | ||
|
|
@@ -754,38 +752,33 @@ ifeq ($(uname_S),MINGW) | |
| ifneq (,$(findstring -O,$(filter-out -O0 -Og,$(CFLAGS)))) | ||
| BASIC_LDFLAGS += -Wl,--dynamicbase | ||
| endif | ||
| ifeq (MINGW32,$(MSYSTEM)) | ||
| prefix = /mingw32 | ||
| HOST_CPU = i686 | ||
| BASIC_LDFLAGS += -Wl,--pic-executable,-e,_mainCRTStartup | ||
| endif | ||
| ifeq (MINGW64,$(MSYSTEM)) | ||
| prefix = /mingw64 | ||
| HOST_CPU = x86_64 | ||
| BASIC_LDFLAGS += -Wl,--pic-executable,-e,mainCRTStartup | ||
| else ifeq (CLANGARM64,$(MSYSTEM)) | ||
| prefix = /clangarm64 | ||
| HOST_CPU = aarch64 | ||
| BASIC_LDFLAGS += -Wl,--pic-executable,-e,mainCRTStartup | ||
| else | ||
| COMPAT_CFLAGS += -D_USE_32BIT_TIME_T | ||
| BASIC_LDFLAGS += -Wl,--large-address-aware | ||
| ifneq (,$(MSYSTEM)) | ||
| ifeq ($(MINGW_PREFIX),$(filter-out /%,$(MINGW_PREFIX))) | ||
| # Override if empty or does not start with a slash | ||
| MINGW_PREFIX := /$(shell echo '$(MSYSTEM)' | tr A-Z a-z) | ||
| endif | ||
| prefix = $(MINGW_PREFIX) | ||
| HOST_CPU = $(patsubst %-w64-mingw32,%,$(MINGW_CHOST)) | ||
| BASIC_LDFLAGS += -Wl,--pic-executable | ||
| COMPAT_CFLAGS += -DDETECT_MSYS_TTY \ | ||
| -DENSURE_MSYSTEM_IS_SET="\"$(MSYSTEM)\"" \ | ||
| -DMINGW_PREFIX="\"$(patsubst /%,%,$(MINGW_PREFIX))\"" | ||
| ifeq (MINGW32,$(MSYSTEM)) | ||
| BASIC_LDFLAGS += -Wl,--large-address-aware | ||
| endif | ||
| # Move system config into top-level /etc/ | ||
| ETC_GITCONFIG = ../etc/gitconfig | ||
| ETC_GITATTRIBUTES = ../etc/gitattributes | ||
| endif | ||
| CC = gcc | ||
| COMPAT_CFLAGS += -D__USE_MINGW_ANSI_STDIO=0 -DDETECT_MSYS_TTY \ | ||
| -fstack-protector-strong | ||
| COMPAT_CFLAGS += -D__USE_MINGW_ANSI_STDIO=0 -fstack-protector-strong | ||
| EXTLIBS += -lntdll | ||
| EXTRA_PROGRAMS += headless-git$X | ||
| INSTALL = /bin/install | ||
| INTERNAL_QSORT = YesPlease | ||
| HAVE_LIBCHARSET_H = YesPlease | ||
| USE_GETTEXT_SCHEME = fallthrough | ||
| USE_LIBPCRE = YesPlease | ||
| ifeq (/mingw64,$(subst 32,64,$(subst clangarm,mingw,$(prefix)))) | ||
| # Move system config into top-level /etc/ | ||
| ETC_GITCONFIG = ../etc/gitconfig | ||
| ETC_GITATTRIBUTES = ../etc/gitattributes | ||
| endif | ||
| NO_PYTHON = | ||
| endif | ||
| ifeq ($(uname_S),QNX) | ||
| COMPAT_CFLAGS += -DSA_RESTART=0 | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Junio C Hamano wrote on the Git mailing list (how to reply to this email):