Makefile 69.0 KB
Newer Older
1
# The default target of this Makefile is...
2
all::
3

S
Shawn O. Pearce 已提交
4
# Define V=1 to have a more verbose compile.
5
#
6 7 8 9 10
# Define SHELL_PATH to a POSIX shell if your /bin/sh is broken.
#
# Define SANE_TOOL_PATH to a colon-separated list of paths to prepend
# to PATH if your tools in /usr/bin are broken.
#
11 12 13
# Define SOCKLEN_T to a suitable type (such as 'size_t') if your
# system headers do not define a socklen_t type.
#
G
Gary V. Vaughan 已提交
14 15 16
# Define INLINE to a suitable substitute (such as '__inline' or '') if git
# fails to compile with errors about undefined inline functions or similar.
#
17 18 19 20
# Define SNPRINTF_RETURNS_BOGUS if your are on a system which snprintf()
# or vsnprintf() return -1 instead of number of characters which would
# have been written to the final string if enough space had been available.
#
21 22 23
# Define FREAD_READS_DIRECTORIES if your are on a system which succeeds
# when attempting to read from an fopen'ed directory.
#
24
# Define NO_OPENSSL environment variable if you do not have OpenSSL.
25
# This also implies BLK_SHA1.
26
#
27
# Define NO_CURL if you do not have libcurl installed.  git-http-pull and
28 29
# git-http-push are not built, and you cannot use http:// and https://
# transports.
30
#
P
Patrick Mauritz 已提交
31 32 33
# Define CURLDIR=/foo/bar if your curl header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
34 35 36
# Define NO_EXPAT if you do not have expat installed.  git-http-push is
# not built, and you cannot push using http:// and https:// transports.
#
37 38 39
# Define EXPATDIR=/foo/bar if your expat header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
40 41 42
# Define HAVE_PATHS_H if you have paths.h and want to use the default PATH
# it specifies.
#
43 44
# Define NO_D_INO_IN_DIRENT if you don't have d_ino in your struct dirent.
#
45
# Define NO_D_TYPE_IN_DIRENT if your platform defines DT_UNKNOWN but lacks
46
# d_type in struct dirent (Cygwin 1.5, fixed in Cygwin 1.7).
47
#
48 49 50
# Define NO_C99_FORMAT if your formatted IO functions (printf/scanf et.al.)
# do not support the 'size specifiers' introduced by C99, namely ll, hh,
# j, z, t. (representing long long int, char, intmax_t, size_t, ptrdiff_t).
51
# some C compilers supported these specifiers prior to C99 as an extension.
52
#
53 54
# Define NO_STRCASESTR if you don't have strcasestr.
#
R
René Scharfe 已提交
55 56
# Define NO_MEMMEM if you don't have memmem.
#
57 58
# Define NO_STRLCPY if you don't have strlcpy.
#
59 60 61 62
# Define NO_STRTOUMAX if you don't have strtoumax in the C library.
# If your compiler also does not support long long or does not have
# strtoull, define NO_STRTOULL.
#
J
Jason Riedy 已提交
63 64
# Define NO_SETENV if you don't have setenv in the C library.
#
65 66
# Define NO_UNSETENV if you don't have unsetenv in the C library.
#
67 68
# Define NO_MKDTEMP if you don't have mkdtemp in the C library.
#
69 70
# Define NO_MKSTEMPS if you don't have mkstemps in the C library.
#
J
Jonathan Nieder 已提交
71 72
# Define NO_STRTOK_R if you don't have strtok_r in the C library.
#
73 74
# Define NO_FNMATCH if you don't have fnmatch in the C library.
#
75 76 77
# Define NO_FNMATCH_CASEFOLD if your fnmatch function doesn't have the
# FNM_CASEFOLD GNU extension.
#
78 79
# Define NO_LIBGEN_H if you don't have libgen.h.
#
80 81
# Define NEEDS_LIBGEN if your libgen needs -lgen when linking
#
82 83
# Define NO_SYS_SELECT_H if you don't have sys/select.h.
#
84 85
# Define NO_SYMLINK_HEAD if you never want .git/HEAD to be a symbolic link.
# Enable it on Windows.  By default, symrefs are still used.
86
#
P
Pavel Roskin 已提交
87
# Define NO_SVN_TESTS if you want to skip time-consuming SVN interoperability
E
Eric Wong 已提交
88 89 90
# tests.  These tests take up a significant amount of the total test time
# but are not needed unless you plan to talk to SVN repos.
#
91 92 93 94 95 96 97 98 99 100 101 102
# Define NO_FINK if you are building on Darwin/Mac OS X, have Fink
# installed in /sw, but don't want GIT to link against any libraries
# installed there.  If defined you may specify your own (or Fink's)
# include directories and library directories by defining CFLAGS
# and LDFLAGS appropriately.
#
# Define NO_DARWIN_PORTS if you are building on Darwin/Mac OS X,
# have DarwinPorts installed in /opt/local, but don't want GIT to
# link against any libraries installed there.  If defined you may
# specify your own (or DarwinPort's) include directories and
# library directories by defining CFLAGS and LDFLAGS appropriately.
#
103 104 105 106
# Define BLK_SHA1 environment variable if you want the C version
# of the SHA1 that assumes you can do unaligned 32-bit loads and
# have a fast htonl() function.
#
107 108
# Define PPC_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine optimized for PowerPC.
109
#
110 111 112
# Define NEEDS_CRYPTO_WITH_SSL if you need -lcrypto when using -lssl (Darwin).
#
# Define NEEDS_SSL_WITH_CRYPTO if you need -lssl when using -lcrypto (Darwin).
113
#
114
# Define NEEDS_LIBICONV if linking with libc is not enough (Darwin).
115 116 117 118
#
# Define NEEDS_SOCKET if linking with libc is not enough (SunOS,
# Patrick Mauritz).
#
119 120 121 122
# Define NEEDS_RESOLV if linking with -lnsl and/or -lsocket is not enough.
# Notably on Solaris hstrerror resides in libresolv and on Solaris 7
# inet_ntop and inet_pton additionally reside there.
#
123 124
# Define NO_MMAP if you want to avoid mmap.
#
J
Junio C Hamano 已提交
125 126
# Define NO_PTHREADS if you do not have or do not want to use Pthreads.
#
127
# Define NO_PREAD if you have a problem with pread() system call (e.g.
128
# cygwin1.dll before v1.5.22).
129
#
130 131 132
# Define NO_FAST_WORKING_DIRECTORY if accessing objects in pack files is
# generally faster on your platform than accessing the working directory.
#
133 134 135
# Define NO_TRUSTABLE_FILEMODE if your filesystem may claim to support
# the executable mode bit, but doesn't really do so.
#
136 137
# Define NO_IPV6 if you lack IPv6 support and getaddrinfo().
#
138 139 140
# Define NO_SOCKADDR_STORAGE if your platform does not have struct
# sockaddr_storage.
#
141 142
# Define NO_ICONV if your libc does not properly support iconv.
#
143 144 145
# Define OLD_ICONV if your library has an old iconv(), where the second
# (input buffer pointer) parameter is declared with type (const char **).
#
146 147
# Define NO_DEFLATE_BOUND if your zlib does not have deflateBound.
#
148 149 150
# Define NO_R_TO_GCC_LINKER if your gcc does not like "-R/path/lib"
# that tells runtime paths to dynamic libraries;
# "-Wl,-rpath=/path/lib" is used instead.
151
#
152 153 154 155 156
# Define USE_NSEC below if you want git to care about sub-second file mtimes
# and ctimes. Note that you need recent glibc (at least 2.2.4) for this, and
# it will BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely
# randomly break unless your underlying filesystem supports those sub-second
# times (my ext3 doesn't).
157
#
158 159 160
# Define USE_ST_TIMESPEC if your "struct stat" uses "st_ctimespec" instead of
# "st_ctim"
#
161 162 163
# Define NO_NSEC if your "struct stat" does not have "st_ctim.tv_nsec"
# available.  This automatically turns USE_NSEC off.
#
164
# Define USE_STDEV below if you want git to care about the underlying device
165
# change being considered an inode change from the update-index perspective.
166
#
167 168 169
# Define NO_ST_BLOCKS_IN_STRUCT_STAT if your platform does not have st_blocks
# field that counts the on-disk footprint in 512-byte blocks.
#
J
Jeff King 已提交
170
# Define ASCIIDOC7 if you want to format documentation with AsciiDoc 7
171
#
172 173 174
# Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72
# (not v1.73 or v1.71).
#
J
Jeff King 已提交
175 176
# Define ASCIIDOC_ROFF if your DocBook XSL does not escape raw roff directives
# (versions 1.68.1 through v1.72).
177
#
T
Thomas Rast 已提交
178 179 180 181
# Define GNU_ROFF if your target system uses GNU groff.  This forces
# apostrophes to be ASCII so that cut&pasting examples to the shell
# will work.
#
182 183 184
# Define NO_PERL_MAKEMAKER if you cannot use Makefiles generated by perl's
# MakeMaker (e.g. using ActiveState under Cygwin).
#
185 186
# Define NO_PERL if you do not want Perl scripts or libraries at all.
#
187 188
# Define NO_PYTHON if you do not want Python scripts or libraries at all.
#
E
Eygene Ryabinkin 已提交
189 190
# Define NO_TCLTK if you do not want Tcl/Tk GUI.
#
191 192 193 194 195
# The TCL_PATH variable governs the location of the Tcl interpreter
# used to optimize git-gui for your system.  Only used if NO_TCLTK
# is not set.  Defaults to the bare 'tclsh'.
#
# The TCLTK_PATH variable governs the location of the Tcl/Tk interpreter.
196 197 198
# If not set it defaults to the bare 'wish'. If it is set to the empty
# string then NO_TCLTK will be forced (this is used by configure script).
#
199 200 201 202
# Define INTERNAL_QSORT to use Git's implementation of qsort(), which
# is a simplified version of the merge sort used in glibc. This is
# recommended if Git triggers O(n^2) behavior in your platform's qsort().
#
203 204 205
# Define UNRELIABLE_FSTAT if your system's fstat does not return the same
# information on a not yet closed file that lstat would return for the same
# file after it was closed.
206
#
207 208
# Define OBJECT_CREATION_USES_RENAMES if your operating systems has problems
# when hardlinking a file to another name and unlinking the original file right
209
# away (some NTFS drivers seem to zero the contents in that scenario).
210
#
211 212
# Define NO_CROSS_DIRECTORY_HARDLINKS if you plan to distribute the installed
# programs as a tar, where bin/ and libexec/ might be on different file systems.
213 214 215
#
# Define USE_NED_ALLOCATOR if you want to replace the platforms default
# memory allocators with the nedmalloc allocator written by Niall Douglas.
216 217
#
# Define NO_REGEX if you have no or inferior regex support in your C library.
218
#
219 220 221
# Define GETTEXT_POISON if you are debugging the choice of strings marked
# for translation.  This will turn all strings that use gettext into gibberish.
#
222 223
# Define JSMIN to point to JavaScript minifier that functions as
# a filter to have gitweb.js minified.
J
Junio C Hamano 已提交
224
#
225 226 227
# Define CSSMIN to point to a CSS minifier in order to generate a minified
# version of gitweb.css
#
228 229 230 231
# Define DEFAULT_PAGER to a sensible pager command (defaults to "less") if
# you want to use something different.  The value will be interpreted by the
# shell at runtime when it is used.
#
232 233 234 235 236 237 238
# Define DEFAULT_EDITOR to a sensible editor command (defaults to "vi") if you
# want to use something different.  The value will be interpreted by the shell
# if necessary when it is used.  Examples:
#
#   DEFAULT_EDITOR='~/bin/vi',
#   DEFAULT_EDITOR='$GIT_FALLBACK_EDITOR',
#   DEFAULT_EDITOR='"C:\Program Files\Vim\gvim.exe" --nofork'
239 240 241 242
#
# Define COMPUTE_HEADER_DEPENDENCIES if your compiler supports the -MMD option
# and you want to avoid rebuilding objects when an unrelated header file
# changes.
243 244 245
#
# Define CHECK_HEADER_DEPENDENCIES to check for problems in the hard-coded
# dependency rules.
J
Junio C Hamano 已提交
246
#
247
# Define NATIVE_CRLF if your platform uses CRLF for line endings.
248

249
GIT-VERSION-FILE: FORCE
250
	@$(SHELL_PATH) ./GIT-VERSION-GEN
251
-include GIT-VERSION-FILE
252

253 254 255 256 257
uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not')
uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not')
uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not')
uname_P := $(shell sh -c 'uname -p 2>/dev/null || echo not')
J
Junio C Hamano 已提交
258
uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not')
259

260 261 262 263 264 265
ifdef MSVC
	# avoid the MingW and Cygwin configuration sections
	uname_S := Windows
	uname_O := Windows
endif

J
Junio C Hamano 已提交
266
# CFLAGS and LDFLAGS are for the users to override from the command line.
267

268
CFLAGS = -g -O2 -Wall
J
Junio C Hamano 已提交
269
LDFLAGS =
270
ALL_CFLAGS = $(CPPFLAGS) $(CFLAGS)
J
Junio C Hamano 已提交
271
ALL_LDFLAGS = $(LDFLAGS)
J
Junio C Hamano 已提交
272
STRIP ?= strip
273

274 275 276
# Among the variables below, these:
#   gitexecdir
#   template_dir
277 278
#   mandir
#   infodir
279 280
#   htmldir
#   ETC_GITCONFIG (but not sysconfdir)
281
#   ETC_GITATTRIBUTES
282 283
# can be specified as a relative path some/where/else;
# this is interpreted as relative to $(prefix) and "git" at
284 285 286
# runtime figures out where they are based on the path to the executable.
# This can help installing the suite in a relocatable way.

287
prefix = $(HOME)
288 289 290 291 292
bindir_relative = bin
bindir = $(prefix)/$(bindir_relative)
mandir = share/man
infodir = share/info
gitexecdir = libexec/git-core
293
sharedir = $(prefix)/share
294
gitwebdir = $(sharedir)/gitweb
295 296
template_dir = share/git-core/templates
htmldir = share/doc/git-doc
297 298
ifeq ($(prefix),/usr)
sysconfdir = /etc
299
ETC_GITCONFIG = $(sysconfdir)/gitconfig
300
ETC_GITATTRIBUTES = $(sysconfdir)/gitattributes
301 302
else
sysconfdir = $(prefix)/etc
303
ETC_GITCONFIG = etc/gitconfig
304
ETC_GITATTRIBUTES = etc/gitattributes
305
endif
306
lib = lib
307
# DESTDIR=
308
pathsep = :
309

J
Junio C Hamano 已提交
310
export prefix bindir sharedir sysconfdir gitwebdir
311

312 313
CC = gcc
AR = ar
314
RM = rm -f
315
DIFF = diff
316
TAR = tar
317
FIND = find
318 319
INSTALL = install
RPMBUILD = rpmbuild
320
TCL_PATH = tclsh
321
TCLTK_PATH = wish
322
PTHREAD_LIBS = -lpthread
323
PTHREAD_CFLAGS =
324
GCOV = gcov
325

326 327
export TCL_PATH TCLTK_PATH

