fsmonitor-settings: NTFS and FAT32 on MacOS are incompatible
[alt-git.git] / config.mak.uname
blobcf911d141f29f3c5242088ce907dbc215117e9af
1 # Platform specific Makefile tweaks based on uname detection
3 # Define NO_SAFESEH if you need MSVC/Visual Studio to ignore the lack of
4 # Microsoft's Safe Exception Handling in libraries (such as zlib).
5 # Typically required for VS2013+/32-bit compilation on Vista+ versions.
7 uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
8 uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not')
9 uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not')
10 uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not')
11 uname_P := $(shell sh -c 'uname -p 2>/dev/null || echo not')
12 uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not')
14 ifneq ($(findstring MINGW,$(uname_S)),)
15         uname_S := MINGW
16 endif
18 ifdef MSVC
19         # avoid the MingW and Cygwin configuration sections
20         uname_S := Windows
21         uname_O := Windows
23         # Generate and include makefile variables that point to the
24         # currently installed set of MSVC command line tools.
25 compat/vcbuild/MSVC-DEFS-GEN: compat/vcbuild/find_vs_env.bat
26         @"$<" | tr '\\' / >"$@"
27 include compat/vcbuild/MSVC-DEFS-GEN
29         # See if vcpkg and the vcpkg-build versions of the third-party
30         # libraries that we use are installed.  We include the result
31         # to get $(vcpkg_*) variables defined for the Makefile.
32 ifeq (,$(SKIP_VCPKG))
33 compat/vcbuild/VCPKG-DEFS: compat/vcbuild/vcpkg_install.bat
34         @"$<"
35 include compat/vcbuild/VCPKG-DEFS
36 endif
37 endif
39 # We choose to avoid "if .. else if .. else .. endif endif"
40 # because maintaining the nesting to match is a pain.  If
41 # we had "elif" things would have been much nicer...
43 ifeq ($(uname_S),OSF1)
44         # Need this for u_short definitions et al
45         BASIC_CFLAGS += -D_OSF_SOURCE
46         SOCKLEN_T = int
47         NO_STRTOULL = YesPlease
48         NO_NSEC = YesPlease
49 endif
50 ifeq ($(uname_S),Linux)
51         HAVE_ALLOCA_H = YesPlease
52         NO_STRLCPY = YesPlease
53         HAVE_PATHS_H = YesPlease
54         LIBC_CONTAINS_LIBINTL = YesPlease
55         HAVE_DEV_TTY = YesPlease
56         HAVE_CLOCK_GETTIME = YesPlease
57         HAVE_CLOCK_MONOTONIC = YesPlease
58         # -lrt is needed for clock_gettime on glibc <= 2.16
59         NEEDS_LIBRT = YesPlease
60         HAVE_GETDELIM = YesPlease
61         FREAD_READS_DIRECTORIES = UnfortunatelyYes
62         BASIC_CFLAGS += -DHAVE_SYSINFO
63         PROCFS_EXECUTABLE_PATH = /proc/self/exe
64         HAVE_PLATFORM_PROCINFO = YesPlease
65         COMPAT_OBJS += compat/linux/procinfo.o
66         # centos7/rhel7 provides gcc 4.8.5 and zlib 1.2.7.
67         ifneq ($(findstring .el7.,$(uname_R)),)
68                 BASIC_CFLAGS += -std=c99
69         endif
70 endif
71 ifeq ($(uname_S),GNU/kFreeBSD)
72         HAVE_ALLOCA_H = YesPlease
73         NO_STRLCPY = YesPlease
74         HAVE_PATHS_H = YesPlease
75         DIR_HAS_BSD_GROUP_SEMANTICS = YesPlease
76         LIBC_CONTAINS_LIBINTL = YesPlease
77         FREAD_READS_DIRECTORIES = UnfortunatelyYes
78 endif
79 ifeq ($(uname_S),UnixWare)
80         CC = cc
81         NEEDS_SOCKET = YesPlease
82         NEEDS_NSL = YesPlease
83         NEEDS_SSL_WITH_CRYPTO = YesPlease
84         NEEDS_LIBICONV = YesPlease
85         SHELL_PATH = /usr/local/bin/bash
86         NO_IPV6 = YesPlease
87         NO_HSTRERROR = YesPlease
88         BASIC_CFLAGS += -Kthread
89         BASIC_CFLAGS += -I/usr/local/include
90         BASIC_LDFLAGS += -L/usr/local/lib
91         INSTALL = ginstall
92         TAR = gtar
93         NO_STRCASESTR = YesPlease
94         NO_MEMMEM = YesPlease
95 endif
96 ifeq ($(uname_S),SCO_SV)
97         ifeq ($(uname_R),3.2)
98                 CFLAGS = -O2
99         endif
100         ifeq ($(uname_R),5)
101                 CC = cc
102                 BASIC_CFLAGS += -Kthread
103         endif
104         NEEDS_SOCKET = YesPlease
105         NEEDS_NSL = YesPlease
106         NEEDS_SSL_WITH_CRYPTO = YesPlease
107         NEEDS_LIBICONV = YesPlease
108         SHELL_PATH = /usr/bin/bash
109         NO_IPV6 = YesPlease
110         NO_HSTRERROR = YesPlease
111         BASIC_CFLAGS += -I/usr/local/include
112         BASIC_LDFLAGS += -L/usr/local/lib
113         NO_STRCASESTR = YesPlease
114         NO_MEMMEM = YesPlease
115         INSTALL = ginstall
116         TAR = gtar
117 endif
118 ifeq ($(uname_S),Darwin)
119         NEEDS_CRYPTO_WITH_SSL = YesPlease
120         NEEDS_SSL_WITH_CRYPTO = YesPlease
121         NEEDS_LIBICONV = YesPlease
122         # Note: $(uname_R) gives us the underlying Darwin version.
123         # - MacOS 10.0.* and MacOS 10.1.0 = Darwin 1.*
124         # - MacOS 10.x.* = Darwin (x+4).* for (1 <= x)
125         # i.e. "begins with [15678] and a dot" means "10.4.* or older".
126         ifeq ($(shell expr "$(uname_R)" : '[15678]\.'),2)
127                 OLD_ICONV = UnfortunatelyYes
128                 NO_APPLE_COMMON_CRYPTO = YesPlease
129         endif
130         ifeq ($(shell expr "$(uname_R)" : '[15]\.'),2)
131                 NO_STRLCPY = YesPlease
132         endif
133         ifeq ($(shell test "`expr "$(uname_R)" : '\([0-9][0-9]*\)\.'`" -ge 11 && echo 1),1)
134                 HAVE_GETDELIM = YesPlease
135         endif
136         ifeq ($(shell test "`expr "$(uname_R)" : '\([0-9][0-9]*\)\.'`" -ge 20 && echo 1),1)
137                 OPEN_RETURNS_EINTR = UnfortunatelyYes
138         endif
139         NO_MEMMEM = YesPlease
140         USE_ST_TIMESPEC = YesPlease
141         HAVE_DEV_TTY = YesPlease
142         COMPAT_OBJS += compat/precompose_utf8.o
143         BASIC_CFLAGS += -DPRECOMPOSE_UNICODE
144         BASIC_CFLAGS += -DPROTECT_HFS_DEFAULT=1
145         HAVE_BSD_SYSCTL = YesPlease
146         FREAD_READS_DIRECTORIES = UnfortunatelyYes
147         HAVE_NS_GET_EXECUTABLE_PATH = YesPlease
148         CSPRNG_METHOD = arc4random
150         # Workaround for `gettext` being keg-only and not even being linked via
151         # `brew link --force gettext`, should be obsolete as of
152         # https://github.com/Homebrew/homebrew-core/pull/53489
153         ifeq ($(shell test -d /usr/local/opt/gettext/ && echo y),y)
154                 BASIC_CFLAGS += -I/usr/local/include -I/usr/local/opt/gettext/include
155                 BASIC_LDFLAGS += -L/usr/local/lib -L/usr/local/opt/gettext/lib
156                 ifeq ($(shell test -x /usr/local/opt/gettext/bin/msgfmt && echo y),y)
157                         MSGFMT = /usr/local/opt/gettext/bin/msgfmt
158                 endif
159         endif
161         # The builtin FSMonitor on MacOS builds upon Simple-IPC.  Both require
162         # Unix domain sockets and PThreads.
163         ifndef NO_PTHREADS
164         ifndef NO_UNIX_SOCKETS
165         FSMONITOR_DAEMON_BACKEND = darwin
166         FSMONITOR_OS_SETTINGS = darwin
167         endif
168         endif
170         BASIC_LDFLAGS += -framework CoreServices
171 endif
172 ifeq ($(uname_S),SunOS)
173         NEEDS_SOCKET = YesPlease
174         NEEDS_NSL = YesPlease
175         SHELL_PATH = /bin/bash
176         SANE_TOOL_PATH = /usr/xpg6/bin:/usr/xpg4/bin
177         HAVE_ALLOCA_H = YesPlease
178         NO_STRCASESTR = YesPlease
179         NO_MEMMEM = YesPlease
180         NO_MKDTEMP = YesPlease
181         NO_REGEX = YesPlease
182         NO_MSGFMT_EXTENDED_OPTIONS = YesPlease
183         HAVE_DEV_TTY = YesPlease
184         ifeq ($(uname_R),5.6)
185                 SOCKLEN_T = int
186                 NO_HSTRERROR = YesPlease
187                 NO_IPV6 = YesPlease
188                 NO_SOCKADDR_STORAGE = YesPlease
189                 NO_UNSETENV = YesPlease
190                 NO_SETENV = YesPlease
191                 NO_STRLCPY = YesPlease
192                 NO_STRTOUMAX = YesPlease
193                 GIT_TEST_CMP = cmp
194         endif
195         ifeq ($(uname_R),5.7)
196                 NEEDS_RESOLV = YesPlease
197                 NO_IPV6 = YesPlease
198                 NO_SOCKADDR_STORAGE = YesPlease
199                 NO_UNSETENV = YesPlease
200                 NO_SETENV = YesPlease
201                 NO_STRLCPY = YesPlease
202                 NO_STRTOUMAX = YesPlease
203                 GIT_TEST_CMP = cmp
204         endif
205         ifeq ($(uname_R),5.8)
206                 NO_UNSETENV = YesPlease
207                 NO_SETENV = YesPlease
208                 NO_STRTOUMAX = YesPlease
209                 GIT_TEST_CMP = cmp
210         endif
211         ifeq ($(uname_R),5.9)
212                 NO_UNSETENV = YesPlease
213                 NO_SETENV = YesPlease
214                 NO_STRTOUMAX = YesPlease
215                 GIT_TEST_CMP = cmp
216         endif
217         INSTALL = /usr/ucb/install
218         TAR = gtar
219         BASIC_CFLAGS += -D__EXTENSIONS__ -D__sun__
220 endif
221 ifeq ($(uname_O),Cygwin)
222         ifeq ($(shell expr "$(uname_R)" : '1\.[1-6]\.'),4)
223                 NO_D_TYPE_IN_DIRENT = YesPlease
224                 NO_STRCASESTR = YesPlease
225                 NO_MEMMEM = YesPlease
226                 NO_SYMLINK_HEAD = YesPlease
227                 NO_IPV6 = YesPlease
228                 OLD_ICONV = UnfortunatelyYes
229                 # There are conflicting reports about this.
230                 # On some boxes NO_MMAP is needed, and not so elsewhere.
231                 # Try commenting this out if you suspect MMAP is more efficient
232                 NO_MMAP = YesPlease
233         else
234                 NO_REGEX = UnfortunatelyYes
235         endif
236         HAVE_ALLOCA_H = YesPlease
237         NEEDS_LIBICONV = YesPlease
238         NO_FAST_WORKING_DIRECTORY = UnfortunatelyYes
239         NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
240         X = .exe
241         UNRELIABLE_FSTAT = UnfortunatelyYes
242         OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
243         MMAP_PREVENTS_DELETE = UnfortunatelyYes
244         COMPAT_OBJS += compat/win32/path-utils.o
245         FREAD_READS_DIRECTORIES = UnfortunatelyYes
246 endif
247 ifeq ($(uname_S),FreeBSD)
248         NEEDS_LIBICONV = YesPlease
249         # Versions up to 10.1 require OLD_ICONV; 10.2 and beyond don't.
250         # A typical version string looks like "10.2-RELEASE".
251         ifeq ($(shell expr "$(uname_R)" : '[1-9]\.'),2)
252                 OLD_ICONV = YesPlease
253         endif
254         ifeq ($(firstword $(subst -, ,$(uname_R))),10.0)
255                 OLD_ICONV = YesPlease
256         endif
257         ifeq ($(firstword $(subst -, ,$(uname_R))),10.1)
258                 OLD_ICONV = YesPlease
259         endif
260         NO_MEMMEM = YesPlease
261         BASIC_CFLAGS += -I/usr/local/include
262         BASIC_LDFLAGS += -L/usr/local/lib
263         DIR_HAS_BSD_GROUP_SEMANTICS = YesPlease
264         USE_ST_TIMESPEC = YesPlease
265         ifeq ($(shell expr "$(uname_R)" : '4\.'),2)
266                 PTHREAD_LIBS = -pthread
267                 NO_UINTMAX_T = YesPlease
268                 NO_STRTOUMAX = YesPlease
269         endif
270         PYTHON_PATH = /usr/local/bin/python
271         PERL_PATH = /usr/local/bin/perl
272         HAVE_PATHS_H = YesPlease
273         HAVE_BSD_SYSCTL = YesPlease
274         HAVE_BSD_KERN_PROC_SYSCTL = YesPlease
275         CSPRNG_METHOD = arc4random
276         PAGER_ENV = LESS=FRX LV=-c MORE=FRX
277         FREAD_READS_DIRECTORIES = UnfortunatelyYes
278         FILENO_IS_A_MACRO = UnfortunatelyYes
279 endif
280 ifeq ($(uname_S),OpenBSD)
281         NO_STRCASESTR = YesPlease
282         NO_MEMMEM = YesPlease
283         USE_ST_TIMESPEC = YesPlease
284         NEEDS_LIBICONV = YesPlease
285         BASIC_CFLAGS += -I/usr/local/include
286         BASIC_LDFLAGS += -L/usr/local/lib
287         HAVE_PATHS_H = YesPlease
288         HAVE_BSD_SYSCTL = YesPlease
289         HAVE_BSD_KERN_PROC_SYSCTL = YesPlease
290         CSPRNG_METHOD = arc4random
291         PROCFS_EXECUTABLE_PATH = /proc/curproc/file
292         FREAD_READS_DIRECTORIES = UnfortunatelyYes
293         FILENO_IS_A_MACRO = UnfortunatelyYes
294 endif
295 ifeq ($(uname_S),MirBSD)
296         NO_STRCASESTR = YesPlease
297         NO_MEMMEM = YesPlease
298         USE_ST_TIMESPEC = YesPlease
299         NEEDS_LIBICONV = YesPlease
300         HAVE_PATHS_H = YesPlease
301         HAVE_BSD_SYSCTL = YesPlease
302         CSPRNG_METHOD = arc4random
303 endif
304 ifeq ($(uname_S),NetBSD)
305         ifeq ($(shell expr "$(uname_R)" : '[01]\.'),2)
306                 NEEDS_LIBICONV = YesPlease
307         endif
308         BASIC_CFLAGS += -I/usr/pkg/include
309         BASIC_LDFLAGS += -L/usr/pkg/lib $(CC_LD_DYNPATH)/usr/pkg/lib
310         USE_ST_TIMESPEC = YesPlease
311         HAVE_PATHS_H = YesPlease
312         HAVE_BSD_SYSCTL = YesPlease
313         HAVE_BSD_KERN_PROC_SYSCTL = YesPlease
314         CSPRNG_METHOD = arc4random
315         PROCFS_EXECUTABLE_PATH = /proc/curproc/exe
316 endif
317 ifeq ($(uname_S),AIX)
318         DEFAULT_PAGER = more
319         NO_STRCASESTR = YesPlease
320         NO_MEMMEM = YesPlease
321         NO_MKDTEMP = YesPlease
322         NO_STRLCPY = YesPlease
323         NO_NSEC = YesPlease
324         NO_REGEX = NeedsStartEnd
325         FREAD_READS_DIRECTORIES = UnfortunatelyYes
326         INTERNAL_QSORT = UnfortunatelyYes
327         NEEDS_LIBICONV = YesPlease
328         BASIC_CFLAGS += -D_LARGE_FILES
329         FILENO_IS_A_MACRO = UnfortunatelyYes
330         NEED_ACCESS_ROOT_HANDLER = UnfortunatelyYes
331         ifeq ($(shell expr "$(uname_V)" : '[1234]'),1)
332                 NO_PTHREADS = YesPlease
333         else
334                 PTHREAD_LIBS = -lpthread
335         endif
336         ifeq ($(shell expr "$(uname_V).$(uname_R)" : '5\.1'),3)
337                 INLINE = ''
338         endif
339         GIT_TEST_CMP = cmp
340 endif
341 ifeq ($(uname_S),GNU)
342         # GNU/Hurd
343         HAVE_ALLOCA_H = YesPlease
344         NO_STRLCPY = YesPlease
345         HAVE_PATHS_H = YesPlease
346         LIBC_CONTAINS_LIBINTL = YesPlease
347         FREAD_READS_DIRECTORIES = UnfortunatelyYes
348 endif
349 ifeq ($(uname_S),IRIX)
350         NO_SETENV = YesPlease
351         NO_UNSETENV = YesPlease
352         NO_STRCASESTR = YesPlease
353         NO_MEMMEM = YesPlease
354         NO_MKDTEMP = YesPlease
355         # When compiled with the MIPSpro 7.4.4m compiler, and without pthreads
356         # (i.e. NO_PTHREADS is set), and _with_ MMAP (i.e. NO_MMAP is not set),
357         # git dies with a segmentation fault when trying to access the first
358         # entry of a reflog.  The conservative choice is made to always set
359         # NO_MMAP.  If you suspect that your compiler is not affected by this
360         # issue, comment out the NO_MMAP statement.
361         NO_MMAP = YesPlease
362         NO_REGEX = YesPlease
363         SNPRINTF_RETURNS_BOGUS = YesPlease
364         SHELL_PATH = /usr/gnu/bin/bash
365         NEEDS_LIBGEN = YesPlease
366 endif
367 ifeq ($(uname_S),IRIX64)
368         NO_SETENV = YesPlease
369         NO_UNSETENV = YesPlease
370         NO_STRCASESTR = YesPlease
371         NO_MEMMEM = YesPlease
372         NO_MKDTEMP = YesPlease
373         # When compiled with the MIPSpro 7.4.4m compiler, and without pthreads
374         # (i.e. NO_PTHREADS is set), and _with_ MMAP (i.e. NO_MMAP is not set),
375         # git dies with a segmentation fault when trying to access the first
376         # entry of a reflog.  The conservative choice is made to always set
377         # NO_MMAP.  If you suspect that your compiler is not affected by this
378         # issue, comment out the NO_MMAP statement.
379         NO_MMAP = YesPlease
380         NO_REGEX = YesPlease
381         SNPRINTF_RETURNS_BOGUS = YesPlease
382         SHELL_PATH = /usr/gnu/bin/bash
383         NEEDS_LIBGEN = YesPlease
384 endif
385 ifeq ($(uname_S),HP-UX)
386         INLINE = __inline
387         NO_IPV6 = YesPlease
388         NO_SETENV = YesPlease
389         NO_STRCASESTR = YesPlease
390         NO_MEMMEM = YesPlease
391         NO_STRLCPY = YesPlease
392         NO_MKDTEMP = YesPlease
393         NO_UNSETENV = YesPlease
394         NO_HSTRERROR = YesPlease
395         NO_SYS_SELECT_H = YesPlease
396         SNPRINTF_RETURNS_BOGUS = YesPlease
397         NO_NSEC = YesPlease
398         ifeq ($(uname_R),B.11.00)
399                 NO_INET_NTOP = YesPlease
400                 NO_INET_PTON = YesPlease
401         endif
402         ifeq ($(uname_R),B.10.20)
403                 # Override HP-UX 11.x setting:
404                 INLINE =
405                 SOCKLEN_T = size_t
406                 NO_PREAD = YesPlease
407                 NO_INET_NTOP = YesPlease
408                 NO_INET_PTON = YesPlease
409         endif
410         GIT_TEST_CMP = cmp
411 endif
412 ifeq ($(uname_S),Windows)
413         GIT_VERSION := $(GIT_VERSION).MSVC
414         pathsep = ;
415         # Assume that this is built in Git for Windows' SDK
416         ifeq (MINGW32,$(MSYSTEM))
417                 prefix = /mingw32
418         else
419                 prefix = /mingw64
420         endif
421         # Prepend MSVC 64-bit tool-chain to PATH.
422         #
423         # A regular Git Bash *does not* have cl.exe in its $PATH. As there is a
424         # link.exe next to, and required by, cl.exe, we have to prepend this
425         # onto the existing $PATH.
426         #
427         SANE_TOOL_PATH ?= $(msvc_bin_dir_msys)
428         HAVE_ALLOCA_H = YesPlease
429         NO_PREAD = YesPlease
430         NEEDS_CRYPTO_WITH_SSL = YesPlease
431         NO_LIBGEN_H = YesPlease
432         NO_POLL = YesPlease
433         NO_SYMLINK_HEAD = YesPlease
434         NO_IPV6 = YesPlease
435         NO_UNIX_SOCKETS = YesPlease
436         NO_SETENV = YesPlease
437         NO_STRCASESTR = YesPlease
438         NO_STRLCPY = YesPlease
439         NO_MEMMEM = YesPlease
440         NEEDS_LIBICONV = YesPlease
441         NO_STRTOUMAX = YesPlease
442         NO_MKDTEMP = YesPlease
443         NO_INTTYPES_H = YesPlease
444         CSPRNG_METHOD = rtlgenrandom
445         # VS2015 with UCRT claims that snprintf and friends are C99 compliant,
446         # so we don't need this:
447         #
448         #   SNPRINTF_RETURNS_BOGUS = YesPlease
450         # The builtin FSMonitor requires Named Pipes and Threads on Windows.
451         # These are always available, so we do not have to conditionally
452         # support it.
453         FSMONITOR_DAEMON_BACKEND = win32
454         FSMONITOR_OS_SETTINGS = win32
456         NO_SVN_TESTS = YesPlease
457         RUNTIME_PREFIX = YesPlease
458         HAVE_WPGMPTR = YesWeDo
459         NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
460         USE_WIN32_IPC = YesPlease
461         USE_WIN32_MMAP = YesPlease
462         MMAP_PREVENTS_DELETE = UnfortunatelyYes
463         # USE_NED_ALLOCATOR = YesPlease
464         UNRELIABLE_FSTAT = UnfortunatelyYes
465         OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
466         NO_REGEX = YesPlease
467         NO_GETTEXT = YesPlease
468         NO_PYTHON = YesPlease
469         ETAGS_TARGET = ETAGS
470         NO_POSIX_GOODIES = UnfortunatelyYes
471         NATIVE_CRLF = YesPlease
472         DEFAULT_HELP_FORMAT = html
473 ifeq (/mingw64,$(subst 32,64,$(prefix)))
474         # Move system config into top-level /etc/
475         ETC_GITCONFIG = ../etc/gitconfig
476         ETC_GITATTRIBUTES = ../etc/gitattributes
477 endif
479         CC = compat/vcbuild/scripts/clink.pl
480         AR = compat/vcbuild/scripts/lib.pl
481         CFLAGS =
482         BASIC_CFLAGS = -nologo -I. -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE
483         COMPAT_OBJS = compat/msvc.o compat/winansi.o \
484                 compat/win32/path-utils.o \
485                 compat/win32/pthread.o compat/win32/syslog.o \
486                 compat/win32/trace2_win32_process_info.o \
487                 compat/win32/dirent.o
488         COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY -DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
489         BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -ENTRY:wmainCRTStartup -SUBSYSTEM:CONSOLE
490         # invalidcontinue.obj allows Git's source code to close the same file
491         # handle twice, or to access the osfhandle of an already-closed stdout
492         # See https://msdn.microsoft.com/en-us/library/ms235330.aspx
493         EXTLIBS = user32.lib advapi32.lib shell32.lib wininet.lib ws2_32.lib invalidcontinue.obj kernel32.lib ntdll.lib
494         PTHREAD_LIBS =
495         lib =
496         BASIC_CFLAGS += $(vcpkg_inc) $(sdk_includes) $(msvc_includes)
497 ifndef DEBUG
498         BASIC_CFLAGS += $(vcpkg_rel_lib)
499 else
500         BASIC_CFLAGS += $(vcpkg_dbg_lib)
501 endif
502         BASIC_CFLAGS += $(sdk_libs) $(msvc_libs)
504 ifneq ($(USE_MSVC_CRTDBG),)
505         # Optionally enable memory leak reporting.
506         BASIC_CFLAGS += -DUSE_MSVC_CRTDBG
507 endif
508         # Always give "-Zi" to the compiler and "-debug" to linker (even in
509         # release mode) to force a PDB to be generated (like RelWithDebInfo).
510         BASIC_CFLAGS += -Zi
511         BASIC_LDFLAGS += -debug -Zf
513 ifdef NO_SAFESEH
514         LDFLAGS += -SAFESEH:NO
515 endif
517 ifndef DEBUG
518         BASIC_CFLAGS += -GL -Gy -O2 -Oy- -MD -DNDEBUG
519         BASIC_LDFLAGS += -release -LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO /DEBUGTYPE:CV,FIXUP
520         AR += -LTCG
521 else
522         BASIC_CFLAGS += -MDd -DDEBUG -D_DEBUG
523 endif
524         X = .exe
526 compat/msvc.o: compat/msvc.c compat/mingw.c GIT-CFLAGS
527 endif
528 ifeq ($(uname_S),Interix)
529         NO_INITGROUPS = YesPlease
530         NO_IPV6 = YesPlease
531         NO_MEMMEM = YesPlease
532         NO_MKDTEMP = YesPlease
533         NO_STRTOUMAX = YesPlease
534         NO_NSEC = YesPlease
535         ifeq ($(uname_R),3.5)
536                 NO_INET_NTOP = YesPlease
537                 NO_INET_PTON = YesPlease
538                 NO_SOCKADDR_STORAGE = YesPlease
539         endif
540         ifeq ($(uname_R),5.2)
541                 NO_INET_NTOP = YesPlease
542                 NO_INET_PTON = YesPlease
543                 NO_SOCKADDR_STORAGE = YesPlease
544         endif
545 endif
546 ifeq ($(uname_S),Minix)
547         NO_IPV6 = YesPlease
548         NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
549         NO_NSEC = YesPlease
550         NEEDS_LIBGEN =
551         NEEDS_CRYPTO_WITH_SSL = YesPlease
552         NEEDS_RESOLV =
553         NO_HSTRERROR = YesPlease
554         NO_MMAP = YesPlease
555         NO_CURL =
556         NO_EXPAT =
557 endif
558 ifeq ($(uname_S),NONSTOP_KERNEL)
559         # Needs some C99 features, "inline" is just one of them.
560         # INLINE='' would just replace one set of warnings with another and
561         # still not compile in c89 mode, due to non-const array initializations.
562         CC = cc -c99
563         # Build down-rev compatible objects that don't use our new getopt_long.
564         ifeq ($(uname_R).$(uname_V),J06.21)
565                 CC += -WRVU=J06.20
566         endif
567         ifeq ($(uname_R).$(uname_V),L17.02)
568                 CC += -WRVU=L16.05
569         endif
570         # Disable all optimization, seems to result in bad code, with -O or -O2
571         # or even -O1 (default), /usr/local/libexec/git-core/git-pack-objects
572         # abends on "git push". Needs more investigation.
573         CFLAGS = -g -O0 -Winline
574         # We'd want it to be here.
575         prefix = /usr/local
576         # perl and python must be in /usr/bin on NonStop - supplied by HPE
577         # with operating system in that managed directory.
578         PERL_PATH = /usr/bin/perl
579         PYTHON_PATH = /usr/bin/python
580         # The current /usr/coreutils/rm at lowest support level does not work
581         # with the git test structure. Long paths as in
582         # 'trash directory...' cause rm to terminate prematurely without fully
583         # removing the directory at OS releases J06.21 and L17.02.
584         # Default to the older rm until those two releases are deprecated.
585         RM = /bin/rm -f
586         NEEDS_CRYPTO_WITH_SSL = YesPlease
587         HAVE_DEV_TTY = YesPlease
588         HAVE_LIBCHARSET_H = YesPlease
589         HAVE_STRINGS_H = YesPlease
590         NEEDS_LIBICONV = YesPlease
591         NEEDS_LIBINTL_BEFORE_LIBICONV = YesPlease
592         NO_SYS_SELECT_H = UnfortunatelyYes
593         NO_D_TYPE_IN_DIRENT = YesPlease
594         NO_GETTEXT = YesPlease
595         NO_HSTRERROR = YesPlease
596         NO_STRCASESTR = YesPlease
597         NO_MEMMEM = YesPlease
598         NO_STRLCPY = YesPlease
599         NO_SETENV = YesPlease
600         NO_UNSETENV = YesPlease
601         NO_MKDTEMP = YesPlease
602         # Currently libiconv-1.9.1.
603         OLD_ICONV = UnfortunatelyYes
604         NO_REGEX = NeedsStartEnd
605         NO_PTHREADS = UnfortunatelyYes
606         FREAD_READS_DIRECTORIES = UnfortunatelyYes
608         # Not detected (nor checked for) by './configure'.
609         # We don't have SA_RESTART on NonStop, unfortunalety.
610         COMPAT_CFLAGS += -DSA_RESTART=0
611         # Apparently needed in compat/fnmatch/fnmatch.c.
612         COMPAT_CFLAGS += -DHAVE_STRING_H=1
613         NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
614         NO_NSEC = YesPlease
615         NO_PREAD = YesPlease
616         NO_MMAP = YesPlease
617         NO_POLL = YesPlease
618         NO_INTPTR_T = UnfortunatelyYes
619         CSPRNG_METHOD = openssl
620         SANE_TOOL_PATH = /usr/coreutils/bin:/usr/local/bin
621         SHELL_PATH = /usr/coreutils/bin/bash
622 endif
623 ifeq ($(uname_S),MINGW)
624         pathsep = ;
625         HAVE_ALLOCA_H = YesPlease
626         NO_PREAD = YesPlease
627         NEEDS_CRYPTO_WITH_SSL = YesPlease
628         NO_LIBGEN_H = YesPlease
629         NO_POLL = YesPlease
630         NO_SYMLINK_HEAD = YesPlease
631         NO_UNIX_SOCKETS = YesPlease
632         NO_SETENV = YesPlease
633         NO_STRCASESTR = YesPlease
634         NO_STRLCPY = YesPlease
635         NO_MEMMEM = YesPlease
636         NEEDS_LIBICONV = YesPlease
637         NO_STRTOUMAX = YesPlease
638         NO_MKDTEMP = YesPlease
639         NO_SVN_TESTS = YesPlease
641         # The builtin FSMonitor requires Named Pipes and Threads on Windows.
642         # These are always available, so we do not have to conditionally
643         # support it.
644         FSMONITOR_DAEMON_BACKEND = win32
645         FSMONITOR_OS_SETTINGS = win32
647         RUNTIME_PREFIX = YesPlease
648         HAVE_WPGMPTR = YesWeDo
649         NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
650         USE_WIN32_IPC = YesPlease
651         USE_WIN32_MMAP = YesPlease
652         MMAP_PREVENTS_DELETE = UnfortunatelyYes
653         USE_NED_ALLOCATOR = YesPlease
654         UNRELIABLE_FSTAT = UnfortunatelyYes
655         OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
656         NO_REGEX = YesPlease
657         NO_PYTHON = YesPlease
658         ETAGS_TARGET = ETAGS
659         NO_POSIX_GOODIES = UnfortunatelyYes
660         DEFAULT_HELP_FORMAT = html
661         HAVE_PLATFORM_PROCINFO = YesPlease
662         CSPRNG_METHOD = rtlgenrandom
663         BASIC_LDFLAGS += -municode
664         COMPAT_CFLAGS += -DNOGDI -Icompat -Icompat/win32
665         COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
666         COMPAT_OBJS += compat/mingw.o compat/winansi.o \
667                 compat/win32/trace2_win32_process_info.o \
668                 compat/win32/path-utils.o \
669                 compat/win32/pthread.o compat/win32/syslog.o \
670                 compat/win32/dirent.o
671         BASIC_CFLAGS += -DWIN32
672         EXTLIBS += -lws2_32
673         GITLIBS += git.res
674         PTHREAD_LIBS =
675         RC = windres -O coff
676         NATIVE_CRLF = YesPlease
677         X = .exe
678 ifneq (,$(wildcard ../THIS_IS_MSYSGIT))
679         htmldir = doc/git/html/
680         prefix =
681         INSTALL = /bin/install
682         EXTLIBS += /mingw/lib/libz.a
683         INTERNAL_QSORT = YesPlease
684         HAVE_LIBCHARSET_H = YesPlease
685         NO_GETTEXT = YesPlease
686         COMPAT_CFLAGS += -D__USE_MINGW_ACCESS
687 else
688         ifneq ($(shell expr "$(uname_R)" : '1\.'),2)
689                 # MSys2
690                 prefix = /usr/
691                 # Enable DEP
692                 BASIC_LDFLAGS += -Wl,--nxcompat
693                 # Enable ASLR (unless debugging)
694                 ifneq (,$(findstring -O,$(filter-out -O0 -Og,$(CFLAGS))))
695                         BASIC_LDFLAGS += -Wl,--dynamicbase
696                 endif
697                 ifeq (MINGW32,$(MSYSTEM))
698                         prefix = /mingw32
699                         HOST_CPU = i686
700                         BASIC_LDFLAGS += -Wl,--pic-executable,-e,_mainCRTStartup
701                 endif
702                 ifeq (MINGW64,$(MSYSTEM))
703                         prefix = /mingw64
704                         HOST_CPU = x86_64
705                         BASIC_LDFLAGS += -Wl,--pic-executable,-e,mainCRTStartup
706                 else
707                         COMPAT_CFLAGS += -D_USE_32BIT_TIME_T
708                         BASIC_LDFLAGS += -Wl,--large-address-aware
709                 endif
710                 CC = gcc
711                 COMPAT_CFLAGS += -D__USE_MINGW_ANSI_STDIO=0 -DDETECT_MSYS_TTY \
712                         -fstack-protector-strong
713                 EXTLIBS += -lntdll
714                 INSTALL = /bin/install
715                 INTERNAL_QSORT = YesPlease
716                 HAVE_LIBCHARSET_H = YesPlease
717                 NO_GETTEXT =
718                 USE_GETTEXT_SCHEME = fallthrough
719                 USE_LIBPCRE = YesPlease
720                 NO_CURL =
721                 USE_NED_ALLOCATOR = YesPlease
722                 ifeq (/mingw64,$(subst 32,64,$(prefix)))
723                         # Move system config into top-level /etc/
724                         ETC_GITCONFIG = ../etc/gitconfig
725                         ETC_GITATTRIBUTES = ../etc/gitattributes
726                 endif
727         else
728                 COMPAT_CFLAGS += -D__USE_MINGW_ANSI_STDIO
729                 NO_CURL = YesPlease
730         endif
731 endif
732 endif
733 ifeq ($(uname_S),QNX)
734         COMPAT_CFLAGS += -DSA_RESTART=0
735         EXPAT_NEEDS_XMLPARSE_H = YesPlease
736         HAVE_STRINGS_H = YesPlease
737         NEEDS_SOCKET = YesPlease
738         NO_GETPAGESIZE = YesPlease
739         NO_ICONV = YesPlease
740         NO_MEMMEM = YesPlease
741         NO_MKDTEMP = YesPlease
742         NO_NSEC = YesPlease
743         NO_PTHREADS = YesPlease
744         NO_STRCASESTR = YesPlease
745         NO_STRLCPY = YesPlease
746 endif
748 vcxproj:
749         # Require clean work tree
750         git update-index -q --refresh && \
751         git diff-files --quiet && \
752         git diff-index --cached --quiet HEAD --
754         # Make .vcxproj files and add them
755         unset QUIET_GEN QUIET_BUILT_IN; \
756         perl contrib/buildsystems/generate -g Vcxproj
757         git add -f git.sln {*,*/lib,t/helper/*}/*.vcxproj
759         # Generate the LinkOrCopyBuiltins.targets and LinkOrCopyRemoteHttp.targets file
760         (echo '<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">' && \
761          echo '  <Target Name="CopyBuiltins_AfterBuild" AfterTargets="AfterBuild">' && \
762          for name in $(BUILT_INS);\
763          do \
764            echo '    <Copy SourceFiles="$$(OutDir)\git.exe" DestinationFiles="$$(OutDir)\'"$$name"'" SkipUnchangedFiles="true" UseHardlinksIfPossible="true" />'; \
765          done && \
766          echo '  </Target>' && \
767          echo '</Project>') >git/LinkOrCopyBuiltins.targets
768         (echo '<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">' && \
769          echo '  <Target Name="CopyBuiltins_AfterBuild" AfterTargets="AfterBuild">' && \
770          for name in $(REMOTE_CURL_ALIASES); \
771          do \
772            echo '    <Copy SourceFiles="$$(OutDir)\'"$(REMOTE_CURL_PRIMARY)"'" DestinationFiles="$$(OutDir)\'"$$name"'" SkipUnchangedFiles="true" UseHardlinksIfPossible="true" />'; \
773          done && \
774          echo '  </Target>' && \
775          echo '</Project>') >git-remote-http/LinkOrCopyRemoteHttp.targets
776         git add -f git/LinkOrCopyBuiltins.targets git-remote-http/LinkOrCopyRemoteHttp.targets
778         # Add generated headers
779         $(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 $(GENERATED_H)
780         git add -f $(GENERATED_H)
782         # Add scripts
783         rm -f perl/perl.mak
784         $(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 $(SCRIPT_LIB) $(SCRIPTS)
785         # Strip out the sane tool path, needed only for building
786         sed -i '/^git_broken_path_fix ".*/d' git-sh-setup
787         git add -f $(SCRIPT_LIB) $(SCRIPTS)
789         # Add Perl module
790         $(MAKE) $(LIB_PERL_GEN)
791         git add -f perl/build
793         # Add bin-wrappers, for testing
794         rm -rf bin-wrappers/
795         $(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 $(test_bindir_programs)
796         # Ensure that the GIT_EXEC_PATH is a Unix-y one, and that the absolute
797         # path of the repository is not hard-coded (GIT_EXEC_PATH will be set
798         # by test-lib.sh according to the current setup)
799         sed -i -e 's/^\(GIT_EXEC_PATH\)=.*/test -n "$${\1##*:*}" ||\
800                         \1="$$(cygpath -u "$$\1")"/' \
801                 -e "s|'$$(pwd)|\"\$$GIT_EXEC_PATH\"'|g" bin-wrappers/*
802         # Ensure that test-* helpers find the .dll files copied to top-level
803         sed -i 's|^PATH=.*|&:"$$GIT_EXEC_PATH"|' bin-wrappers/test-*
804         # We do not want to force hard-linking builtins
805         sed -i 's|\(git\)-\([-a-z]*\)\.exe"|\1.exe" \2|g' \
806                 bin-wrappers/git-{receive-pack,upload-archive}
807         git add -f $(test_bindir_programs)
808         # remote-ext is a builtin, but invoked as if it were external
809         sed 's|receive-pack|remote-ext|g' \
810                 <bin-wrappers/git-receive-pack >bin-wrappers/git-remote-ext
811         git add -f bin-wrappers/git-remote-ext
813         # Add templates
814         $(MAKE) -C templates
815         git add -f templates/boilerplates.made templates/blt/
817         # Add the translated messages
818         make MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 $(MOFILES)
819         git add -f $(MOFILES)
821         # Add build options
822         $(MAKE) MSVC=1 SKIP_VCPKG=1 prefix=/mingw64 GIT-BUILD-OPTIONS
823         git add -f GIT-BUILD-OPTIONS
825         # Commit the whole shebang
826         git commit -m "Generate Visual Studio solution" \
827                 -m "Auto-generated by \`$(MAKE)$(MAKEFLAGS) $@\`"