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 NEEDS_CRYPTO_WITH_SSL = YesPlease
487 NO_LIBGEN_H = YesPlease
488 NO_POLL = YesPlease
489 NO_SYMLINK_HEAD = YesPlease
490 NO_IPV6 = YesPlease
491 NO_SETENV = YesPlease
492 NO_STRCASESTR = YesPlease
493 NO_STRLCPY = YesPlease
494 NO_MEMMEM = YesPlease
495 NEEDS_LIBICONV = YesPlease
496 NO_STRTOUMAX = YesPlease
497 NO_MKDTEMP = YesPlease
498 NO_INTTYPES_H = YesPlease
499 CSPRNG_METHOD = rtlgenrandom
500 # VS2015 with UCRT claims that snprintf and friends are C99 compliant,
501 # so we don't need this:
502 #
503 # SNPRINTF_RETURNS_BOGUS = YesPlease
504
505 # The builtin FSMonitor requires Named Pipes and Threads on Windows.
506 # These are always available, so we do not have to conditionally
507 # support it.
508 FSMONITOR_DAEMON_BACKEND = win32
509 FSMONITOR_OS_SETTINGS = win32
510
511 NO_SVN_TESTS = YesPlease
512 RUNTIME_PREFIX = YesPlease
513 HAVE_WPGMPTR = YesWeDo
514 NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
515 USE_WIN32_IPC = YesPlease
516 USE_WIN32_MMAP = YesPlease
517 MMAP_PREVENTS_DELETE = UnfortunatelyYes
518 UNRELIABLE_FSTAT = UnfortunatelyYes
519 OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
520 NO_REGEX = YesPlease
521 NO_GETTEXT = YesPlease
522 NO_PYTHON = YesPlease
523 ETAGS_TARGET = ETAGS
524 NO_POSIX_GOODIES = UnfortunatelyYes
525 NATIVE_CRLF = YesPlease
526 DEFAULT_HELP_FORMAT = html
527 ifeq (/mingw64,$(subst 32,64,$(subst clangarm,mingw,$(prefix))))
528 # Move system config into top-level /etc/
529 ETC_GITCONFIG = ../etc/gitconfig
530 ETC_GITATTRIBUTES = ../etc/gitattributes
531 endif
532
533 CC = compat/vcbuild/scripts/clink.pl
534 AR = compat/vcbuild/scripts/lib.pl
535 CFLAGS =
536 BASIC_CFLAGS = -nologo -I. -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE
537 COMPAT_OBJS = compat/msvc.o compat/winansi.o \
538 compat/win32/flush.o \
539 compat/win32/path-utils.o \
540 compat/win32/pthread.o compat/win32/syslog.o \
541 compat/win32/trace2_win32_process_info.o \
542 compat/win32/dirent.o
543 COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY -DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
544 BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -ENTRY:wmainCRTStartup -SUBSYSTEM:CONSOLE
545 # invalidcontinue.obj allows Git's source code to close the same file
546 # handle twice, or to access the osfhandle of an already-closed stdout
547 # See https://msdn.microsoft.com/en-us/library/ms235330.aspx
548 EXTLIBS = user32.lib advapi32.lib shell32.lib wininet.lib ws2_32.lib invalidcontinue.obj kernel32.lib ntdll.lib
549 PTHREAD_LIBS =
550 lib =
551 BASIC_CFLAGS += $(vcpkg_inc) $(sdk_includes) $(msvc_includes)
552 ifndef DEBUG
553 BASIC_CFLAGS += $(vcpkg_rel_lib)
554 else
555 BASIC_CFLAGS += $(vcpkg_dbg_lib)
556 endif
557 BASIC_CFLAGS += $(sdk_libs) $(msvc_libs)
558
559 ifneq ($(USE_MSVC_CRTDBG),)
560 # Optionally enable memory leak reporting.
561 BASIC_CFLAGS += -DUSE_MSVC_CRTDBG
562 endif
563 # Always give "-Zi" to the compiler and "-debug" to linker (even in
564 # release mode) to force a PDB to be generated (like RelWithDebInfo).
565 BASIC_CFLAGS += -Zi
566 BASIC_LDFLAGS += -debug -Zf
567
568 ifdef NO_SAFESEH
569 LDFLAGS += -SAFESEH:NO
570 endif
571
572 ifndef DEBUG
573 BASIC_CFLAGS += -GL -Gy -O2 -Oy- -MD -DNDEBUG
574 BASIC_LDFLAGS += -release -LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO /DEBUGTYPE:CV,FIXUP
575 AR += -LTCG
576 else
577 BASIC_CFLAGS += -MDd -DDEBUG -D_DEBUG
578 endif
579 X = .exe
580
581 EXTRA_PROGRAMS += headless-git$X
582
583 compat/msvc.o: compat/msvc.c compat/mingw.c GIT-CFLAGS
584 endif
585 ifeq ($(uname_S),Interix)
586 NO_INITGROUPS = YesPlease
587 NO_IPV6 = YesPlease
588 NO_MEMMEM = YesPlease
589 NO_MKDTEMP = YesPlease
590 NO_STRTOUMAX = YesPlease
591 NO_NSEC = YesPlease
592 ifeq ($(uname_R),3.5)
593 NO_INET_NTOP = YesPlease
594 NO_INET_PTON = YesPlease
595 NO_SOCKADDR_STORAGE = YesPlease
596 endif
597 ifeq ($(uname_R),5.2)
598 NO_INET_NTOP = YesPlease
599 NO_INET_PTON = YesPlease
600 NO_SOCKADDR_STORAGE = YesPlease
601 endif
602 endif
603 ifeq ($(uname_S),Minix)
604 NO_IPV6 = YesPlease
605 NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
606 NO_NSEC = YesPlease
607 NEEDS_LIBGEN =
608 NEEDS_CRYPTO_WITH_SSL = YesPlease
609 NEEDS_RESOLV =
610 NO_HSTRERROR = YesPlease
611 NO_MMAP = YesPlease
612 NO_CURL =
613 NO_EXPAT =
614 endif
615 ifeq ($(uname_S),NONSTOP_KERNEL)
616 # Needs some C99 features, "inline" is just one of them.
617 # INLINE='' would just replace one set of warnings with another and
618 # still not compile in c89 mode, due to non-const array initializations.
619 CC = cc -c99
620 # Build down-rev compatible objects that don't use our new getopt_long.
621 ifeq ($(uname_R).$(uname_V),J06.21)
622 CC += -WRVU=J06.20
623 endif
624 ifeq ($(uname_R).$(uname_V),L17.02)
625 CC += -WRVU=L16.05
626 endif
627 # Disable all optimization, seems to result in bad code, with -O or -O2
628 # or even -O1 (default), /usr/local/libexec/git-core/git-pack-objects
629 # abends on "git push". Needs more investigation.
630 CFLAGS = -g -O0 -Winline
631 # We'd want it to be here.
632 prefix = /usr/local
633 # perl and python must be in /usr/bin on NonStop - supplied by HPE
634 # with operating system in that managed directory.
635 PERL_PATH = /usr/bin/perl
636 PYTHON_PATH = /usr/bin/python
637 # The current /usr/coreutils/rm at lowest support level does not work
638 # with the git test structure. Long paths as in
639 # 'trash directory...' cause rm to terminate prematurely without fully
640 # removing the directory at OS releases J06.21 and L17.02.
641 # Default to the older rm until those two releases are deprecated.
642 RM = /bin/rm -f
643 NEEDS_CRYPTO_WITH_SSL = YesPlease
644 HAVE_DEV_TTY = YesPlease
645 HAVE_LIBCHARSET_H = YesPlease
646 HAVE_STRINGS_H = YesPlease
647 NEEDS_LIBICONV = YesPlease
648 NEEDS_LIBINTL_BEFORE_LIBICONV = YesPlease
649 NO_SYS_SELECT_H = UnfortunatelyYes
650 NO_D_TYPE_IN_DIRENT = YesPlease
651 NO_GETTEXT = YesPlease
652 NO_HSTRERROR = YesPlease
653 NO_STRCASESTR = YesPlease
654 NO_MEMMEM = YesPlease
655 NO_STRLCPY = YesPlease
656 NO_SETENV = YesPlease
657 NO_UNSETENV = YesPlease
658 NO_MKDTEMP = YesPlease
659 # Currently libiconv-1.9.1.
660 OLD_ICONV = UnfortunatelyYes
661 NO_REGEX = NeedsStartEnd
662 NO_PTHREADS = UnfortunatelyYes
663 FREAD_READS_DIRECTORIES = UnfortunatelyYes
664
665 # Not detected (nor checked for) by './configure'.
666 # We don't have SA_RESTART on NonStop, unfortunalety.
667 COMPAT_CFLAGS += -DSA_RESTART=0
668 # Apparently needed in compat/fnmatch/fnmatch.c.
669 COMPAT_CFLAGS += -DHAVE_STRING_H=1
670 NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
671 NO_NSEC = YesPlease
672 NO_PREAD = YesPlease
673 NO_MMAP = YesPlease
674 NO_POLL = YesPlease
675 NO_INTPTR_T = UnfortunatelyYes
676 CSPRNG_METHOD = openssl
677 SANE_TOOL_PATH = /usr/coreutils/bin:/usr/local/bin
678 SHELL_PATH = /usr/coreutils/bin/bash
679 endif
680 ifeq ($(uname_S),OS/390)
681 NO_SYS_POLL_H = YesPlease
682 NO_STRCASESTR = YesPlease
683 NO_REGEX = YesPlease
684 NO_MMAP = YesPlease
685 NO_NSEC = YesPlease
686 NO_STRLCPY = YesPlease
687 NO_MEMMEM = YesPlease
688 NO_GECOS_IN_PWENT = YesPlease
689 HAVE_STRINGS_H = YesPlease
690 NEEDS_MODE_TRANSLATION = YesPlease
691 HAVE_ZOS_GET_EXECUTABLE_PATH = YesPlease
692 endif
693 ifeq ($(uname_S),MINGW)
694 ifeq ($(shell expr "$(uname_R)" : '1\.'),2)
695 $(error "Building with MSys is no longer supported")
696 endif
697 pathsep = ;
698 HAVE_ALLOCA_H = YesPlease
699 NO_PREAD = YesPlease
700 NEEDS_CRYPTO_WITH_SSL = YesPlease
701 NO_LIBGEN_H = YesPlease
702 NO_POLL = YesPlease
703 NO_SYMLINK_HEAD = YesPlease
704 NO_SETENV = YesPlease
705 NO_STRCASESTR = YesPlease
706 NO_STRLCPY = YesPlease
707 NO_MEMMEM = YesPlease
708 NEEDS_LIBICONV = YesPlease
709 NO_STRTOUMAX = YesPlease
710 NO_MKDTEMP = YesPlease
711 NO_SVN_TESTS = YesPlease
712
713 # The builtin FSMonitor requires Named Pipes and Threads on Windows.
714 # These are always available, so we do not have to conditionally
715 # support it.
716 FSMONITOR_DAEMON_BACKEND = win32
717 FSMONITOR_OS_SETTINGS = win32
718
719 RUNTIME_PREFIX = YesPlease
720 HAVE_WPGMPTR = YesWeDo
721 NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
722 USE_WIN32_IPC = YesPlease
723 USE_WIN32_MMAP = YesPlease
724 MMAP_PREVENTS_DELETE = UnfortunatelyYes
725 UNRELIABLE_FSTAT = UnfortunatelyYes
726 OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
727 NO_REGEX = YesPlease
728 ETAGS_TARGET = ETAGS
729 NO_POSIX_GOODIES = UnfortunatelyYes
730 DEFAULT_HELP_FORMAT = html
731 HAVE_PLATFORM_PROCINFO = YesPlease
732 CSPRNG_METHOD = rtlgenrandom
733 BASIC_LDFLAGS += -municode
734 COMPAT_CFLAGS += -DNOGDI -Icompat -Icompat/win32
735 COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
736 COMPAT_OBJS += compat/mingw.o compat/winansi.o \
737 compat/win32/trace2_win32_process_info.o \
738 compat/win32/flush.o \
739 compat/win32/path-utils.o \
740 compat/win32/pthread.o compat/win32/syslog.o \
741 compat/win32/dirent.o
742 BASIC_CFLAGS += -DWIN32
743 EXTLIBS += -lws2_32
744 GITLIBS += git.res
745 PTHREAD_LIBS =
746 RC = windres -O coff
747 NATIVE_CRLF = YesPlease
748 X = .exe
749 # MSys2
750 prefix = /usr/
751 # Enable DEP
752 BASIC_LDFLAGS += -Wl,--nxcompat
753 # Enable ASLR (unless debugging)
754 ifneq (,$(findstring -O,$(filter-out -O0 -Og,$(CFLAGS))))
755 BASIC_LDFLAGS += -Wl,--dynamicbase
756 endif
757 ifeq (MINGW32,$(MSYSTEM))
758 prefix = /mingw32
759 HOST_CPU = i686
760 BASIC_LDFLAGS += -Wl,--pic-executable,-e,_mainCRTStartup
761 endif
762 ifeq (MINGW64,$(MSYSTEM))
763 prefix = /mingw64
764 HOST_CPU = x86_64
765 BASIC_LDFLAGS += -Wl,--pic-executable,-e,mainCRTStartup
766 else ifeq (CLANGARM64,$(MSYSTEM))
767 prefix = /clangarm64
768 HOST_CPU = aarch64
769 BASIC_LDFLAGS += -Wl,--pic-executable,-e,mainCRTStartup
770 else
771 COMPAT_CFLAGS += -D_USE_32BIT_TIME_T
772 BASIC_LDFLAGS += -Wl,--large-address-aware
773 endif
774 CC = gcc
775 COMPAT_CFLAGS += -D__USE_MINGW_ANSI_STDIO=0 -DDETECT_MSYS_TTY \
776 -fstack-protector-strong
777 EXTLIBS += -lntdll
778 EXTRA_PROGRAMS += headless-git$X
779 INSTALL = /bin/install
780 INTERNAL_QSORT = YesPlease
781 HAVE_LIBCHARSET_H = YesPlease
782 USE_GETTEXT_SCHEME = fallthrough
783 USE_LIBPCRE = YesPlease
784 ifeq (/mingw64,$(subst 32,64,$(subst clangarm,mingw,$(prefix))))
785 # Move system config into top-level /etc/
786 ETC_GITCONFIG = ../etc/gitconfig
787 ETC_GITATTRIBUTES = ../etc/gitattributes
788 endif
789 endif
790 ifeq ($(uname_S),QNX)
791 COMPAT_CFLAGS += -DSA_RESTART=0
792 EXPAT_NEEDS_XMLPARSE_H = YesPlease
793 HAVE_STRINGS_H = YesPlease
794 NEEDS_SOCKET = YesPlease
795 NO_GETPAGESIZE = YesPlease
796 NO_ICONV = YesPlease
797 NO_MEMMEM = YesPlease
798 NO_MKDTEMP = YesPlease
799 NO_NSEC = YesPlease
800 NO_PTHREADS = YesPlease
801 NO_STRCASESTR = YesPlease
802 NO_STRLCPY = YesPlease
803 endif