328 329
# sparse is architecture-neutral, which means that we need to tell it
# explicitly what architecture to check for. Fix this up for yours..
330
SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__
331

P
Petr Baudis 已提交
332 333 334 335


### --- END CONFIGURATION SECTION ---

336
# Those must not be GNU-specific; they are shared with perl/ which may
P
Petr Baudis 已提交
337 338
# be built by a different compiler. (Note that this is an artifact now
# but it still might be nice to keep that distinction.)
339
BASIC_CFLAGS = -I.
P
Petr Baudis 已提交
340
BASIC_LDFLAGS =
341

342 343 344 345 346
# Guard against environment variables
BUILTIN_OBJS =
BUILT_INS =
COMPAT_CFLAGS =
COMPAT_OBJS =
347
EXTRA_CPPFLAGS =
348 349
LIB_H =
LIB_OBJS =
350
PROGRAM_OBJS =
351 352
PROGRAMS =
SCRIPT_PERL =
353
SCRIPT_PYTHON =
354
SCRIPT_SH =
355
SCRIPT_LIB =
356
TEST_PROGRAMS_NEED_X =
357

J
Jonathan Nieder 已提交
358 359 360 361 362 363
# Having this variable in your environment would break pipelines because
# you cause "cd" to echo its destination to stdout.  It can also take
# scripts to unexpected places.  If you like CDPATH, define it for your
# interactive shell sessions without exporting it.
unexport CDPATH

364 365
SCRIPT_SH += git-am.sh
SCRIPT_SH += git-bisect.sh
366
SCRIPT_SH += git-difftool--helper.sh
367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382
SCRIPT_SH += git-filter-branch.sh
SCRIPT_SH += git-lost-found.sh
SCRIPT_SH += git-merge-octopus.sh
SCRIPT_SH += git-merge-one-file.sh
SCRIPT_SH += git-merge-resolve.sh
SCRIPT_SH += git-mergetool.sh
SCRIPT_SH += git-pull.sh
SCRIPT_SH += git-quiltimport.sh
SCRIPT_SH += git-rebase--interactive.sh
SCRIPT_SH += git-rebase.sh
SCRIPT_SH += git-repack.sh
SCRIPT_SH += git-request-pull.sh
SCRIPT_SH += git-stash.sh
SCRIPT_SH += git-submodule.sh
SCRIPT_SH += git-web--browse.sh

383 384 385 386
SCRIPT_LIB += git-mergetool--lib
SCRIPT_LIB += git-parse-remote
SCRIPT_LIB += git-sh-setup

387
SCRIPT_PERL += git-add--interactive.perl
388
SCRIPT_PERL += git-difftool.perl
389 390 391 392 393 394 395
SCRIPT_PERL += git-archimport.perl
SCRIPT_PERL += git-cvsexportcommit.perl
SCRIPT_PERL += git-cvsimport.perl
SCRIPT_PERL += git-cvsserver.perl
SCRIPT_PERL += git-relink.perl
SCRIPT_PERL += git-send-email.perl
SCRIPT_PERL += git-svn.perl
396

397 398
SCRIPT_PYTHON += git-remote-testgit.py

399 400
SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
	  $(patsubst %.perl,%,$(SCRIPT_PERL)) \
401
	  $(patsubst %.py,%,$(SCRIPT_PYTHON)) \
402
	  git-instaweb
403

404 405
ETAGS_TARGET = TAGS

406 407
# Empty...
EXTRA_PROGRAMS =
408

409 410
# ... and all the rest that could be moved out of bindir to gitexecdir
PROGRAMS += $(EXTRA_PROGRAMS)
411

412
PROGRAM_OBJS += daemon.o
413 414 415 416 417 418 419 420
PROGRAM_OBJS += fast-import.o
PROGRAM_OBJS += imap-send.o
PROGRAM_OBJS += shell.o
PROGRAM_OBJS += show-index.o
PROGRAM_OBJS += upload-pack.o
PROGRAM_OBJS += http-backend.o

PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS))
421

422 423 424 425 426 427
TEST_PROGRAMS_NEED_X += test-chmtime
TEST_PROGRAMS_NEED_X += test-ctype
TEST_PROGRAMS_NEED_X += test-date
TEST_PROGRAMS_NEED_X += test-delta
TEST_PROGRAMS_NEED_X += test-dump-cache-tree
TEST_PROGRAMS_NEED_X += test-genrandom
D
David Barr 已提交
428
TEST_PROGRAMS_NEED_X += test-line-buffer
429
TEST_PROGRAMS_NEED_X += test-match-trees
D
David Barr 已提交
430
TEST_PROGRAMS_NEED_X += test-obj-pool
431 432 433 434 435
TEST_PROGRAMS_NEED_X += test-parse-options
TEST_PROGRAMS_NEED_X += test-path-utils
TEST_PROGRAMS_NEED_X += test-run-command
TEST_PROGRAMS_NEED_X += test-sha1
TEST_PROGRAMS_NEED_X += test-sigchain
D
David Barr 已提交
436
TEST_PROGRAMS_NEED_X += test-string-pool
437
TEST_PROGRAMS_NEED_X += test-subprocess
D
David Barr 已提交
438
TEST_PROGRAMS_NEED_X += test-svn-fe
J
Jason Evans 已提交
439
TEST_PROGRAMS_NEED_X += test-treap
440
TEST_PROGRAMS_NEED_X += test-index-version
441
TEST_PROGRAMS_NEED_X += test-mktemp
442

J
Junio C Hamano 已提交
443
TEST_PROGRAMS = $(patsubst %,%$X,$(TEST_PROGRAMS_NEED_X))
444

J
Junio C Hamano 已提交
445
# List built-in command $C whose implementation cmd_$C() is not in
446 447
# builtin/$C.o but is linked in as part of some other command.
BUILT_INS += $(patsubst builtin/%.o,git-%$X,$(BUILTIN_OBJS))
448 449

BUILT_INS += git-cherry$X
450
BUILT_INS += git-cherry-pick$X
451 452 453 454 455 456 457 458
BUILT_INS += git-format-patch$X
BUILT_INS += git-fsck-objects$X
BUILT_INS += git-get-tar-commit-id$X
BUILT_INS += git-init$X
BUILT_INS += git-merge-subtree$X
BUILT_INS += git-peek-remote$X
BUILT_INS += git-repo-config$X
BUILT_INS += git-show$X
J
Junio C Hamano 已提交
459
BUILT_INS += git-stage$X
460 461
BUILT_INS += git-status$X
BUILT_INS += git-whatchanged$X
J
Junio C Hamano 已提交
462

463 464
# what 'all' will build and 'install' will install in gitexecdir,
# excluding programs for built-in commands
J
Junio C Hamano 已提交
465
ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
466

E
Eygene Ryabinkin 已提交
467
# what 'all' will build but not install in gitexecdir
468
OTHER_PROGRAMS = git$X
E
Eygene Ryabinkin 已提交
469

470 471 472 473 474 475 476 477 478
# what test wrappers are needed and 'install' will install, in bindir
BINDIR_PROGRAMS_NEED_X += git
BINDIR_PROGRAMS_NEED_X += git-upload-pack
BINDIR_PROGRAMS_NEED_X += git-receive-pack
BINDIR_PROGRAMS_NEED_X += git-upload-archive
BINDIR_PROGRAMS_NEED_X += git-shell

BINDIR_PROGRAMS_NO_X += git-cvsserver

479 480 481 482 483 484 485
# Set paths to tools early so that they can be used for version tests.
ifndef SHELL_PATH
	SHELL_PATH = /bin/sh
endif
ifndef PERL_PATH
	PERL_PATH = /usr/bin/perl
endif
486 487 488
ifndef PYTHON_PATH
	PYTHON_PATH = /usr/bin/python
endif
489

L
Luben Tuikov 已提交
490
export PERL_PATH
491
export PYTHON_PATH
L
Luben Tuikov 已提交
492

L
Linus Torvalds 已提交
493
LIB_FILE=libgit.a
494
XDIFF_LIB=xdiff/lib.a
J
Jonathan Nieder 已提交
495
VCSSVN_LIB=vcs-svn/lib.a
J
Junio C Hamano 已提交
496

497
LIB_H += advice.h
498 499 500 501 502 503
LIB_H += archive.h
LIB_H += attr.h
LIB_H += blob.h
LIB_H += builtin.h
LIB_H += cache.h
LIB_H += cache-tree.h
504
LIB_H += color.h
505
LIB_H += commit.h
506
LIB_H += compat/bswap.h
507
LIB_H += compat/cygwin.h
508
LIB_H += compat/mingw.h
509
LIB_H += compat/win32/pthread.h
M
Mike Pape 已提交
510
LIB_H += compat/win32/syslog.h
511
LIB_H += compat/win32/sys/poll.h
E
Erik Faye-Lund 已提交
512
LIB_H += compat/win32/dirent.h
513 514 515 516 517 518
LIB_H += csum-file.h
LIB_H += decorate.h
LIB_H += delta.h
LIB_H += diffcore.h
LIB_H += diff.h
LIB_H += dir.h
519
LIB_H += exec_cmd.h
520
LIB_H += fsck.h
521
LIB_H += gettext.h
522
LIB_H += git-compat-util.h
A
Adam Simpkins 已提交
523
LIB_H += graph.h
524 525
LIB_H += grep.h
LIB_H += hash.h
526
LIB_H += help.h
527
LIB_H += levenshtein.h
528 529 530 531
LIB_H += list-objects.h
LIB_H += ll-merge.h
LIB_H += log-tree.h
LIB_H += mailmap.h
532
LIB_H += merge-recursive.h
J
Johannes Schindelin 已提交
533
LIB_H += notes.h
J
Jeff King 已提交
534
LIB_H += notes-cache.h
535
LIB_H += notes-merge.h
536 537
LIB_H += object.h
LIB_H += pack.h
538
LIB_H += pack-refs.h
539 540 541 542 543 544 545 546 547
LIB_H += pack-revindex.h
LIB_H += parse-options.h
LIB_H += patch-ids.h
LIB_H += pkt-line.h
LIB_H += progress.h
LIB_H += quote.h
LIB_H += reflog-walk.h
LIB_H += refs.h
LIB_H += remote.h
548
LIB_H += rerere.h
549
LIB_H += resolve-undo.h
550 551
LIB_H += revision.h
LIB_H += run-command.h
552
LIB_H += sha1-lookup.h
553
LIB_H += sideband.h
554
LIB_H += sigchain.h
555
LIB_H += strbuf.h
556
LIB_H += string-list.h
557
LIB_H += submodule.h
558 559 560 561 562
LIB_H += tag.h
LIB_H += transport.h
LIB_H += tree.h
LIB_H += tree-walk.h
LIB_H += unpack-trees.h
563
LIB_H += userdiff.h
564
LIB_H += utf8.h
565 566
LIB_H += xdiff-interface.h
LIB_H += xdiff/xdiff.h
567

568
LIB_OBJS += abspath.o
569
LIB_OBJS += advice.o
570 571 572 573 574 575 576
LIB_OBJS += alias.o
LIB_OBJS += alloc.o
LIB_OBJS += archive.o
LIB_OBJS += archive-tar.o
LIB_OBJS += archive-zip.o
LIB_OBJS += attr.o
LIB_OBJS += base85.o
577
LIB_OBJS += bisect.o
578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599
LIB_OBJS += blob.o
LIB_OBJS += branch.o
LIB_OBJS += bundle.o
LIB_OBJS += cache-tree.o
LIB_OBJS += color.o
LIB_OBJS += combine-diff.o
LIB_OBJS += commit.o
LIB_OBJS += config.o
LIB_OBJS += connect.o
LIB_OBJS += convert.o
LIB_OBJS += copy.o
LIB_OBJS += csum-file.o
LIB_OBJS += ctype.o
LIB_OBJS += date.o
LIB_OBJS += decorate.o
LIB_OBJS += diffcore-break.o
LIB_OBJS += diffcore-delta.o
LIB_OBJS += diffcore-order.o
LIB_OBJS += diffcore-pickaxe.o
LIB_OBJS += diffcore-rename.o
LIB_OBJS += diff-delta.o
LIB_OBJS += diff-lib.o
600
LIB_OBJS += diff-no-index.o
601 602
LIB_OBJS += diff.o
LIB_OBJS += dir.o
603
LIB_OBJS += editor.o
604 605 606 607
LIB_OBJS += entry.o
LIB_OBJS += environment.o
LIB_OBJS += exec_cmd.o
LIB_OBJS += fsck.o
A
Adam Simpkins 已提交
608
LIB_OBJS += graph.o
609 610 611
LIB_OBJS += grep.o
LIB_OBJS += hash.o
LIB_OBJS += help.o
L
Linus Torvalds 已提交
612
LIB_OBJS += hex.o
613
LIB_OBJS += ident.o
614
LIB_OBJS += levenshtein.o
615 616 617 618 619 620 621
LIB_OBJS += list-objects.o
LIB_OBJS += ll-merge.o
LIB_OBJS += lockfile.o
LIB_OBJS += log-tree.o
LIB_OBJS += mailmap.o
LIB_OBJS += match-trees.o
LIB_OBJS += merge-file.o
622
LIB_OBJS += merge-recursive.o
623
LIB_OBJS += name-hash.o
J
Johannes Schindelin 已提交
624
LIB_OBJS += notes.o
J
Jeff King 已提交
625
LIB_OBJS += notes-cache.o
626
LIB_OBJS += notes-merge.o
627 628
LIB_OBJS += object.o
LIB_OBJS += pack-check.o
629
LIB_OBJS += pack-refs.o
630 631 632 633 634 635 636 637
LIB_OBJS += pack-revindex.o
LIB_OBJS += pack-write.o
LIB_OBJS += pager.o
LIB_OBJS += parse-options.o
LIB_OBJS += patch-delta.o
LIB_OBJS += patch-ids.o
LIB_OBJS += path.o
LIB_OBJS += pkt-line.o
638
LIB_OBJS += preload-index.o
639 640 641 642 643 644 645 646
LIB_OBJS += pretty.o
LIB_OBJS += progress.o
LIB_OBJS += quote.o
LIB_OBJS += reachable.o
LIB_OBJS += read-cache.o
LIB_OBJS += reflog-walk.o
LIB_OBJS += refs.o
LIB_OBJS += remote.o
647
LIB_OBJS += replace_object.o
648
LIB_OBJS += rerere.o
649
LIB_OBJS += resolve-undo.o
650 651 652 653
LIB_OBJS += revision.o
LIB_OBJS += run-command.o
LIB_OBJS += server-info.o
LIB_OBJS += setup.o
654
LIB_OBJS += sha1-lookup.o
655
LIB_OBJS += sha1_file.o
656 657 658
LIB_OBJS += sha1_name.o
LIB_OBJS += shallow.o
LIB_OBJS += sideband.o
659
LIB_OBJS += sigchain.o
660
LIB_OBJS += strbuf.o
661
LIB_OBJS += string-list.o
662
LIB_OBJS += submodule.o
663 664 665 666
LIB_OBJS += symlinks.o
LIB_OBJS += tag.o
LIB_OBJS += trace.o
LIB_OBJS += transport.o
667
LIB_OBJS += transport-helper.o
668 669 670 671
LIB_OBJS += tree-diff.o
LIB_OBJS += tree.o
LIB_OBJS += tree-walk.o
LIB_OBJS += unpack-trees.o
J
Jeff King 已提交
672
LIB_OBJS += url.o
673
LIB_OBJS += usage.o
674
LIB_OBJS += userdiff.o
675 676
LIB_OBJS += utf8.o
LIB_OBJS += walker.o
677
LIB_OBJS += wrapper.o
678 679 680 681
LIB_OBJS += write_or_die.o
LIB_OBJS += ws.o
LIB_OBJS += wt-status.o
LIB_OBJS += xdiff-interface.o
682
LIB_OBJS += zlib.o
683

