Makefile 66.8 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_LIBGEN_H if you don't have libgen.h.
#
75 76
# Define NEEDS_LIBGEN if your libgen needs -lgen when linking
#
77 78
# Define NO_SYS_SELECT_H if you don't have sys/select.h.
#
79 80
# 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.
81
#
P
Pavel Roskin 已提交
82
# Define NO_SVN_TESTS if you want to skip time-consuming SVN interoperability
E
Eric Wong 已提交
83 84 85
# 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.
#
86 87 88 89 90 91 92 93 94 95 96 97
# 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.
#
98 99 100 101
# 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.
#
102 103
# Define PPC_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine optimized for PowerPC.
104
#
105 106 107
# 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).
108
#
109
# Define NEEDS_LIBICONV if linking with libc is not enough (Darwin).
110 111 112 113
#
# Define NEEDS_SOCKET if linking with libc is not enough (SunOS,
# Patrick Mauritz).
#
114 115 116 117
# 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.
#
118 119
# Define NO_MMAP if you want to avoid mmap.
#
J
Junio C Hamano 已提交
120 121
# Define NO_PTHREADS if you do not have or do not want to use Pthreads.
#
122
# Define NO_PREAD if you have a problem with pread() system call (e.g.
123
# cygwin1.dll before v1.5.22).
124
#
125 126 127
# Define NO_FAST_WORKING_DIRECTORY if accessing objects in pack files is
# generally faster on your platform than accessing the working directory.
#
128 129 130
# Define NO_TRUSTABLE_FILEMODE if your filesystem may claim to support
# the executable mode bit, but doesn't really do so.
#
131 132
# Define NO_IPV6 if you lack IPv6 support and getaddrinfo().
#
133 134 135
# Define NO_SOCKADDR_STORAGE if your platform does not have struct
# sockaddr_storage.
#
136 137
# Define NO_ICONV if your libc does not properly support iconv.
#
138 139 140
# Define OLD_ICONV if your library has an old iconv(), where the second
# (input buffer pointer) parameter is declared with type (const char **).
#
141 142
# Define NO_DEFLATE_BOUND if your zlib does not have deflateBound.
#
143 144 145
# 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.
146
#
147 148 149 150 151
# 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).
152
#
153 154 155
# Define USE_ST_TIMESPEC if your "struct stat" uses "st_ctimespec" instead of
# "st_ctim"
#
156 157 158
# Define NO_NSEC if your "struct stat" does not have "st_ctim.tv_nsec"
# available.  This automatically turns USE_NSEC off.
#
159
# Define USE_STDEV below if you want git to care about the underlying device
160
# change being considered an inode change from the update-index perspective.
161
#
162 163 164
# 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.
#
165 166
# Define ASCIIDOC8 if you want to format documentation with AsciiDoc 8
#
167 168 169 170 171
# Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72
# (not v1.73 or v1.71).
#
# Define ASCIIDOC_NO_ROFF if your DocBook XSL escapes raw roff directives
# (versions 1.72 and later and 1.68.1 and earlier).
172
#
T
Thomas Rast 已提交
173 174 175 176
# 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.
#
177 178 179
# Define NO_PERL_MAKEMAKER if you cannot use Makefiles generated by perl's
# MakeMaker (e.g. using ActiveState under Cygwin).
#
180 181
# Define NO_PERL if you do not want Perl scripts or libraries at all.
#
182 183
# Define NO_PYTHON if you do not want Python scripts or libraries at all.
#
E
Eygene Ryabinkin 已提交
184 185
# Define NO_TCLTK if you do not want Tcl/Tk GUI.
#
186 187 188 189 190
# 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.
191 192 193
# 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).
#
194 195 196 197
# 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().
#
198 199 200
# 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.
201
#
202 203
# Define OBJECT_CREATION_USES_RENAMES if your operating systems has problems
# when hardlinking a file to another name and unlinking the original file right
204
# away (some NTFS drivers seem to zero the contents in that scenario).
205
#
206 207
# 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.
208 209 210
#
# Define USE_NED_ALLOCATOR if you want to replace the platforms default
# memory allocators with the nedmalloc allocator written by Niall Douglas.
211 212
#
# Define NO_REGEX if you have no or inferior regex support in your C library.
213
#
214 215
# Define JSMIN to point to JavaScript minifier that functions as
# a filter to have gitweb.js minified.
J
Junio C Hamano 已提交
216
#
217 218 219
# Define CSSMIN to point to a CSS minifier in order to generate a minified
# version of gitweb.css
#
220 221 222 223
# 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.
#
224 225 226 227 228 229 230
# 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'
231 232 233 234
#
# Define COMPUTE_HEADER_DEPENDENCIES if your compiler supports the -MMD option
# and you want to avoid rebuilding objects when an unrelated header file
# changes.
235 236 237
#
# Define CHECK_HEADER_DEPENDENCIES to check for problems in the hard-coded
# dependency rules.
J
Junio C Hamano 已提交
238
#
239
# Define NATIVE_CRLF if your platform uses CRLF for line endings.
240

241
GIT-VERSION-FILE: FORCE
242
	@$(SHELL_PATH) ./GIT-VERSION-GEN
243
-include GIT-VERSION-FILE
244

245 246 247 248 249
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 已提交
250
uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not')
251

252 253 254 255 256 257
ifdef MSVC
	# avoid the MingW and Cygwin configuration sections
	uname_S := Windows
	uname_O := Windows
endif

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

260
CFLAGS = -g -O2 -Wall
J
Junio C Hamano 已提交
261
LDFLAGS =
262
ALL_CFLAGS = $(CPPFLAGS) $(CFLAGS)
J
Junio C Hamano 已提交
263
ALL_LDFLAGS = $(LDFLAGS)
J
Junio C Hamano 已提交
264
STRIP ?= strip
265

266 267 268
# Among the variables below, these:
#   gitexecdir
#   template_dir
269 270
#   mandir
#   infodir
271 272
#   htmldir
#   ETC_GITCONFIG (but not sysconfdir)
273
#   ETC_GITATTRIBUTES
274 275
# can be specified as a relative path some/where/else;
# this is interpreted as relative to $(prefix) and "git" at
276 277 278
# runtime figures out where they are based on the path to the executable.
# This can help installing the suite in a relocatable way.

279
prefix = $(HOME)
280 281 282 283 284
bindir_relative = bin
bindir = $(prefix)/$(bindir_relative)
mandir = share/man
infodir = share/info
gitexecdir = libexec/git-core
285
sharedir = $(prefix)/share
286
gitwebdir = $(sharedir)/gitweb
287 288
template_dir = share/git-core/templates
htmldir = share/doc/git-doc
289 290
ifeq ($(prefix),/usr)
sysconfdir = /etc
291
ETC_GITCONFIG = $(sysconfdir)/gitconfig
292
ETC_GITATTRIBUTES = $(sysconfdir)/gitattributes
293 294
else
sysconfdir = $(prefix)/etc
295
ETC_GITCONFIG = etc/gitconfig
296
ETC_GITATTRIBUTES = etc/gitattributes
297
endif
298
lib = lib
299
# DESTDIR=
300
pathsep = :
301

J
Junio C Hamano 已提交
302
export prefix bindir sharedir sysconfdir gitwebdir
303

304 305
CC = gcc
AR = ar
306
RM = rm -f
307
DIFF = diff
308
TAR = tar
309
FIND = find
310 311
INSTALL = install
RPMBUILD = rpmbuild
312
TCL_PATH = tclsh
313
TCLTK_PATH = wish
314
PTHREAD_LIBS = -lpthread
315
PTHREAD_CFLAGS =
316
GCOV = gcov
317

318 319
export TCL_PATH TCLTK_PATH

320 321
# sparse is architecture-neutral, which means that we need to tell it
# explicitly what architecture to check for. Fix this up for yours..
322
SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__
323

P
Petr Baudis 已提交
324 325 326 327


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

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

334 335 336 337 338
# Guard against environment variables
BUILTIN_OBJS =
BUILT_INS =
COMPAT_CFLAGS =
COMPAT_OBJS =
339
EXTRA_CPPFLAGS =
340 341
LIB_H =
LIB_OBJS =
342
PROGRAM_OBJS =
343 344
PROGRAMS =
SCRIPT_PERL =
345
SCRIPT_PYTHON =
346
SCRIPT_SH =
347
SCRIPT_LIB =
348
TEST_PROGRAMS_NEED_X =
349

J
Jonathan Nieder 已提交
350 351 352 353 354 355
# 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

356 357
SCRIPT_SH += git-am.sh
SCRIPT_SH += git-bisect.sh
358
SCRIPT_SH += git-difftool--helper.sh
359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374
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

375 376 377 378
SCRIPT_LIB += git-mergetool--lib
SCRIPT_LIB += git-parse-remote
SCRIPT_LIB += git-sh-setup

379
SCRIPT_PERL += git-add--interactive.perl
380
SCRIPT_PERL += git-difftool.perl
381 382 383 384 385 386 387
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
388

389 390
SCRIPT_PYTHON += git-remote-testgit.py

391 392
SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
	  $(patsubst %.perl,%,$(SCRIPT_PERL)) \
393
	  $(patsubst %.py,%,$(SCRIPT_PYTHON)) \
394
	  git-instaweb
395

396 397
ETAGS_TARGET = TAGS

398 399
# Empty...
EXTRA_PROGRAMS =
400

401 402
# ... and all the rest that could be moved out of bindir to gitexecdir
PROGRAMS += $(EXTRA_PROGRAMS)
403 404 405 406 407 408 409 410 411

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))
412

413 414 415 416 417 418
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 已提交
419
TEST_PROGRAMS_NEED_X += test-line-buffer
420
TEST_PROGRAMS_NEED_X += test-match-trees
D
David Barr 已提交
421
TEST_PROGRAMS_NEED_X += test-obj-pool
422 423 424 425 426
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 已提交
427
TEST_PROGRAMS_NEED_X += test-string-pool
D
David Barr 已提交
428
TEST_PROGRAMS_NEED_X += test-svn-fe
J
Jason Evans 已提交
429
TEST_PROGRAMS_NEED_X += test-treap
430 431
TEST_PROGRAMS_NEED_X += test-index-version

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

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

