Makefile 53.3 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 14
# 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.
#
15 16 17
# Define FREAD_READS_DIRECTORIES if your are on a system which succeeds
# when attempting to read from an fopen'ed directory.
#
18
# Define NO_OPENSSL environment variable if you do not have OpenSSL.
19
# This also implies BLK_SHA1.
20
#
21
# Define NO_CURL if you do not have libcurl installed.  git-http-pull and
22 23
# git-http-push are not built, and you cannot use http:// and https://
# transports.
24
#
P
Patrick Mauritz 已提交
25 26 27
# Define CURLDIR=/foo/bar if your curl header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
28 29 30
# 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.
#
31 32 33
# Define EXPATDIR=/foo/bar if your expat header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
34 35
# Define NO_D_INO_IN_DIRENT if you don't have d_ino in your struct dirent.
#
36 37 38
# Define NO_D_TYPE_IN_DIRENT if your platform defines DT_UNKNOWN but lacks
# d_type in struct dirent (latest Cygwin -- will be fixed soonish).
#
39 40 41
# 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).
42
# some C compilers supported these specifiers prior to C99 as an extension.
43
#
44 45
# Define NO_STRCASESTR if you don't have strcasestr.
#
R
René Scharfe 已提交
46 47
# Define NO_MEMMEM if you don't have memmem.
#
48 49
# Define NO_STRLCPY if you don't have strlcpy.
#
50 51 52 53
# 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 已提交
54 55
# Define NO_SETENV if you don't have setenv in the C library.
#
56 57
# Define NO_UNSETENV if you don't have unsetenv in the C library.
#
58 59
# Define NO_MKDTEMP if you don't have mkdtemp in the C library.
#
60 61
# Define NO_MKSTEMPS if you don't have mkstemps in the C library.
#
62 63
# Define NO_LIBGEN_H if you don't have libgen.h.
#
64 65
# Define NEEDS_LIBGEN if your libgen needs -lgen when linking
#
66 67
# Define NO_SYS_SELECT_H if you don't have sys/select.h.
#
68 69
# 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.
70
#
P
Pavel Roskin 已提交
71
# Define NO_SVN_TESTS if you want to skip time-consuming SVN interoperability
E
Eric Wong 已提交
72 73 74
# 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.
#
75 76 77 78 79 80 81 82 83 84 85 86
# 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.
#
87 88 89 90
# 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.
#
91 92
# Define PPC_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine optimized for PowerPC.
93
#
94 95 96
# 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).
97
#
98
# Define NEEDS_LIBICONV if linking with libc is not enough (Darwin).
99 100 101 102
#
# Define NEEDS_SOCKET if linking with libc is not enough (SunOS,
# Patrick Mauritz).
#
103 104 105 106
# 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.
#
107 108
# Define NO_MMAP if you want to avoid mmap.
#
J
Junio C Hamano 已提交
109 110
# Define NO_PTHREADS if you do not have or do not want to use Pthreads.
#
111 112 113
# Define NO_PREAD if you have a problem with pread() system call (e.g.
# cygwin.dll before v1.5.22).
#
114 115 116
# Define NO_FAST_WORKING_DIRECTORY if accessing objects in pack files is
# generally faster on your platform than accessing the working directory.
#
117 118 119
# Define NO_TRUSTABLE_FILEMODE if your filesystem may claim to support
# the executable mode bit, but doesn't really do so.
#
120 121
# Define NO_IPV6 if you lack IPv6 support and getaddrinfo().
#
122 123 124
# Define NO_SOCKADDR_STORAGE if your platform does not have struct
# sockaddr_storage.
#
125 126
# Define NO_ICONV if your libc does not properly support iconv.
#
127 128 129
# Define OLD_ICONV if your library has an old iconv(), where the second
# (input buffer pointer) parameter is declared with type (const char **).
#
130 131
# Define NO_DEFLATE_BOUND if your zlib does not have deflateBound.
#
132 133 134
# 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.
135
#
136 137 138 139 140
# 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).
141
#
142 143 144
# Define USE_ST_TIMESPEC if your "struct stat" uses "st_ctimespec" instead of
# "st_ctim"
#
145 146 147
# Define NO_NSEC if your "struct stat" does not have "st_ctim.tv_nsec"
# available.  This automatically turns USE_NSEC off.
#
148
# Define USE_STDEV below if you want git to care about the underlying device
149
# change being considered an inode change from the update-index perspective.
150
#
151 152 153
# 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.
#
154 155
# Define ASCIIDOC8 if you want to format documentation with AsciiDoc 8
#
156 157
# Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72.
#
158 159 160
# Define NO_PERL_MAKEMAKER if you cannot use Makefiles generated by perl's
# MakeMaker (e.g. using ActiveState under Cygwin).
#
161 162
# Define NO_PERL if you do not want Perl scripts or libraries at all.
#
E
Eygene Ryabinkin 已提交
163 164
# Define NO_TCLTK if you do not want Tcl/Tk GUI.
#
165 166 167 168 169
# 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.
170 171 172
# 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).
#
N
Nicolas Pitre 已提交
173 174 175
# Define THREADED_DELTA_SEARCH if you have pthreads and wish to exploit
# parallel delta searching when packing objects.
#
176 177 178 179
# 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().
#
J
Jeff King 已提交
180 181 182
# Define NO_EXTERNAL_GREP if you don't want "git grep" to ever call
# your external grep (e.g., if your system lacks grep, if its grep is
# broken, or spawning external process is slower than built-in grep git has).
183 184 185 186
#
# 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.
187
#
188 189
# Define OBJECT_CREATION_USES_RENAMES if your operating systems has problems
# when hardlinking a file to another name and unlinking the original file right
190
# away (some NTFS drivers seem to zero the contents in that scenario).
191
#
192 193
# 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.
194 195 196
#
# Define USE_NED_ALLOCATOR if you want to replace the platforms default
# memory allocators with the nedmalloc allocator written by Niall Douglas.
197 198
#
# Define NO_REGEX if you have no or inferior regex support in your C library.
199

200
GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
201
	@$(SHELL_PATH) ./GIT-VERSION-GEN
202
-include GIT-VERSION-FILE
203

204 205 206 207 208
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 已提交
209
uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not')
210

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

213
CFLAGS = -g -O2 -Wall
J
Junio C Hamano 已提交
214
LDFLAGS =
215
ALL_CFLAGS = $(CFLAGS)
J
Junio C Hamano 已提交
216
ALL_LDFLAGS = $(LDFLAGS)
J
Junio C Hamano 已提交
217
STRIP ?= strip
218

219 220 221
# Among the variables below, these:
#   gitexecdir
#   template_dir
222 223
#   mandir
#   infodir
224 225
#   htmldir
#   ETC_GITCONFIG (but not sysconfdir)
226 227
# can be specified as a relative path some/where/else;
# this is interpreted as relative to $(prefix) and "git" at
228 229 230
# runtime figures out where they are based on the path to the executable.
# This can help installing the suite in a relocatable way.

231
prefix = $(HOME)
232 233 234 235 236
bindir_relative = bin
bindir = $(prefix)/$(bindir_relative)
mandir = share/man
infodir = share/info
gitexecdir = libexec/git-core
237
sharedir = $(prefix)/share
238 239
template_dir = share/git-core/templates
htmldir = share/doc/git-doc
240 241
ifeq ($(prefix),/usr)
sysconfdir = /etc
242
ETC_GITCONFIG = $(sysconfdir)/gitconfig
243 244
else
sysconfdir = $(prefix)/etc
245
ETC_GITCONFIG = etc/gitconfig
246
endif
247
lib = lib
248
# DESTDIR=
249
pathsep = :
250

251
# default configuration for gitweb
252
GITWEB_CONFIG = gitweb_config.perl
253
GITWEB_CONFIG_SYSTEM = /etc/gitweb.conf
254
GITWEB_HOME_LINK_STR = projects
255 256
GITWEB_SITENAME =
GITWEB_PROJECTROOT = /pub/git
257
GITWEB_PROJECT_MAXDEPTH = 2007
M
Matthias Lederhofer 已提交
258 259
GITWEB_EXPORT_OK =
GITWEB_STRICT_EXPORT =
260
GITWEB_BASE_URL =
261 262 263
GITWEB_LIST =
GITWEB_HOMETEXT = indextext.html
GITWEB_CSS = gitweb.css
M
Martin Waitz 已提交
264
GITWEB_LOGO = git-logo.png
265
GITWEB_FAVICON = git-favicon.png
266 267
GITWEB_SITE_HEADER =
GITWEB_SITE_FOOTER =
268

269
export prefix bindir sharedir sysconfdir
270

271 272
CC = gcc
AR = ar
273
RM = rm -f
274
TAR = tar
275
FIND = find
276 277
INSTALL = install
RPMBUILD = rpmbuild
278
TCL_PATH = tclsh
279
TCLTK_PATH = wish
280
PTHREAD_LIBS = -lpthread
281

282 283
export TCL_PATH TCLTK_PATH

284 285
# sparse is architecture-neutral, which means that we need to tell it
# explicitly what architecture to check for. Fix this up for yours..
286
SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__
287

P
Petr Baudis 已提交
288 289 290 291


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

292
# Those must not be GNU-specific; they are shared with perl/ which may
P
Petr Baudis 已提交
293 294 295 296
# be built by a different compiler. (Note that this is an artifact now
# but it still might be nice to keep that distinction.)
BASIC_CFLAGS =
BASIC_LDFLAGS =
297