684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736
BUILTIN_OBJS += builtin/add.o
BUILTIN_OBJS += builtin/annotate.o
BUILTIN_OBJS += builtin/apply.o
BUILTIN_OBJS += builtin/archive.o
BUILTIN_OBJS += builtin/bisect--helper.o
BUILTIN_OBJS += builtin/blame.o
BUILTIN_OBJS += builtin/branch.o
BUILTIN_OBJS += builtin/bundle.o
BUILTIN_OBJS += builtin/cat-file.o
BUILTIN_OBJS += builtin/check-attr.o
BUILTIN_OBJS += builtin/check-ref-format.o
BUILTIN_OBJS += builtin/checkout-index.o
BUILTIN_OBJS += builtin/checkout.o
BUILTIN_OBJS += builtin/clean.o
BUILTIN_OBJS += builtin/clone.o
BUILTIN_OBJS += builtin/commit-tree.o
BUILTIN_OBJS += builtin/commit.o
BUILTIN_OBJS += builtin/config.o
BUILTIN_OBJS += builtin/count-objects.o
BUILTIN_OBJS += builtin/describe.o
BUILTIN_OBJS += builtin/diff-files.o
BUILTIN_OBJS += builtin/diff-index.o
BUILTIN_OBJS += builtin/diff-tree.o
BUILTIN_OBJS += builtin/diff.o
BUILTIN_OBJS += builtin/fast-export.o
BUILTIN_OBJS += builtin/fetch-pack.o
BUILTIN_OBJS += builtin/fetch.o
BUILTIN_OBJS += builtin/fmt-merge-msg.o
BUILTIN_OBJS += builtin/for-each-ref.o
BUILTIN_OBJS += builtin/fsck.o
BUILTIN_OBJS += builtin/gc.o
BUILTIN_OBJS += builtin/grep.o
BUILTIN_OBJS += builtin/hash-object.o
BUILTIN_OBJS += builtin/help.o
BUILTIN_OBJS += builtin/index-pack.o
BUILTIN_OBJS += builtin/init-db.o
BUILTIN_OBJS += builtin/log.o
BUILTIN_OBJS += builtin/ls-files.o
BUILTIN_OBJS += builtin/ls-remote.o
BUILTIN_OBJS += builtin/ls-tree.o
BUILTIN_OBJS += builtin/mailinfo.o
BUILTIN_OBJS += builtin/mailsplit.o
BUILTIN_OBJS += builtin/merge.o
BUILTIN_OBJS += builtin/merge-base.o
BUILTIN_OBJS += builtin/merge-file.o
BUILTIN_OBJS += builtin/merge-index.o
BUILTIN_OBJS += builtin/merge-ours.o
BUILTIN_OBJS += builtin/merge-recursive.o
BUILTIN_OBJS += builtin/merge-tree.o
BUILTIN_OBJS += builtin/mktag.o
BUILTIN_OBJS += builtin/mktree.o
BUILTIN_OBJS += builtin/mv.o
BUILTIN_OBJS += builtin/name-rev.o
J
Junio C Hamano 已提交
737
BUILTIN_OBJS += builtin/notes.o
738 739 740 741 742 743 744 745 746 747 748
BUILTIN_OBJS += builtin/pack-objects.o
BUILTIN_OBJS += builtin/pack-redundant.o
BUILTIN_OBJS += builtin/pack-refs.o
BUILTIN_OBJS += builtin/patch-id.o
BUILTIN_OBJS += builtin/prune-packed.o
BUILTIN_OBJS += builtin/prune.o
BUILTIN_OBJS += builtin/push.o
BUILTIN_OBJS += builtin/read-tree.o
BUILTIN_OBJS += builtin/receive-pack.o
BUILTIN_OBJS += builtin/reflog.o
BUILTIN_OBJS += builtin/remote.o
I
Ilari Liusvaara 已提交
749
BUILTIN_OBJS += builtin/remote-ext.o
I
Ilari Liusvaara 已提交
750
BUILTIN_OBJS += builtin/remote-fd.o
751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775
BUILTIN_OBJS += builtin/replace.o
BUILTIN_OBJS += builtin/rerere.o
BUILTIN_OBJS += builtin/reset.o
BUILTIN_OBJS += builtin/rev-list.o
BUILTIN_OBJS += builtin/rev-parse.o
BUILTIN_OBJS += builtin/revert.o
BUILTIN_OBJS += builtin/rm.o
BUILTIN_OBJS += builtin/send-pack.o
BUILTIN_OBJS += builtin/shortlog.o
BUILTIN_OBJS += builtin/show-branch.o
BUILTIN_OBJS += builtin/show-ref.o
BUILTIN_OBJS += builtin/stripspace.o
BUILTIN_OBJS += builtin/symbolic-ref.o
BUILTIN_OBJS += builtin/tag.o
BUILTIN_OBJS += builtin/tar-tree.o
BUILTIN_OBJS += builtin/unpack-file.o
BUILTIN_OBJS += builtin/unpack-objects.o
BUILTIN_OBJS += builtin/update-index.o
BUILTIN_OBJS += builtin/update-ref.o
BUILTIN_OBJS += builtin/update-server-info.o
BUILTIN_OBJS += builtin/upload-archive.o
BUILTIN_OBJS += builtin/var.o
BUILTIN_OBJS += builtin/verify-pack.o
BUILTIN_OBJS += builtin/verify-tag.o
BUILTIN_OBJS += builtin/write-tree.o
776

777
GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
778
EXTLIBS =
779

780 781 782
#
# Platform specific tweaks
#
783 784 785 786 787

# We choose to avoid "if .. else if .. else .. endif endif"
# because maintaining the nesting to match is a pain.  If
# we had "elif" things would have been much nicer...

788 789 790 791 792 793 794
ifeq ($(uname_S),OSF1)
	# Need this for u_short definitions et al
	BASIC_CFLAGS += -D_OSF_SOURCE
	SOCKLEN_T = int
	NO_STRTOULL = YesPlease
	NO_NSEC = YesPlease
endif
795 796
ifeq ($(uname_S),Linux)
	NO_STRLCPY = YesPlease
797
	NO_MKSTEMPS = YesPlease
798
	HAVE_PATHS_H = YesPlease
799
endif
G
Gerrit Pape 已提交
800 801
ifeq ($(uname_S),GNU/kFreeBSD)
	NO_STRLCPY = YesPlease
802
	NO_MKSTEMPS = YesPlease
803
	HAVE_PATHS_H = YesPlease
G
Gerrit Pape 已提交
804
endif
B
Boyd Lynn Gerber 已提交
805 806 807 808 809 810 811 812 813
ifeq ($(uname_S),UnixWare)
	CC = cc
	NEEDS_SOCKET = YesPlease
	NEEDS_NSL = YesPlease
	NEEDS_SSL_WITH_CRYPTO = YesPlease
	NEEDS_LIBICONV = YesPlease
	SHELL_PATH = /usr/local/bin/bash
	NO_IPV6 = YesPlease
	NO_HSTRERROR = YesPlease
814
	NO_MKSTEMPS = YesPlease
B
Boyd Lynn Gerber 已提交
815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837
	BASIC_CFLAGS += -Kthread
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
	INSTALL = ginstall
	TAR = gtar
	NO_STRCASESTR = YesPlease
	NO_MEMMEM = YesPlease
endif
ifeq ($(uname_S),SCO_SV)
	ifeq ($(uname_R),3.2)
		CFLAGS = -O2
	endif
	ifeq ($(uname_R),5)
		CC = cc
		BASIC_CFLAGS += -Kthread
	endif
	NEEDS_SOCKET = YesPlease
	NEEDS_NSL = YesPlease
	NEEDS_SSL_WITH_CRYPTO = YesPlease
	NEEDS_LIBICONV = YesPlease
	SHELL_PATH = /usr/bin/bash
	NO_IPV6 = YesPlease
	NO_HSTRERROR = YesPlease
838
	NO_MKSTEMPS = YesPlease
B
Boyd Lynn Gerber 已提交
839 840 841 842 843 844 845
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
	NO_STRCASESTR = YesPlease
	NO_MEMMEM = YesPlease
	INSTALL = ginstall
	TAR = gtar
endif
846
ifeq ($(uname_S),Darwin)
847
	NEEDS_CRYPTO_WITH_SSL = YesPlease
848 849
	NEEDS_SSL_WITH_CRYPTO = YesPlease
	NEEDS_LIBICONV = YesPlease
850
	ifeq ($(shell expr "$(uname_R)" : '[15678]\.'),2)
851 852
		OLD_ICONV = UnfortunatelyYes
	endif
853 854 855
	ifeq ($(shell expr "$(uname_R)" : '[15]\.'),2)
		NO_STRLCPY = YesPlease
	endif
856
	NO_MEMMEM = YesPlease
857
	USE_ST_TIMESPEC = YesPlease
858
endif
859
ifeq ($(uname_S),SunOS)
860
	NEEDS_SOCKET = YesPlease
861
	NEEDS_NSL = YesPlease
862
	SHELL_PATH = /bin/bash
863
	SANE_TOOL_PATH = /usr/xpg6/bin:/usr/xpg4/bin
864
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
865
	NO_MEMMEM = YesPlease
866
	NO_MKDTEMP = YesPlease
867
	NO_MKSTEMPS = YesPlease
868
	NO_REGEX = YesPlease
869
	NO_FNMATCH_CASEFOLD = YesPlease
870 871 872 873 874 875 876 877 878 879 880 881
	ifeq ($(uname_R),5.6)
		SOCKLEN_T = int
		NO_HSTRERROR = YesPlease
		NO_IPV6 = YesPlease
		NO_SOCKADDR_STORAGE = YesPlease
		NO_UNSETENV = YesPlease
		NO_SETENV = YesPlease
		NO_STRLCPY = YesPlease
		NO_C99_FORMAT = YesPlease
		NO_STRTOUMAX = YesPlease
		GIT_TEST_CMP = cmp
	endif
882 883 884 885 886 887 888 889 890
	ifeq ($(uname_R),5.7)
		NEEDS_RESOLV = YesPlease
		NO_IPV6 = YesPlease
		NO_SOCKADDR_STORAGE = YesPlease
		NO_UNSETENV = YesPlease
		NO_SETENV = YesPlease
		NO_STRLCPY = YesPlease
		NO_C99_FORMAT = YesPlease
		NO_STRTOUMAX = YesPlease
891
		GIT_TEST_CMP = cmp
892
	endif
J
Jason Riedy 已提交
893
	ifeq ($(uname_R),5.8)
J
Jason Riedy 已提交
894
		NO_UNSETENV = YesPlease
J
Jason Riedy 已提交
895
		NO_SETENV = YesPlease
896
		NO_C99_FORMAT = YesPlease
897
		NO_STRTOUMAX = YesPlease
898
		GIT_TEST_CMP = cmp
J
Jason Riedy 已提交
899
	endif
900 901 902
	ifeq ($(uname_R),5.9)
		NO_UNSETENV = YesPlease
		NO_SETENV = YesPlease
903
		NO_C99_FORMAT = YesPlease
904
		NO_STRTOUMAX = YesPlease
905
		GIT_TEST_CMP = cmp
906
	endif
907
	INSTALL = /usr/ucb/install
908
	TAR = gtar
909
	BASIC_CFLAGS += -D__EXTENSIONS__ -D__sun__ -DHAVE_ALLOCA_H
910
endif
911
ifeq ($(uname_O),Cygwin)
912
	ifeq ($(shell expr "$(uname_R)" : '1\.[1-6]\.'),4)
913 914 915 916 917 918 919 920 921
		NO_D_TYPE_IN_DIRENT = YesPlease
		NO_D_INO_IN_DIRENT = YesPlease
		NO_STRCASESTR = YesPlease
		NO_MEMMEM = YesPlease
		NO_MKSTEMPS = YesPlease
		NO_SYMLINK_HEAD = YesPlease
		NO_IPV6 = YesPlease
		OLD_ICONV = UnfortunatelyYes
	endif
H
hpa 已提交
922
	NEEDS_LIBICONV = YesPlease
923
	NO_FAST_WORKING_DIRECTORY = UnfortunatelyYes
924
	NO_TRUSTABLE_FILEMODE = UnfortunatelyYes
925
	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
926 927
	# There are conflicting reports about this.
	# On some boxes NO_MMAP is needed, and not so elsewhere.
J
Junio C Hamano 已提交
928 929
	# Try commenting this out if you suspect MMAP is more efficient
	NO_MMAP = YesPlease
P
Peter Anvin 已提交
930
	X = .exe
931 932
	COMPAT_OBJS += compat/cygwin.o
	UNRELIABLE_FSTAT = UnfortunatelyYes
933
endif
A
Alecs King 已提交
934 935
ifeq ($(uname_S),FreeBSD)
	NEEDS_LIBICONV = YesPlease
936
	OLD_ICONV = YesPlease
937
	NO_MEMMEM = YesPlease
938 939
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
940
	DIR_HAS_BSD_GROUP_SEMANTICS = YesPlease
941
	USE_ST_TIMESPEC = YesPlease
942
	ifeq ($(shell expr "$(uname_R)" : '4\.'),2)
943
		PTHREAD_LIBS = -pthread
944 945 946
		NO_UINTMAX_T = YesPlease
		NO_STRTOUMAX = YesPlease
	endif
947
	PYTHON_PATH = /usr/local/bin/python
948
	HAVE_PATHS_H = YesPlease
A
Alecs King 已提交
949
endif
950
ifeq ($(uname_S),OpenBSD)
951
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
952
	NO_MEMMEM = YesPlease
T
Tony Kemp 已提交
953
	USE_ST_TIMESPEC = YesPlease
H
Han Boetes 已提交
954
	NEEDS_LIBICONV = YesPlease
955 956
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
957
	HAVE_PATHS_H = YesPlease
J
Junio C Hamano 已提交
958 959
endif
ifeq ($(uname_S),NetBSD)
960 961 962
	ifeq ($(shell expr "$(uname_R)" : '[01]\.'),2)
		NEEDS_LIBICONV = YesPlease
	endif
963
	BASIC_CFLAGS += -I/usr/pkg/include
964
	BASIC_LDFLAGS += -L/usr/pkg/lib $(CC_LD_DYNPATH)/usr/pkg/lib
P
Patrick Welche 已提交
965
	USE_ST_TIMESPEC = YesPlease
966
	NO_MKSTEMPS = YesPlease
967
	HAVE_PATHS_H = YesPlease
H
Han Boetes 已提交
968
endif
969
ifeq ($(uname_S),AIX)
970
	DEFAULT_PAGER = more