BUILT_INS += git-cherry$X
439
BUILT_INS += git-cherry-pick$X
440 441 442 443 444 445 446 447
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 已提交
448
BUILT_INS += git-stage$X
449 450
BUILT_INS += git-status$X
BUILT_INS += git-whatchanged$X
J
Junio C Hamano 已提交
451

452 453
# what 'all' will build and 'install' will install in gitexecdir,
# excluding programs for built-in commands
J
Junio C Hamano 已提交
454
ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
455

E
Eygene Ryabinkin 已提交
456
# what 'all' will build but not install in gitexecdir
457
OTHER_PROGRAMS = git$X
E
Eygene Ryabinkin 已提交
458

459 460 461 462 463 464 465 466 467
# 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

468 469 470 471 472 473 474
# 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
475 476 477
ifndef PYTHON_PATH
	PYTHON_PATH = /usr/bin/python
endif
478

L
Luben Tuikov 已提交
479
export PERL_PATH
480
export PYTHON_PATH
L
Luben Tuikov 已提交
481

L
Linus Torvalds 已提交
482
LIB_FILE=libgit.a
483
XDIFF_LIB=xdiff/lib.a
J
Jonathan Nieder 已提交
484
VCSSVN_LIB=vcs-svn/lib.a
J
Junio C Hamano 已提交
485

486
LIB_H += advice.h
487 488 489 490 491 492
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
493
LIB_H += color.h
494
LIB_H += commit.h
495
LIB_H += compat/bswap.h
496
LIB_H += compat/cygwin.h
497
LIB_H += compat/mingw.h
498
LIB_H += compat/win32/pthread.h
499 500 501 502 503 504
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
505
LIB_H += exec_cmd.h
506 507
LIB_H += fsck.h
LIB_H += git-compat-util.h
A
Adam Simpkins 已提交
508
LIB_H += graph.h
509 510
LIB_H += grep.h
LIB_H += hash.h
511
LIB_H += help.h
512
LIB_H += levenshtein.h
513 514 515 516
LIB_H += list-objects.h
LIB_H += ll-merge.h
LIB_H += log-tree.h
LIB_H += mailmap.h
517
LIB_H += merge-recursive.h
J
Johannes Schindelin 已提交
518
LIB_H += notes.h
J
Jeff King 已提交
519
LIB_H += notes-cache.h
520 521
LIB_H += object.h
LIB_H += pack.h
522
LIB_H += pack-refs.h
523 524 525 526 527 528 529 530 531
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
532
LIB_H += rerere.h
533
LIB_H += resolve-undo.h
534 535
LIB_H += revision.h
LIB_H += run-command.h
536
LIB_H += sha1-lookup.h
537
LIB_H += sideband.h
538
LIB_H += sigchain.h
539
LIB_H += strbuf.h
540
LIB_H += string-list.h
541
LIB_H += submodule.h
542 543 544 545 546
LIB_H += tag.h
LIB_H += transport.h
LIB_H += tree.h
LIB_H += tree-walk.h
LIB_H += unpack-trees.h
547
LIB_H += userdiff.h
548
LIB_H += utf8.h
549 550
LIB_H += xdiff-interface.h
LIB_H += xdiff/xdiff.h
551

552
LIB_OBJS += abspath.o
553
LIB_OBJS += advice.o
554 555 556 557 558 559 560
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
561
LIB_OBJS += bisect.o
562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583
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
584
LIB_OBJS += diff-no-index.o
585 586
LIB_OBJS += diff.o
LIB_OBJS += dir.o
587
LIB_OBJS += editor.o
588 589 590 591
LIB_OBJS += entry.o
LIB_OBJS += environment.o
LIB_OBJS += exec_cmd.o
LIB_OBJS += fsck.o
A
Adam Simpkins 已提交
592
LIB_OBJS += graph.o
593 594 595
LIB_OBJS += grep.o
LIB_OBJS += hash.o
LIB_OBJS += help.o
L
Linus Torvalds 已提交
596
LIB_OBJS += hex.o
597
LIB_OBJS += ident.o
598
LIB_OBJS += levenshtein.o
599 600 601 602 603 604 605
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
606
LIB_OBJS += merge-recursive.o
607
LIB_OBJS += name-hash.o
J
Johannes Schindelin 已提交
608
LIB_OBJS += notes.o
J
Jeff King 已提交
609
LIB_OBJS += notes-cache.o
610 611
LIB_OBJS += object.o
LIB_OBJS += pack-check.o
612
LIB_OBJS += pack-refs.o
613 614 615 616 617 618 619 620
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
621
LIB_OBJS += preload-index.o
622 623 624 625 626 627 628 629
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
630
LIB_OBJS += replace_object.o
631
LIB_OBJS += rerere.o
632
LIB_OBJS += resolve-undo.o
633 634 635 636
LIB_OBJS += revision.o
LIB_OBJS += run-command.o
LIB_OBJS += server-info.o
LIB_OBJS += setup.o
637
LIB_OBJS += sha1-lookup.o
638
LIB_OBJS += sha1_file.o
639 640 641
LIB_OBJS += sha1_name.o
LIB_OBJS += shallow.o
LIB_OBJS += sideband.o
642
LIB_OBJS += sigchain.o
643
LIB_OBJS += strbuf.o
644
LIB_OBJS += string-list.o
645
LIB_OBJS += submodule.o
646 647 648 649
LIB_OBJS += symlinks.o
LIB_OBJS += tag.o
LIB_OBJS += trace.o
LIB_OBJS += transport.o
650
LIB_OBJS += transport-helper.o
651 652 653 654
LIB_OBJS += tree-diff.o
LIB_OBJS += tree.o
LIB_OBJS += tree-walk.o
LIB_OBJS += unpack-trees.o
J
Jeff King 已提交
655
LIB_OBJS += url.o
656
LIB_OBJS += usage.o
657
LIB_OBJS += userdiff.o
658 659
LIB_OBJS += utf8.o
LIB_OBJS += walker.o
660
LIB_OBJS += wrapper.o
661 662 663 664 665
LIB_OBJS += write_or_die.o
LIB_OBJS += ws.o
LIB_OBJS += wt-status.o
LIB_OBJS += xdiff-interface.o

666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 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
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 已提交
719
BUILTIN_OBJS += builtin/notes.o
720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755
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
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
756

757
GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
758
EXTLIBS =
759

760 761 762
#
# Platform specific tweaks
#
763 764 765 766 767

# 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...

768 769 770 771 772 773 774
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
775 776
ifeq ($(uname_S),Linux)
	NO_STRLCPY = YesPlease
777
	NO_MKSTEMPS = YesPlease
778
	HAVE_PATHS_H = YesPlease
779
endif
G
Gerrit Pape 已提交
780 781
ifeq ($(uname_S),GNU/kFreeBSD)
	NO_STRLCPY = YesPlease
782
	NO_MKSTEMPS = YesPlease
783
	HAVE_PATHS_H = YesPlease
G
Gerrit Pape 已提交
784
endif
B
Boyd Lynn Gerber 已提交
785 786 787 788 789 790 791 792 793
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
794
	NO_MKSTEMPS = YesPlease
B
Boyd Lynn Gerber 已提交
795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817
	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
818
	NO_MKSTEMPS = YesPlease
B
Boyd Lynn Gerber 已提交
819 820 821 822 823 824 825
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
	NO_STRCASESTR = YesPlease
	NO_MEMMEM = YesPlease
	INSTALL = ginstall
	TAR = gtar
endif
826
ifeq ($(uname_S),Darwin)
827
	NEEDS_CRYPTO_WITH_SSL = YesPlease
828 829
	NEEDS_SSL_WITH_CRYPTO = YesPlease
	NEEDS_LIBICONV = YesPlease
830
	ifeq ($(shell expr "$(uname_R)" : '[15678]\.'),2)
831 832
		OLD_ICONV = UnfortunatelyYes
	endif
833 834 835
	ifeq ($(shell expr "$(uname_R)" : '[15]\.'),2)
		NO_STRLCPY = YesPlease
	endif
836
	NO_MEMMEM = YesPlease
837
	USE_ST_TIMESPEC = YesPlease
838
endif
839
ifeq ($(uname_S),SunOS)
840
	NEEDS_SOCKET = YesPlease
841
	NEEDS_NSL = YesPlease
842
	SHELL_PATH = /bin/bash
843
	SANE_TOOL_PATH = /usr/xpg6/bin:/usr/xpg4/bin
844
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
845
	NO_MEMMEM = YesPlease
846
	NO_MKDTEMP = YesPlease
847
	NO_MKSTEMPS = YesPlease
848
	NO_REGEX = YesPlease
849 850 851 852 853 854 855 856 857 858 859 860
	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
861 862 863 864 865 866 867 868 869
	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
870
		GIT_TEST_CMP = cmp
871
	endif
J
Jason Riedy 已提交
872
	ifeq ($(uname_R),5.8)
J
Jason Riedy 已提交
873
		NO_UNSETENV = YesPlease
J
Jason Riedy 已提交
874
		NO_SETENV = YesPlease
875
		NO_C99_FORMAT = YesPlease
876
		NO_STRTOUMAX = YesPlease
877
		GIT_TEST_CMP = cmp
J
Jason Riedy 已提交
878
	endif
879 880 881
	ifeq ($(uname_R),5.9)
		NO_UNSETENV = YesPlease
		NO_SETENV = YesPlease
882
		NO_C99_FORMAT = YesPlease
883
		NO_STRTOUMAX = YesPlease
884
		GIT_TEST_CMP = cmp
885
	endif
886
	INSTALL = /usr/ucb/install
887
	TAR = gtar
888
	BASIC_CFLAGS += -D__EXTENSIONS__ -D__sun__ -DHAVE_ALLOCA_H