298 299 300 301 302 303 304 305 306 307 308 309
# Guard against environment variables
BUILTIN_OBJS =
BUILT_INS =
COMPAT_CFLAGS =
COMPAT_OBJS =
LIB_H =
LIB_OBJS =
PROGRAMS =
SCRIPT_PERL =
SCRIPT_SH =
TEST_PROGRAMS =

310 311
SCRIPT_SH += git-am.sh
SCRIPT_SH += git-bisect.sh
312
SCRIPT_SH += git-difftool--helper.sh
313 314 315 316 317 318
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
319
SCRIPT_SH += git-mergetool--lib.sh
320 321 322 323 324 325 326 327 328 329 330 331 332
SCRIPT_SH += git-parse-remote.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-sh-setup.sh
SCRIPT_SH += git-stash.sh
SCRIPT_SH += git-submodule.sh
SCRIPT_SH += git-web--browse.sh

SCRIPT_PERL += git-add--interactive.perl
333
SCRIPT_PERL += git-difftool.perl
334 335 336 337 338 339 340
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
341

342 343
SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
	  $(patsubst %.perl,%,$(SCRIPT_PERL)) \
344
	  git-instaweb
345

346 347
# Empty...
EXTRA_PROGRAMS =
348

349 350 351 352
# ... and all the rest that could be moved out of bindir to gitexecdir
PROGRAMS += $(EXTRA_PROGRAMS)
PROGRAMS += git-fast-import$X
PROGRAMS += git-hash-object$X
353
PROGRAMS += git-imap-send$X
354 355 356 357 358 359
PROGRAMS += git-index-pack$X
PROGRAMS += git-merge-index$X
PROGRAMS += git-merge-tree$X
PROGRAMS += git-mktag$X
PROGRAMS += git-pack-redundant$X
PROGRAMS += git-patch-id$X
360
PROGRAMS += git-shell$X
361 362 363 364 365
PROGRAMS += git-show-index$X
PROGRAMS += git-unpack-file$X
PROGRAMS += git-upload-pack$X
PROGRAMS += git-var$X

J
Junio C Hamano 已提交
366 367
# List built-in command $C whose implementation cmd_$C() is not in
# builtin-$C.o but is linked in as part of some other command.
368 369 370
BUILT_INS += $(patsubst builtin-%.o,git-%$X,$(BUILTIN_OBJS))

BUILT_INS += git-cherry$X
371
BUILT_INS += git-cherry-pick$X
372 373 374 375 376 377 378 379
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 已提交
380
BUILT_INS += git-stage$X
381 382
BUILT_INS += git-status$X
BUILT_INS += git-whatchanged$X
J
Junio C Hamano 已提交
383

384 385
# what 'all' will build and 'install' will install in gitexecdir,
# excluding programs for built-in commands
J
Junio C Hamano 已提交
386
ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
387

E
Eygene Ryabinkin 已提交
388
# what 'all' will build but not install in gitexecdir
389
OTHER_PROGRAMS = git$X
E
Eygene Ryabinkin 已提交
390

391 392 393 394 395 396 397
# 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
398

L
Luben Tuikov 已提交
399 400
export PERL_PATH

L
Linus Torvalds 已提交
401
LIB_FILE=libgit.a
402
XDIFF_LIB=xdiff/lib.a
J
Junio C Hamano 已提交
403

404
LIB_H += advice.h
405 406 407 408 409 410 411
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
LIB_H += commit.h
412
LIB_H += compat/cygwin.h
413
LIB_H += compat/mingw.h
414 415 416 417 418 419 420 421
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
LIB_H += fsck.h
LIB_H += git-compat-util.h
A
Adam Simpkins 已提交
422
LIB_H += graph.h
423 424
LIB_H += grep.h
LIB_H += hash.h
425
LIB_H += help.h
426
LIB_H += levenshtein.h
427 428 429 430
LIB_H += list-objects.h
LIB_H += ll-merge.h
LIB_H += log-tree.h
LIB_H += mailmap.h
431
LIB_H += merge-recursive.h
432 433
LIB_H += object.h
LIB_H += pack.h
434
LIB_H += pack-refs.h
435 436 437 438 439 440 441 442 443
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
444
LIB_H += rerere.h
445 446
LIB_H += revision.h
LIB_H += run-command.h
447
LIB_H += sha1-lookup.h
448
LIB_H += sideband.h
449
LIB_H += sigchain.h
450
LIB_H += strbuf.h
451
LIB_H += string-list.h
452 453 454 455 456
LIB_H += tag.h
LIB_H += transport.h
LIB_H += tree.h
LIB_H += tree-walk.h
LIB_H += unpack-trees.h
457
LIB_H += userdiff.h
458
LIB_H += utf8.h
459
LIB_H += wt-status.h
460

461
LIB_OBJS += abspath.o
462
LIB_OBJS += advice.o
463 464 465 466 467 468 469
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
470
LIB_OBJS += bisect.o
471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492
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
493
LIB_OBJS += diff-no-index.o
494 495
LIB_OBJS += diff.o
LIB_OBJS += dir.o
496
LIB_OBJS += editor.o
497 498 499 500
LIB_OBJS += entry.o
LIB_OBJS += environment.o
LIB_OBJS += exec_cmd.o
LIB_OBJS += fsck.o
A
Adam Simpkins 已提交
501
LIB_OBJS += graph.o
502 503 504 505
LIB_OBJS += grep.o
LIB_OBJS += hash.o
LIB_OBJS += help.o
LIB_OBJS += ident.o
506
LIB_OBJS += levenshtein.o
507 508 509 510 511 512 513
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
514
LIB_OBJS += merge-recursive.o
515
LIB_OBJS += name-hash.o
516 517
LIB_OBJS += object.o
LIB_OBJS += pack-check.o
518
LIB_OBJS += pack-refs.o
519 520 521 522 523 524 525 526
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
527
LIB_OBJS += preload-index.o
528 529 530 531 532 533 534 535
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
536
LIB_OBJS += replace_object.o
537
LIB_OBJS += rerere.o
538 539 540 541
LIB_OBJS += revision.o
LIB_OBJS += run-command.o
LIB_OBJS += server-info.o
LIB_OBJS += setup.o
542
LIB_OBJS += sha1-lookup.o
543
LIB_OBJS += sha1_file.o
544 545 546
LIB_OBJS += sha1_name.o
LIB_OBJS += shallow.o
LIB_OBJS += sideband.o
547
LIB_OBJS += sigchain.o
548
LIB_OBJS += strbuf.o
549
LIB_OBJS += string-list.o
550 551 552 553
LIB_OBJS += symlinks.o
LIB_OBJS += tag.o
LIB_OBJS += trace.o
LIB_OBJS += transport.o
554
LIB_OBJS += transport-helper.o
555 556 557 558 559
LIB_OBJS += tree-diff.o
LIB_OBJS += tree.o
LIB_OBJS += tree-walk.o
LIB_OBJS += unpack-trees.o
LIB_OBJS += usage.o
560
LIB_OBJS += userdiff.o
561 562
LIB_OBJS += utf8.o
LIB_OBJS += walker.o
563
LIB_OBJS += wrapper.o
564 565 566 567 568 569 570 571 572
LIB_OBJS += write_or_die.o
LIB_OBJS += ws.o
LIB_OBJS += wt-status.o
LIB_OBJS += xdiff-interface.o

BUILTIN_OBJS += builtin-add.o
BUILTIN_OBJS += builtin-annotate.o
BUILTIN_OBJS += builtin-apply.o
BUILTIN_OBJS += builtin-archive.o
573
BUILTIN_OBJS += builtin-bisect--helper.o
574 575 576 577 578 579 580 581 582
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
D
Daniel Barkalow 已提交
583
BUILTIN_OBJS += builtin-clone.o
584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601
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--tool.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
M
Miklos Vajna 已提交
602
BUILTIN_OBJS += builtin-help.o
603 604 605 606 607 608 609
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
M
Miklos Vajna 已提交
610
BUILTIN_OBJS += builtin-merge.o
611 612 613 614
BUILTIN_OBJS += builtin-merge-base.o
BUILTIN_OBJS += builtin-merge-file.o
BUILTIN_OBJS += builtin-merge-ours.o
BUILTIN_OBJS += builtin-merge-recursive.o
J
Junio C Hamano 已提交
615
BUILTIN_OBJS += builtin-mktree.o
616 617 618 619 620 621 622 623
BUILTIN_OBJS += builtin-mv.o
BUILTIN_OBJS += builtin-name-rev.o
BUILTIN_OBJS += builtin-pack-objects.o
BUILTIN_OBJS += builtin-pack-refs.o
BUILTIN_OBJS += builtin-prune-packed.o
BUILTIN_OBJS += builtin-prune.o
BUILTIN_OBJS += builtin-push.o
BUILTIN_OBJS += builtin-read-tree.o
J
Junio C Hamano 已提交
624
BUILTIN_OBJS += builtin-receive-pack.o
625 626
BUILTIN_OBJS += builtin-reflog.o
BUILTIN_OBJS += builtin-remote.o
C
Christian Couder 已提交
627
BUILTIN_OBJS += builtin-replace.o
628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644
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-objects.o
BUILTIN_OBJS += builtin-update-index.o
BUILTIN_OBJS += builtin-update-ref.o
645
BUILTIN_OBJS += builtin-update-server-info.o
646 647 648 649
BUILTIN_OBJS += builtin-upload-archive.o
BUILTIN_OBJS += builtin-verify-pack.o
BUILTIN_OBJS += builtin-verify-tag.o
BUILTIN_OBJS += builtin-write-tree.o
650