971
	NO_STRCASESTR=YesPlease
R
René Scharfe 已提交
972
	NO_MEMMEM = YesPlease
973
	NO_MKDTEMP = YesPlease
974
	NO_MKSTEMPS = YesPlease
975
	NO_STRLCPY = YesPlease
976
	NO_NSEC = YesPlease
977 978
	FREAD_READS_DIRECTORIES = UnfortunatelyYes
	INTERNAL_QSORT = UnfortunatelyYes
979
	NEEDS_LIBICONV=YesPlease
980
	BASIC_CFLAGS += -D_LARGE_FILES
981
	ifeq ($(shell expr "$(uname_V)" : '[1234]'),1)
J
Junio C Hamano 已提交
982
		NO_PTHREADS = YesPlease
983 984
	else
		PTHREAD_LIBS = -lpthread
J
Junio C Hamano 已提交
985
	endif
986 987
	ifeq ($(shell expr "$(uname_V).$(uname_R)" : '5\.1'),3)
		INLINE=''
J
Junio C Hamano 已提交
988
	endif
989
	GIT_TEST_CMP = cmp
990
endif
T
Thomas Schwinge 已提交
991 992 993
ifeq ($(uname_S),GNU)
	# GNU/Hurd
	NO_STRLCPY=YesPlease
994
	NO_MKSTEMPS = YesPlease
995
	HAVE_PATHS_H = YesPlease
T
Thomas Schwinge 已提交
996
endif
997 998 999 1000 1001 1002 1003
ifeq ($(uname_S),IRIX)
	NO_SETENV = YesPlease
	NO_UNSETENV = YesPlease
	NO_STRCASESTR = YesPlease
	NO_MEMMEM = YesPlease
	NO_MKSTEMPS = YesPlease
	NO_MKDTEMP = YesPlease
1004 1005 1006 1007 1008 1009
	# When compiled with the MIPSpro 7.4.4m compiler, and without pthreads
	# (i.e. NO_PTHREADS is set), and _with_ MMAP (i.e. NO_MMAP is not set),
	# git dies with a segmentation fault when trying to access the first
	# entry of a reflog.  The conservative choice is made to always set
	# NO_MMAP.  If you suspect that your compiler is not affected by this
	# issue, comment out the NO_MMAP statement.
1010
	NO_MMAP = YesPlease
1011
	NO_REGEX = YesPlease
1012
	NO_FNMATCH_CASEFOLD = YesPlease
1013 1014 1015 1016
	SNPRINTF_RETURNS_BOGUS = YesPlease
	SHELL_PATH = /usr/gnu/bin/bash
	NEEDS_LIBGEN = YesPlease
endif
J
Johannes Schindelin 已提交
1017 1018
ifeq ($(uname_S),IRIX64)
	NO_SETENV=YesPlease
B
Brandon Casey 已提交
1019
	NO_UNSETENV = YesPlease
J
Johannes Schindelin 已提交
1020
	NO_STRCASESTR=YesPlease
R
René Scharfe 已提交
1021
	NO_MEMMEM = YesPlease
1022
	NO_MKSTEMPS = YesPlease
B
Brandon Casey 已提交
1023
	NO_MKDTEMP = YesPlease
1024 1025 1026 1027 1028 1029
	# When compiled with the MIPSpro 7.4.4m compiler, and without pthreads
	# (i.e. NO_PTHREADS is set), and _with_ MMAP (i.e. NO_MMAP is not set),
	# git dies with a segmentation fault when trying to access the first
	# entry of a reflog.  The conservative choice is made to always set
	# NO_MMAP.  If you suspect that your compiler is not affected by this
	# issue, comment out the NO_MMAP statement.
B
Brandon Casey 已提交
1030
	NO_MMAP = YesPlease
1031
	NO_REGEX = YesPlease
1032
	NO_FNMATCH_CASEFOLD = YesPlease
B
Brandon Casey 已提交
1033
	SNPRINTF_RETURNS_BOGUS = YesPlease
J
Johannes Schindelin 已提交
1034
	SHELL_PATH=/usr/gnu/bin/bash
B
Brandon Casey 已提交
1035
	NEEDS_LIBGEN = YesPlease
J
Johannes Schindelin 已提交
1036
endif
1037
ifeq ($(uname_S),HP-UX)
1038
	INLINE = __inline
1039 1040 1041 1042
	NO_IPV6=YesPlease
	NO_SETENV=YesPlease
	NO_STRCASESTR=YesPlease
	NO_MEMMEM = YesPlease
1043
	NO_MKSTEMPS = YesPlease
1044 1045 1046 1047 1048
	NO_STRLCPY = YesPlease
	NO_MKDTEMP = YesPlease
	NO_UNSETENV = YesPlease
	NO_HSTRERROR = YesPlease
	NO_SYS_SELECT_H = YesPlease
1049
	SNPRINTF_RETURNS_BOGUS = YesPlease
1050 1051 1052 1053
	NO_NSEC = YesPlease
	ifeq ($(uname_R),B.11.00)
		NO_INET_NTOP = YesPlease
		NO_INET_PTON = YesPlease
1054 1055 1056 1057 1058 1059 1060 1061
	endif
	ifeq ($(uname_R),B.10.20)
		# Override HP-UX 11.x setting:
		INLINE =
		SOCKLEN_T = size_t
		NO_PREAD = YesPlease
		NO_INET_NTOP = YesPlease
		NO_INET_PTON = YesPlease
1062
	endif
1063
	GIT_TEST_CMP = cmp
1064
endif
1065
ifeq ($(uname_S),Windows)
1066
	GIT_VERSION := $(GIT_VERSION).MSVC
M
Marius Storm-Olsen 已提交
1067 1068
	pathsep = ;
	NO_PREAD = YesPlease
1069
	NEEDS_CRYPTO_WITH_SSL = YesPlease
M
Marius Storm-Olsen 已提交
1070 1071 1072 1073 1074 1075 1076
	NO_LIBGEN_H = YesPlease
	NO_SYMLINK_HEAD = YesPlease
	NO_IPV6 = YesPlease
	NO_SETENV = YesPlease
	NO_UNSETENV = YesPlease
	NO_STRCASESTR = YesPlease
	NO_STRLCPY = YesPlease
J
Jonathan Nieder 已提交
1077
	NO_STRTOK_R = YesPlease
1078
	NO_FNMATCH = YesPlease
M
Marius Storm-Olsen 已提交
1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098
	NO_MEMMEM = YesPlease
	# NEEDS_LIBICONV = YesPlease
	NO_ICONV = YesPlease
	NO_C99_FORMAT = YesPlease
	NO_STRTOUMAX = YesPlease
	NO_STRTOULL = YesPlease
	NO_MKDTEMP = YesPlease
	NO_MKSTEMPS = YesPlease
	SNPRINTF_RETURNS_BOGUS = YesPlease
	NO_SVN_TESTS = YesPlease
	NO_PERL_MAKEMAKER = YesPlease
	RUNTIME_PREFIX = YesPlease
	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
	NO_NSEC = YesPlease
	USE_WIN32_MMAP = YesPlease
	# USE_NED_ALLOCATOR = YesPlease
	UNRELIABLE_FSTAT = UnfortunatelyYes
	OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
	NO_REGEX = YesPlease
	NO_CURL = YesPlease
E
Erik Faye-Lund 已提交
1099
	NO_PYTHON = YesPlease
J
Johannes Sixt 已提交
1100
	BLK_SHA1 = YesPlease
1101
	NO_POSIX_GOODIES = UnfortunatelyYes
1102
	NATIVE_CRLF = YesPlease
M
Marius Storm-Olsen 已提交
1103 1104 1105 1106

	CC = compat/vcbuild/scripts/clink.pl
	AR = compat/vcbuild/scripts/lib.pl
	CFLAGS =
R
Ramsay Jones 已提交
1107
	BASIC_CFLAGS = -nologo -I. -I../zlib -Icompat/vcbuild -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE
J
Junio C Hamano 已提交
1108
	COMPAT_OBJS = compat/msvc.o compat/winansi.o \
E
Erik Faye-Lund 已提交
1109 1110
		compat/win32/pthread.o compat/win32/syslog.o \
		compat/win32/sys/poll.o compat/win32/dirent.o
1111
	COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DNOGDI -DHAVE_STRING_H -DHAVE_ALLOCA_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
M
Marius Storm-Olsen 已提交
1112
	BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -SUBSYSTEM:CONSOLE -NODEFAULTLIB:MSVCRT.lib
1113
	EXTLIBS = user32.lib advapi32.lib shell32.lib wininet.lib ws2_32.lib
1114
	PTHREAD_LIBS =
M
Marius Storm-Olsen 已提交
1115 1116 1117 1118 1119 1120 1121 1122 1123
	lib =
ifndef DEBUG
	BASIC_CFLAGS += -GL -Os -MT
	BASIC_LDFLAGS += -LTCG
	AR += -LTCG
else
	BASIC_CFLAGS += -Zi -MTd
endif
	X = .exe
1124
endif
1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143
ifeq ($(uname_S),Interix)
	NO_SYS_POLL_H = YesPlease
	NO_INTTYPES_H = YesPlease
	NO_INITGROUPS = YesPlease
	NO_IPV6 = YesPlease
	NO_MEMMEM = YesPlease
	NO_MKDTEMP = YesPlease
	NO_STRTOUMAX = YesPlease
	NO_NSEC = YesPlease
	NO_MKSTEMPS = YesPlease
	ifeq ($(uname_R),3.5)
		NO_INET_NTOP = YesPlease
		NO_INET_PTON = YesPlease
	endif
	ifeq ($(uname_R),5.2)
		NO_INET_NTOP = YesPlease
		NO_INET_PTON = YesPlease
	endif
endif
J
Johannes Sixt 已提交
1144
ifneq (,$(findstring MINGW,$(uname_S)))
1145
	pathsep = ;
J
Johannes Sixt 已提交
1146
	NO_PREAD = YesPlease
E
Erik Faye-Lund 已提交
1147
	NEEDS_CRYPTO_WITH_SSL = YesPlease
1148
	NO_LIBGEN_H = YesPlease
J
Johannes Sixt 已提交
1149 1150 1151 1152 1153
	NO_SYMLINK_HEAD = YesPlease
	NO_SETENV = YesPlease
	NO_UNSETENV = YesPlease
	NO_STRCASESTR = YesPlease
	NO_STRLCPY = YesPlease
J
Jonathan Nieder 已提交
1154
	NO_STRTOK_R = YesPlease
1155
	NO_FNMATCH = YesPlease
J
Johannes Sixt 已提交
1156 1157 1158 1159 1160 1161
	NO_MEMMEM = YesPlease
	NEEDS_LIBICONV = YesPlease
	OLD_ICONV = YesPlease
	NO_C99_FORMAT = YesPlease
	NO_STRTOUMAX = YesPlease
	NO_MKDTEMP = YesPlease
1162
	NO_MKSTEMPS = YesPlease
J
Johannes Sixt 已提交
1163 1164
	NO_SVN_TESTS = YesPlease
	NO_PERL_MAKEMAKER = YesPlease
1165
	RUNTIME_PREFIX = YesPlease
1166
	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
1167
	NO_NSEC = YesPlease
J
Janos Laube 已提交
1168
	USE_WIN32_MMAP = YesPlease
1169
	USE_NED_ALLOCATOR = YesPlease
1170
	UNRELIABLE_FSTAT = UnfortunatelyYes
1171
	OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
1172
	NO_REGEX = YesPlease
E
Erik Faye-Lund 已提交
1173
	NO_PYTHON = YesPlease
J
Johannes Sixt 已提交
1174
	BLK_SHA1 = YesPlease
1175
	ETAGS_TARGET = ETAGS
1176 1177 1178
	NO_INET_PTON = YesPlease
	NO_INET_NTOP = YesPlease
	NO_POSIX_GOODIES = UnfortunatelyYes
1179
	COMPAT_CFLAGS += -D__USE_MINGW_ACCESS -DNOGDI -Icompat -Icompat/win32
1180
	COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
J
Junio C Hamano 已提交
1181
	COMPAT_OBJS += compat/mingw.o compat/winansi.o \
1182
		compat/win32/pthread.o compat/win32/syslog.o \
E
Erik Faye-Lund 已提交
1183
		compat/win32/sys/poll.o compat/win32/dirent.o
J
Johannes Sixt 已提交
1184
	EXTLIBS += -lws2_32
1185
	PTHREAD_LIBS =
J
Johannes Sixt 已提交
1186
	X = .exe
1187 1188 1189 1190 1191 1192 1193 1194 1195 1196
ifneq (,$(wildcard ../THIS_IS_MSYSGIT))
	htmldir=doc/git/html/
	prefix =
	INSTALL = /bin/install
	EXTLIBS += /mingw/lib/libz.a
	NO_R_TO_GCC_LINKER = YesPlease
	INTERNAL_QSORT = YesPlease
else
	NO_CURL = YesPlease
endif
J
Johannes Sixt 已提交
1197
endif
1198

1199
-include config.mak.autogen
1200
-include config.mak
1201

1202
ifdef CHECK_HEADER_DEPENDENCIES
1203
COMPUTE_HEADER_DEPENDENCIES =
1204 1205 1206 1207 1208 1209 1210
USE_COMPUTED_HEADER_DEPENDENCIES =
endif

ifdef COMPUTE_HEADER_DEPENDENCIES
USE_COMPUTED_HEADER_DEPENDENCIES = YesPlease
endif

1211
ifdef SANE_TOOL_PATH
1212 1213
SANE_TOOL_PATH_SQ = $(subst ','\'',$(SANE_TOOL_PATH))
BROKEN_PATH_FIX = 's|^\# @@BROKEN_PATH_FIX@@$$|git_broken_path_fix $(SANE_TOOL_PATH_SQ)|'
1214 1215
PATH := $(SANE_TOOL_PATH):${PATH}
else
1216
BROKEN_PATH_FIX = '/^\# @@BROKEN_PATH_FIX@@$$/d'
1217 1218
endif

G
Gary V. Vaughan 已提交
1219 1220 1221 1222
ifneq (,$(INLINE))
	BASIC_CFLAGS += -Dinline=$(INLINE)
endif

1223 1224 1225 1226
ifneq (,$(SOCKLEN_T))
	BASIC_CFLAGS += -Dsocklen_t=$(SOCKLEN_T)
endif

1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239
ifeq ($(uname_S),Darwin)
	ifndef NO_FINK
		ifeq ($(shell test -d /sw/lib && echo y),y)
			BASIC_CFLAGS += -I/sw/include
			BASIC_LDFLAGS += -L/sw/lib
		endif
	endif
	ifndef NO_DARWIN_PORTS
		ifeq ($(shell test -d /opt/local/lib && echo y),y)
			BASIC_CFLAGS += -I/opt/local/include
			BASIC_LDFLAGS += -L/opt/local/lib
		endif
	endif
1240
	PTHREAD_LIBS =
1241 1242
endif

1243 1244 1245 1246 1247 1248 1249 1250
ifndef CC_LD_DYNPATH
	ifdef NO_R_TO_GCC_LINKER
		# Some gcc does not accept and pass -R to the linker to specify
		# the runtime dynamic library path.
		CC_LD_DYNPATH = -Wl,-rpath,
	else
		CC_LD_DYNPATH = -R
	endif