889
endif
890
ifeq ($(uname_O),Cygwin)
891
	ifeq ($(shell expr "$(uname_R)" : '1\.[1-6]\.'),4)
892 893 894 895 896 897 898 899 900
		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 已提交
901
	NEEDS_LIBICONV = YesPlease
902
	NO_FAST_WORKING_DIRECTORY = UnfortunatelyYes
903
	NO_TRUSTABLE_FILEMODE = UnfortunatelyYes
904
	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
905 906
	# There are conflicting reports about this.
	# On some boxes NO_MMAP is needed, and not so elsewhere.
J
Junio C Hamano 已提交
907 908
	# Try commenting this out if you suspect MMAP is more efficient
	NO_MMAP = YesPlease
P
Peter Anvin 已提交
909
	X = .exe
910 911
	COMPAT_OBJS += compat/cygwin.o
	UNRELIABLE_FSTAT = UnfortunatelyYes
912
endif
A
Alecs King 已提交
913 914
ifeq ($(uname_S),FreeBSD)
	NEEDS_LIBICONV = YesPlease
915
	OLD_ICONV = YesPlease
916
	NO_MEMMEM = YesPlease
917 918
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
919
	DIR_HAS_BSD_GROUP_SEMANTICS = YesPlease
920
	USE_ST_TIMESPEC = YesPlease
921
	ifeq ($(shell expr "$(uname_R)" : '4\.'),2)
922
		PTHREAD_LIBS = -pthread
923 924 925
		NO_UINTMAX_T = YesPlease
		NO_STRTOUMAX = YesPlease
	endif
926
	PYTHON_PATH = /usr/local/bin/python
927
	HAVE_PATHS_H = YesPlease
A
Alecs King 已提交
928
endif
929
ifeq ($(uname_S),OpenBSD)
930
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
931
	NO_MEMMEM = YesPlease
T
Tony Kemp 已提交
932
	USE_ST_TIMESPEC = YesPlease
H
Han Boetes 已提交
933
	NEEDS_LIBICONV = YesPlease
934 935
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
936
	HAVE_PATHS_H = YesPlease
J
Junio C Hamano 已提交
937 938
endif
ifeq ($(uname_S),NetBSD)
939 940 941
	ifeq ($(shell expr "$(uname_R)" : '[01]\.'),2)
		NEEDS_LIBICONV = YesPlease
	endif
942
	BASIC_CFLAGS += -I/usr/pkg/include
943
	BASIC_LDFLAGS += -L/usr/pkg/lib $(CC_LD_DYNPATH)/usr/pkg/lib
P
Patrick Welche 已提交
944
	USE_ST_TIMESPEC = YesPlease
945
	NO_MKSTEMPS = YesPlease
946
	HAVE_PATHS_H = YesPlease
H
Han Boetes 已提交
947
endif
948
ifeq ($(uname_S),AIX)
949
	DEFAULT_PAGER = more
950
	NO_STRCASESTR=YesPlease
R
René Scharfe 已提交
951
	NO_MEMMEM = YesPlease
952
	NO_MKDTEMP = YesPlease
953
	NO_MKSTEMPS = YesPlease
954
	NO_STRLCPY = YesPlease
955
	NO_NSEC = YesPlease
956 957
	FREAD_READS_DIRECTORIES = UnfortunatelyYes
	INTERNAL_QSORT = UnfortunatelyYes
958
	NEEDS_LIBICONV=YesPlease
959
	BASIC_CFLAGS += -D_LARGE_FILES
960
	ifeq ($(shell expr "$(uname_V)" : '[1234]'),1)
J
Junio C Hamano 已提交
961
		NO_PTHREADS = YesPlease
962 963
	else
		PTHREAD_LIBS = -lpthread
J
Junio C Hamano 已提交
964
	endif
965 966
	ifeq ($(shell expr "$(uname_V).$(uname_R)" : '5\.1'),3)
		INLINE=''
J
Junio C Hamano 已提交
967
	endif
968
	GIT_TEST_CMP = cmp
969
endif
T
Thomas Schwinge 已提交
970 971 972
ifeq ($(uname_S),GNU)
	# GNU/Hurd
	NO_STRLCPY=YesPlease
973
	NO_MKSTEMPS = YesPlease
974
	HAVE_PATHS_H = YesPlease
T
Thomas Schwinge 已提交
975
endif
976 977 978 979 980 981 982
ifeq ($(uname_S),IRIX)
	NO_SETENV = YesPlease
	NO_UNSETENV = YesPlease
	NO_STRCASESTR = YesPlease
	NO_MEMMEM = YesPlease
	NO_MKSTEMPS = YesPlease
	NO_MKDTEMP = YesPlease
983 984 985 986 987 988
	# 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.
989
	NO_MMAP = YesPlease
990
	NO_REGEX = YesPlease
991 992 993 994
	SNPRINTF_RETURNS_BOGUS = YesPlease
	SHELL_PATH = /usr/gnu/bin/bash
	NEEDS_LIBGEN = YesPlease
endif
J
Johannes Schindelin 已提交
995 996
ifeq ($(uname_S),IRIX64)
	NO_SETENV=YesPlease
B
Brandon Casey 已提交
997
	NO_UNSETENV = YesPlease
J
Johannes Schindelin 已提交
998
	NO_STRCASESTR=YesPlease
R
René Scharfe 已提交
999
	NO_MEMMEM = YesPlease
1000
	NO_MKSTEMPS = YesPlease
B
Brandon Casey 已提交
1001
	NO_MKDTEMP = YesPlease
1002 1003 1004 1005 1006 1007
	# 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 已提交
1008
	NO_MMAP = YesPlease
1009
	NO_REGEX = YesPlease
B
Brandon Casey 已提交
1010
	SNPRINTF_RETURNS_BOGUS = YesPlease
J
Johannes Schindelin 已提交
1011
	SHELL_PATH=/usr/gnu/bin/bash
B
Brandon Casey 已提交
1012
	NEEDS_LIBGEN = YesPlease
J
Johannes Schindelin 已提交
1013
endif
1014
ifeq ($(uname_S),HP-UX)
1015
	INLINE = __inline
1016 1017 1018 1019
	NO_IPV6=YesPlease
	NO_SETENV=YesPlease
	NO_STRCASESTR=YesPlease
	NO_MEMMEM = YesPlease
1020
	NO_MKSTEMPS = YesPlease
1021 1022 1023 1024 1025
	NO_STRLCPY = YesPlease
	NO_MKDTEMP = YesPlease
	NO_UNSETENV = YesPlease
	NO_HSTRERROR = YesPlease
	NO_SYS_SELECT_H = YesPlease
1026
	SNPRINTF_RETURNS_BOGUS = YesPlease
1027 1028 1029 1030
	NO_NSEC = YesPlease
	ifeq ($(uname_R),B.11.00)
		NO_INET_NTOP = YesPlease
		NO_INET_PTON = YesPlease
1031 1032 1033 1034 1035 1036 1037 1038
	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
1039
	endif
1040
	GIT_TEST_CMP = cmp
1041
endif
1042
ifeq ($(uname_S),Windows)
1043
	GIT_VERSION := $(GIT_VERSION).MSVC
M
Marius Storm-Olsen 已提交
1044 1045
	pathsep = ;
	NO_PREAD = YesPlease
1046
	NEEDS_CRYPTO_WITH_SSL = YesPlease
M
Marius Storm-Olsen 已提交
1047 1048 1049 1050 1051 1052 1053
	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 已提交
1054
	NO_STRTOK_R = YesPlease
M
Marius Storm-Olsen 已提交
1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075
	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_POSIX_ONLY_PROGRAMS = 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 已提交
1076
	NO_PYTHON = YesPlease
J
Johannes Sixt 已提交
1077
	BLK_SHA1 = YesPlease
1078
	NATIVE_CRLF = YesPlease
M
Marius Storm-Olsen 已提交
1079 1080 1081 1082

	CC = compat/vcbuild/scripts/clink.pl
	AR = compat/vcbuild/scripts/lib.pl
	CFLAGS =
R
Ramsay Jones 已提交
1083
	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
1084 1085
	COMPAT_OBJS = compat/msvc.o compat/fnmatch/fnmatch.o compat/winansi.o compat/win32/pthread.o
	COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DNOGDI -DHAVE_STRING_H -DHAVE_ALLOCA_H -Icompat -Icompat/fnmatch -Icompat/regex -Icompat/fnmatch -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
M
Marius Storm-Olsen 已提交
1086 1087
	BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -SUBSYSTEM:CONSOLE -NODEFAULTLIB:MSVCRT.lib
	EXTLIBS = advapi32.lib shell32.lib wininet.lib ws2_32.lib
1088
	PTHREAD_LIBS =
M
Marius Storm-Olsen 已提交
1089 1090 1091 1092 1093 1094 1095 1096 1097
	lib =
ifndef DEBUG
	BASIC_CFLAGS += -GL -Os -MT
	BASIC_LDFLAGS += -LTCG
	AR += -LTCG
else
	BASIC_CFLAGS += -Zi -MTd
endif
	X = .exe
1098
endif
J
Johannes Sixt 已提交
1099
ifneq (,$(findstring MINGW,$(uname_S)))
1100
	pathsep = ;
J
Johannes Sixt 已提交
1101
	NO_PREAD = YesPlease
E
Erik Faye-Lund 已提交
1102
	NEEDS_CRYPTO_WITH_SSL = YesPlease
1103
	NO_LIBGEN_H = YesPlease
J
Johannes Sixt 已提交
1104 1105 1106 1107 1108
	NO_SYMLINK_HEAD = YesPlease
	NO_SETENV = YesPlease
	NO_UNSETENV = YesPlease
	NO_STRCASESTR = YesPlease
	NO_STRLCPY = YesPlease
J
Jonathan Nieder 已提交
1109
	NO_STRTOK_R = YesPlease