651
GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
652
EXTLIBS =
653

654 655 656
#
# Platform specific tweaks
#
657 658 659 660 661

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

662 663
ifeq ($(uname_S),Linux)
	NO_STRLCPY = YesPlease
664
	NO_MKSTEMPS = YesPlease
665
	THREADED_DELTA_SEARCH = YesPlease
666
endif
G
Gerrit Pape 已提交
667 668
ifeq ($(uname_S),GNU/kFreeBSD)
	NO_STRLCPY = YesPlease
669
	NO_MKSTEMPS = YesPlease
670
	THREADED_DELTA_SEARCH = YesPlease
G
Gerrit Pape 已提交
671
endif
B
Boyd Lynn Gerber 已提交
672 673 674 675 676 677 678 679 680
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
681
	NO_MKSTEMPS = YesPlease
B
Boyd Lynn Gerber 已提交
682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704
	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
705
	NO_MKSTEMPS = YesPlease
B
Boyd Lynn Gerber 已提交
706 707 708 709 710 711 712
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
	NO_STRCASESTR = YesPlease
	NO_MEMMEM = YesPlease
	INSTALL = ginstall
	TAR = gtar
endif
713
ifeq ($(uname_S),Darwin)
714
	NEEDS_CRYPTO_WITH_SSL = YesPlease
715 716
	NEEDS_SSL_WITH_CRYPTO = YesPlease
	NEEDS_LIBICONV = YesPlease
717
	ifeq ($(shell expr "$(uname_R)" : '[15678]\.'),2)
718 719
		OLD_ICONV = UnfortunatelyYes
	endif
720 721 722
	ifeq ($(shell expr "$(uname_R)" : '[15]\.'),2)
		NO_STRLCPY = YesPlease
	endif
723
	NO_MEMMEM = YesPlease
724
	THREADED_DELTA_SEARCH = YesPlease
725
	USE_ST_TIMESPEC = YesPlease
726
endif
727
ifeq ($(uname_S),SunOS)
728
	NEEDS_SOCKET = YesPlease
729
	NEEDS_NSL = YesPlease
730
	SHELL_PATH = /bin/bash
731
	SANE_TOOL_PATH = /usr/xpg6/bin:/usr/xpg4/bin
732
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
733
	NO_MEMMEM = YesPlease
734
	NO_MKDTEMP = YesPlease
735
	NO_MKSTEMPS = YesPlease
736
	NO_REGEX = YesPlease
737
	NO_EXTERNAL_GREP = YesPlease
738 739 740 741 742 743 744 745 746
	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
747
	endif
J
Jason Riedy 已提交
748
	ifeq ($(uname_R),5.8)
J
Jason Riedy 已提交
749
		NO_UNSETENV = YesPlease
J
Jason Riedy 已提交
750
		NO_SETENV = YesPlease
751
		NO_C99_FORMAT = YesPlease
752
		NO_STRTOUMAX = YesPlease
J
Jason Riedy 已提交
753
	endif
754 755 756
	ifeq ($(uname_R),5.9)
		NO_UNSETENV = YesPlease
		NO_SETENV = YesPlease
757
		NO_C99_FORMAT = YesPlease
758
		NO_STRTOUMAX = YesPlease
759
	endif
760
	INSTALL = /usr/ucb/install
761
	TAR = gtar
762
	BASIC_CFLAGS += -D__EXTENSIONS__ -D__sun__ -DHAVE_ALLOCA_H
763
endif
764
ifeq ($(uname_O),Cygwin)
765
	NO_D_TYPE_IN_DIRENT = YesPlease
766
	NO_D_INO_IN_DIRENT = YesPlease
H
hpa 已提交
767
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
768
	NO_MEMMEM = YesPlease
769
	NO_MKSTEMPS = YesPlease
770
	NO_SYMLINK_HEAD = YesPlease
H
hpa 已提交
771
	NEEDS_LIBICONV = YesPlease
772
	NO_FAST_WORKING_DIRECTORY = UnfortunatelyYes
773
	NO_TRUSTABLE_FILEMODE = UnfortunatelyYes
P
Pascal Obry 已提交
774
	OLD_ICONV = UnfortunatelyYes
775 776
	# There are conflicting reports about this.
	# On some boxes NO_MMAP is needed, and not so elsewhere.
J
Junio C Hamano 已提交
777 778
	# Try commenting this out if you suspect MMAP is more efficient
	NO_MMAP = YesPlease
779
	NO_IPV6 = YesPlease
P
Peter Anvin 已提交
780
	X = .exe
781
endif
A
Alecs King 已提交
782 783
ifeq ($(uname_S),FreeBSD)
	NEEDS_LIBICONV = YesPlease
784
	NO_MEMMEM = YesPlease
785 786
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
787
	DIR_HAS_BSD_GROUP_SEMANTICS = YesPlease
788
	USE_ST_TIMESPEC = YesPlease
789
	THREADED_DELTA_SEARCH = YesPlease
790
	ifeq ($(shell expr "$(uname_R)" : '4\.'),2)
791
		PTHREAD_LIBS = -pthread
792 793 794
		NO_UINTMAX_T = YesPlease
		NO_STRTOUMAX = YesPlease
	endif
A
Alecs King 已提交
795
endif
796
ifeq ($(uname_S),OpenBSD)
797
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
798
	NO_MEMMEM = YesPlease
T
Tony Kemp 已提交
799
	USE_ST_TIMESPEC = YesPlease
H
Han Boetes 已提交
800
	NEEDS_LIBICONV = YesPlease
801 802
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
803
	THREADED_DELTA_SEARCH = YesPlease
J
Junio C Hamano 已提交
804 805
endif
ifeq ($(uname_S),NetBSD)
806 807 808
	ifeq ($(shell expr "$(uname_R)" : '[01]\.'),2)
		NEEDS_LIBICONV = YesPlease
	endif
809
	BASIC_CFLAGS += -I/usr/pkg/include
810
	BASIC_LDFLAGS += -L/usr/pkg/lib $(CC_LD_DYNPATH)/usr/pkg/lib
811
	THREADED_DELTA_SEARCH = YesPlease
P
Patrick Welche 已提交
812
	USE_ST_TIMESPEC = YesPlease
813
	NO_MKSTEMPS = YesPlease
H
Han Boetes 已提交
814
endif
815 816
ifeq ($(uname_S),AIX)
	NO_STRCASESTR=YesPlease
R
René Scharfe 已提交
817
	NO_MEMMEM = YesPlease
818
	NO_MKDTEMP = YesPlease
819
	NO_MKSTEMPS = YesPlease
820
	NO_STRLCPY = YesPlease
821
	NO_NSEC = YesPlease
822 823
	FREAD_READS_DIRECTORIES = UnfortunatelyYes
	INTERNAL_QSORT = UnfortunatelyYes
824
	NEEDS_LIBICONV=YesPlease
825
	BASIC_CFLAGS += -D_LARGE_FILES
J
Junio C Hamano 已提交
826 827 828 829 830
	ifneq ($(shell expr "$(uname_V)" : '[1234]'),1)
		THREADED_DELTA_SEARCH = YesPlease
	else
		NO_PTHREADS = YesPlease
	endif
831
endif
T
Thomas Schwinge 已提交
832 833 834
ifeq ($(uname_S),GNU)
	# GNU/Hurd
	NO_STRLCPY=YesPlease
835
	NO_MKSTEMPS = YesPlease
T
Thomas Schwinge 已提交
836
endif
837 838 839 840 841 842 843 844 845 846 847 848 849
ifeq ($(uname_S),IRIX)
	NO_SETENV = YesPlease
	NO_UNSETENV = YesPlease
	NO_STRCASESTR = YesPlease
	NO_MEMMEM = YesPlease
	NO_MKSTEMPS = YesPlease
	NO_MKDTEMP = YesPlease
	NO_MMAP = YesPlease
	NO_EXTERNAL_GREP = UnfortunatelyYes
	SNPRINTF_RETURNS_BOGUS = YesPlease
	SHELL_PATH = /usr/gnu/bin/bash
	NEEDS_LIBGEN = YesPlease
endif
J
Johannes Schindelin 已提交
850 851
ifeq ($(uname_S),IRIX64)
	NO_SETENV=YesPlease
B
Brandon Casey 已提交
852
	NO_UNSETENV = YesPlease
J
Johannes Schindelin 已提交
853
	NO_STRCASESTR=YesPlease
R
René Scharfe 已提交
854
	NO_MEMMEM = YesPlease
855
	NO_MKSTEMPS = YesPlease
B
Brandon Casey 已提交
856 857 858 859
	NO_MKDTEMP = YesPlease
	NO_MMAP = YesPlease
	NO_EXTERNAL_GREP = UnfortunatelyYes
	SNPRINTF_RETURNS_BOGUS = YesPlease
J
Johannes Schindelin 已提交
860
	SHELL_PATH=/usr/gnu/bin/bash
B
Brandon Casey 已提交
861
	NEEDS_LIBGEN = YesPlease
J
Johannes Schindelin 已提交
862
endif
863 864 865 866 867
ifeq ($(uname_S),HP-UX)
	NO_IPV6=YesPlease
	NO_SETENV=YesPlease
	NO_STRCASESTR=YesPlease
	NO_MEMMEM = YesPlease