1251 1252
endif

1253 1254 1255 1256 1257
ifdef NO_LIBGEN_H
	COMPAT_CFLAGS += -DNO_LIBGEN_H
	COMPAT_OBJS += compat/basename.o
endif

D
Daniel Barkalow 已提交
1258 1259
ifdef NO_CURL
	BASIC_CFLAGS += -DNO_CURL
1260 1261 1262
	REMOTE_CURL_PRIMARY =
	REMOTE_CURL_ALIASES =
	REMOTE_CURL_NAMES =
D
Daniel Barkalow 已提交
1263
else
1264
	ifdef CURLDIR
1265
		# Try "-Wl,-rpath=$(CURLDIR)/$(lib)" in such a case.
1266
		BASIC_CFLAGS += -I$(CURLDIR)/include
1267
		CURL_LIBCURL = -L$(CURLDIR)/$(lib) $(CC_LD_DYNPATH)$(CURLDIR)/$(lib) -lcurl
1268 1269 1270
	else
		CURL_LIBCURL = -lcurl
	endif
1271 1272 1273
	REMOTE_CURL_PRIMARY = git-remote-http$X
	REMOTE_CURL_ALIASES = git-remote-https$X git-remote-ftp$X git-remote-ftps$X
	REMOTE_CURL_NAMES = $(REMOTE_CURL_PRIMARY) $(REMOTE_CURL_ALIASES)
1274 1275
	PROGRAM_OBJS += http-fetch.o
	PROGRAMS += $(REMOTE_CURL_NAMES)
1276 1277 1278
	curl_check := $(shell (echo 070908; curl-config --vernum) | sort -r | sed -ne 2p)
	ifeq "$(curl_check)" "070908"
		ifndef NO_EXPAT
1279
			PROGRAM_OBJS += http-push.o
1280
		endif
1281
	endif
1282
	ifndef NO_EXPAT
1283 1284 1285 1286 1287 1288
		ifdef EXPATDIR
			BASIC_CFLAGS += -I$(EXPATDIR)/include
			EXPAT_LIBEXPAT = -L$(EXPATDIR)/$(lib) $(CC_LD_DYNPATH)$(EXPATDIR)/$(lib) -lexpat
		else
			EXPAT_LIBEXPAT = -lexpat
		endif
1289
	endif
1290 1291
endif

1292 1293
ifdef ZLIB_PATH
	BASIC_CFLAGS += -I$(ZLIB_PATH)/include
1294
	EXTLIBS += -L$(ZLIB_PATH)/$(lib) $(CC_LD_DYNPATH)$(ZLIB_PATH)/$(lib)
1295 1296 1297
endif
EXTLIBS += -lz

P
Petr Baudis 已提交
1298
ifndef NO_OPENSSL
J
Junio C Hamano 已提交
1299
	OPENSSL_LIBSSL = -lssl
J
Junio C Hamano 已提交
1300
	ifdef OPENSSLDIR
1301
		BASIC_CFLAGS += -I$(OPENSSLDIR)/include
1302
		OPENSSL_LINK = -L$(OPENSSLDIR)/$(lib) $(CC_LD_DYNPATH)$(OPENSSLDIR)/$(lib)
J
Junio C Hamano 已提交
1303 1304 1305
	else
		OPENSSL_LINK =
	endif
1306 1307 1308
	ifdef NEEDS_CRYPTO_WITH_SSL
		OPENSSL_LINK += -lcrypto
	endif
P
Petr Baudis 已提交
1309
else
1310
	BASIC_CFLAGS += -DNO_OPENSSL
1311
	BLK_SHA1 = 1
J
Junio C Hamano 已提交
1312
	OPENSSL_LIBSSL =
P
Petr Baudis 已提交
1313
endif
1314 1315 1316
ifdef NO_OPENSSL
	LIB_4_CRYPTO =
else
1317
ifdef NEEDS_SSL_WITH_CRYPTO
J
Junio C Hamano 已提交
1318
	LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto -lssl
1319
else
J
Junio C Hamano 已提交
1320
	LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto
1321
endif
1322
endif
1323
ifdef NEEDS_LIBICONV
J
Junio C Hamano 已提交
1324
	ifdef ICONVDIR
1325
		BASIC_CFLAGS += -I$(ICONVDIR)/include
1326
		ICONV_LINK = -L$(ICONVDIR)/$(lib) $(CC_LD_DYNPATH)$(ICONVDIR)/$(lib)
J
Junio C Hamano 已提交
1327 1328 1329
	else
		ICONV_LINK =
	endif
1330
	EXTLIBS += $(ICONV_LINK) -liconv
1331
endif
1332 1333 1334
ifdef NEEDS_LIBGEN
	EXTLIBS += -lgen
endif
1335
ifdef NEEDS_SOCKET
1336
	EXTLIBS += -lsocket
1337
endif
1338
ifdef NEEDS_NSL
1339
	EXTLIBS += -lnsl
1340
endif
1341 1342 1343
ifdef NEEDS_RESOLV
	EXTLIBS += -lresolv
endif
1344
ifdef NO_D_TYPE_IN_DIRENT
1345
	BASIC_CFLAGS += -DNO_D_TYPE_IN_DIRENT
1346
endif
1347
ifdef NO_D_INO_IN_DIRENT
1348
	BASIC_CFLAGS += -DNO_D_INO_IN_DIRENT
1349
endif
1350 1351 1352
ifdef NO_ST_BLOCKS_IN_STRUCT_STAT
	BASIC_CFLAGS += -DNO_ST_BLOCKS_IN_STRUCT_STAT
endif
1353 1354 1355
ifdef USE_NSEC
	BASIC_CFLAGS += -DUSE_NSEC
endif
1356 1357 1358
ifdef USE_ST_TIMESPEC
	BASIC_CFLAGS += -DUSE_ST_TIMESPEC
endif
1359 1360 1361
ifdef NO_NSEC
	BASIC_CFLAGS += -DNO_NSEC
endif
1362
ifdef NO_C99_FORMAT
1363
	BASIC_CFLAGS += -DNO_C99_FORMAT
1364
endif
1365 1366 1367 1368
ifdef SNPRINTF_RETURNS_BOGUS
	COMPAT_CFLAGS += -DSNPRINTF_RETURNS_BOGUS
	COMPAT_OBJS += compat/snprintf.o
endif
1369 1370 1371 1372
ifdef FREAD_READS_DIRECTORIES
	COMPAT_CFLAGS += -DFREAD_READS_DIRECTORIES
	COMPAT_OBJS += compat/fopen.o
endif
1373
ifdef NO_SYMLINK_HEAD
1374
	BASIC_CFLAGS += -DNO_SYMLINK_HEAD
1375
endif
1376 1377 1378
ifdef GETTEXT_POISON
	BASIC_CFLAGS += -DGETTEXT_POISON
endif
1379
ifdef NO_STRCASESTR
1380
	COMPAT_CFLAGS += -DNO_STRCASESTR
J
Jason Riedy 已提交
1381 1382
	COMPAT_OBJS += compat/strcasestr.o
endif
1383 1384 1385 1386
ifdef NO_STRLCPY
	COMPAT_CFLAGS += -DNO_STRLCPY
	COMPAT_OBJS += compat/strlcpy.o
endif
1387 1388 1389 1390 1391 1392 1393
ifdef NO_STRTOUMAX
	COMPAT_CFLAGS += -DNO_STRTOUMAX
	COMPAT_OBJS += compat/strtoumax.o
endif
ifdef NO_STRTOULL
	COMPAT_CFLAGS += -DNO_STRTOULL
endif
J
Jonathan Nieder 已提交
1394 1395 1396 1397
ifdef NO_STRTOK_R
	COMPAT_CFLAGS += -DNO_STRTOK_R
	COMPAT_OBJS += compat/strtok_r.o
endif
1398 1399 1400 1401
ifdef NO_FNMATCH
	COMPAT_CFLAGS += -Icompat/fnmatch
	COMPAT_CFLAGS += -DNO_FNMATCH
	COMPAT_OBJS += compat/fnmatch/fnmatch.o
1402 1403 1404 1405 1406 1407
else
ifdef NO_FNMATCH_CASEFOLD
	COMPAT_CFLAGS += -Icompat/fnmatch
	COMPAT_CFLAGS += -DNO_FNMATCH_CASEFOLD
	COMPAT_OBJS += compat/fnmatch/fnmatch.o
endif
1408
endif
J
Jason Riedy 已提交
1409
ifdef NO_SETENV
1410
	COMPAT_CFLAGS += -DNO_SETENV
J
Jason Riedy 已提交
1411
	COMPAT_OBJS += compat/setenv.o
1412
endif
1413 1414 1415 1416
ifdef NO_MKDTEMP
	COMPAT_CFLAGS += -DNO_MKDTEMP
	COMPAT_OBJS += compat/mkdtemp.o
endif
1417 1418 1419
ifdef NO_MKSTEMPS
	COMPAT_CFLAGS += -DNO_MKSTEMPS
endif
J
Johannes Schindelin 已提交
1420
ifdef NO_UNSETENV
J
Jason Riedy 已提交
1421 1422 1423
	COMPAT_CFLAGS += -DNO_UNSETENV
	COMPAT_OBJS += compat/unsetenv.o
endif
1424 1425 1426
ifdef NO_SYS_SELECT_H
	BASIC_CFLAGS += -DNO_SYS_SELECT_H
endif
1427 1428 1429 1430 1431 1432 1433 1434 1435
ifdef NO_SYS_POLL_H
	BASIC_CFLAGS += -DNO_SYS_POLL_H
endif
ifdef NO_INTTYPES_H
	BASIC_CFLAGS += -DNO_INTTYPES_H
endif
ifdef NO_INITGROUPS
	BASIC_CFLAGS += -DNO_INITGROUPS
endif
1436
ifdef NO_MMAP
1437
	COMPAT_CFLAGS += -DNO_MMAP
J
Jason Riedy 已提交
1438
	COMPAT_OBJS += compat/mmap.o
J
Janos Laube 已提交
1439 1440 1441 1442 1443
else
	ifdef USE_WIN32_MMAP
		COMPAT_CFLAGS += -DUSE_WIN32_MMAP
		COMPAT_OBJS += compat/win32mmap.o
	endif
1444
endif
1445 1446
ifdef OBJECT_CREATION_USES_RENAMES
	COMPAT_CFLAGS += -DOBJECT_CREATION_MODE=1
1447
endif
1448 1449 1450 1451
ifdef NO_PREAD
	COMPAT_CFLAGS += -DNO_PREAD
	COMPAT_OBJS += compat/pread.o
endif
1452 1453 1454
ifdef NO_FAST_WORKING_DIRECTORY
	BASIC_CFLAGS += -DNO_FAST_WORKING_DIRECTORY
endif
1455 1456 1457
ifdef NO_TRUSTABLE_FILEMODE
	BASIC_CFLAGS += -DNO_TRUSTABLE_FILEMODE
endif
1458
ifdef NO_IPV6
1459
	BASIC_CFLAGS += -DNO_IPV6
1460
endif
1461 1462 1463
ifdef NO_UINTMAX_T
	BASIC_CFLAGS += -Duintmax_t=uint32_t
endif
1464 1465
ifdef NO_SOCKADDR_STORAGE
ifdef NO_IPV6
1466
	BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in
1467
else
1468
	BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in6
1469
endif
1470
endif
1471 1472
ifdef NO_INET_NTOP
	LIB_OBJS += compat/inet_ntop.o
1473
	BASIC_CFLAGS += -DNO_INET_NTOP
1474
endif
1475 1476
ifdef NO_INET_PTON
	LIB_OBJS += compat/inet_pton.o
1477
	BASIC_CFLAGS += -DNO_INET_PTON
1478
endif
1479

1480
ifdef NO_ICONV
1481
	BASIC_CFLAGS += -DNO_ICONV
1482 1483
endif

1484 1485 1486 1487
ifdef OLD_ICONV
	BASIC_CFLAGS += -DOLD_ICONV
endif

1488 1489 1490 1491
ifdef NO_DEFLATE_BOUND
	BASIC_CFLAGS += -DNO_DEFLATE_BOUND
endif

1492 1493 1494 1495
ifdef NO_POSIX_GOODIES
	BASIC_CFLAGS += -DNO_POSIX_GOODIES
endif

1496 1497 1498
ifdef BLK_SHA1
	SHA1_HEADER = "block-sha1/sha1.h"
	LIB_OBJS += block-sha1/sha1.o
1499
	LIB_H += block-sha1/sha1.h
1500
else
1501 1502 1503
ifdef PPC_SHA1
	SHA1_HEADER = "ppc/sha1.h"
	LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
1504
	LIB_H += ppc/sha1.h
1505 1506
else
	SHA1_HEADER = <openssl/sha.h>
1507
	EXTLIBS += $(LIB_4_CRYPTO)
1508 1509
endif
endif
1510 1511 1512
ifdef NO_PERL_MAKEMAKER
	export NO_PERL_MAKEMAKER
endif
1513 1514 1515 1516
ifdef NO_HSTRERROR
	COMPAT_CFLAGS += -DNO_HSTRERROR
	COMPAT_OBJS += compat/hstrerror.o
endif
R
René Scharfe 已提交
1517 1518 1519 1520
ifdef NO_MEMMEM
	COMPAT_CFLAGS += -DNO_MEMMEM
	COMPAT_OBJS += compat/memmem.o
endif
1521 1522 1523 1524
ifdef INTERNAL_QSORT
	COMPAT_CFLAGS += -DINTERNAL_QSORT
	COMPAT_OBJS += compat/qsort.o
endif
1525 1526 1527
ifdef RUNTIME_PREFIX
	COMPAT_CFLAGS += -DRUNTIME_PREFIX
endif
1528

J
Junio C Hamano 已提交
1529 1530 1531
ifdef NO_PTHREADS
	BASIC_CFLAGS += -DNO_PTHREADS
else
1532
	BASIC_CFLAGS += $(PTHREAD_CFLAGS)
J
Junio C Hamano 已提交
1533
	EXTLIBS += $(PTHREAD_LIBS)
1534
	LIB_OBJS += thread-utils.o
N
Nicolas Pitre 已提交
1535
endif
1536

1537 1538 1539 1540
ifdef HAVE_PATHS_H
	BASIC_CFLAGS += -DHAVE_PATHS_H
endif

1541 1542 1543
ifdef DIR_HAS_BSD_GROUP_SEMANTICS
	COMPAT_CFLAGS += -DDIR_HAS_BSD_GROUP_SEMANTICS
endif
1544 1545 1546
ifdef UNRELIABLE_FSTAT
	BASIC_CFLAGS += -DUNRELIABLE_FSTAT
endif
1547 1548 1549 1550
ifdef NO_REGEX
	COMPAT_CFLAGS += -Icompat/regex
	COMPAT_OBJS += compat/regex/regex.o
endif
N
Nicolas Pitre 已提交
1551

1552
ifdef USE_NED_ALLOCATOR
1553
       COMPAT_CFLAGS += -Icompat/nedmalloc