J
Johannes Sixt 已提交
1110 1111 1112 1113 1114 1115
	NO_MEMMEM = YesPlease
	NEEDS_LIBICONV = YesPlease
	OLD_ICONV = YesPlease
	NO_C99_FORMAT = YesPlease
	NO_STRTOUMAX = YesPlease
	NO_MKDTEMP = YesPlease
1116
	NO_MKSTEMPS = YesPlease
J
Johannes Sixt 已提交
1117 1118
	NO_SVN_TESTS = YesPlease
	NO_PERL_MAKEMAKER = YesPlease
1119
	RUNTIME_PREFIX = YesPlease
J
Johannes Sixt 已提交
1120
	NO_POSIX_ONLY_PROGRAMS = YesPlease
1121
	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
1122
	NO_NSEC = YesPlease
J
Janos Laube 已提交
1123
	USE_WIN32_MMAP = YesPlease
1124
	USE_NED_ALLOCATOR = YesPlease
1125
	UNRELIABLE_FSTAT = UnfortunatelyYes
1126
	OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
1127
	NO_REGEX = YesPlease
E
Erik Faye-Lund 已提交
1128
	NO_PYTHON = YesPlease
J
Johannes Sixt 已提交
1129
	BLK_SHA1 = YesPlease
1130
	ETAGS_TARGET = ETAGS
1131
	COMPAT_CFLAGS += -D__USE_MINGW_ACCESS -DNOGDI -Icompat -Icompat/fnmatch -Icompat/win32
1132
	COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
1133 1134
	COMPAT_OBJS += compat/mingw.o compat/fnmatch/fnmatch.o compat/winansi.o \
		compat/win32/pthread.o
J
Johannes Sixt 已提交
1135
	EXTLIBS += -lws2_32
1136
	PTHREAD_LIBS =
J
Johannes Sixt 已提交
1137
	X = .exe
1138 1139 1140 1141 1142 1143 1144 1145 1146 1147
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 已提交
1148
endif
1149

1150
-include config.mak.autogen
1151
-include config.mak
1152

1153
ifdef CHECK_HEADER_DEPENDENCIES
1154
COMPUTE_HEADER_DEPENDENCIES =
1155 1156 1157 1158 1159 1160 1161
USE_COMPUTED_HEADER_DEPENDENCIES =
endif

ifdef COMPUTE_HEADER_DEPENDENCIES
USE_COMPUTED_HEADER_DEPENDENCIES = YesPlease
endif

1162
ifdef SANE_TOOL_PATH
1163 1164
SANE_TOOL_PATH_SQ = $(subst ','\'',$(SANE_TOOL_PATH))
BROKEN_PATH_FIX = 's|^\# @@BROKEN_PATH_FIX@@$$|git_broken_path_fix $(SANE_TOOL_PATH_SQ)|'
1165 1166
PATH := $(SANE_TOOL_PATH):${PATH}
else
1167
BROKEN_PATH_FIX = '/^\# @@BROKEN_PATH_FIX@@$$/d'
1168 1169
endif

G
Gary V. Vaughan 已提交
1170 1171 1172 1173
ifneq (,$(INLINE))
	BASIC_CFLAGS += -Dinline=$(INLINE)
endif

1174 1175 1176 1177
ifneq (,$(SOCKLEN_T))
	BASIC_CFLAGS += -Dsocklen_t=$(SOCKLEN_T)
endif

1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190
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
1191
	PTHREAD_LIBS =
1192 1193
endif

1194 1195 1196 1197 1198 1199 1200 1201
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
1202 1203
endif

1204 1205 1206 1207 1208
ifdef NO_LIBGEN_H
	COMPAT_CFLAGS += -DNO_LIBGEN_H
	COMPAT_OBJS += compat/basename.o
endif

D
Daniel Barkalow 已提交
1209 1210
ifdef NO_CURL
	BASIC_CFLAGS += -DNO_CURL
1211 1212 1213
	REMOTE_CURL_PRIMARY =
	REMOTE_CURL_ALIASES =
	REMOTE_CURL_NAMES =
D
Daniel Barkalow 已提交
1214
else
1215
	ifdef CURLDIR
1216
		# Try "-Wl,-rpath=$(CURLDIR)/$(lib)" in such a case.
1217
		BASIC_CFLAGS += -I$(CURLDIR)/include
1218
		CURL_LIBCURL = -L$(CURLDIR)/$(lib) $(CC_LD_DYNPATH)$(CURLDIR)/$(lib) -lcurl
1219 1220 1221
	else
		CURL_LIBCURL = -lcurl
	endif
1222 1223 1224
	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)
1225 1226
	PROGRAM_OBJS += http-fetch.o
	PROGRAMS += $(REMOTE_CURL_NAMES)
1227 1228 1229
	curl_check := $(shell (echo 070908; curl-config --vernum) | sort -r | sed -ne 2p)
	ifeq "$(curl_check)" "070908"
		ifndef NO_EXPAT
1230
			PROGRAM_OBJS += http-push.o
1231
		endif
1232
	endif
1233
	ifndef NO_EXPAT
1234 1235 1236 1237 1238 1239
		ifdef EXPATDIR
			BASIC_CFLAGS += -I$(EXPATDIR)/include
			EXPAT_LIBEXPAT = -L$(EXPATDIR)/$(lib) $(CC_LD_DYNPATH)$(EXPATDIR)/$(lib) -lexpat
		else
			EXPAT_LIBEXPAT = -lexpat
		endif
1240
	endif
1241 1242
endif

1243 1244
ifdef ZLIB_PATH
	BASIC_CFLAGS += -I$(ZLIB_PATH)/include
1245
	EXTLIBS += -L$(ZLIB_PATH)/$(lib) $(CC_LD_DYNPATH)$(ZLIB_PATH)/$(lib)
1246 1247 1248
endif
EXTLIBS += -lz

1249
ifndef NO_POSIX_ONLY_PROGRAMS
1250
	PROGRAM_OBJS += daemon.o
1251
endif
P
Petr Baudis 已提交
1252
ifndef NO_OPENSSL
J
Junio C Hamano 已提交
1253
	OPENSSL_LIBSSL = -lssl
J
Junio C Hamano 已提交
1254
	ifdef OPENSSLDIR
1255
		BASIC_CFLAGS += -I$(OPENSSLDIR)/include
1256
		OPENSSL_LINK = -L$(OPENSSLDIR)/$(lib) $(CC_LD_DYNPATH)$(OPENSSLDIR)/$(lib)
J
Junio C Hamano 已提交
1257 1258 1259
	else
		OPENSSL_LINK =
	endif
1260 1261 1262
	ifdef NEEDS_CRYPTO_WITH_SSL
		OPENSSL_LINK += -lcrypto
	endif
P
Petr Baudis 已提交
1263
else
1264
	BASIC_CFLAGS += -DNO_OPENSSL
1265
	BLK_SHA1 = 1
J
Junio C Hamano 已提交
1266
	OPENSSL_LIBSSL =
P
Petr Baudis 已提交
1267
endif
1268
ifdef NEEDS_SSL_WITH_CRYPTO
J
Junio C Hamano 已提交
1269
	LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto -lssl
1270
else
J
Junio C Hamano 已提交
1271
	LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto
1272 1273
endif
ifdef NEEDS_LIBICONV
J
Junio C Hamano 已提交
1274
	ifdef ICONVDIR
1275
		BASIC_CFLAGS += -I$(ICONVDIR)/include
1276
		ICONV_LINK = -L$(ICONVDIR)/$(lib) $(CC_LD_DYNPATH)$(ICONVDIR)/$(lib)
J
Junio C Hamano 已提交
1277 1278 1279
	else
		ICONV_LINK =
	endif
1280
	EXTLIBS += $(ICONV_LINK) -liconv
1281
endif
1282 1283 1284
ifdef NEEDS_LIBGEN
	EXTLIBS += -lgen
endif
1285
ifdef NEEDS_SOCKET
1286
	EXTLIBS += -lsocket
1287
endif
1288
ifdef NEEDS_NSL
1289
	EXTLIBS += -lnsl
1290
endif
1291 1292 1293
ifdef NEEDS_RESOLV
	EXTLIBS += -lresolv
endif
1294
ifdef NO_D_TYPE_IN_DIRENT
1295
	BASIC_CFLAGS += -DNO_D_TYPE_IN_DIRENT
1296
endif
1297
ifdef NO_D_INO_IN_DIRENT
1298
	BASIC_CFLAGS += -DNO_D_INO_IN_DIRENT
1299
endif
1300 1301 1302
ifdef NO_ST_BLOCKS_IN_STRUCT_STAT
	BASIC_CFLAGS += -DNO_ST_BLOCKS_IN_STRUCT_STAT
endif
1303 1304 1305
ifdef USE_NSEC
	BASIC_CFLAGS += -DUSE_NSEC
endif
1306 1307 1308
ifdef USE_ST_TIMESPEC
	BASIC_CFLAGS += -DUSE_ST_TIMESPEC
endif
1309 1310 1311
ifdef NO_NSEC
	BASIC_CFLAGS += -DNO_NSEC
endif
1312
ifdef NO_C99_FORMAT
1313
	BASIC_CFLAGS += -DNO_C99_FORMAT
1314
endif
1315 1316 1317 1318
ifdef SNPRINTF_RETURNS_BOGUS
	COMPAT_CFLAGS += -DSNPRINTF_RETURNS_BOGUS
	COMPAT_OBJS += compat/snprintf.o
endif
1319 1320 1321 1322
ifdef FREAD_READS_DIRECTORIES
	COMPAT_CFLAGS += -DFREAD_READS_DIRECTORIES
	COMPAT_OBJS += compat/fopen.o
endif
1323
ifdef NO_SYMLINK_HEAD
1324
	BASIC_CFLAGS += -DNO_SYMLINK_HEAD
1325
endif
1326
ifdef NO_STRCASESTR
1327
	COMPAT_CFLAGS += -DNO_STRCASESTR
J
Jason Riedy 已提交
1328 1329
	COMPAT_OBJS += compat/strcasestr.o
endif
1330 1331 1332 1333
ifdef NO_STRLCPY
	COMPAT_CFLAGS += -DNO_STRLCPY
	COMPAT_OBJS += compat/strlcpy.o