868
	NO_MKSTEMPS = YesPlease
869 870 871 872 873
	NO_STRLCPY = YesPlease
	NO_MKDTEMP = YesPlease
	NO_UNSETENV = YesPlease
	NO_HSTRERROR = YesPlease
	NO_SYS_SELECT_H = YesPlease
874
	SNPRINTF_RETURNS_BOGUS = YesPlease
875
endif
876 877
ifneq (,$(findstring CYGWIN,$(uname_S)))
	COMPAT_OBJS += compat/cygwin.o
878
	UNRELIABLE_FSTAT = UnfortunatelyYes
879
endif
M
Marius Storm-Olsen 已提交
880
ifdef MSVC
881
	GIT_VERSION := $(GIT_VERSION).MSVC
M
Marius Storm-Olsen 已提交
882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932
	pathsep = ;
	NO_PREAD = YesPlease
	NO_OPENSSL = YesPlease
	NO_LIBGEN_H = YesPlease
	NO_SYMLINK_HEAD = YesPlease
	NO_IPV6 = YesPlease
	NO_SETENV = YesPlease
	NO_UNSETENV = YesPlease
	NO_STRCASESTR = YesPlease
	NO_STRLCPY = YesPlease
	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
	NO_PTHREADS = YesPlease

	CC = compat/vcbuild/scripts/clink.pl
	AR = compat/vcbuild/scripts/lib.pl
	CFLAGS =
	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
	COMPAT_OBJS = compat/msvc.o compat/fnmatch/fnmatch.o compat/winansi.o
	COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DNOGDI -DHAVE_STRING_H -DHAVE_ALLOCA_H -Icompat -Icompat/fnmatch -Icompat/regex -Icompat/fnmatch -DSTRIP_EXTENSION=\".exe\"
	BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -SUBSYSTEM:CONSOLE -NODEFAULTLIB:MSVCRT.lib
	EXTLIBS = advapi32.lib shell32.lib wininet.lib ws2_32.lib
	lib =
ifndef DEBUG
	BASIC_CFLAGS += -GL -Os -MT
	BASIC_LDFLAGS += -LTCG
	AR += -LTCG
else
	BASIC_CFLAGS += -Zi -MTd
endif
	X = .exe
else
J
Johannes Sixt 已提交
933
ifneq (,$(findstring MINGW,$(uname_S)))
934
	pathsep = ;
J
Johannes Sixt 已提交
935 936
	NO_PREAD = YesPlease
	NO_OPENSSL = YesPlease
937
	NO_LIBGEN_H = YesPlease
J
Johannes Sixt 已提交
938 939 940 941 942 943 944 945 946 947 948 949
	NO_SYMLINK_HEAD = YesPlease
	NO_IPV6 = YesPlease
	NO_SETENV = YesPlease
	NO_UNSETENV = YesPlease
	NO_STRCASESTR = YesPlease
	NO_STRLCPY = YesPlease
	NO_MEMMEM = YesPlease
	NEEDS_LIBICONV = YesPlease
	OLD_ICONV = YesPlease
	NO_C99_FORMAT = YesPlease
	NO_STRTOUMAX = YesPlease
	NO_MKDTEMP = YesPlease
950
	NO_MKSTEMPS = YesPlease
J
Johannes Sixt 已提交
951 952 953
	SNPRINTF_RETURNS_BOGUS = YesPlease
	NO_SVN_TESTS = YesPlease
	NO_PERL_MAKEMAKER = YesPlease
954
	RUNTIME_PREFIX = YesPlease
J
Johannes Sixt 已提交
955
	NO_POSIX_ONLY_PROGRAMS = YesPlease
956
	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
957
	NO_NSEC = YesPlease
J
Janos Laube 已提交
958
	USE_WIN32_MMAP = YesPlease
959
	USE_NED_ALLOCATOR = YesPlease
960
	UNRELIABLE_FSTAT = UnfortunatelyYes
961
	OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
962 963
	NO_REGEX = YesPlease
	COMPAT_CFLAGS += -D__USE_MINGW_ACCESS -DNOGDI -Icompat -Icompat/fnmatch
964
	COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
965
	COMPAT_OBJS += compat/mingw.o compat/fnmatch/fnmatch.o compat/winansi.o
J
Johannes Sixt 已提交
966 967
	EXTLIBS += -lws2_32
	X = .exe
968 969 970 971 972 973 974 975 976 977 978 979
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
	THREADED_DELTA_SEARCH = YesPlease
else
	NO_CURL = YesPlease
	NO_PTHREADS = YesPlease
endif
J
Johannes Sixt 已提交
980
endif
M
Marius Storm-Olsen 已提交
981
endif
982

983
-include config.mak.autogen
984
-include config.mak
985

986
ifdef SANE_TOOL_PATH
987 988
SANE_TOOL_PATH_SQ = $(subst ','\'',$(SANE_TOOL_PATH))
BROKEN_PATH_FIX = 's|^\# @@BROKEN_PATH_FIX@@$$|git_broken_path_fix $(SANE_TOOL_PATH_SQ)|'
989 990
PATH := $(SANE_TOOL_PATH):${PATH}
else
991
BROKEN_PATH_FIX = '/^\# @@BROKEN_PATH_FIX@@$$/d'
992 993
endif

994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006
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
1007
	PTHREAD_LIBS =
1008 1009
endif

1010 1011 1012 1013 1014 1015 1016 1017
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
1018 1019
endif

1020 1021 1022 1023 1024
ifdef NO_LIBGEN_H
	COMPAT_CFLAGS += -DNO_LIBGEN_H
	COMPAT_OBJS += compat/basename.o
endif

D
Daniel Barkalow 已提交
1025 1026 1027
ifdef NO_CURL
	BASIC_CFLAGS += -DNO_CURL
else
1028
	ifdef CURLDIR
1029
		# Try "-Wl,-rpath=$(CURLDIR)/$(lib)" in such a case.
1030
		BASIC_CFLAGS += -I$(CURLDIR)/include
1031
		CURL_LIBCURL = -L$(CURLDIR)/$(lib) $(CC_LD_DYNPATH)$(CURLDIR)/$(lib) -lcurl
1032 1033 1034
	else
		CURL_LIBCURL = -lcurl
	endif
1035
	PROGRAMS += git-remote-curl$X git-http-fetch$X
1036 1037 1038 1039 1040
	curl_check := $(shell (echo 070908; curl-config --vernum) | sort -r | sed -ne 2p)
	ifeq "$(curl_check)" "070908"
		ifndef NO_EXPAT
			PROGRAMS += git-http-push$X
		endif
1041
	endif
1042
	ifndef NO_EXPAT
1043 1044 1045 1046 1047 1048
		ifdef EXPATDIR
			BASIC_CFLAGS += -I$(EXPATDIR)/include
			EXPAT_LIBEXPAT = -L$(EXPATDIR)/$(lib) $(CC_LD_DYNPATH)$(EXPATDIR)/$(lib) -lexpat
		else
			EXPAT_LIBEXPAT = -lexpat
		endif
1049
	endif
1050 1051
endif

1052 1053
ifdef ZLIB_PATH
	BASIC_CFLAGS += -I$(ZLIB_PATH)/include
1054
	EXTLIBS += -L$(ZLIB_PATH)/$(lib) $(CC_LD_DYNPATH)$(ZLIB_PATH)/$(lib)
1055 1056 1057
endif
EXTLIBS += -lz

1058 1059 1060
ifndef NO_POSIX_ONLY_PROGRAMS
	PROGRAMS += git-daemon$X
endif
P
Petr Baudis 已提交
1061
ifndef NO_OPENSSL
J
Junio C Hamano 已提交
1062
	OPENSSL_LIBSSL = -lssl
J
Junio C Hamano 已提交
1063
	ifdef OPENSSLDIR
1064
		BASIC_CFLAGS += -I$(OPENSSLDIR)/include
1065
		OPENSSL_LINK = -L$(OPENSSLDIR)/$(lib) $(CC_LD_DYNPATH)$(OPENSSLDIR)/$(lib)
J
Junio C Hamano 已提交
1066 1067 1068
	else
		OPENSSL_LINK =
	endif
1069 1070 1071
	ifdef NEEDS_CRYPTO_WITH_SSL
		OPENSSL_LINK += -lcrypto
	endif
P
Petr Baudis 已提交
1072
else
1073
	BASIC_CFLAGS += -DNO_OPENSSL
1074
	BLK_SHA1 = 1
J
Junio C Hamano 已提交
1075
	OPENSSL_LIBSSL =
P
Petr Baudis 已提交
1076
endif
1077
ifdef NEEDS_SSL_WITH_CRYPTO
J
Junio C Hamano 已提交
1078
	LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto -lssl
1079
else
J
Junio C Hamano 已提交
1080
	LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto
1081 1082
endif
ifdef NEEDS_LIBICONV
J
Junio C Hamano 已提交
1083
	ifdef ICONVDIR
1084
		BASIC_CFLAGS += -I$(ICONVDIR)/include
1085
		ICONV_LINK = -L$(ICONVDIR)/$(lib) $(CC_LD_DYNPATH)$(ICONVDIR)/$(lib)
J
Junio C Hamano 已提交
1086 1087 1088
	else
		ICONV_LINK =
	endif
1089
	EXTLIBS += $(ICONV_LINK) -liconv