1554 1555 1556
       COMPAT_OBJS += compat/nedmalloc/nedmalloc.o
endif

1557 1558 1559 1560
ifdef GIT_TEST_CMP_USE_COPIED_CONTEXT
	export GIT_TEST_CMP_USE_COPIED_CONTEXT
endif

1561 1562 1563 1564
ifeq ($(TCLTK_PATH),)
NO_TCLTK=NoThanks
endif

1565 1566 1567 1568
ifeq ($(PERL_PATH),)
NO_PERL=NoThanks
endif

1569 1570 1571 1572
ifeq ($(PYTHON_PATH),)
NO_PYTHON=NoThanks
endif

1573
QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
1574 1575
QUIET_SUBDIR1  =

1576 1577 1578 1579 1580 1581
ifneq ($(findstring $(MAKEFLAGS),w),w)
PRINT_DIR = --no-print-directory
else # "make -w"
NO_SUBDIR = :
endif

1582
ifneq ($(findstring $(MAKEFLAGS),s),s)
S
Shawn O. Pearce 已提交
1583
ifndef V
A
Alex Riesen 已提交
1584
	QUIET_CC       = @echo '   ' CC $@;
1585 1586 1587 1588
	QUIET_AR       = @echo '   ' AR $@;
	QUIET_LINK     = @echo '   ' LINK $@;
	QUIET_BUILT_IN = @echo '   ' BUILTIN $@;
	QUIET_GEN      = @echo '   ' GEN $@;
1589
	QUIET_LNCP     = @echo '   ' LN/CP $@;
1590
	QUIET_GCOV     = @echo '   ' GCOV $@;
1591
	QUIET_SUBDIR0  = +@subdir=
1592 1593
	QUIET_SUBDIR1  = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
			 $(MAKE) $(PRINT_DIR) -C $$subdir
S
Shawn O. Pearce 已提交
1594
	export V
A
Alex Riesen 已提交
1595
	export QUIET_GEN
1596 1597
	export QUIET_BUILT_IN
endif
1598
endif
1599

J
Jeff King 已提交
1600 1601
ifdef ASCIIDOC7
	export ASCIIDOC7
1602 1603
endif

P
Pavel Roskin 已提交
1604
# Shell quote (do not use $(call) to accommodate ancient setups);
1605 1606

SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER))
1607
ETC_GITCONFIG_SQ = $(subst ','\'',$(ETC_GITCONFIG))
1608
ETC_GITATTRIBUTES_SQ = $(subst ','\'',$(ETC_GITATTRIBUTES))
1609 1610 1611

DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
bindir_SQ = $(subst ','\'',$(bindir))
1612
bindir_relative_SQ = $(subst ','\'',$(bindir_relative))
1613
mandir_SQ = $(subst ','\'',$(mandir))
1614
infodir_SQ = $(subst ','\'',$(infodir))
1615 1616
gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
template_dir_SQ = $(subst ','\'',$(template_dir))
1617
htmldir_SQ = $(subst ','\'',$(htmldir))
1618
prefix_SQ = $(subst ','\'',$(prefix))
1619
gitwebdir_SQ = $(subst ','\'',$(gitwebdir))
1620 1621 1622

SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
1623
PYTHON_PATH_SQ = $(subst ','\'',$(PYTHON_PATH))
1624
TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH))
1625
DIFF_SQ = $(subst ','\'',$(DIFF))
1626

1627 1628
LIBS = $(GITLIBS) $(EXTLIBS)

1629
BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' \
1630
	$(COMPAT_CFLAGS)
J
Jason Riedy 已提交
1631
LIB_OBJS += $(COMPAT_OBJS)
1632

1633 1634 1635 1636 1637 1638 1639 1640 1641
# Quote for C

ifdef DEFAULT_EDITOR
DEFAULT_EDITOR_CQ = "$(subst ",\",$(subst \,\\,$(DEFAULT_EDITOR)))"
DEFAULT_EDITOR_CQ_SQ = $(subst ','\'',$(DEFAULT_EDITOR_CQ))

BASIC_CFLAGS += -DDEFAULT_EDITOR='$(DEFAULT_EDITOR_CQ_SQ)'
endif

1642 1643 1644 1645 1646 1647 1648
ifdef DEFAULT_PAGER
DEFAULT_PAGER_CQ = "$(subst ",\",$(subst \,\\,$(DEFAULT_PAGER)))"
DEFAULT_PAGER_CQ_SQ = $(subst ','\'',$(DEFAULT_PAGER_CQ))

BASIC_CFLAGS += -DDEFAULT_PAGER='$(DEFAULT_PAGER_CQ_SQ)'
endif

1649 1650 1651
ALL_CFLAGS += $(BASIC_CFLAGS)
ALL_LDFLAGS += $(BASIC_LDFLAGS)

1652
export DIFF TAR INSTALL DESTDIR SHELL_PATH
1653 1654


P
Petr Baudis 已提交
1655 1656
### Build rules

1657 1658
SHELL = $(SHELL_PATH)

1659
all:: shell_compatibility_test $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) $(OTHER_PROGRAMS) GIT-BUILD-OPTIONS
1660
ifneq (,$X)
1661
	$(QUIET_BUILT_IN)$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), test -d '$p' -o '$p' -ef '$p$X' || $(RM) '$p';)
1662
endif
1663

1664
all::
E
Eygene Ryabinkin 已提交
1665
ifndef NO_TCLTK
1666
	$(QUIET_SUBDIR0)git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all
J
Junio C Hamano 已提交
1667
	$(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all
E
Eygene Ryabinkin 已提交
1668
endif
1669
ifndef NO_PERL
1670
	$(QUIET_SUBDIR0)perl $(QUIET_SUBDIR1) PERL_PATH='$(PERL_PATH_SQ)' prefix='$(prefix_SQ)' all
1671 1672 1673
endif
ifndef NO_PYTHON
	$(QUIET_SUBDIR0)git_remote_helpers $(QUIET_SUBDIR1) PYTHON_PATH='$(PYTHON_PATH_SQ)' prefix='$(prefix_SQ)' all
1674
endif
1675
	$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1) SHELL_PATH='$(SHELL_PATH_SQ)' PERL_PATH='$(PERL_PATH_SQ)'
1676

1677 1678 1679 1680 1681
please_set_SHELL_PATH_to_a_more_modern_shell:
	@$$(:)

shell_compatibility_test: please_set_SHELL_PATH_to_a_more_modern_shell

J
Junio C Hamano 已提交
1682 1683 1684
strip: $(PROGRAMS) git$X
	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X

1685
git.o: common-cmds.h
1686
git.s git.o: EXTRA_CPPFLAGS = -DGIT_VERSION='"$(GIT_VERSION)"' \
1687
	'-DGIT_HTML_PATH="$(htmldir_SQ)"'
1688 1689

git$X: git.o $(BUILTIN_OBJS) $(GITLIBS)
1690
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ git.o \
1691
		$(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)
1692

1693 1694
help.o: common-cmds.h

1695
builtin/help.o: common-cmds.h
1696
builtin/help.s builtin/help.o: EXTRA_CPPFLAGS = \
1697 1698 1699
	'-DGIT_HTML_PATH="$(htmldir_SQ)"' \
	'-DGIT_MAN_PATH="$(mandir_SQ)"' \
	'-DGIT_INFO_PATH="$(infodir_SQ)"'
1700

J
Junio C Hamano 已提交
1701
$(BUILT_INS): git$X
1702 1703 1704 1705
	$(QUIET_BUILT_IN)$(RM) $@ && \
	ln git$X $@ 2>/dev/null || \
	ln -s git$X $@ 2>/dev/null || \
	cp git$X $@
J
Junio C Hamano 已提交
1706

J
Junio C Hamano 已提交
1707
common-cmds.h: ./generate-cmdlist.sh command-list.txt
1708

J
Junio C Hamano 已提交
1709
common-cmds.h: $(wildcard Documentation/git-*.txt)
1710
	$(QUIET_GEN)./generate-cmdlist.sh > $@+ && mv $@+ $@
F
Fredrik Kuivinen 已提交
1711

1712 1713 1714 1715
define cmd_munge_script
$(RM) $@ $@+ && \
sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
    -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \
1716
    -e 's|@@DIFF@@|$(DIFF_SQ)|' \
1717 1718 1719 1720 1721 1722
    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
    -e $(BROKEN_PATH_FIX) \
    $@.sh >$@+
endef

1723
$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
1724
	$(QUIET_GEN)$(cmd_munge_script) && \
1725
	chmod +x $@+ && \
1726
	mv $@+ $@
1727

1728 1729 1730 1731
$(SCRIPT_LIB) : % : %.sh
	$(QUIET_GEN)$(cmd_munge_script) && \
	mv $@+ $@

1732
ifndef NO_PERL
1733 1734
$(patsubst %.perl,%,$(SCRIPT_PERL)): perl/perl.mak

A
Alex Riesen 已提交
1735
perl/perl.mak: GIT-CFLAGS perl/Makefile perl/Makefile.PL
A
Alex Riesen 已提交
1736
	$(QUIET_SUBDIR0)perl $(QUIET_SUBDIR1) PERL_PATH='$(PERL_PATH_SQ)' prefix='$(prefix_SQ)' $(@F)
1737

1738
$(patsubst %.perl,%,$(SCRIPT_PERL)): % : %.perl
1739
	$(QUIET_GEN)$(RM) $@ $@+ && \
1740
	INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C perl -s --no-print-directory instlibdir` && \
1741 1742 1743
	sed -e '1{' \
	    -e '	s|#!.*perl|#!$(PERL_PATH_SQ)|' \
	    -e '	h' \
1744
	    -e '	s=.*=use lib (split(/$(pathsep)/, $$ENV{GITPERLLIB} || "'"$$INSTLIBDIR"'"));=' \
1745 1746 1747
	    -e '	H' \
	    -e '	x' \
	    -e '}' \
1748
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1749 1750
	    $@.perl >$@+ && \
	chmod +x $@+ && \
1751
	mv $@+ $@
1752

1753 1754 1755 1756 1757

.PHONY: gitweb
gitweb:
	$(QUIET_SUBDIR0)gitweb $(QUIET_SUBDIR1) all

1758
ifdef JSMIN
1759 1760
GITWEB_PROGRAMS += gitweb/static/gitweb.min.js
GITWEB_JS = gitweb/static/gitweb.min.js
1761
else
1762
GITWEB_JS = gitweb/static/gitweb.js
1763
endif
1764
ifdef CSSMIN
1765 1766
GITWEB_PROGRAMS += gitweb/static/gitweb.min.css
GITWEB_CSS = gitweb/static/gitweb.min.css
M
Mark Rada 已提交
1767
else
1768
GITWEB_CSS = gitweb/static/gitweb.css
1769 1770 1771
endif
OTHER_PROGRAMS +=  gitweb/gitweb.cgi  $(GITWEB_PROGRAMS)
gitweb/gitweb.cgi: gitweb/gitweb.perl $(GITWEB_PROGRAMS)
1772 1773 1774
	$(QUIET_SUBDIR0)gitweb $(QUIET_SUBDIR1) $(patsubst gitweb/%,%,$@)

ifdef JSMIN
1775
gitweb/static/gitweb.min.js: gitweb/static/gitweb.js
1776 1777
	$(QUIET_SUBDIR0)gitweb $(QUIET_SUBDIR1) $(patsubst gitweb/%,%,$@)
endif # JSMIN
1778
ifdef CSSMIN
1779
gitweb/static/gitweb.min.css: gitweb/static/gitweb.css
1780 1781
	$(QUIET_SUBDIR0)gitweb $(QUIET_SUBDIR1) $(patsubst gitweb/%,%,$@)
endif # CSSMIN
1782

1783

1784
git-instaweb: git-instaweb.sh gitweb/gitweb.cgi gitweb/static/gitweb.css gitweb/static/gitweb.js
1785
	$(QUIET_GEN)$(RM) $@ $@+ && \
1786 1787 1788
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
1789
	    -e 's|@@GITWEBDIR@@|$(gitwebdir_SQ)|g' \
1790
	    -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
1791 1792
	    $@.sh > $@+ && \
	chmod +x $@+ && \
1793
	mv $@+ $@
1794 1795 1796 1797 1798 1799 1800 1801 1802
else # NO_PERL
$(patsubst %.perl,%,$(SCRIPT_PERL)) git-instaweb: % : unimplemented.sh
	$(QUIET_GEN)$(RM) $@ $@+ && \
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
	    -e 's|@@REASON@@|NO_PERL=$(NO_PERL)|g' \
	    unimplemented.sh >$@+ && \
	chmod +x $@+ && \
	mv $@+ $@
endif # NO_PERL
1803

1804 1805 1806 1807 1808 1809 1810
ifndef NO_PYTHON
$(patsubst %.py,%,$(SCRIPT_PYTHON)): GIT-CFLAGS
$(patsubst %.py,%,$(SCRIPT_PYTHON)): % : %.py
	$(QUIET_GEN)$(RM) $@ $@+ && \
	INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C git_remote_helpers -s \
		--no-print-directory prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' \
		instlibdir` && \
1811 1812
	sed -e '1s|#!.*python|#!$(PYTHON_PATH_SQ)|' \
	    -e 's|\(os\.getenv("GITPYTHONLIB"\)[^)]*)|\1,"@@INSTLIBDIR@@")|' \
1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826
	    -e 's|@@INSTLIBDIR@@|'"$$INSTLIBDIR"'|g' \
	    $@.py >$@+ && \
	chmod +x $@+ && \
	mv $@+ $@
else # NO_PYTHON
$(patsubst %.py,%,$(SCRIPT_PYTHON)): % : unimplemented.sh
	$(QUIET_GEN)$(RM) $@ $@+ && \
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
	    -e 's|@@REASON@@|NO_PYTHON=$(NO_PYTHON)|g' \
	    unimplemented.sh >$@+ && \
	chmod +x $@+ && \
	mv $@+ $@
endif # NO_PYTHON

1827
configure: configure.ac
1828
	$(QUIET_GEN)$(RM) $@ $<+ && \
1829
	sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1830 1831
	    $< > $<+ && \
	autoconf -o $@ $<+ && \
1832
	$(RM) $<+
1833

1834
# These can record GIT_VERSION
1835
git.o git.spec \
1836 1837 1838
	$(patsubst %.sh,%,$(SCRIPT_SH)) \
	$(patsubst %.perl,%,$(SCRIPT_PERL)) \
	: GIT-VERSION-FILE
1839

1840
TEST_OBJS := $(patsubst test-%$X,test-%.o,$(TEST_PROGRAMS))
1841
GIT_OBJS := $(LIB_OBJS) $(BUILTIN_OBJS) $(PROGRAM_OBJS) $(TEST_OBJS) \
1842 1843 1844 1845
	git.o
ifndef NO_CURL
	GIT_OBJS += http.o http-walker.o remote-curl.o
endif
1846 1847
XDIFF_OBJS = xdiff/xdiffi.o xdiff/xprepare.o xdiff/xutils.o xdiff/xemit.o \
	xdiff/xmerge.o xdiff/xpatience.o
