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