1090
endif
1091 1092 1093
ifdef NEEDS_LIBGEN
	EXTLIBS += -lgen
endif
1094
ifdef NEEDS_SOCKET
1095
	EXTLIBS += -lsocket
1096
endif
1097
ifdef NEEDS_NSL
1098
	EXTLIBS += -lnsl
1099
endif
1100 1101 1102
ifdef NEEDS_RESOLV
	EXTLIBS += -lresolv
endif
1103
ifdef NO_D_TYPE_IN_DIRENT
1104
	BASIC_CFLAGS += -DNO_D_TYPE_IN_DIRENT
1105
endif
1106
ifdef NO_D_INO_IN_DIRENT
1107
	BASIC_CFLAGS += -DNO_D_INO_IN_DIRENT
1108
endif
1109 1110 1111
ifdef NO_ST_BLOCKS_IN_STRUCT_STAT
	BASIC_CFLAGS += -DNO_ST_BLOCKS_IN_STRUCT_STAT
endif
1112 1113 1114
ifdef USE_NSEC
	BASIC_CFLAGS += -DUSE_NSEC
endif
1115 1116 1117
ifdef USE_ST_TIMESPEC
	BASIC_CFLAGS += -DUSE_ST_TIMESPEC
endif
1118 1119 1120
ifdef NO_NSEC
	BASIC_CFLAGS += -DNO_NSEC
endif
1121
ifdef NO_C99_FORMAT
1122
	BASIC_CFLAGS += -DNO_C99_FORMAT
1123
endif
1124 1125 1126 1127
ifdef SNPRINTF_RETURNS_BOGUS
	COMPAT_CFLAGS += -DSNPRINTF_RETURNS_BOGUS
	COMPAT_OBJS += compat/snprintf.o
endif
1128 1129 1130 1131
ifdef FREAD_READS_DIRECTORIES
	COMPAT_CFLAGS += -DFREAD_READS_DIRECTORIES
	COMPAT_OBJS += compat/fopen.o
endif
1132
ifdef NO_SYMLINK_HEAD
1133
	BASIC_CFLAGS += -DNO_SYMLINK_HEAD
1134
endif
1135
ifdef NO_STRCASESTR
1136
	COMPAT_CFLAGS += -DNO_STRCASESTR
J
Jason Riedy 已提交
1137 1138
	COMPAT_OBJS += compat/strcasestr.o
endif
1139 1140 1141 1142
ifdef NO_STRLCPY
	COMPAT_CFLAGS += -DNO_STRLCPY
	COMPAT_OBJS += compat/strlcpy.o
endif
1143 1144 1145 1146 1147 1148 1149
ifdef NO_STRTOUMAX
	COMPAT_CFLAGS += -DNO_STRTOUMAX
	COMPAT_OBJS += compat/strtoumax.o
endif
ifdef NO_STRTOULL
	COMPAT_CFLAGS += -DNO_STRTOULL
endif
J
Jason Riedy 已提交
1150
ifdef NO_SETENV
1151
	COMPAT_CFLAGS += -DNO_SETENV
J
Jason Riedy 已提交
1152
	COMPAT_OBJS += compat/setenv.o
1153
endif
1154 1155 1156 1157
ifdef NO_MKDTEMP
	COMPAT_CFLAGS += -DNO_MKDTEMP
	COMPAT_OBJS += compat/mkdtemp.o
endif
1158 1159 1160 1161
ifdef NO_MKSTEMPS
	COMPAT_CFLAGS += -DNO_MKSTEMPS
	COMPAT_OBJS += compat/mkstemps.o
endif
J
Johannes Schindelin 已提交
1162
ifdef NO_UNSETENV
J
Jason Riedy 已提交
1163 1164 1165
	COMPAT_CFLAGS += -DNO_UNSETENV
	COMPAT_OBJS += compat/unsetenv.o
endif
1166 1167 1168
ifdef NO_SYS_SELECT_H
	BASIC_CFLAGS += -DNO_SYS_SELECT_H
endif
1169
ifdef NO_MMAP
1170
	COMPAT_CFLAGS += -DNO_MMAP
J
Jason Riedy 已提交
1171
	COMPAT_OBJS += compat/mmap.o
J
Janos Laube 已提交
1172 1173 1174 1175 1176
else
	ifdef USE_WIN32_MMAP
		COMPAT_CFLAGS += -DUSE_WIN32_MMAP
		COMPAT_OBJS += compat/win32mmap.o
	endif
1177
endif
1178 1179
ifdef OBJECT_CREATION_USES_RENAMES
	COMPAT_CFLAGS += -DOBJECT_CREATION_MODE=1
1180
endif
1181 1182 1183 1184
ifdef NO_PREAD
	COMPAT_CFLAGS += -DNO_PREAD
	COMPAT_OBJS += compat/pread.o
endif
1185 1186 1187
ifdef NO_FAST_WORKING_DIRECTORY
	BASIC_CFLAGS += -DNO_FAST_WORKING_DIRECTORY
endif
1188 1189 1190
ifdef NO_TRUSTABLE_FILEMODE
	BASIC_CFLAGS += -DNO_TRUSTABLE_FILEMODE
endif
1191
ifdef NO_IPV6
1192
	BASIC_CFLAGS += -DNO_IPV6
1193
endif
1194 1195 1196
ifdef NO_UINTMAX_T
	BASIC_CFLAGS += -Duintmax_t=uint32_t
endif
1197 1198
ifdef NO_SOCKADDR_STORAGE
ifdef NO_IPV6
1199
	BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in
1200
else
1201
	BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in6
1202
endif
1203
endif
1204 1205 1206
ifdef NO_INET_NTOP
	LIB_OBJS += compat/inet_ntop.o
endif
1207 1208 1209
ifdef NO_INET_PTON
	LIB_OBJS += compat/inet_pton.o
endif
1210

1211
ifdef NO_ICONV
1212
	BASIC_CFLAGS += -DNO_ICONV
1213 1214
endif

1215 1216 1217 1218
ifdef OLD_ICONV
	BASIC_CFLAGS += -DOLD_ICONV
endif

1219 1220 1221 1222
ifdef NO_DEFLATE_BOUND
	BASIC_CFLAGS += -DNO_DEFLATE_BOUND
endif

1223 1224 1225 1226
ifdef BLK_SHA1
	SHA1_HEADER = "block-sha1/sha1.h"
	LIB_OBJS += block-sha1/sha1.o
else
1227 1228 1229 1230 1231
ifdef PPC_SHA1
	SHA1_HEADER = "ppc/sha1.h"
	LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
else
	SHA1_HEADER = <openssl/sha.h>
1232
	EXTLIBS += $(LIB_4_CRYPTO)
1233 1234
endif
endif
1235 1236 1237
ifdef NO_PERL_MAKEMAKER
	export NO_PERL_MAKEMAKER
endif
1238 1239 1240 1241
ifdef NO_HSTRERROR
	COMPAT_CFLAGS += -DNO_HSTRERROR
	COMPAT_OBJS += compat/hstrerror.o
endif
R
René Scharfe 已提交
1242 1243 1244 1245
ifdef NO_MEMMEM
	COMPAT_CFLAGS += -DNO_MEMMEM
	COMPAT_OBJS += compat/memmem.o
endif
1246 1247 1248 1249
ifdef INTERNAL_QSORT
	COMPAT_CFLAGS += -DINTERNAL_QSORT
	COMPAT_OBJS += compat/qsort.o
endif
1250 1251 1252
ifdef RUNTIME_PREFIX
	COMPAT_CFLAGS += -DRUNTIME_PREFIX
endif
1253

J
Junio C Hamano 已提交
1254 1255 1256 1257 1258 1259 1260
ifdef NO_PTHREADS
	THREADED_DELTA_SEARCH =
	BASIC_CFLAGS += -DNO_PTHREADS
else
	EXTLIBS += $(PTHREAD_LIBS)
endif

N
Nicolas Pitre 已提交
1261 1262
ifdef THREADED_DELTA_SEARCH
	BASIC_CFLAGS += -DTHREADED_DELTA_SEARCH
1263
	LIB_OBJS += thread-utils.o
N
Nicolas Pitre 已提交
1264
endif
1265 1266 1267
ifdef DIR_HAS_BSD_GROUP_SEMANTICS
	COMPAT_CFLAGS += -DDIR_HAS_BSD_GROUP_SEMANTICS
endif
J
Jeff King 已提交
1268 1269 1270
ifdef NO_EXTERNAL_GREP
	BASIC_CFLAGS += -DNO_EXTERNAL_GREP
endif
1271 1272 1273
ifdef UNRELIABLE_FSTAT
	BASIC_CFLAGS += -DUNRELIABLE_FSTAT
endif
1274 1275 1276 1277
ifdef NO_REGEX
	COMPAT_CFLAGS += -Icompat/regex
	COMPAT_OBJS += compat/regex/regex.o
endif
N
Nicolas Pitre 已提交
1278

1279 1280 1281 1282 1283
ifdef USE_NED_ALLOCATOR
       COMPAT_CFLAGS += -DUSE_NED_ALLOCATOR -DOVERRIDE_STRDUP -DNDEBUG -DREPLACE_SYSTEM_ALLOCATOR -Icompat/nedmalloc
       COMPAT_OBJS += compat/nedmalloc/nedmalloc.o
endif

1284 1285 1286 1287
ifeq ($(TCLTK_PATH),)
NO_TCLTK=NoThanks
endif

