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