endif
1334 1335 1336 1337 1338 1339 1340
ifdef NO_STRTOUMAX
	COMPAT_CFLAGS += -DNO_STRTOUMAX
	COMPAT_OBJS += compat/strtoumax.o
endif
ifdef NO_STRTOULL
	COMPAT_CFLAGS += -DNO_STRTOULL
endif
J
Jonathan Nieder 已提交
1341 1342 1343 1344
ifdef NO_STRTOK_R
	COMPAT_CFLAGS += -DNO_STRTOK_R
	COMPAT_OBJS += compat/strtok_r.o
endif
J
Jason Riedy 已提交
1345
ifdef NO_SETENV
1346
	COMPAT_CFLAGS += -DNO_SETENV
J
Jason Riedy 已提交
1347
	COMPAT_OBJS += compat/setenv.o
1348
endif
1349 1350 1351 1352
ifdef NO_MKDTEMP
	COMPAT_CFLAGS += -DNO_MKDTEMP
	COMPAT_OBJS += compat/mkdtemp.o
endif
1353 1354 1355
ifdef NO_MKSTEMPS
	COMPAT_CFLAGS += -DNO_MKSTEMPS
endif
J
Johannes Schindelin 已提交
1356
ifdef NO_UNSETENV
J
Jason Riedy 已提交
1357 1358 1359
	COMPAT_CFLAGS += -DNO_UNSETENV
	COMPAT_OBJS += compat/unsetenv.o
endif
1360 1361 1362
ifdef NO_SYS_SELECT_H
	BASIC_CFLAGS += -DNO_SYS_SELECT_H
endif
1363
ifdef NO_MMAP
1364
	COMPAT_CFLAGS += -DNO_MMAP
J
Jason Riedy 已提交
1365
	COMPAT_OBJS += compat/mmap.o
J
Janos Laube 已提交
1366 1367 1368 1369 1370
else
	ifdef USE_WIN32_MMAP
		COMPAT_CFLAGS += -DUSE_WIN32_MMAP
		COMPAT_OBJS += compat/win32mmap.o
	endif
1371
endif
1372 1373
ifdef OBJECT_CREATION_USES_RENAMES
	COMPAT_CFLAGS += -DOBJECT_CREATION_MODE=1
1374
endif
1375 1376 1377 1378
ifdef NO_PREAD
	COMPAT_CFLAGS += -DNO_PREAD
	COMPAT_OBJS += compat/pread.o
endif
1379 1380 1381
ifdef NO_FAST_WORKING_DIRECTORY
	BASIC_CFLAGS += -DNO_FAST_WORKING_DIRECTORY
endif
1382 1383 1384
ifdef NO_TRUSTABLE_FILEMODE
	BASIC_CFLAGS += -DNO_TRUSTABLE_FILEMODE
endif
1385
ifdef NO_IPV6
1386
	BASIC_CFLAGS += -DNO_IPV6
1387
endif
1388 1389 1390
ifdef NO_UINTMAX_T
	BASIC_CFLAGS += -Duintmax_t=uint32_t
endif
1391 1392
ifdef NO_SOCKADDR_STORAGE
ifdef NO_IPV6
1393
	BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in
1394
else
1395
	BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in6
1396
endif
1397
endif
1398 1399 1400
ifdef NO_INET_NTOP
	LIB_OBJS += compat/inet_ntop.o
endif
1401 1402 1403
ifdef NO_INET_PTON
	LIB_OBJS += compat/inet_pton.o
endif
1404

1405
ifdef NO_ICONV
1406
	BASIC_CFLAGS += -DNO_ICONV
1407 1408
endif

1409 1410 1411 1412
ifdef OLD_ICONV
	BASIC_CFLAGS += -DOLD_ICONV
endif

1413 1414 1415 1416
ifdef NO_DEFLATE_BOUND
	BASIC_CFLAGS += -DNO_DEFLATE_BOUND
endif

1417 1418 1419
ifdef BLK_SHA1
	SHA1_HEADER = "block-sha1/sha1.h"
	LIB_OBJS += block-sha1/sha1.o
1420
	LIB_H += block-sha1/sha1.h
1421
else
1422 1423 1424
ifdef PPC_SHA1
	SHA1_HEADER = "ppc/sha1.h"
	LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
1425
	LIB_H += ppc/sha1.h
1426 1427
else
	SHA1_HEADER = <openssl/sha.h>
1428
	EXTLIBS += $(LIB_4_CRYPTO)
1429 1430
endif
endif
1431 1432 1433
ifdef NO_PERL_MAKEMAKER
	export NO_PERL_MAKEMAKER
endif
1434 1435 1436 1437
ifdef NO_HSTRERROR
	COMPAT_CFLAGS += -DNO_HSTRERROR
	COMPAT_OBJS += compat/hstrerror.o
endif
R
René Scharfe 已提交
1438 1439 1440 1441
ifdef NO_MEMMEM
	COMPAT_CFLAGS += -DNO_MEMMEM
	COMPAT_OBJS += compat/memmem.o
endif
1442 1443 1444 1445
ifdef INTERNAL_QSORT
	COMPAT_CFLAGS += -DINTERNAL_QSORT
	COMPAT_OBJS += compat/qsort.o
endif
1446 1447 1448
ifdef RUNTIME_PREFIX
	COMPAT_CFLAGS += -DRUNTIME_PREFIX
endif
1449

J
Junio C Hamano 已提交
1450 1451 1452
ifdef NO_PTHREADS
	BASIC_CFLAGS += -DNO_PTHREADS
else
1453
	BASIC_CFLAGS += $(PTHREAD_CFLAGS)
J
Junio C Hamano 已提交
1454
	EXTLIBS += $(PTHREAD_LIBS)
1455
	LIB_OBJS += thread-utils.o
N
Nicolas Pitre 已提交
1456
endif
1457

1458 1459 1460 1461
ifdef HAVE_PATHS_H
	BASIC_CFLAGS += -DHAVE_PATHS_H
endif

1462 1463 1464
ifdef DIR_HAS_BSD_GROUP_SEMANTICS
	COMPAT_CFLAGS += -DDIR_HAS_BSD_GROUP_SEMANTICS
endif
1465 1466 1467
ifdef UNRELIABLE_FSTAT
	BASIC_CFLAGS += -DUNRELIABLE_FSTAT
endif
1468 1469 1470 1471
ifdef NO_REGEX
	COMPAT_CFLAGS += -Icompat/regex
	COMPAT_OBJS += compat/regex/regex.o
endif
N
Nicolas Pitre 已提交
1472

1473
ifdef USE_NED_ALLOCATOR
1474
       COMPAT_CFLAGS += -Icompat/nedmalloc
1475 1476 1477
       COMPAT_OBJS += compat/nedmalloc/nedmalloc.o
endif

1478 1479 1480 1481
ifdef GIT_TEST_CMP_USE_COPIED_CONTEXT
	export GIT_TEST_CMP_USE_COPIED_CONTEXT
endif

1482 1483 1484 1485
ifeq ($(TCLTK_PATH),)
NO_TCLTK=NoThanks
endif

1486 1487 1488 1489
ifeq ($(PERL_PATH),)
NO_PERL=NoThanks
endif

1490 1491 1492 1493
ifeq ($(PYTHON_PATH),)
NO_PYTHON=NoThanks
endif

1494
QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
1495 1496
QUIET_SUBDIR1  =

1497 1498 1499 1500 1501 1502
ifneq ($(findstring $(MAKEFLAGS),w),w)
PRINT_DIR = --no-print-directory
else # "make -w"
NO_SUBDIR = :
endif

1503
ifneq ($(findstring $(MAKEFLAGS),s),s)
S
Shawn O. Pearce 已提交
1504
ifndef V
A
Alex Riesen 已提交
1505
	QUIET_CC       = @echo '   ' CC $@;
1506 1507 1508 1509
	QUIET_AR       = @echo '   ' AR $@;
	QUIET_LINK     = @echo '   ' LINK $@;
	QUIET_BUILT_IN = @echo '   ' BUILTIN $@;
	QUIET_GEN      = @echo '   ' GEN $@;
1510
	QUIET_LNCP     = @echo '   ' LN/CP $@;
1511
	QUIET_GCOV     = @echo '   ' GCOV $@;
1512
	QUIET_SUBDIR0  = +@subdir=
1513 1514
	QUIET_SUBDIR1  = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
			 $(MAKE) $(PRINT_DIR) -C $$subdir
S
Shawn O. Pearce 已提交
1515
	export V
A
Alex Riesen 已提交
1516
	export QUIET_GEN
1517 1518
	export QUIET_BUILT_IN
endif
1519
endif
1520

1521 1522 1523 1524
ifdef ASCIIDOC8
	export ASCIIDOC8
endif

P
Pavel Roskin 已提交
1525
# Shell quote (do not use $(call) to accommodate ancient setups);
1526 1527

SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER))
1528
ETC_GITCONFIG_SQ = $(subst ','\'',$(ETC_GITCONFIG))
1529
ETC_GITATTRIBUTES_SQ = $(subst ','\'',$(ETC_GITATTRIBUTES))
1530 1531 1532

DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
bindir_SQ = $(subst ','\'',$(bindir))
1533
bindir_relative_SQ = $(subst ','\'',$(bindir_relative))
1534
mandir_SQ = $(subst ','\'',$(mandir))
1535
infodir_SQ = $(subst ','\'',$(infodir))
1536 1537
gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
template_dir_SQ = $(subst ','\'',$(template_dir))
1538
htmldir_SQ = $(subst ','\'',$(htmldir))
1539
prefix_SQ = $(subst ','\'',$(prefix))
1540
gitwebdir_SQ = $(subst ','\'',$(gitwebdir))
1541 1542 1543

SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
1544
PYTHON_PATH_SQ = $(subst ','\'',$(PYTHON_PATH))
1545
TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH))
1546
DIFF_SQ = $(subst ','\'',$(DIFF))
1547