1288 1289 1290 1291
ifeq ($(PERL_PATH),)
NO_PERL=NoThanks
endif

1292
QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
1293 1294
QUIET_SUBDIR1  =

1295 1296 1297 1298 1299 1300
ifneq ($(findstring $(MAKEFLAGS),w),w)
PRINT_DIR = --no-print-directory
else # "make -w"
NO_SUBDIR = :
endif

1301
ifneq ($(findstring $(MAKEFLAGS),s),s)
S
Shawn O. Pearce 已提交
1302
ifndef V
A
Alex Riesen 已提交
1303
	QUIET_CC       = @echo '   ' CC $@;
1304 1305 1306 1307
	QUIET_AR       = @echo '   ' AR $@;
	QUIET_LINK     = @echo '   ' LINK $@;
	QUIET_BUILT_IN = @echo '   ' BUILTIN $@;
	QUIET_GEN      = @echo '   ' GEN $@;
1308
	QUIET_LNCP     = @echo '   ' LN/CP $@;
1309
	QUIET_SUBDIR0  = +@subdir=
1310 1311
	QUIET_SUBDIR1  = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
			 $(MAKE) $(PRINT_DIR) -C $$subdir
S
Shawn O. Pearce 已提交
1312
	export V
A
Alex Riesen 已提交
1313
	export QUIET_GEN
1314 1315
	export QUIET_BUILT_IN
endif
1316
endif
1317

1318 1319 1320 1321
ifdef ASCIIDOC8
	export ASCIIDOC8
endif

P
Pavel Roskin 已提交
1322
# Shell quote (do not use $(call) to accommodate ancient setups);
1323 1324

SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER))
1325
ETC_GITCONFIG_SQ = $(subst ','\'',$(ETC_GITCONFIG))
1326 1327 1328

DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
bindir_SQ = $(subst ','\'',$(bindir))
1329
bindir_relative_SQ = $(subst ','\'',$(bindir_relative))
1330
mandir_SQ = $(subst ','\'',$(mandir))
1331
infodir_SQ = $(subst ','\'',$(infodir))
1332 1333
gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
template_dir_SQ = $(subst ','\'',$(template_dir))
1334
htmldir_SQ = $(subst ','\'',$(htmldir))
1335
prefix_SQ = $(subst ','\'',$(prefix))
1336 1337 1338

SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
1339
TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH))
1340

1341 1342
LIBS = $(GITLIBS) $(EXTLIBS)

1343
BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' \
1344
	$(COMPAT_CFLAGS)
J
Jason Riedy 已提交
1345
LIB_OBJS += $(COMPAT_OBJS)
1346 1347 1348 1349

ALL_CFLAGS += $(BASIC_CFLAGS)
ALL_LDFLAGS += $(BASIC_LDFLAGS)

1350
export TAR INSTALL DESTDIR SHELL_PATH
1351 1352


P
Petr Baudis 已提交
1353 1354
### Build rules

1355 1356
SHELL = $(SHELL_PATH)

1357
all:: shell_compatibility_test $(ALL_PROGRAMS) $(BUILT_INS) $(OTHER_PROGRAMS) GIT-BUILD-OPTIONS
1358
ifneq (,$X)
1359
	$(QUIET_BUILT_IN)$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), test '$p' -ef '$p$X' || $(RM) '$p';)
1360
endif
1361

1362
all::
E
Eygene Ryabinkin 已提交
1363
ifndef NO_TCLTK
1364
	$(QUIET_SUBDIR0)git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all
J
Junio C Hamano 已提交
1365
	$(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all
E
Eygene Ryabinkin 已提交
1366
endif
1367
ifndef NO_PERL
1368
	$(QUIET_SUBDIR0)perl $(QUIET_SUBDIR1) PERL_PATH='$(PERL_PATH_SQ)' prefix='$(prefix_SQ)' all
1369
endif
1370
	$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1)
1371

1372 1373 1374 1375 1376
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 已提交
1377 1378 1379
strip: $(PROGRAMS) git$X
	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X

1380 1381
git.o: git.c common-cmds.h GIT-CFLAGS
	$(QUIET_CC)$(CC) -DGIT_VERSION='"$(GIT_VERSION)"' \
1382
		'-DGIT_HTML_PATH="$(htmldir_SQ)"' \
M
Marius Storm-Olsen 已提交
1383
		$(ALL_CFLAGS) -o $@ -c $(filter %.c,$^)
1384 1385

git$X: git.o $(BUILTIN_OBJS) $(GITLIBS)
1386
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ git.o \
1387
		$(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)
1388

M
Miklos Vajna 已提交
1389
builtin-help.o: builtin-help.c common-cmds.h GIT-CFLAGS
1390
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) \
1391
		'-DGIT_HTML_PATH="$(htmldir_SQ)"' \
1392 1393
		'-DGIT_MAN_PATH="$(mandir_SQ)"' \
		'-DGIT_INFO_PATH="$(infodir_SQ)"' $<
1394

J
Junio C Hamano 已提交
1395
$(BUILT_INS): git$X
1396 1397 1398 1399
	$(QUIET_BUILT_IN)$(RM) $@ && \
	ln git$X $@ 2>/dev/null || \
	ln -s git$X $@ 2>/dev/null || \
	cp git$X $@
J
Junio C Hamano 已提交
1400

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

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

1406
$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
1407
	$(QUIET_GEN)$(RM) $@ $@+ && \
1408
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
1409
	    -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \
1410
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1411
	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
1412
	    -e $(BROKEN_PATH_FIX) \
1413 1414
	    $@.sh >$@+ && \
	chmod +x $@+ && \
1415
	mv $@+ $@
1416

1417
ifndef NO_PERL
1418 1419
$(patsubst %.perl,%,$(SCRIPT_PERL)): perl/perl.mak

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

1423
$(patsubst %.perl,%,$(SCRIPT_PERL)): % : %.perl
1424
	$(QUIET_GEN)$(RM) $@ $@+ && \