1848
VCSSVN_OBJS = vcs-svn/string_pool.o vcs-svn/line_buffer.o \
D
David Barr 已提交
1849
	vcs-svn/repo_tree.o vcs-svn/fast_export.o vcs-svn/svndump.o
1850 1851
VCSSVN_TEST_OBJS = test-obj-pool.o test-string-pool.o \
	test-line-buffer.o test-treap.o
J
Jonathan Nieder 已提交
1852
OBJECTS := $(GIT_OBJS) $(XDIFF_OBJS) $(VCSSVN_OBJS)
1853

1854
dep_files := $(foreach f,$(OBJECTS),$(dir $f).depend/$(notdir $f).d)
1855
dep_dirs := $(addsuffix .depend,$(sort $(dir $(OBJECTS))))
1856

1857 1858 1859 1860 1861
ifdef COMPUTE_HEADER_DEPENDENCIES
$(dep_dirs):
	mkdir -p $@

missing_dep_dirs := $(filter-out $(wildcard $(dep_dirs)),$(dep_dirs))
1862
dep_file = $(dir $@).depend/$(notdir $@).d
1863 1864 1865 1866 1867 1868 1869 1870 1871
dep_args = -MF $(dep_file) -MMD -MP
ifdef CHECK_HEADER_DEPENDENCIES
$(error cannot compute header dependencies outside a normal build. \
Please unset CHECK_HEADER_DEPENDENCIES and try again)
endif
endif

ifndef COMPUTE_HEADER_DEPENDENCIES
ifndef CHECK_HEADER_DEPENDENCIES
1872 1873
dep_dirs =
missing_dep_dirs =
1874 1875
dep_args =
endif
1876 1877
endif

1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891
ifdef CHECK_HEADER_DEPENDENCIES
ifndef PRINT_HEADER_DEPENDENCIES
missing_deps = $(filter-out $(notdir $^), \
	$(notdir $(shell $(MAKE) -s $@ \
		CHECK_HEADER_DEPENDENCIES=YesPlease \
		USE_COMPUTED_HEADER_DEPENDENCIES=YesPlease \
		PRINT_HEADER_DEPENDENCIES=YesPlease)))
endif
endif

ASM_SRC := $(wildcard $(OBJECTS:o=S))
ASM_OBJ := $(ASM_SRC:S=o)
C_OBJ := $(filter-out $(ASM_OBJ),$(OBJECTS))

1892 1893
.SUFFIXES:

1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927
ifdef PRINT_HEADER_DEPENDENCIES
$(C_OBJ): %.o: %.c FORCE
	echo $^
$(ASM_OBJ): %.o: %.S FORCE
	echo $^

ifndef CHECK_HEADER_DEPENDENCIES
$(error cannot print header dependencies during a normal build. \
Please set CHECK_HEADER_DEPENDENCIES and try again)
endif
endif

ifndef PRINT_HEADER_DEPENDENCIES
ifdef CHECK_HEADER_DEPENDENCIES
$(C_OBJ): %.o: %.c $(dep_files) FORCE
	@set -e; echo CHECK $@; \
	missing_deps="$(missing_deps)"; \
	if test "$$missing_deps"; \
	then \
		echo missing dependencies: $$missing_deps; \
		false; \
	fi
$(ASM_OBJ): %.o: %.S $(dep_files) FORCE
	@set -e; echo CHECK $@; \
	missing_deps="$(missing_deps)"; \
	if test "$$missing_deps"; \
	then \
		echo missing dependencies: $$missing_deps; \
		false; \
	fi
endif
endif

ifndef CHECK_HEADER_DEPENDENCIES
1928
$(C_OBJ): %.o: %.c GIT-CFLAGS $(missing_dep_dirs)
1929
	$(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
1930
$(ASM_OBJ): %.o: %.S GIT-CFLAGS $(missing_dep_dirs)
1931
	$(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
1932
endif
1933

1934
%.s: %.c GIT-CFLAGS FORCE
1935
	$(QUIET_CC)$(CC) -S $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
1936 1937

ifdef USE_COMPUTED_HEADER_DEPENDENCIES
1938 1939
# Take advantage of gcc's on-the-fly dependency generation
# See <http://gcc.gnu.org/gcc-3.0/features.html>.
1940 1941 1942
dep_files_present := $(wildcard $(dep_files))
ifneq ($(dep_files_present),)
include $(dep_files_present)
1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953
endif
else
# Dependencies on header files, for platforms that do not support
# the gcc -MMD option.
#
# Dependencies on automatically generated headers such as common-cmds.h
# should _not_ be included here, since they are necessary even when
# building an object for the first time.
#
# XXX. Please check occasionally that these include all dependencies
# gcc detects!
1954

1955
$(GIT_OBJS): $(LIB_H)
1956 1957 1958 1959
builtin/branch.o builtin/checkout.o builtin/clone.o builtin/reset.o branch.o transport.o: branch.h
builtin/bundle.o bundle.o transport.o: bundle.h
builtin/bisect--helper.o builtin/rev-list.o bisect.o: bisect.h
builtin/clone.o builtin/fetch-pack.o transport.o: fetch-pack.h
1960
builtin/grep.o builtin/pack-objects.o transport-helper.o: thread-utils.h
1961 1962 1963 1964 1965
builtin/send-pack.o transport.o: send-pack.h
builtin/log.o builtin/shortlog.o: shortlog.h
builtin/prune.o builtin/reflog.o reachable.o: reachable.h
builtin/commit.o builtin/revert.o wt-status.o: wt-status.h
builtin/tar-tree.o archive-tar.o: tar.h
1966
connect.o transport.o http-backend.o: url.h
1967
http-fetch.o http-walker.o remote-curl.o transport.o walker.o: walker.h
1968
http.o http-walker.o http-push.o http-fetch.o remote-curl.o: http.h url.h
1969 1970 1971 1972

xdiff-interface.o $(XDIFF_OBJS): \
	xdiff/xinclude.h xdiff/xmacros.h xdiff/xdiff.h xdiff/xtypes.h \
	xdiff/xutils.h xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
J
Jonathan Nieder 已提交
1973

1974
$(VCSSVN_OBJS) $(VCSSVN_TEST_OBJS): $(LIB_H) \
D
David Barr 已提交
1975
	vcs-svn/obj_pool.h vcs-svn/trp.h vcs-svn/string_pool.h \
D
David Barr 已提交
1976 1977
	vcs-svn/line_buffer.h vcs-svn/repo_tree.h vcs-svn/fast_export.h \
	vcs-svn/svndump.h
1978 1979

test-svn-fe.o: vcs-svn/svndump.h
1980
endif
1981

1982
exec_cmd.s exec_cmd.o: EXTRA_CPPFLAGS = \
1983 1984 1985
	'-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
	'-DBINDIR="$(bindir_relative_SQ)"' \
	'-DPREFIX="$(prefix_SQ)"'
1986

1987
builtin/init-db.s builtin/init-db.o: EXTRA_CPPFLAGS = \
1988
	-DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"'
1989

1990
config.s config.o: EXTRA_CPPFLAGS = -DETC_GITCONFIG='"$(ETC_GITCONFIG_SQ)"'
1991

1992 1993
attr.s attr.o: EXTRA_CPPFLAGS = -DETC_GITATTRIBUTES='"$(ETC_GITATTRIBUTES_SQ)"'

1994
http.s http.o: EXTRA_CPPFLAGS = -DGIT_HTTP_USER_AGENT='"git/$(GIT_VERSION)"'
1995

1996
ifdef NO_EXPAT
1997
http-walker.s http-walker.o: EXTRA_CPPFLAGS = -DNO_EXPAT
1998 1999
endif

2000 2001 2002 2003
ifdef NO_REGEX
compat/regex/regex.o: EXTRA_CPPFLAGS = -DGAWK -DNO_MBSUPPORT
endif

2004 2005 2006 2007 2008
ifdef USE_NED_ALLOCATOR
compat/nedmalloc/nedmalloc.o: EXTRA_CPPFLAGS = \
	-DNDEBUG -DOVERRIDE_STRDUP -DREPLACE_SYSTEM_ALLOCATOR
endif

2009
git-%$X: %.o $(GITLIBS)
2010
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
2011

R
Robert Shearman 已提交
2012 2013
git-imap-send$X: imap-send.o $(GITLIBS)
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2014
		$(LIBS) $(OPENSSL_LINK) $(OPENSSL_LIBSSL) $(LIB_4_CRYPTO)
2015

2016
git-http-fetch$X: revision.o http.o http-walker.o http-fetch.o $(GITLIBS)
L
Linus Torvalds 已提交
2017
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2018
		$(LIBS) $(CURL_LIBCURL)
2019
git-http-push$X: revision.o http.o http-push.o $(GITLIBS)
2020
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2021 2022
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

2023 2024 2025 2026 2027 2028 2029
$(REMOTE_CURL_ALIASES): $(REMOTE_CURL_PRIMARY)
	$(QUIET_LNCP)$(RM) $@ && \
	ln $< $@ 2>/dev/null || \
	ln -s $< $@ 2>/dev/null || \
	cp $< $@

$(REMOTE_CURL_PRIMARY): remote-curl.o http.o http-walker.o $(GITLIBS)
2030 2031 2032
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

P
Petr Baudis 已提交
2033
$(LIB_FILE): $(LIB_OBJS)
2034
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)
P
Petr Baudis 已提交
2035

2036
$(XDIFF_LIB): $(XDIFF_OBJS)
2037
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(XDIFF_OBJS)
2038

J
Jonathan Nieder 已提交
2039 2040
$(VCSSVN_LIB): $(VCSSVN_OBJS)
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(VCSSVN_OBJS)
2041

P
Petr Baudis 已提交
2042 2043 2044
doc:
	$(MAKE) -C Documentation all

2045 2046 2047 2048 2049 2050
man:
	$(MAKE) -C Documentation man

html:
	$(MAKE) -C Documentation html

2051 2052 2053
info:
	$(MAKE) -C Documentation info

2054 2055 2056
pdf:
	$(MAKE) -C Documentation pdf

2057 2058 2059
$(ETAGS_TARGET): FORCE
	$(RM) $(ETAGS_TARGET)
	$(FIND) . -name '*.[hcS]' -print | xargs etags -a -o $(ETAGS_TARGET)
2060

2061
tags: FORCE
2062
	$(RM) tags
2063
	$(FIND) . -name '*.[hcS]' -print | xargs ctags -a
P
Petr Baudis 已提交
2064

K
Kristof Provost 已提交
2065 2066 2067 2068
cscope:
	$(RM) cscope*
	$(FIND) . -name '*.[hcS]' -print | xargs cscope -b

2069
### Detect prefix changes
2070
TRACK_CFLAGS = $(CC):$(subst ','\'',$(ALL_CFLAGS)):\
2071 2072
             $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ)

2073
GIT-CFLAGS: FORCE
2074 2075 2076 2077 2078 2079
	@FLAGS='$(TRACK_CFLAGS)'; \
	    if test x"$$FLAGS" != x"`cat GIT-CFLAGS 2>/dev/null`" ; then \
		echo 1>&2 "    * new build flags or prefix"; \
		echo "$$FLAGS" >GIT-CFLAGS; \
            fi

J
Junio C Hamano 已提交
2080 2081 2082
# We need to apply sq twice, once to protect from the shell
# that runs GIT-BUILD-OPTIONS, and then again to protect it
# and the first level quoting from the shell that runs "echo".
2083
GIT-BUILD-OPTIONS: FORCE
J
Junio C Hamano 已提交
2084
	@echo SHELL_PATH=\''$(subst ','\'',$(SHELL_PATH_SQ))'\' >$@
2085
	@echo PERL_PATH=\''$(subst ','\'',$(PERL_PATH_SQ))'\' >>$@
2086
	@echo DIFF=\''$(subst ','\'',$(subst ','\'',$(DIFF)))'\' >>$@
2087
	@echo PYTHON_PATH=\''$(subst ','\'',$(PYTHON_PATH_SQ))'\' >>$@
J
Junio C Hamano 已提交
2088
	@echo TAR=\''$(subst ','\'',$(subst ','\'',$(TAR)))'\' >>$@
J
Jeff King 已提交
2089
	@echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@
2090
	@echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@
J
Jeff King 已提交
2091
	@echo NO_PYTHON=\''$(subst ','\'',$(subst ','\'',$(NO_PYTHON)))'\' >>$@
2092 2093 2094 2095 2096 2097
ifdef GIT_TEST_CMP
	@echo GIT_TEST_CMP=\''$(subst ','\'',$(subst ','\'',$(GIT_TEST_CMP)))'\' >>$@
endif
ifdef GIT_TEST_CMP_USE_COPIED_CONTEXT
	@echo GIT_TEST_CMP_USE_COPIED_CONTEXT=YesPlease >>$@
endif
2098
	@echo GETTEXT_POISON=\''$(subst ','\'',$(subst ','\'',$(GETTEXT_POISON)))'\' >>$@
2099

2100 2101 2102 2103
### Detect Tck/Tk interpreter path changes
ifndef NO_TCLTK
TRACK_VARS = $(subst ','\'',-DTCLTK_PATH='$(TCLTK_PATH_SQ)')

2104
GIT-GUI-VARS: FORCE
2105 2106 2107 2108 2109 2110 2111
	@VARS='$(TRACK_VARS)'; \
	    if test x"$$VARS" != x"`cat $@ 2>/dev/null`" ; then \
		echo 1>&2 "    * new Tcl/Tk interpreter location"; \
		echo "$$VARS" >$@; \
            fi
endif

2112 2113 2114 2115 2116 2117 2118 2119 2120 2121
test_bindir_programs := $(patsubst %,bin-wrappers/%,$(BINDIR_PROGRAMS_NEED_X) $(BINDIR_PROGRAMS_NO_X) $(TEST_PROGRAMS_NEED_X))

all:: $(TEST_PROGRAMS) $(test_bindir_programs)

bin-wrappers/%: wrap-for-bin.sh
	@mkdir -p bin-wrappers
	$(QUIET_GEN)sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
	     -e 's|@@BUILD_DIR@@|$(shell pwd)|' \
	     -e 's|@@PROG@@|$(@F)|' < $< > $@ && \
	chmod +x $@
2122

2123 2124 2125 2126
# GNU make supports exporting all variables by "export" without parameters.
# However, the environment gets quite big, and some programs have problems
# with that.

2127
export NO_SVN_TESTS
2128

2129 2130
### Testing rules

2131
test: all
P
Petr Baudis 已提交
2132 2133
	$(MAKE) -C t/ all

R
René Scharfe 已提交
2134 2135
test-ctype$X: ctype.o

2136
test-date$X: date.o ctype.o
P
Petr Baudis 已提交
2137

2138
test-delta$X: diff-delta.o patch-delta.o
P
Petr Baudis 已提交
2139

D
David Barr 已提交
2140 2141
test-line-buffer$X: vcs-svn/lib.a

2142 2143
test-parse-options$X: parse-options.o

D
David Barr 已提交
2144 2145
test-string-pool$X: vcs-svn/lib.a

D
David Barr 已提交
2146 2147
test-svn-fe$X: vcs-svn/lib.a

2148
.PRECIOUS: $(TEST_OBJS)
2149