1548 1549
LIBS = $(GITLIBS) $(EXTLIBS)

1550
BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' \
1551
	$(COMPAT_CFLAGS)
J
Jason Riedy 已提交
1552
LIB_OBJS += $(COMPAT_OBJS)
1553

1554 1555 1556 1557 1558 1559 1560 1561 1562
# 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

1563 1564 1565 1566 1567 1568 1569
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

1570 1571 1572
ALL_CFLAGS += $(BASIC_CFLAGS)
ALL_LDFLAGS += $(BASIC_LDFLAGS)

1573
export DIFF TAR INSTALL DESTDIR SHELL_PATH
1574 1575


P
Petr Baudis 已提交
1576 1577
### Build rules

1578 1579
SHELL = $(SHELL_PATH)

1580
all:: shell_compatibility_test $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) $(OTHER_PROGRAMS) GIT-BUILD-OPTIONS
1581
ifneq (,$X)
1582
	$(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';)
1583
endif
1584

1585
all::
E
Eygene Ryabinkin 已提交
1586
ifndef NO_TCLTK
1587
	$(QUIET_SUBDIR0)git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all
J
Junio C Hamano 已提交
1588
	$(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all
E
Eygene Ryabinkin 已提交
1589
endif
1590
ifndef NO_PERL
1591
	$(QUIET_SUBDIR0)perl $(QUIET_SUBDIR1) PERL_PATH='$(PERL_PATH_SQ)' prefix='$(prefix_SQ)' all
1592 1593 1594
endif
ifndef NO_PYTHON
	$(QUIET_SUBDIR0)git_remote_helpers $(QUIET_SUBDIR1) PYTHON_PATH='$(PYTHON_PATH_SQ)' prefix='$(prefix_SQ)' all
1595
endif
1596
	$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1) SHELL_PATH='$(SHELL_PATH_SQ)' PERL_PATH='$(PERL_PATH_SQ)'
1597

1598 1599 1600 1601 1602
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 已提交
1603 1604 1605
strip: $(PROGRAMS) git$X
	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X

1606
git.o: common-cmds.h
1607
git.s git.o: EXTRA_CPPFLAGS = -DGIT_VERSION='"$(GIT_VERSION)"' \
1608
	'-DGIT_HTML_PATH="$(htmldir_SQ)"'
1609 1610

git$X: git.o $(BUILTIN_OBJS) $(GITLIBS)
1611
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ git.o \
1612
		$(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)
1613

1614
builtin/help.o: common-cmds.h
1615
builtin/help.s builtin/help.o: EXTRA_CPPFLAGS = \
1616 1617 1618
	'-DGIT_HTML_PATH="$(htmldir_SQ)"' \
	'-DGIT_MAN_PATH="$(mandir_SQ)"' \
	'-DGIT_INFO_PATH="$(infodir_SQ)"'
1619

J
Junio C Hamano 已提交
1620
$(BUILT_INS): git$X
1621 1622 1623 1624
	$(QUIET_BUILT_IN)$(RM) $@ && \
	ln git$X $@ 2>/dev/null || \
	ln -s git$X $@ 2>/dev/null || \
	cp git$X $@
J
Junio C Hamano 已提交
1625

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

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

1631 1632 1633 1634
define cmd_munge_script
$(RM) $@ $@+ && \
sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
    -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \
1635
    -e 's|@@DIFF@@|$(DIFF_SQ)|' \
1636 1637 1638 1639 1640 1641
    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
    -e $(BROKEN_PATH_FIX) \
    $@.sh >$@+
endef

1642
$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
1643
	$(QUIET_GEN)$(cmd_munge_script) && \
1644
	chmod +x $@+ && \
1645
	mv $@+ $@
1646

1647 1648 1649 1650
$(SCRIPT_LIB) : % : %.sh
	$(QUIET_GEN)$(cmd_munge_script) && \
	mv $@+ $@

1651
ifndef NO_PERL
1652 1653
$(patsubst %.perl,%,$(SCRIPT_PERL)): perl/perl.mak

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

1657
$(patsubst %.perl,%,$(SCRIPT_PERL)): % : %.perl
1658
	$(QUIET_GEN)$(RM) $@ $@+ && \
1659
	INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C perl -s --no-print-directory instlibdir` && \
1660 1661 1662
	sed -e '1{' \
	    -e '	s|#!.*perl|#!$(PERL_PATH_SQ)|' \
	    -e '	h' \
1663
	    -e '	s=.*=use lib (split(/$(pathsep)/, $$ENV{GITPERLLIB} || "'"$$INSTLIBDIR"'"));=' \
1664 1665 1666
	    -e '	H' \
	    -e '	x' \
	    -e '}' \
1667
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1668 1669
	    $@.perl >$@+ && \
	chmod +x $@+ && \
1670
	mv $@+ $@
1671

1672 1673 1674 1675 1676

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

1677
ifdef JSMIN
1678 1679
GITWEB_PROGRAMS += gitweb/static/gitweb.min.js
GITWEB_JS = gitweb/static/gitweb.min.js
1680
else
1681
GITWEB_JS = gitweb/static/gitweb.js
1682
endif
1683
ifdef CSSMIN
1684 1685
GITWEB_PROGRAMS += gitweb/static/gitweb.min.css
GITWEB_CSS = gitweb/static/gitweb.min.css
M
Mark Rada 已提交
1686
else
1687
GITWEB_CSS = gitweb/static/gitweb.css
1688 1689 1690
endif
OTHER_PROGRAMS +=  gitweb/gitweb.cgi  $(GITWEB_PROGRAMS)
gitweb/gitweb.cgi: gitweb/gitweb.perl $(GITWEB_PROGRAMS)
1691 1692 1693
	$(QUIET_SUBDIR0)gitweb $(QUIET_SUBDIR1) $(patsubst gitweb/%,%,$@)

ifdef JSMIN
1694
gitweb/static/gitweb.min.js: gitweb/static/gitweb.js
1695 1696
	$(QUIET_SUBDIR0)gitweb $(QUIET_SUBDIR1) $(patsubst gitweb/%,%,$@)
endif # JSMIN
1697
ifdef CSSMIN
1698
gitweb/static/gitweb.min.css: gitweb/static/gitweb.css
1699 1700
	$(QUIET_SUBDIR0)gitweb $(QUIET_SUBDIR1) $(patsubst gitweb/%,%,$@)
endif # CSSMIN
1701

1702

1703
git-instaweb: git-instaweb.sh gitweb/gitweb.cgi gitweb/static/gitweb.css gitweb/static/gitweb.js
1704
	$(QUIET_GEN)$(RM) $@ $@+ && \
1705 1706 1707
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
1708
	    -e 's|@@GITWEBDIR@@|$(gitwebdir_SQ)|g' \
1709
	    -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
1710 1711
	    $@.sh > $@+ && \
	chmod +x $@+ && \
1712
	mv $@+ $@
1713 1714 1715 1716 1717 1718 1719 1720 1721
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
1722

1723 1724 1725 1726 1727 1728 1729
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` && \
1730 1731
	sed -e '1s|#!.*python|#!$(PYTHON_PATH_SQ)|' \
	    -e 's|\(os\.getenv("GITPYTHONLIB"\)[^)]*)|\1,"@@INSTLIBDIR@@")|' \
1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745
	    -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

1746
configure: configure.ac
1747
	$(QUIET_GEN)$(RM) $@ $<+ && \
1748
	sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1749 1750
	    $< > $<+ && \
	autoconf -o $@ $<+ && \
1751
	$(RM) $<+
1752

1753
# These can record GIT_VERSION
1754
git.o git.spec \
1755 1756 1757
	$(patsubst %.sh,%,$(SCRIPT_SH)) \
	$(patsubst %.perl,%,$(SCRIPT_PERL)) \
	: GIT-VERSION-FILE
1758

1759
TEST_OBJS := $(patsubst test-%$X,test-%.o,$(TEST_PROGRAMS))
1760
GIT_OBJS := $(LIB_OBJS) $(BUILTIN_OBJS) $(PROGRAM_OBJS) $(TEST_OBJS) \
1761 1762 1763 1764
	git.o
ifndef NO_CURL
	GIT_OBJS += http.o http-walker.o remote-curl.o
endif
1765 1766
XDIFF_OBJS = xdiff/xdiffi.o xdiff/xprepare.o xdiff/xutils.o xdiff/xemit.o \
	xdiff/xmerge.o xdiff/xpatience.o
1767
VCSSVN_OBJS = vcs-svn/string_pool.o vcs-svn/line_buffer.o \
D
David Barr 已提交
1768
	vcs-svn/repo_tree.o vcs-svn/fast_export.o vcs-svn/svndump.o
J
Jonathan Nieder 已提交
1769
OBJECTS := $(GIT_OBJS) $(XDIFF_OBJS) $(VCSSVN_OBJS)
1770

1771
dep_files := $(foreach f,$(OBJECTS),$(dir $f).depend/$(notdir $f).d)
1772
dep_dirs := $(addsuffix .depend,$(sort $(dir $(OBJECTS))))
1773

1774 1775 1776 1777 1778
ifdef COMPUTE_HEADER_DEPENDENCIES
$(dep_dirs):
	mkdir -p $@

missing_dep_dirs := $(filter-out $(wildcard $(dep_dirs)),$(dep_dirs))
1779
dep_file = $(dir $@).depend/$(notdir $@).d
1780 1781 1782 1783 1784 1785 1786 1787 1788
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
1789 1790
dep_dirs =
missing_dep_dirs =
1791 1792
dep_args =
endif
1793 1794
endif

1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808
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))

1809 1810
.SUFFIXES:

1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844
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
1845
$(C_OBJ): %.o: %.c GIT-CFLAGS $(missing_dep_dirs)
1846
	$(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
1847
$(ASM_OBJ): %.o: %.S GIT-CFLAGS $(missing_dep_dirs)
1848
	$(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
1849
endif
1850

1851
%.s: %.c GIT-CFLAGS FORCE
1852
	$(QUIET_CC)$(CC) -S $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
1853 1854

ifdef USE_COMPUTED_HEADER_DEPENDENCIES
1855 1856
# Take advantage of gcc's on-the-fly dependency generation
# See <http://gcc.gnu.org/gcc-3.0/features.html>.
1857 1858 1859
dep_files_present := $(wildcard $(dep_files))
ifneq ($(dep_files_present),)
include $(dep_files_present)
1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870
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!
1871

1872
$(GIT_OBJS): $(LIB_H)
1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883
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
builtin/grep.o: thread-utils.h
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
builtin/pack-objects.o: thread-utils.h
1884
connect.o transport.o http-backend.o: url.h
1885
http-fetch.o http-walker.o remote-curl.o transport.o walker.o: walker.h
1886
http.o http-walker.o http-push.o http-fetch.o remote-curl.o: http.h
1887 1888 1889 1890

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 已提交
1891

D
David Barr 已提交
1892
$(VCSSVN_OBJS): \
D
David Barr 已提交
1893
	vcs-svn/obj_pool.h vcs-svn/trp.h vcs-svn/string_pool.h \
D
David Barr 已提交
1894 1895
	vcs-svn/line_buffer.h vcs-svn/repo_tree.h vcs-svn/fast_export.h \
	vcs-svn/svndump.h
1896
endif
1897

1898
exec_cmd.s exec_cmd.o: EXTRA_CPPFLAGS = \
1899 1900 1901
	'-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
	'-DBINDIR="$(bindir_relative_SQ)"' \
	'-DPREFIX="$(prefix_SQ)"'
1902

1903
builtin/init-db.s builtin/init-db.o: EXTRA_CPPFLAGS = \
1904
	-DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"'
1905

1906
config.s config.o: EXTRA_CPPFLAGS = -DETC_GITCONFIG='"$(ETC_GITCONFIG_SQ)"'
1907

1908 1909
attr.s attr.o: EXTRA_CPPFLAGS = -DETC_GITATTRIBUTES='"$(ETC_GITATTRIBUTES_SQ)"'

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

1912
ifdef NO_EXPAT
1913
http-walker.s http-walker.o: EXTRA_CPPFLAGS = -DNO_EXPAT
1914 1915
endif

1916 1917 1918 1919
ifdef NO_REGEX
compat/regex/regex.o: EXTRA_CPPFLAGS = -DGAWK -DNO_MBSUPPORT
endif

1920 1921 1922 1923 1924
ifdef USE_NED_ALLOCATOR
compat/nedmalloc/nedmalloc.o: EXTRA_CPPFLAGS = \
	-DNDEBUG -DOVERRIDE_STRDUP -DREPLACE_SYSTEM_ALLOCATOR
endif

1925
git-%$X: %.o $(GITLIBS)
1926
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
1927

R
Robert Shearman 已提交
1928 1929 1930
git-imap-send$X: imap-send.o $(GITLIBS)
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIBS) $(OPENSSL_LINK) $(OPENSSL_LIBSSL)
1931

1932
git-http-fetch$X: revision.o http.o http-walker.o http-fetch.o $(GITLIBS)
L
Linus Torvalds 已提交
1933
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
1934
		$(LIBS) $(CURL_LIBCURL)
1935
git-http-push$X: revision.o http.o http-push.o $(GITLIBS)
1936
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
1937 1938
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

1939 1940 1941 1942 1943 1944 1945
$(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)
1946 1947 1948
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

P
Petr Baudis 已提交
1949
$(LIB_FILE): $(LIB_OBJS)
1950
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)
P
Petr Baudis 已提交
1951

1952
$(XDIFF_LIB): $(XDIFF_OBJS)
1953
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(XDIFF_OBJS)
1954

J
Jonathan Nieder 已提交
1955 1956
$(VCSSVN_LIB): $(VCSSVN_OBJS)
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(VCSSVN_OBJS)
1957

P
Petr Baudis 已提交
1958 1959 1960
doc:
	$(MAKE) -C Documentation all

1961 1962 1963 1964 1965 1966
man:
	$(MAKE) -C Documentation man

html:
	$(MAKE) -C Documentation html

1967 1968 1969
info:
	$(MAKE) -C Documentation info

1970 1971 1972
pdf:
	$(MAKE) -C Documentation pdf

1973 1974 1975
$(ETAGS_TARGET): FORCE
	$(RM) $(ETAGS_TARGET)
	$(FIND) . -name '*.[hcS]' -print | xargs etags -a -o $(ETAGS_TARGET)
1976

1977
tags: FORCE
1978
	$(RM) tags
1979
	$(FIND) . -name '*.[hcS]' -print | xargs ctags -a
P
Petr Baudis 已提交
1980

K
Kristof Provost 已提交
1981 1982 1983 1984
cscope:
	$(RM) cscope*
	$(FIND) . -name '*.[hcS]' -print | xargs cscope -b

1985
### Detect prefix changes
1986
TRACK_CFLAGS = $(CC):$(subst ','\'',$(ALL_CFLAGS)):\
1987 1988
             $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ)

1989
GIT-CFLAGS: FORCE
1990 1991 1992 1993 1994 1995
	@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 已提交
1996 1997 1998
# 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".
1999
GIT-BUILD-OPTIONS: FORCE
J
Junio C Hamano 已提交
2000
	@echo SHELL_PATH=\''$(subst ','\'',$(SHELL_PATH_SQ))'\' >$@
2001
	@echo PERL_PATH=\''$(subst ','\'',$(PERL_PATH_SQ))'\' >>$@
2002
	@echo DIFF=\''$(subst ','\'',$(subst ','\'',$(DIFF)))'\' >>$@
2003
	@echo PYTHON_PATH=\''$(subst ','\'',$(PYTHON_PATH_SQ))'\' >>$@
J
Junio C Hamano 已提交
2004
	@echo TAR=\''$(subst ','\'',$(subst ','\'',$(TAR)))'\' >>$@
J
Jeff King 已提交
2005
	@echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@
2006
	@echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@
J
Jeff King 已提交
2007
	@echo NO_PYTHON=\''$(subst ','\'',$(subst ','\'',$(NO_PYTHON)))'\' >>$@
2008 2009 2010 2011 2012 2013
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
2014

2015 2016 2017 2018
### Detect Tck/Tk interpreter path changes
ifndef NO_TCLTK
TRACK_VARS = $(subst ','\'',-DTCLTK_PATH='$(TCLTK_PATH_SQ)')

2019
GIT-GUI-VARS: FORCE
2020 2021 2022 2023 2024 2025 2026
	@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

2027 2028 2029 2030 2031 2032 2033 2034 2035 2036
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 $@
2037

2038 2039 2040 2041
# GNU make supports exporting all variables by "export" without parameters.
# However, the environment gets quite big, and some programs have problems
# with that.

2042
export NO_SVN_TESTS
2043

2044 2045
### Testing rules

2046
test: all
P
Petr Baudis 已提交
2047 2048
	$(MAKE) -C t/ all

R
René Scharfe 已提交
2049 2050
test-ctype$X: ctype.o

2051
test-date$X: date.o ctype.o
P
Petr Baudis 已提交
2052

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

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

2057 2058
test-parse-options$X: parse-options.o

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

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

2063
.PRECIOUS: $(TEST_OBJS)
2064

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

2068 2069 2070
check-sha1:: test-sha1$X
	./test-sha1.sh

2071
check: common-cmds.h
2072 2073 2074 2075 2076 2077 2078 2079 2080 2081
	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 已提交
2082

2083
remove-dashes:
2084
	./fixup-builtins $(BUILT_INS) $(PROGRAMS) $(SCRIPTS)
P
Petr Baudis 已提交
2085 2086 2087

### Installation rules

2088
ifneq ($(filter /%,$(firstword $(template_dir))),)
2089
template_instdir = $(template_dir)
2090 2091
else
template_instdir = $(prefix)/$(template_dir)
2092 2093 2094
endif
export template_instdir

2095
ifneq ($(filter /%,$(firstword $(gitexecdir))),)
2096
gitexec_instdir = $(gitexecdir)
2097 2098
else
gitexec_instdir = $(prefix)/$(gitexecdir)
2099 2100 2101 2102
endif
gitexec_instdir_SQ = $(subst ','\'',$(gitexec_instdir))
export gitexec_instdir

2103 2104
install_bindir_programs := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X)) $(BINDIR_PROGRAMS_NO_X)

2105
install: all
2106
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
2107 2108
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
	$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
2109
	$(INSTALL) -m 644 $(SCRIPT_LIB) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
2110
	$(INSTALL) $(install_bindir_programs) '$(DESTDIR_SQ)$(bindir_SQ)'
2111
	$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
2112
ifndef NO_PERL
2113
	$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
J
Junio C Hamano 已提交
2114
	$(MAKE) -C gitweb install
2115
endif
2116 2117 2118
ifndef NO_PYTHON
	$(MAKE) -C git_remote_helpers prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
endif
E
Eygene Ryabinkin 已提交
2119
ifndef NO_TCLTK
J
Junio C Hamano 已提交
2120
	$(MAKE) -C gitk-git install
2121
	$(MAKE) -C git-gui gitexecdir='$(gitexec_instdir_SQ)' install