1425
	INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C perl -s --no-print-directory instlibdir` && \
1426 1427 1428
	sed -e '1{' \
	    -e '	s|#!.*perl|#!$(PERL_PATH_SQ)|' \
	    -e '	h' \
1429
	    -e '	s=.*=use lib (split(/$(pathsep)/, $$ENV{GITPERLLIB} || "@@INSTLIBDIR@@"));=' \
1430 1431 1432
	    -e '	H' \
	    -e '	x' \
	    -e '}' \
1433
	    -e 's|@@INSTLIBDIR@@|'"$$INSTLIBDIR"'|g' \
1434
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1435 1436
	    $@.perl >$@+ && \
	chmod +x $@+ && \
1437
	mv $@+ $@
1438

1439
OTHER_PROGRAMS += gitweb/gitweb.cgi
1440
gitweb/gitweb.cgi: gitweb/gitweb.perl
1441
	$(QUIET_GEN)$(RM) $@ $@+ && \
1442
	sed -e '1s|#!.*perl|#!$(PERL_PATH_SQ)|' \
1443 1444 1445
	    -e 's|++GIT_VERSION++|$(GIT_VERSION)|g' \
	    -e 's|++GIT_BINDIR++|$(bindir)|g' \
	    -e 's|++GITWEB_CONFIG++|$(GITWEB_CONFIG)|g' \
1446
	    -e 's|++GITWEB_CONFIG_SYSTEM++|$(GITWEB_CONFIG_SYSTEM)|g' \
1447
	    -e 's|++GITWEB_HOME_LINK_STR++|$(GITWEB_HOME_LINK_STR)|g' \
1448 1449
	    -e 's|++GITWEB_SITENAME++|$(GITWEB_SITENAME)|g' \
	    -e 's|++GITWEB_PROJECTROOT++|$(GITWEB_PROJECTROOT)|g' \
1450
	    -e 's|"++GITWEB_PROJECT_MAXDEPTH++"|$(GITWEB_PROJECT_MAXDEPTH)|g' \
M
Matthias Lederhofer 已提交
1451 1452
	    -e 's|++GITWEB_EXPORT_OK++|$(GITWEB_EXPORT_OK)|g' \
	    -e 's|++GITWEB_STRICT_EXPORT++|$(GITWEB_STRICT_EXPORT)|g' \
1453
	    -e 's|++GITWEB_BASE_URL++|$(GITWEB_BASE_URL)|g' \
1454 1455 1456 1457
	    -e 's|++GITWEB_LIST++|$(GITWEB_LIST)|g' \
	    -e 's|++GITWEB_HOMETEXT++|$(GITWEB_HOMETEXT)|g' \
	    -e 's|++GITWEB_CSS++|$(GITWEB_CSS)|g' \
	    -e 's|++GITWEB_LOGO++|$(GITWEB_LOGO)|g' \
1458
	    -e 's|++GITWEB_FAVICON++|$(GITWEB_FAVICON)|g' \
1459 1460
	    -e 's|++GITWEB_SITE_HEADER++|$(GITWEB_SITE_HEADER)|g' \
	    -e 's|++GITWEB_SITE_FOOTER++|$(GITWEB_SITE_FOOTER)|g' \
1461 1462
	    $< >$@+ && \
	chmod +x $@+ && \
1463 1464
	mv $@+ $@

1465
git-instaweb: git-instaweb.sh gitweb/gitweb.cgi gitweb/gitweb.css
1466
	$(QUIET_GEN)$(RM) $@ $@+ && \
1467 1468 1469
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
1470
	    -e '/@@GITWEB_CGI@@/r gitweb/gitweb.cgi' \
1471
	    -e '/@@GITWEB_CGI@@/d' \
1472
	    -e '/@@GITWEB_CSS@@/r gitweb/gitweb.css' \
1473
	    -e '/@@GITWEB_CSS@@/d' \
1474
	    -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
1475 1476
	    $@.sh > $@+ && \
	chmod +x $@+ && \
1477
	mv $@+ $@
1478 1479 1480 1481 1482 1483 1484 1485 1486
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
1487

1488
configure: configure.ac
1489
	$(QUIET_GEN)$(RM) $@ $<+ && \
1490
	sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1491 1492
	    $< > $<+ && \
	autoconf -o $@ $<+ && \
1493
	$(RM) $<+
1494

1495
# These can record GIT_VERSION
1496
git.o git.spec \
1497 1498 1499
	$(patsubst %.sh,%,$(SCRIPT_SH)) \
	$(patsubst %.perl,%,$(SCRIPT_PERL)) \
	: GIT-VERSION-FILE
1500

1501
%.o: %.c GIT-CFLAGS
1502
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) $<
1503 1504
%.s: %.c GIT-CFLAGS
	$(QUIET_CC)$(CC) -S $(ALL_CFLAGS) $<
1505
%.o: %.S
1506
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) $<
1507

1508
exec_cmd.o: exec_cmd.c GIT-CFLAGS
1509 1510 1511 1512 1513 1514
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) \
		'-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
		'-DBINDIR="$(bindir_relative_SQ)"' \
		'-DPREFIX="$(prefix_SQ)"' \
		$<

1515
builtin-init-db.o: builtin-init-db.c GIT-CFLAGS
1516
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"' $<
1517

1518 1519 1520
config.o: config.c GIT-CFLAGS
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DETC_GITCONFIG='"$(ETC_GITCONFIG_SQ)"' $<

1521
http.o: http.c GIT-CFLAGS
1522
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DGIT_USER_AGENT='"git/$(GIT_VERSION)"' $<
1523

1524
ifdef NO_EXPAT
D
Daniel Barkalow 已提交
1525
http-walker.o: http-walker.c http.h GIT-CFLAGS
1526
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DNO_EXPAT $<
1527 1528
endif

1529
git-%$X: %.o $(GITLIBS)
1530
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
1531

R
Robert Shearman 已提交
1532 1533 1534
git-imap-send$X: imap-send.o $(GITLIBS)
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIBS) $(OPENSSL_LINK) $(OPENSSL_LIBSSL)
1535

L
Linus Torvalds 已提交
1536
http.o http-walker.o http-push.o: http.h
1537

L
Linus Torvalds 已提交
1538 1539
http.o http-walker.o: $(LIB_H)

1540
git-http-fetch$X: revision.o http.o http-walker.o http-fetch.o $(GITLIBS)
L
Linus Torvalds 已提交
1541
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
1542
		$(LIBS) $(CURL_LIBCURL)
1543
git-http-push$X: revision.o http.o http-push.o $(GITLIBS)
1544
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
1545 1546
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

1547
git-remote-curl$X: remote-curl.o http.o http-walker.o $(GITLIBS)
1548 1549 1550
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

1551
$(LIB_OBJS) $(BUILTIN_OBJS): $(LIB_H)
1552
$(patsubst git-%$X,%.o,$(PROGRAMS)) git.o: $(LIB_H) $(wildcard */*.h)
J
Junio C Hamano 已提交
1553
builtin-revert.o wt-status.o: wt-status.h
1554

P
Petr Baudis 已提交
1555
$(LIB_FILE): $(LIB_OBJS)
1556
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)
P
Petr Baudis 已提交
1557

J
Johannes Schindelin 已提交
1558
XDIFF_OBJS=xdiff/xdiffi.o xdiff/xprepare.o xdiff/xutils.o xdiff/xemit.o \
1559
	xdiff/xmerge.o xdiff/xpatience.o
1560 1561
$(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
1562 1563

$(XDIFF_LIB): $(XDIFF_OBJS)
1564
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(XDIFF_OBJS)
1565 1566


P
Petr Baudis 已提交
1567 1568 1569
doc:
	$(MAKE) -C Documentation all

1570 1571 1572 1573 1574 1575
man:
	$(MAKE) -C Documentation man

html:
	$(MAKE) -C Documentation html

1576 1577 1578
info:
	$(MAKE) -C Documentation info

1579 1580 1581
pdf:
	$(MAKE) -C Documentation pdf

1582
TAGS:
1583
	$(RM) TAGS
1584
	$(FIND) . -name '*.[hcS]' -print | xargs etags -a
1585 1586

tags:
1587
	$(RM) tags
1588
	$(FIND) . -name '*.[hcS]' -print | xargs ctags -a
P
Petr Baudis 已提交
1589

K
Kristof Provost 已提交
1590 1591 1592 1593
cscope:
	$(RM) cscope*
	$(FIND) . -name '*.[hcS]' -print | xargs cscope -b

1594
### Detect prefix changes
J
Junio C Hamano 已提交
1595
TRACK_CFLAGS = $(subst ','\'',$(ALL_CFLAGS)):\
1596 1597 1598 1599 1600 1601 1602 1603 1604
             $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ)

GIT-CFLAGS: .FORCE-GIT-CFLAGS
	@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 已提交
1605 1606 1607
# 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".
1608
GIT-BUILD-OPTIONS: .FORCE-GIT-BUILD-OPTIONS
J
Junio C Hamano 已提交
1609 1610
	@echo SHELL_PATH=\''$(subst ','\'',$(SHELL_PATH_SQ))'\' >$@
	@echo TAR=\''$(subst ','\'',$(subst ','\'',$(TAR)))'\' >>$@
J
Jeff King 已提交
1611
	@echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@
1612
	@echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@
1613

1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627
### Detect Tck/Tk interpreter path changes
ifndef NO_TCLTK
TRACK_VARS = $(subst ','\'',-DTCLTK_PATH='$(TCLTK_PATH_SQ)')

GIT-GUI-VARS: .FORCE-GIT-GUI-VARS
	@VARS='$(TRACK_VARS)'; \
	    if test x"$$VARS" != x"`cat $@ 2>/dev/null`" ; then \
		echo 1>&2 "    * new Tcl/Tk interpreter location"; \
		echo "$$VARS" >$@; \
            fi

.PHONY: .FORCE-GIT-GUI-VARS
endif

P
Petr Baudis 已提交
1628 1629
### Testing rules

1630
TEST_PROGRAMS += test-chmtime$X
R
René Scharfe 已提交
1631
TEST_PROGRAMS += test-ctype$X
1632 1633
TEST_PROGRAMS += test-date$X
TEST_PROGRAMS += test-delta$X
J
Junio C Hamano 已提交
1634
TEST_PROGRAMS += test-dump-cache-tree$X
1635 1636 1637 1638 1639
TEST_PROGRAMS += test-genrandom$X
TEST_PROGRAMS += test-match-trees$X
TEST_PROGRAMS += test-parse-options$X
TEST_PROGRAMS += test-path-utils$X
TEST_PROGRAMS += test-sha1$X
1640
TEST_PROGRAMS += test-sigchain$X
1641 1642 1643

all:: $(TEST_PROGRAMS)

1644 1645 1646 1647
# GNU make supports exporting all variables by "export" without parameters.
# However, the environment gets quite big, and some programs have problems
# with that.

1648
export NO_SVN_TESTS
1649

1650
test: all
P
Petr Baudis 已提交
1651 1652
	$(MAKE) -C t/ all

R
René Scharfe 已提交
1653 1654
test-ctype$X: ctype.o

1655
test-date$X: date.o ctype.o
P
Petr Baudis 已提交
1656

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

1659 1660
test-parse-options$X: parse-options.o

1661 1662
test-parse-options.o: parse-options.h

1663 1664
.PRECIOUS: $(patsubst test-%$X,test-%.o,$(TEST_PROGRAMS))

1665 1666
test-%$X: test-%.o $(GITLIBS)
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
1667

1668 1669 1670
check-sha1:: test-sha1$X
	./test-sha1.sh

1671
check: common-cmds.h
1672 1673 1674 1675 1676 1677 1678 1679 1680 1681
	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 已提交
1682

1683
remove-dashes:
1684
	./fixup-builtins $(BUILT_INS) $(PROGRAMS) $(SCRIPTS)
P
Petr Baudis 已提交
1685 1686 1687

### Installation rules

1688
ifneq ($(filter /%,$(firstword $(template_dir))),)
1689
template_instdir = $(template_dir)
1690 1691
else
template_instdir = $(prefix)/$(template_dir)
1692 1693 1694
endif
export template_instdir

1695
ifneq ($(filter /%,$(firstword $(gitexecdir))),)
1696
gitexec_instdir = $(gitexecdir)
1697 1698
else
gitexec_instdir = $(prefix)/$(gitexecdir)
1699 1700 1701 1702
endif
gitexec_instdir_SQ = $(subst ','\'',$(gitexec_instdir))
export gitexec_instdir

1703
install: all
1704
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
1705 1706
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
	$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
1707
	$(INSTALL) git$X git-upload-pack$X git-receive-pack$X git-upload-archive$X git-shell$X git-cvsserver '$(DESTDIR_SQ)$(bindir_SQ)'
1708
	$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
1709
ifndef NO_PERL
1710
	$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
1711
endif
E
Eygene Ryabinkin 已提交
1712
ifndef NO_TCLTK
J
Junio C Hamano 已提交
1713
	$(MAKE) -C gitk-git install
1714
	$(MAKE) -C git-gui gitexecdir='$(gitexec_instdir_SQ)' install
E
Eygene Ryabinkin 已提交
1715
endif
1716
ifneq (,$X)
1717
	$(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';)
1718
endif
1719
	bindir=$$(cd '$(DESTDIR_SQ)$(bindir_SQ)' && pwd) && \
1720
	execdir=$$(cd '$(DESTDIR_SQ)$(gitexec_instdir_SQ)' && pwd) && \
1721 1722
	{ test "$$bindir/" = "$$execdir/" || \
		{ $(RM) "$$execdir/git$X" && \
1723
		test -z "$(NO_CROSS_DIRECTORY_HARDLINKS)" && \
J
Jeff King 已提交
1724
		ln "$$bindir/git$X" "$$execdir/git$X" 2>/dev/null || \
1725
		cp "$$bindir/git$X" "$$execdir/git$X"; } ; } && \
J
Jeff King 已提交
1726
	{ for p in $(BUILT_INS); do \
1727
		$(RM) "$$execdir/$$p" && \
J
Jeff King 已提交
1728 1729 1730
		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; \
1731
	  done; } && \
1732
	./check_bindir "z$$bindir" "z$$execdir" "$$bindir/git-add$X"
P
Petr Baudis 已提交
1733 1734 1735 1736

install-doc:
	$(MAKE) -C Documentation install

1737 1738 1739
install-man:
	$(MAKE) -C Documentation install-man

1740 1741 1742
install-html:
	$(MAKE) -C Documentation install-html

1743 1744 1745
install-info:
	$(MAKE) -C Documentation install-info

1746 1747 1748
install-pdf:
	$(MAKE) -C Documentation install-pdf

1749 1750
quick-install-doc:
	$(MAKE) -C Documentation quick-install
P
Petr Baudis 已提交
1751

1752 1753 1754
quick-install-man:
	$(MAKE) -C Documentation quick-install-man

1755 1756 1757
quick-install-html:
	$(MAKE) -C Documentation quick-install-html

P
Petr Baudis 已提交
1758 1759 1760 1761


### Maintainer's dist rules

1762
git.spec: git.spec.in
1763 1764
	sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@+
	mv $@+ $@
1765

J
Junio C Hamano 已提交
1766
GIT_TARNAME=git-$(GIT_VERSION)
1767
dist: git.spec git-archive$(X) configure
1768 1769
	./git-archive --format=tar \
		--prefix=$(GIT_TARNAME)/ HEAD^{tree} > $(GIT_TARNAME).tar
1770
	@mkdir -p $(GIT_TARNAME)
1771
	@cp git.spec configure $(GIT_TARNAME)
1772
	@echo $(GIT_VERSION) > $(GIT_TARNAME)/version
1773
	@$(MAKE) -C git-gui TARDIR=../$(GIT_TARNAME)/git-gui dist-version
1774
	$(TAR) rf $(GIT_TARNAME).tar \
1775
		$(GIT_TARNAME)/git.spec \
1776
		$(GIT_TARNAME)/configure \
1777
		$(GIT_TARNAME)/version \
1778
		$(GIT_TARNAME)/git-gui/version
1779
	@$(RM) -r $(GIT_TARNAME)
1780
	gzip -f -9 $(GIT_TARNAME).tar
1781 1782

rpm: dist
J
Junio C Hamano 已提交
1783
	$(RPMBUILD) -ta $(GIT_TARNAME).tar.gz
1784

1785 1786 1787
htmldocs = git-htmldocs-$(GIT_VERSION)
manpages = git-manpages-$(GIT_VERSION)
dist-doc:
1788
	$(RM) -r .doc-tmp-dir
1789 1790 1791 1792 1793
	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
	:
1794
	$(RM) -r .doc-tmp-dir
1795
	mkdir -p .doc-tmp-dir/man1 .doc-tmp-dir/man5 .doc-tmp-dir/man7
1796
	$(MAKE) -C Documentation DESTDIR=./ \
1797
		man1dir=../.doc-tmp-dir/man1 \
1798
		man5dir=../.doc-tmp-dir/man5 \
1799
		man7dir=../.doc-tmp-dir/man7 \
1800 1801 1802
		install
	cd .doc-tmp-dir && $(TAR) cf ../$(manpages).tar .
	gzip -n -9 -f $(manpages).tar
1803
	$(RM) -r .doc-tmp-dir
1804

P
Petr Baudis 已提交
1805
### Cleaning rules
1806

1807 1808 1809
distclean: clean
	$(RM) configure

1810
clean:
1811
	$(RM) *.o mozilla-sha1/*.o arm/*.o ppc/*.o compat/*.o compat/*/*.o xdiff/*.o \
1812
		$(LIB_FILE) $(XDIFF_LIB)
1813 1814
	$(RM) $(ALL_PROGRAMS) $(BUILT_INS) git$X
	$(RM) $(TEST_PROGRAMS)
K
Kristof Provost 已提交
1815
	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h TAGS tags cscope*
1816
	$(RM) -r autom4te.cache
1817
	$(RM) config.log config.mak.autogen config.mak.append config.status config.cache
1818 1819 1820
	$(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
1821
	$(MAKE) -C Documentation/ clean
1822 1823
ifndef NO_PERL
	$(RM) gitweb/gitweb.cgi
1824
	$(MAKE) -C perl clean
1825
endif
P
Petr Baudis 已提交
1826
	$(MAKE) -C templates/ clean
1827
	$(MAKE) -C t/ clean
E
Eygene Ryabinkin 已提交
1828
ifndef NO_TCLTK
J
Junio C Hamano 已提交
1829
	$(MAKE) -C gitk-git clean
E
Eygene Ryabinkin 已提交
1830 1831
	$(MAKE) -C git-gui clean
endif
1832
	$(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-GUI-VARS GIT-BUILD-OPTIONS
1833

J
Junio C Hamano 已提交
1834
.PHONY: all install clean strip
1835
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
K
Kristof Provost 已提交
1836
.PHONY: .FORCE-GIT-VERSION-FILE TAGS tags cscope .FORCE-GIT-CFLAGS
1837
.PHONY: .FORCE-GIT-BUILD-OPTIONS
J
Junio C Hamano 已提交
1838

J
Junio C Hamano 已提交
1839 1840 1841
### Check documentation
#
check-docs::
1842
	@(for v in $(ALL_PROGRAMS) $(BUILT_INS) git gitk; \
J
Junio C Hamano 已提交
1843 1844 1845
	do \
		case "$$v" in \
		git-merge-octopus | git-merge-ours | git-merge-recursive | \
M
Miklos Vajna 已提交
1846
		git-merge-resolve | git-merge-subtree | \
1847
		git-fsck-objects | git-init-db | \
1848
		git-?*--?* ) continue ;; \
J
Junio C Hamano 已提交
1849 1850 1851
		esac ; \
		test -f "Documentation/$$v.txt" || \
		echo "no doc: $$v"; \
J
Junio C Hamano 已提交
1852
		sed -e '/^#/d' command-list.txt | \
1853
		grep -q "^$$v[ 	]" || \
J
Junio C Hamano 已提交
1854 1855 1856 1857
		case "$$v" in \
		git) ;; \
		*) echo "no link: $$v";; \
		esac ; \
1858 1859
	done; \
	( \
J
Junio C Hamano 已提交
1860
		sed -e '/^#/d' \
1861
		    -e 's/[ 	].*//' \
J
Junio C Hamano 已提交
1862
		    -e 's/^/listed /' command-list.txt; \
1863 1864 1865 1866 1867 1868 1869 1870
		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 | \
1871
		*,git-help | \
1872 1873 1874
		documented,gitattributes | \
		documented,gitignore | \
		documented,gitmodules | \
1875
		documented,gitcli | \
1876
		documented,git-tools | \
1877 1878 1879 1880 1881 1882 1883 1884
		documented,gitcore-tutorial | \
		documented,gitcvs-migration | \
		documented,gitdiffcore | \
		documented,gitglossary | \
		documented,githooks | \
		documented,gitrepository-layout | \
		documented,gittutorial | \
		documented,gittutorial-2 | \
1885 1886 1887 1888 1889 1890 1891
		sentinel,not,matching,is,ok ) continue ;; \
		esac; \
		case " $(ALL_PROGRAMS) $(BUILT_INS) git gitk " in \
		*" $$cmd "*)	;; \
		*) echo "removed but $$how: $$cmd" ;; \
		esac; \
	done ) | sort
1892 1893 1894 1895 1896

### Make sure built-ins do not have dups and listed in git.c
#
check-builtins::
	./check-builtins.sh
J
Junio C Hamano 已提交
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
### Test suite coverage testing
#
.PHONY: coverage coverage-clean coverage-build coverage-report

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

coverage-clean:
	rm -f *.gcda *.gcno

COVERAGE_CFLAGS = $(CFLAGS) -O0 -ftest-coverage -fprofile-arcs
COVERAGE_LDFLAGS = $(CFLAGS)  -O0 -lgcov

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

coverage-report:
	gcov -b *.c
	grep '^function.*called 0 ' *.c.gcov \
		| sed -e 's/\([^:]*\)\.gcov: *function \([^ ]*\) called.*/\1: \2/' \
		| tee coverage-untested-functions