2150
test-%$X: test-%.o $(GITLIBS)
D
David Barr 已提交
2151
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(filter %.a,$^) $(LIBS)
2152

2153 2154 2155
check-sha1:: test-sha1$X
	./test-sha1.sh

2156
check: common-cmds.h
2157 2158 2159 2160 2161 2162 2163 2164 2165 2166
	if sparse; \
	then \
		for i in *.c; \
		do \
			sparse $(ALL_CFLAGS) $(SPARSE_FLAGS) $$i || exit; \
		done; \
	else \
		echo 2>&1 "Did you mean 'make test'?"; \
		exit 1; \
	fi
P
Petr Baudis 已提交
2167

2168
remove-dashes:
2169
	./fixup-builtins $(BUILT_INS) $(PROGRAMS) $(SCRIPTS)
P
Petr Baudis 已提交
2170 2171 2172

### Installation rules

2173
ifneq ($(filter /%,$(firstword $(template_dir))),)
2174
template_instdir = $(template_dir)
2175 2176
else
template_instdir = $(prefix)/$(template_dir)
2177 2178 2179
endif
export template_instdir

2180
ifneq ($(filter /%,$(firstword $(gitexecdir))),)
2181
gitexec_instdir = $(gitexecdir)
2182 2183
else
gitexec_instdir = $(prefix)/$(gitexecdir)
2184 2185 2186 2187
endif
gitexec_instdir_SQ = $(subst ','\'',$(gitexec_instdir))
export gitexec_instdir

2188 2189
install_bindir_programs := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X)) $(BINDIR_PROGRAMS_NO_X)

2190
install: all
2191
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
2192 2193
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
	$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
2194
	$(INSTALL) -m 644 $(SCRIPT_LIB) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
2195
	$(INSTALL) $(install_bindir_programs) '$(DESTDIR_SQ)$(bindir_SQ)'
2196
	$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
2197
ifndef NO_PERL
2198
	$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
J
Junio C Hamano 已提交
2199
	$(MAKE) -C gitweb install
2200
endif
2201 2202 2203
ifndef NO_PYTHON
	$(MAKE) -C git_remote_helpers prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
endif
E
Eygene Ryabinkin 已提交
2204
ifndef NO_TCLTK
J
Junio C Hamano 已提交
2205
	$(MAKE) -C gitk-git install
2206
	$(MAKE) -C git-gui gitexecdir='$(gitexec_instdir_SQ)' install
E
Eygene Ryabinkin 已提交
2207
endif
2208
ifneq (,$X)
2209
	$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), test '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p' -ef '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p$X' || $(RM) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p';)
2210
endif
2211

2212
	bindir=$$(cd '$(DESTDIR_SQ)$(bindir_SQ)' && pwd) && \
2213
	execdir=$$(cd '$(DESTDIR_SQ)$(gitexec_instdir_SQ)' && pwd) && \
2214
	{ test "$$bindir/" = "$$execdir/" || \
2215 2216
	  for p in git$X $(filter $(install_bindir_programs),$(ALL_PROGRAMS)); do \
		$(RM) "$$execdir/$$p" && \
2217
		test -z "$(NO_CROSS_DIRECTORY_HARDLINKS)" && \
2218 2219 2220 2221
		ln "$$bindir/$$p" "$$execdir/$$p" 2>/dev/null || \
		cp "$$bindir/$$p" "$$execdir/$$p" || exit; \
	  done; \
	} && \
2222 2223 2224 2225 2226 2227
	for p in $(filter $(install_bindir_programs),$(BUILT_INS)); do \
		$(RM) "$$bindir/$$p" && \
		ln "$$bindir/git$X" "$$bindir/$$p" 2>/dev/null || \
		ln -s "git$X" "$$bindir/$$p" 2>/dev/null || \
		cp "$$bindir/git$X" "$$bindir/$$p" || exit; \
	done && \
2228
	for p in $(BUILT_INS); do \
2229
		$(RM) "$$execdir/$$p" && \
J
Jeff King 已提交
2230 2231 2232
		ln "$$execdir/git$X" "$$execdir/$$p" 2>/dev/null || \
		ln -s "git$X" "$$execdir/$$p" 2>/dev/null || \
		cp "$$execdir/git$X" "$$execdir/$$p" || exit; \
2233
	done && \
2234 2235
	remote_curl_aliases="$(REMOTE_CURL_ALIASES)" && \
	for p in $$remote_curl_aliases; do \
2236 2237 2238 2239
		$(RM) "$$execdir/$$p" && \
		ln "$$execdir/git-remote-http$X" "$$execdir/$$p" 2>/dev/null || \
		ln -s "git-remote-http$X" "$$execdir/$$p" 2>/dev/null || \
		cp "$$execdir/git-remote-http$X" "$$execdir/$$p" || exit; \
2240
	done && \
2241
	./check_bindir "z$$bindir" "z$$execdir" "$$bindir/git-add$X"
P
Petr Baudis 已提交
2242

2243 2244 2245
install-gitweb:
	$(MAKE) -C gitweb install

P
Petr Baudis 已提交
2246 2247 2248
install-doc:
	$(MAKE) -C Documentation install

2249 2250 2251
install-man:
	$(MAKE) -C Documentation install-man

2252 2253 2254
install-html:
	$(MAKE) -C Documentation install-html

2255 2256 2257
install-info:
	$(MAKE) -C Documentation install-info

2258 2259 2260
install-pdf:
	$(MAKE) -C Documentation install-pdf

2261 2262
quick-install-doc:
	$(MAKE) -C Documentation quick-install
P
Petr Baudis 已提交
2263

2264 2265 2266
quick-install-man:
	$(MAKE) -C Documentation quick-install-man

2267 2268 2269
quick-install-html:
	$(MAKE) -C Documentation quick-install-html

P
Petr Baudis 已提交
2270 2271 2272 2273


### Maintainer's dist rules

2274
git.spec: git.spec.in
2275 2276
	sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@+
	mv $@+ $@
2277

J
Junio C Hamano 已提交
2278
GIT_TARNAME=git-$(GIT_VERSION)
2279
dist: git.spec git-archive$(X) configure
2280 2281
	./git-archive --format=tar \
		--prefix=$(GIT_TARNAME)/ HEAD^{tree} > $(GIT_TARNAME).tar
2282
	@mkdir -p $(GIT_TARNAME)
2283
	@cp git.spec configure $(GIT_TARNAME)
2284
	@echo $(GIT_VERSION) > $(GIT_TARNAME)/version
2285
	@$(MAKE) -C git-gui TARDIR=../$(GIT_TARNAME)/git-gui dist-version
2286
	$(TAR) rf $(GIT_TARNAME).tar \
2287
		$(GIT_TARNAME)/git.spec \
2288
		$(GIT_TARNAME)/configure \
2289
		$(GIT_TARNAME)/version \
2290
		$(GIT_TARNAME)/git-gui/version
2291
	@$(RM) -r $(GIT_TARNAME)
2292
	gzip -f -9 $(GIT_TARNAME).tar
2293 2294

rpm: dist
2295 2296 2297 2298
	$(RPMBUILD) \
		--define "_source_filedigest_algorithm md5" \
		--define "_binary_filedigest_algorithm md5" \
		-ta $(GIT_TARNAME).tar.gz
2299

2300 2301 2302
htmldocs = git-htmldocs-$(GIT_VERSION)
manpages = git-manpages-$(GIT_VERSION)
dist-doc:
2303
	$(RM) -r .doc-tmp-dir
2304 2305 2306 2307 2308
	mkdir .doc-tmp-dir
	$(MAKE) -C Documentation WEBDOC_DEST=../.doc-tmp-dir install-webdoc
	cd .doc-tmp-dir && $(TAR) cf ../$(htmldocs).tar .
	gzip -n -9 -f $(htmldocs).tar
	:
2309
	$(RM) -r .doc-tmp-dir
2310
	mkdir -p .doc-tmp-dir/man1 .doc-tmp-dir/man5 .doc-tmp-dir/man7
2311
	$(MAKE) -C Documentation DESTDIR=./ \
2312
		man1dir=../.doc-tmp-dir/man1 \
2313
		man5dir=../.doc-tmp-dir/man5 \
2314
		man7dir=../.doc-tmp-dir/man7 \
2315 2316 2317
		install
	cd .doc-tmp-dir && $(TAR) cf ../$(manpages).tar .
	gzip -n -9 -f $(manpages).tar
2318
	$(RM) -r .doc-tmp-dir
2319

P
Petr Baudis 已提交
2320
### Cleaning rules
2321

2322 2323 2324
distclean: clean
	$(RM) configure

2325
clean:
2326 2327
	$(RM) *.o block-sha1/*.o ppc/*.o compat/*.o compat/*/*.o xdiff/*.o vcs-svn/*.o \
		builtin/*.o $(LIB_FILE) $(XDIFF_LIB) $(VCSSVN_LIB)
2328
	$(RM) $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git$X
2329
	$(RM) $(TEST_PROGRAMS)
2330
	$(RM) -r bin-wrappers
2331
	$(RM) -r $(dep_dirs)
2332
	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h $(ETAGS_TARGET) tags cscope*
2333
	$(RM) -r autom4te.cache
2334
	$(RM) config.log config.mak.autogen config.mak.append config.status config.cache
2335 2336 2337
	$(RM) -r $(GIT_TARNAME) .doc-tmp-dir
	$(RM) $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz
	$(RM) $(htmldocs).tar.gz $(manpages).tar.gz
2338
	$(MAKE) -C Documentation/ clean
2339
ifndef NO_PERL
2340
	$(MAKE) -C gitweb clean
2341
	$(MAKE) -C perl clean
2342 2343 2344
endif
ifndef NO_PYTHON
	$(MAKE) -C git_remote_helpers clean
2345
endif
P
Petr Baudis 已提交
2346
	$(MAKE) -C templates/ clean
2347
	$(MAKE) -C t/ clean
E
Eygene Ryabinkin 已提交
2348
ifndef NO_TCLTK
J
Junio C Hamano 已提交
2349
	$(MAKE) -C gitk-git clean
E
Eygene Ryabinkin 已提交
2350 2351
	$(MAKE) -C git-gui clean
endif
2352
	$(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-GUI-VARS GIT-BUILD-OPTIONS
2353

J
Junio C Hamano 已提交
2354
.PHONY: all install clean strip
2355
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
2356
.PHONY: FORCE cscope
J
Junio C Hamano 已提交
2357

J
Junio C Hamano 已提交
2358 2359 2360
### Check documentation
#
check-docs::
2361
	@(for v in $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git gitk; \
J
Junio C Hamano 已提交
2362 2363 2364
	do \
		case "$$v" in \
		git-merge-octopus | git-merge-ours | git-merge-recursive | \
M
Miklos Vajna 已提交
2365
		git-merge-resolve | git-merge-subtree | \
2366
		git-fsck-objects | git-init-db | \
2367
		git-remote-* | git-stage | \
2368
		git-?*--?* ) continue ;; \
J
Junio C Hamano 已提交
2369 2370 2371
		esac ; \
		test -f "Documentation/$$v.txt" || \
		echo "no doc: $$v"; \
J
Junio C Hamano 已提交
2372
		sed -e '/^#/d' command-list.txt | \
2373
		grep -q "^$$v[ 	]" || \
J
Junio C Hamano 已提交
2374 2375 2376 2377
		case "$$v" in \
		git) ;; \
		*) echo "no link: $$v";; \
		esac ; \
2378 2379
	done; \
	( \
J
Junio C Hamano 已提交
2380
		sed -e '/^#/d' \
2381
		    -e 's/[ 	].*//' \
J
Junio C Hamano 已提交
2382
		    -e 's/^/listed /' command-list.txt; \
2383 2384 2385 2386 2387 2388 2389 2390
		ls -1 Documentation/git*txt | \
		sed -e 's|Documentation/|documented |' \
		    -e 's/\.txt//'; \
	) | while read how cmd; \
	do \
		case "$$how,$$cmd" in \
		*,git-citool | \
		*,git-gui | \
2391
		*,git-help | \
2392 2393 2394
		documented,gitattributes | \
		documented,gitignore | \
		documented,gitmodules | \
2395
		documented,gitcli | \
2396
		documented,git-tools | \
2397 2398 2399 2400 2401 2402
		documented,gitcore-tutorial | \
		documented,gitcvs-migration | \
		documented,gitdiffcore | \
		documented,gitglossary | \
		documented,githooks | \
		documented,gitrepository-layout | \
2403
		documented,gitrevisions | \
2404 2405
		documented,gittutorial | \
		documented,gittutorial-2 | \
2406
		documented,git-bisect-lk2009 | \
2407
		documented,git-remote-helpers | \
2408
		documented,gitworkflows | \
2409 2410
		sentinel,not,matching,is,ok ) continue ;; \
		esac; \
2411
		case " $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git gitk " in \
2412 2413 2414 2415
		*" $$cmd "*)	;; \
		*) echo "removed but $$how: $$cmd" ;; \
		esac; \
	done ) | sort
2416 2417 2418 2419 2420

### Make sure built-ins do not have dups and listed in git.c
#
check-builtins::
	./check-builtins.sh
J
Junio C Hamano 已提交
2421

2422 2423 2424 2425 2426 2427 2428 2429
### Test suite coverage testing
#
.PHONY: coverage coverage-clean coverage-build coverage-report

coverage:
	$(MAKE) coverage-build
	$(MAKE) coverage-report

2430
object_dirs := $(sort $(dir $(OBJECTS)))
2431
coverage-clean:
2432 2433 2434 2435
	$(RM) $(addsuffix *.gcov,$(object_dirs))
	$(RM) $(addsuffix *.gcda,$(object_dirs))
	$(RM) $(addsuffix *.gcno,$(object_dirs))
	$(RM) coverage-untested-functions
2436
	$(RM) -r cover_db/
2437
	$(RM) -r cover_db_html/
2438 2439 2440

COVERAGE_CFLAGS = $(CFLAGS) -O0 -ftest-coverage -fprofile-arcs
COVERAGE_LDFLAGS = $(CFLAGS)  -O0 -lgcov
2441
GCOVFLAGS = --preserve-paths --branch-probabilities --all-blocks
2442 2443 2444 2445 2446 2447 2448

coverage-build: coverage-clean
	$(MAKE) CFLAGS="$(COVERAGE_CFLAGS)" LDFLAGS="$(COVERAGE_LDFLAGS)" all
	$(MAKE) CFLAGS="$(COVERAGE_CFLAGS)" LDFLAGS="$(COVERAGE_LDFLAGS)" \
		-j1 test

coverage-report:
2449
	$(QUIET_GCOV)for dir in $(object_dirs); do \
2450
		$(GCOV) $(GCOVFLAGS) --object-directory=$$dir $$dir*.c || exit; \
2451
	done
2452 2453

coverage-untested-functions: coverage-report
2454 2455
	grep '^function.*called 0 ' *.c.gcov \
		| sed -e 's/\([^:]*\)\.gcov: *function \([^ ]*\) called.*/\1: \2/' \
2456
		> coverage-untested-functions
2457 2458 2459

cover_db: coverage-report
	gcov2perl -db cover_db *.gcov
2460 2461 2462

cover_db_html: cover_db
	cover -report html -outputdir cover_db_html cover_db