E
Eygene Ryabinkin 已提交
2122
endif
2123
ifneq (,$X)
2124
	$(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';)
2125
endif
2126

2127
	bindir=$$(cd '$(DESTDIR_SQ)$(bindir_SQ)' && pwd) && \
2128
	execdir=$$(cd '$(DESTDIR_SQ)$(gitexec_instdir_SQ)' && pwd) && \
2129
	{ test "$$bindir/" = "$$execdir/" || \
2130 2131
	  for p in git$X $(filter $(install_bindir_programs),$(ALL_PROGRAMS)); do \
		$(RM) "$$execdir/$$p" && \
2132
		test -z "$(NO_CROSS_DIRECTORY_HARDLINKS)" && \
2133 2134 2135 2136
		ln "$$bindir/$$p" "$$execdir/$$p" 2>/dev/null || \
		cp "$$bindir/$$p" "$$execdir/$$p" || exit; \
	  done; \
	} && \
2137 2138 2139 2140 2141 2142
	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 && \
2143
	for p in $(BUILT_INS); do \
2144
		$(RM) "$$execdir/$$p" && \
J
Jeff King 已提交
2145 2146 2147
		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; \
2148
	done && \
2149 2150
	remote_curl_aliases="$(REMOTE_CURL_ALIASES)" && \
	for p in $$remote_curl_aliases; do \
2151 2152 2153 2154
		$(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; \
2155
	done && \
2156
	./check_bindir "z$$bindir" "z$$execdir" "$$bindir/git-add$X"
P
Petr Baudis 已提交
2157

2158 2159 2160
install-gitweb:
	$(MAKE) -C gitweb install

P
Petr Baudis 已提交
2161 2162 2163
install-doc:
	$(MAKE) -C Documentation install

2164 2165 2166
install-man:
	$(MAKE) -C Documentation install-man

2167 2168 2169
install-html:
	$(MAKE) -C Documentation install-html

2170 2171 2172
install-info:
	$(MAKE) -C Documentation install-info

2173 2174 2175
install-pdf:
	$(MAKE) -C Documentation install-pdf

2176 2177
quick-install-doc:
	$(MAKE) -C Documentation quick-install
P
Petr Baudis 已提交
2178

2179 2180 2181
quick-install-man:
	$(MAKE) -C Documentation quick-install-man

2182 2183 2184
quick-install-html:
	$(MAKE) -C Documentation quick-install-html

P
Petr Baudis 已提交
2185 2186 2187 2188


### Maintainer's dist rules

2189
git.spec: git.spec.in
2190 2191
	sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@+
	mv $@+ $@
2192

J
Junio C Hamano 已提交
2193
GIT_TARNAME=git-$(GIT_VERSION)
2194
dist: git.spec git-archive$(X) configure
2195 2196
	./git-archive --format=tar \
		--prefix=$(GIT_TARNAME)/ HEAD^{tree} > $(GIT_TARNAME).tar
2197
	@mkdir -p $(GIT_TARNAME)
2198
	@cp git.spec configure $(GIT_TARNAME)
2199
	@echo $(GIT_VERSION) > $(GIT_TARNAME)/version
2200
	@$(MAKE) -C git-gui TARDIR=../$(GIT_TARNAME)/git-gui dist-version
2201
	$(TAR) rf $(GIT_TARNAME).tar \
2202
		$(GIT_TARNAME)/git.spec \
2203
		$(GIT_TARNAME)/configure \
2204
		$(GIT_TARNAME)/version \
2205
		$(GIT_TARNAME)/git-gui/version
2206
	@$(RM) -r $(GIT_TARNAME)
2207
	gzip -f -9 $(GIT_TARNAME).tar
2208 2209

rpm: dist
2210 2211 2212 2213
	$(RPMBUILD) \
		--define "_source_filedigest_algorithm md5" \
		--define "_binary_filedigest_algorithm md5" \
		-ta $(GIT_TARNAME).tar.gz
2214

2215 2216 2217
htmldocs = git-htmldocs-$(GIT_VERSION)
manpages = git-manpages-$(GIT_VERSION)
dist-doc:
2218
	$(RM) -r .doc-tmp-dir
2219 2220 2221 2222 2223
	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
	:
2224
	$(RM) -r .doc-tmp-dir
2225
	mkdir -p .doc-tmp-dir/man1 .doc-tmp-dir/man5 .doc-tmp-dir/man7
2226
	$(MAKE) -C Documentation DESTDIR=./ \
2227
		man1dir=../.doc-tmp-dir/man1 \
2228
		man5dir=../.doc-tmp-dir/man5 \
2229
		man7dir=../.doc-tmp-dir/man7 \
2230 2231 2232
		install
	cd .doc-tmp-dir && $(TAR) cf ../$(manpages).tar .
	gzip -n -9 -f $(manpages).tar
2233
	$(RM) -r .doc-tmp-dir
2234

P
Petr Baudis 已提交
2235
### Cleaning rules
2236

2237 2238 2239
distclean: clean
	$(RM) configure

2240
clean:
2241 2242
	$(RM) *.o block-sha1/*.o ppc/*.o compat/*.o compat/*/*.o xdiff/*.o vcs-svn/*.o \
		builtin/*.o $(LIB_FILE) $(XDIFF_LIB) $(VCSSVN_LIB)
2243
	$(RM) $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git$X
2244
	$(RM) $(TEST_PROGRAMS)
2245
	$(RM) -r bin-wrappers
2246
	$(RM) -r $(dep_dirs)
2247
	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h $(ETAGS_TARGET) tags cscope*
2248
	$(RM) -r autom4te.cache
2249
	$(RM) config.log config.mak.autogen config.mak.append config.status config.cache
2250 2251 2252
	$(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
2253
	$(MAKE) -C Documentation/ clean
2254
ifndef NO_PERL
2255
	$(MAKE) -C gitweb clean
2256
	$(MAKE) -C perl clean
2257 2258 2259
endif
ifndef NO_PYTHON
	$(MAKE) -C git_remote_helpers clean
2260
endif
P
Petr Baudis 已提交
2261
	$(MAKE) -C templates/ clean
2262
	$(MAKE) -C t/ clean
E
Eygene Ryabinkin 已提交
2263
ifndef NO_TCLTK
J
Junio C Hamano 已提交
2264
	$(MAKE) -C gitk-git clean
E
Eygene Ryabinkin 已提交
2265 2266
	$(MAKE) -C git-gui clean
endif
2267
	$(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-GUI-VARS GIT-BUILD-OPTIONS
2268

J
Junio C Hamano 已提交
2269
.PHONY: all install clean strip
2270
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
2271
.PHONY: FORCE cscope
J
Junio C Hamano 已提交
2272

J
Junio C Hamano 已提交
2273 2274 2275
### Check documentation
#
check-docs::
2276
	@(for v in $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git gitk; \
J
Junio C Hamano 已提交
2277 2278 2279
	do \
		case "$$v" in \
		git-merge-octopus | git-merge-ours | git-merge-recursive | \
M
Miklos Vajna 已提交
2280
		git-merge-resolve | git-merge-subtree | \
2281
		git-fsck-objects | git-init-db | \
2282
		git-remote-* | git-stage | \
2283
		git-?*--?* ) continue ;; \
J
Junio C Hamano 已提交
2284 2285 2286
		esac ; \
		test -f "Documentation/$$v.txt" || \
		echo "no doc: $$v"; \
J
Junio C Hamano 已提交
2287
		sed -e '/^#/d' command-list.txt | \
2288
		grep -q "^$$v[ 	]" || \
J
Junio C Hamano 已提交
2289 2290 2291 2292
		case "$$v" in \
		git) ;; \
		*) echo "no link: $$v";; \
		esac ; \
2293 2294
	done; \
	( \
J
Junio C Hamano 已提交
2295
		sed -e '/^#/d' \
2296
		    -e 's/[ 	].*//' \
J
Junio C Hamano 已提交
2297
		    -e 's/^/listed /' command-list.txt; \
2298 2299 2300 2301 2302 2303 2304 2305
		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 | \
2306
		*,git-help | \
2307 2308 2309
		documented,gitattributes | \
		documented,gitignore | \
		documented,gitmodules | \
2310
		documented,gitcli | \
2311
		documented,git-tools | \
2312 2313 2314 2315 2316 2317
		documented,gitcore-tutorial | \
		documented,gitcvs-migration | \
		documented,gitdiffcore | \
		documented,gitglossary | \
		documented,githooks | \
		documented,gitrepository-layout | \
2318
		documented,gitrevisions | \
2319 2320
		documented,gittutorial | \
		documented,gittutorial-2 | \
2321
		documented,git-bisect-lk2009 | \
2322
		documented,git-remote-helpers | \
2323
		documented,gitworkflows | \
2324 2325
		sentinel,not,matching,is,ok ) continue ;; \
		esac; \
2326
		case " $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git gitk " in \
2327 2328 2329 2330
		*" $$cmd "*)	;; \
		*) echo "removed but $$how: $$cmd" ;; \
		esac; \
	done ) | sort
2331 2332 2333 2334 2335

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

2337 2338 2339 2340 2341 2342 2343 2344
### Test suite coverage testing
#
.PHONY: coverage coverage-clean coverage-build coverage-report

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

2345
object_dirs := $(sort $(dir $(OBJECTS)))
2346
coverage-clean:
2347 2348 2349 2350
	$(RM) $(addsuffix *.gcov,$(object_dirs))
	$(RM) $(addsuffix *.gcda,$(object_dirs))
	$(RM) $(addsuffix *.gcno,$(object_dirs))
	$(RM) coverage-untested-functions
2351
	$(RM) -r cover_db/
2352
	$(RM) -r cover_db_html/
2353 2354 2355

COVERAGE_CFLAGS = $(CFLAGS) -O0 -ftest-coverage -fprofile-arcs
COVERAGE_LDFLAGS = $(CFLAGS)  -O0 -lgcov
2356
GCOVFLAGS = --preserve-paths --branch-probabilities --all-blocks
2357 2358 2359 2360 2361 2362 2363

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

coverage-report:
2364
	$(QUIET_GCOV)for dir in $(object_dirs); do \
2365
		$(GCOV) $(GCOVFLAGS) --object-directory=$$dir $$dir*.c || exit; \
2366
	done
2367 2368

coverage-untested-functions: coverage-report
2369 2370
	grep '^function.*called 0 ' *.c.gcov \
		| sed -e 's/\([^:]*\)\.gcov: *function \([^ ]*\) called.*/\1: \2/' \
2371
		> coverage-untested-functions
2372 2373 2374

cover_db: coverage-report
	gcov2perl -db cover_db *.gcov
2375 2376 2377

cover_db_html: cover_db
	cover -report html -outputdir cover_db_html cover_db