Makefile 79.6 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
#
M
Michał Kiedrowicz 已提交
27 28 29 30 31 32
# Define USE_LIBPCRE if you have and want to use libpcre. git-grep will be
# able to use Perl-compatible regular expressions.
#
# Define LIBPCREDIR=/foo/bar if your libpcre header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
33
# Define NO_CURL if you do not have libcurl installed.  git-http-fetch and
34
# git-http-push are not built, and you cannot use http:// and https://
35
# transports (neither smart nor dumb).
36
#
P
Patrick Mauritz 已提交
37 38 39
# Define CURLDIR=/foo/bar if your curl header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
40
# Define NO_EXPAT if you do not have expat installed.  git-http-push is
41
# not built, and you cannot push using http:// and https:// transports (dumb).
42
#
43 44 45
# Define EXPATDIR=/foo/bar if your expat header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
46 47 48 49
# Define NO_GETTEXT if you don't want Git output to be translated.
# A translated Git requires GNU libintl or another gettext implementation,
# plus libintl-perl at runtime.
#
50 51 52
# Define USE_GETTEXT_SCHEME and set it to 'fallthrough', if you don't trust
# the installed gettext translation of the shell scripts output.
#
53 54 55 56 57 58
# Define HAVE_LIBCHARSET_H if you haven't set NO_GETTEXT and you can't
# trust the langinfo.h's nl_langinfo(CODESET) function to return the
# current character set. GNU and Solaris have a nl_langinfo(CODESET),
# FreeBSD can use either, but MinGW and some others need to use
# libcharset.h's locale_charset() instead.
#
59 60 61 62
# Define CHARSET_LIB to you need to link with library other than -liconv to
# use locale_charset() function.  On some platforms this needs to set to
# -lcharset
#
63 64 65 66 67 68
# Define LIBC_CONTAINS_LIBINTL if your gettext implementation doesn't
# need -lintl when linking.
#
# Define NO_MSGFMT_EXTENDED_OPTIONS if your implementation of msgfmt
# doesn't support GNU extensions like --check and --statistics
#
69 70 71
# Define HAVE_PATHS_H if you have paths.h and want to use the default PATH
# it specifies.
#
72 73
# Define NO_D_INO_IN_DIRENT if you don't have d_ino in your struct dirent.
#
74
# Define NO_D_TYPE_IN_DIRENT if your platform defines DT_UNKNOWN but lacks
75
# d_type in struct dirent (Cygwin 1.5, fixed in Cygwin 1.7).
76
#
77 78
# Define NO_STRCASESTR if you don't have strcasestr.
#
R
René Scharfe 已提交
79 80
# Define NO_MEMMEM if you don't have memmem.
#
81 82
# Define NO_STRLCPY if you don't have strlcpy.
#
83 84
# Define NO_STRTOUMAX if you don't have both strtoimax and strtoumax in the
# C library. If your compiler also does not support long long or does not have
85 86
# strtoull, define NO_STRTOULL.
#
J
Jason Riedy 已提交
87 88
# Define NO_SETENV if you don't have setenv in the C library.
#
89 90
# Define NO_UNSETENV if you don't have unsetenv in the C library.
#
91 92
# Define NO_MKDTEMP if you don't have mkdtemp in the C library.
#
93 94
# Define NO_MKSTEMPS if you don't have mkstemps in the C library.
#
J
Jonathan Nieder 已提交
95 96
# Define NO_STRTOK_R if you don't have strtok_r in the C library.
#
97 98
# Define NO_FNMATCH if you don't have fnmatch in the C library.
#
99 100 101
# Define NO_FNMATCH_CASEFOLD if your fnmatch function doesn't have the
# FNM_CASEFOLD GNU extension.
#
102 103 104
# Define NO_GECOS_IN_PWENT if you don't have pw_gecos in struct passwd
# in the C library.
#
105 106
# Define NO_LIBGEN_H if you don't have libgen.h.
#
107 108
# Define NEEDS_LIBGEN if your libgen needs -lgen when linking
#
109 110
# Define NO_SYS_SELECT_H if you don't have sys/select.h.
#
111 112
# 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.
113
#
P
Pavel Roskin 已提交
114
# Define NO_SVN_TESTS if you want to skip time-consuming SVN interoperability
E
Eric Wong 已提交
115 116 117
# 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.
#
118 119 120 121 122 123 124 125 126 127 128 129
# 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.
#
130 131 132 133
# 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.
#
134 135
# Define PPC_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine optimized for PowerPC.
136
#
137 138 139
# 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).
140
#
141 142 143 144
# Define NEEDS_SSL_WITH_CURL if you need -lssl with -lcurl (Minix).
#
# Define NEEDS_IDN_WITH_CURL if you need -lidn when using -lcurl (Minix).
#
145
# Define NEEDS_LIBICONV if linking with libc is not enough (Darwin).
146 147 148 149
#
# Define NEEDS_SOCKET if linking with libc is not enough (SunOS,
# Patrick Mauritz).
#
150 151 152 153
# 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.
#
154 155
# Define NO_MMAP if you want to avoid mmap.
#
J
Junio C Hamano 已提交
156 157
# Define NO_PTHREADS if you do not have or do not want to use Pthreads.
#
158
# Define NO_PREAD if you have a problem with pread() system call (e.g.
159
# cygwin1.dll before v1.5.22).
160
#
161 162 163
# Define NO_FAST_WORKING_DIRECTORY if accessing objects in pack files is
# generally faster on your platform than accessing the working directory.
#
164 165 166
# Define NO_TRUSTABLE_FILEMODE if your filesystem may claim to support
# the executable mode bit, but doesn't really do so.
#
167 168
# Define NO_IPV6 if you lack IPv6 support and getaddrinfo().
#
169 170
# Define NO_UNIX_SOCKETS if your system does not offer unix sockets.
#
171 172 173
# Define NO_SOCKADDR_STORAGE if your platform does not have struct
# sockaddr_storage.
#
174 175
# Define NO_ICONV if your libc does not properly support iconv.
#
176 177 178
# Define OLD_ICONV if your library has an old iconv(), where the second
# (input buffer pointer) parameter is declared with type (const char **).
#
179 180
# Define NO_DEFLATE_BOUND if your zlib does not have deflateBound.
#
181 182 183
# 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.
184
#
J
Junio C Hamano 已提交
185 186 187
# Define NO_NORETURN if using buggy versions of gcc 4.6+ and profile feedback,
# as the compiler can crash (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49299)
#
188 189 190 191 192
# 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).
193
#
194 195 196
# Define USE_ST_TIMESPEC if your "struct stat" uses "st_ctimespec" instead of
# "st_ctim"
#
197 198 199
# Define NO_NSEC if your "struct stat" does not have "st_ctim.tv_nsec"
# available.  This automatically turns USE_NSEC off.
#
200
# Define USE_STDEV below if you want git to care about the underlying device
201
# change being considered an inode change from the update-index perspective.
202
#
203 204 205
# Define NO_ST_BLOCKS_IN_STRUCT_STAT if your platform does not have st_blocks
# field that counts the on-disk footprint in 512-byte blocks.
#
J
Jeff King 已提交
206
# Define ASCIIDOC7 if you want to format documentation with AsciiDoc 7
207
#
208 209 210
# Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72
# (not v1.73 or v1.71).
#
J
Jeff King 已提交
211 212
# Define ASCIIDOC_ROFF if your DocBook XSL does not escape raw roff directives
# (versions 1.68.1 through v1.72).
213
#
T
Thomas Rast 已提交
214 215 216 217
# 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.
#
218 219 220
# Define NO_PERL_MAKEMAKER if you cannot use Makefiles generated by perl's
# MakeMaker (e.g. using ActiveState under Cygwin).
#
221 222
# Define NO_PERL if you do not want Perl scripts or libraries at all.
#
223 224
# Define NO_PYTHON if you do not want Python scripts or libraries at all.
#
E
Eygene Ryabinkin 已提交
225 226
# Define NO_TCLTK if you do not want Tcl/Tk GUI.
#
227 228 229 230 231
# 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.
232 233 234
# 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).
#
235 236 237 238
# 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().
#
239 240 241
# 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.
242
#
243 244
# Define OBJECT_CREATION_USES_RENAMES if your operating systems has problems
# when hardlinking a file to another name and unlinking the original file right
245
# away (some NTFS drivers seem to zero the contents in that scenario).
246
#
247 248
# 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.
249
#
J
Junio C Hamano 已提交
250 251 252
# Define NO_INSTALL_HARDLINKS if you prefer to use either symbolic links or
# copies to install built-in git commands e.g. git-cat-file.
#
253 254
# Define USE_NED_ALLOCATOR if you want to replace the platforms default
# memory allocators with the nedmalloc allocator written by Niall Douglas.
255 256
#
# Define NO_REGEX if you have no or inferior regex support in your C library.
257
#
J
Jeff King 已提交
258 259 260
# Define HAVE_DEV_TTY if your system can open /dev/tty to interact with the
# user.
#
261
# Define GETTEXT_POISON if you are debugging the choice of strings marked
262 263 264
# for translation.  In a GETTEXT_POISON build, you can turn all strings marked
# for translation into gibberish by setting the GIT_GETTEXT_POISON variable
# (to any value) in your environment.
265
#
266 267
# Define JSMIN to point to JavaScript minifier that functions as
# a filter to have gitweb.js minified.
J
Junio C Hamano 已提交
268
#
269 270 271
# Define CSSMIN to point to a CSS minifier in order to generate a minified
# version of gitweb.css
#
272 273 274 275
# 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.
#
276 277 278 279 280 281 282
# 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'
283
#
284 285 286 287 288 289
# Define COMPUTE_HEADER_DEPENDENCIES to "yes" if you want dependencies on
# header files to be automatically computed, to avoid rebuilding objects when
# an unrelated header file changes.  Define it to "no" to use the hard-coded
# dependency rules.  The default is "auto", which means to use computed header
# dependencies if your compiler is detected to support it.
#
290 291
# Define CHECK_HEADER_DEPENDENCIES to check for problems in the hard-coded
# dependency rules.
J
Junio C Hamano 已提交
292
#
293
# Define NATIVE_CRLF if your platform uses CRLF for line endings.
294 295 296 297 298
#
# Define XDL_FAST_HASH to use an alternative line-hashing method in
# the diff algorithm.  It gives a nice speedup if your processor has
# fast unaligned word loads.  Does NOT work on big-endian systems!
# Enabled by default on x86_64.
J
Jeff King 已提交
299 300 301
#
# Define GIT_USER_AGENT if you want to change how git identifies itself during
# network interactions.  The default is "git/$(GIT_VERSION)".
302

303
GIT-VERSION-FILE: FORCE
304
	@$(SHELL_PATH) ./GIT-VERSION-GEN
305
-include GIT-VERSION-FILE
306

307 308 309 310 311
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 已提交
312
uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not')
313

314 315 316 317 318 319
ifdef MSVC
	# avoid the MingW and Cygwin configuration sections
	uname_S := Windows
	uname_O := Windows
endif

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

322
CFLAGS = -g -O2 -Wall
J
Junio C Hamano 已提交
323
LDFLAGS =
324
ALL_CFLAGS = $(CPPFLAGS) $(CFLAGS)
J
Junio C Hamano 已提交
325
ALL_LDFLAGS = $(LDFLAGS)
J
Junio C Hamano 已提交
326
STRIP ?= strip
327

328 329 330
# Among the variables below, these:
#   gitexecdir
#   template_dir
331 332
#   mandir
#   infodir
333
#   htmldir
334
#   sysconfdir
335 336
# can be specified as a relative path some/where/else;
# this is interpreted as relative to $(prefix) and "git" at
337 338 339
# runtime figures out where they are based on the path to the executable.
# This can help installing the suite in a relocatable way.

340
prefix = $(HOME)
341 342 343 344 345
bindir_relative = bin
bindir = $(prefix)/$(bindir_relative)
mandir = share/man
infodir = share/info
gitexecdir = libexec/git-core
346
mergetoolsdir = $(gitexecdir)/mergetools
347
sharedir = $(prefix)/share
348
gitwebdir = $(sharedir)/gitweb
349
localedir = $(sharedir)/locale
350 351 352
template_dir = share/git-core/templates
htmldir = share/doc/git-doc
ETC_GITCONFIG = $(sysconfdir)/gitconfig
353
ETC_GITATTRIBUTES = $(sysconfdir)/gitattributes
354
lib = lib
355
# DESTDIR=
356
pathsep = :
357

358
export prefix bindir sharedir sysconfdir gitwebdir localedir
359

360
CC = cc
361
AR = ar
362
RM = rm -f
363
DIFF = diff
364
TAR = tar
365
FIND = find
366 367
INSTALL = install
RPMBUILD = rpmbuild
368
TCL_PATH = tclsh
369
TCLTK_PATH = wish
370
XGETTEXT = xgettext
371
MSGFMT = msgfmt
372
PTHREAD_LIBS = -lpthread
373
PTHREAD_CFLAGS =
374
GCOV = gcov
375

376 377
export TCL_PATH TCLTK_PATH

378
SPARSE_FLAGS =
379

P
Petr Baudis 已提交
380 381 382 383


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

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

390 391 392 393 394
# Guard against environment variables
BUILTIN_OBJS =
BUILT_INS =
COMPAT_CFLAGS =
COMPAT_OBJS =
395 396
XDIFF_OBJS =
VCSSVN_OBJS =
J
Jeff King 已提交
397
GENERATED_H =
398
EXTRA_CPPFLAGS =
399 400
LIB_H =
LIB_OBJS =
401
PROGRAM_OBJS =
402 403
PROGRAMS =
SCRIPT_PERL =
404
SCRIPT_PYTHON =
405
SCRIPT_SH =
406
SCRIPT_LIB =
407
TEST_PROGRAMS_NEED_X =
408

J
Jonathan Nieder 已提交
409 410 411 412 413 414
# 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

415 416
SCRIPT_SH += git-am.sh
SCRIPT_SH += git-bisect.sh
417
SCRIPT_SH += git-difftool--helper.sh
418 419 420 421 422 423 424 425 426 427 428 429 430 431 432
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.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

433 434
SCRIPT_LIB += git-mergetool--lib
SCRIPT_LIB += git-parse-remote
435 436 437
SCRIPT_LIB += git-rebase--am
SCRIPT_LIB += git-rebase--interactive
SCRIPT_LIB += git-rebase--merge
438
SCRIPT_LIB += git-sh-setup
439
SCRIPT_LIB += git-sh-i18n
440

441
SCRIPT_PERL += git-add--interactive.perl
442
SCRIPT_PERL += git-difftool.perl
443 444 445 446 447 448 449
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
450

451
SCRIPT_PYTHON += git-remote-testgit.py
P
Pete Wyckoff 已提交
452
SCRIPT_PYTHON += git-p4.py
453

454 455
SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
	  $(patsubst %.perl,%,$(SCRIPT_PERL)) \
456
	  $(patsubst %.py,%,$(SCRIPT_PYTHON)) \
457
	  git-instaweb
458

459 460
ETAGS_TARGET = TAGS

461 462
# Empty...
EXTRA_PROGRAMS =
463

464 465
# ... and all the rest that could be moved out of bindir to gitexecdir
PROGRAMS += $(EXTRA_PROGRAMS)
466

467
PROGRAM_OBJS += credential-store.o
468
PROGRAM_OBJS += daemon.o
469
PROGRAM_OBJS += fast-import.o
470
PROGRAM_OBJS += http-backend.o
471
PROGRAM_OBJS += imap-send.o
472
PROGRAM_OBJS += sh-i18n--envsubst.o
473 474 475 476
PROGRAM_OBJS += shell.o
PROGRAM_OBJS += show-index.o
PROGRAM_OBJS += upload-pack.o

477 478 479
# Binary suffix, set to .exe for Windows builds
X =

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

482
TEST_PROGRAMS_NEED_X += test-chmtime
J
Jeff King 已提交
483
TEST_PROGRAMS_NEED_X += test-credential
484 485 486 487 488
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
J
Jeff King 已提交
489
TEST_PROGRAMS_NEED_X += test-index-version
D
David Barr 已提交
490
TEST_PROGRAMS_NEED_X += test-line-buffer
491
TEST_PROGRAMS_NEED_X += test-match-trees
R
René Scharfe 已提交
492
TEST_PROGRAMS_NEED_X += test-mergesort
J
Jeff King 已提交
493
TEST_PROGRAMS_NEED_X += test-mktemp
494 495
TEST_PROGRAMS_NEED_X += test-parse-options
TEST_PROGRAMS_NEED_X += test-path-utils
496
TEST_PROGRAMS_NEED_X += test-revision-walking
497
TEST_PROGRAMS_NEED_X += test-run-command
498
TEST_PROGRAMS_NEED_X += test-scrap-cache-tree
499 500
TEST_PROGRAMS_NEED_X += test-sha1
TEST_PROGRAMS_NEED_X += test-sigchain
501
TEST_PROGRAMS_NEED_X += test-subprocess
D
David Barr 已提交
502
TEST_PROGRAMS_NEED_X += test-svn-fe
503

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

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

BUILT_INS += git-cherry$X
511
BUILT_INS += git-cherry-pick$X
512 513 514 515 516 517 518 519
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 已提交
520
BUILT_INS += git-stage$X
521 522
BUILT_INS += git-status$X
BUILT_INS += git-whatchanged$X
J
Junio C Hamano 已提交
523

524 525
# what 'all' will build and 'install' will install in gitexecdir,
# excluding programs for built-in commands
J
Junio C Hamano 已提交
526
ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
527

E
Eygene Ryabinkin 已提交
528
# what 'all' will build but not install in gitexecdir
529
OTHER_PROGRAMS = git$X
E
Eygene Ryabinkin 已提交
530

531 532 533 534 535 536 537 538 539
# 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

540 541 542 543 544 545 546
# 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
547 548 549
ifndef PYTHON_PATH
	PYTHON_PATH = /usr/bin/python
endif
550

L
Luben Tuikov 已提交
551
export PERL_PATH
552
export PYTHON_PATH
L
Luben Tuikov 已提交
553

L
Linus Torvalds 已提交
554
LIB_FILE=libgit.a
555
XDIFF_LIB=xdiff/lib.a
J
Jonathan Nieder 已提交
556
VCSSVN_LIB=vcs-svn/lib.a
J
Junio C Hamano 已提交
557

558 559 560 561 562 563 564 565 566 567 568 569 570 571 572
LIB_H += xdiff/xinclude.h
LIB_H += xdiff/xmacros.h
LIB_H += xdiff/xdiff.h
LIB_H += xdiff/xtypes.h
LIB_H += xdiff/xutils.h
LIB_H += xdiff/xprepare.h
LIB_H += xdiff/xdiffi.h
LIB_H += xdiff/xemit.h

LIB_H += vcs-svn/line_buffer.h
LIB_H += vcs-svn/sliding_window.h
LIB_H += vcs-svn/repo_tree.h
LIB_H += vcs-svn/fast_export.h
LIB_H += vcs-svn/svndiff.h
LIB_H += vcs-svn/svndump.h
573

J
Jeff King 已提交
574
GENERATED_H += common-cmds.h
575

576
LIB_H += advice.h
577
LIB_H += archive.h
578
LIB_H += argv-array.h
579
LIB_H += attr.h
J
Jeff King 已提交
580
LIB_H += bisect.h
581
LIB_H += blob.h
J
Jeff King 已提交
582
LIB_H += branch.h
583
LIB_H += builtin.h
584
LIB_H += bulk-checkin.h
J
Jeff King 已提交
585
LIB_H += bundle.h
586
LIB_H += cache-tree.h
J
Jeff King 已提交
587
LIB_H += cache.h
588
LIB_H += color.h
J
Jeff King 已提交
589
LIB_H += column.h
590
LIB_H += commit.h
591
LIB_H += compat/bswap.h
592
LIB_H += compat/cygwin.h
593
LIB_H += compat/mingw.h
594
LIB_H += compat/obstack.h
J
Jeff King 已提交
595
LIB_H += compat/terminal.h
596 597
LIB_H += compat/win32/dirent.h
LIB_H += compat/win32/poll.h
598
LIB_H += compat/win32/pthread.h
M
Mike Pape 已提交
599
LIB_H += compat/win32/syslog.h
600
LIB_H += connected.h
601
LIB_H += convert.h
J
Jeff King 已提交
602
LIB_H += credential.h
603 604 605 606
LIB_H += csum-file.h
LIB_H += decorate.h
LIB_H += delta.h
LIB_H += diff.h
607
LIB_H += diffcore.h
608
LIB_H += dir.h
609
LIB_H += exec_cmd.h
J
Jeff King 已提交
610
LIB_H += fetch-pack.h
611
LIB_H += fmt-merge-msg.h
612
LIB_H += fsck.h
613
LIB_H += gettext.h
614
LIB_H += git-compat-util.h
615
LIB_H += gpg-interface.h
A
Adam Simpkins 已提交
616
LIB_H += graph.h
617 618
LIB_H += grep.h
LIB_H += hash.h
619
LIB_H += help.h
J
Jeff King 已提交
620
LIB_H += http.h
F
Fredrik Kuivinen 已提交
621
LIB_H += kwset.h
622
LIB_H += levenshtein.h
623 624 625 626
LIB_H += list-objects.h
LIB_H += ll-merge.h
LIB_H += log-tree.h
LIB_H += mailmap.h
627
LIB_H += merge-file.h
628
LIB_H += merge-recursive.h
R
René Scharfe 已提交
629
LIB_H += mergesort.h
J
Jeff King 已提交
630
LIB_H += notes-cache.h
631
LIB_H += notes-merge.h
J
Jeff King 已提交
632
LIB_H += notes.h
633
LIB_H += object.h
634
LIB_H += pack-refs.h
635
LIB_H += pack-revindex.h
J
Jeff King 已提交
636
LIB_H += pack.h
637 638 639 640
LIB_H += parse-options.h
LIB_H += patch-ids.h
LIB_H += pkt-line.h
LIB_H += progress.h
641
LIB_H += prompt.h
642
LIB_H += quote.h
J
Jeff King 已提交
643
LIB_H += reachable.h
644 645 646
LIB_H += reflog-walk.h
LIB_H += refs.h
LIB_H += remote.h
647
LIB_H += rerere.h
648
LIB_H += resolve-undo.h
649 650
LIB_H += revision.h
LIB_H += run-command.h
J
Jeff King 已提交
651
LIB_H += send-pack.h
652
LIB_H += sequencer.h
653
LIB_H += sha1-array.h
654
LIB_H += sha1-lookup.h
J
Jeff King 已提交
655
LIB_H += shortlog.h
656
LIB_H += sideband.h
657
LIB_H += sigchain.h
658
LIB_H += strbuf.h
659
LIB_H += streaming.h
660
LIB_H += string-list.h
661
LIB_H += submodule.h
662
LIB_H += tag.h
J
Jeff King 已提交
663
LIB_H += tar.h
664
LIB_H += thread-utils.h
665 666
LIB_H += transport.h
LIB_H += tree-walk.h
J
Jeff King 已提交
667
LIB_H += tree.h
668
LIB_H += unpack-trees.h
J
Jeff King 已提交
669
LIB_H += url.h
670
LIB_H += userdiff.h
671
LIB_H += utf8.h
672
LIB_H += varint.h
J
Jeff King 已提交
673 674
LIB_H += walker.h
LIB_H += wt-status.h
675 676
LIB_H += xdiff-interface.h
LIB_H += xdiff/xdiff.h
677

678
LIB_OBJS += abspath.o
679
LIB_OBJS += advice.o
680 681 682 683 684
LIB_OBJS += alias.o
LIB_OBJS += alloc.o
LIB_OBJS += archive.o
LIB_OBJS += archive-tar.o
LIB_OBJS += archive-zip.o
685
LIB_OBJS += argv-array.o
686 687
LIB_OBJS += attr.o
LIB_OBJS += base85.o
688
LIB_OBJS += bisect.o
689 690
LIB_OBJS += blob.o
LIB_OBJS += branch.o
691
LIB_OBJS += bulk-checkin.o
692 693 694
LIB_OBJS += bundle.o
LIB_OBJS += cache-tree.o
LIB_OBJS += color.o
695
LIB_OBJS += column.o
696 697
LIB_OBJS += combine-diff.o
LIB_OBJS += commit.o
698
LIB_OBJS += compat/obstack.o
J
Jeff King 已提交
699
LIB_OBJS += compat/terminal.o
700 701
LIB_OBJS += config.o
LIB_OBJS += connect.o
702
LIB_OBJS += connected.o
703 704
LIB_OBJS += convert.o
LIB_OBJS += copy.o
J
Jeff King 已提交
705
LIB_OBJS += credential.o
706 707 708 709 710 711 712 713 714 715 716
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
717
LIB_OBJS += diff-no-index.o
718 719
LIB_OBJS += diff.o
LIB_OBJS += dir.o
720
LIB_OBJS += editor.o
721 722 723 724
LIB_OBJS += entry.o
LIB_OBJS += environment.o
LIB_OBJS += exec_cmd.o
LIB_OBJS += fsck.o
725
LIB_OBJS += gettext.o
726
LIB_OBJS += gpg-interface.o
A
Adam Simpkins 已提交
727
LIB_OBJS += graph.o
728 729 730
LIB_OBJS += grep.o
LIB_OBJS += hash.o
LIB_OBJS += help.o
L
Linus Torvalds 已提交
731
LIB_OBJS += hex.o
732
LIB_OBJS += ident.o
F
Fredrik Kuivinen 已提交
733
LIB_OBJS += kwset.o
734
LIB_OBJS += levenshtein.o
735 736 737 738 739 740 741
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
742
LIB_OBJS += merge-recursive.o
R
René Scharfe 已提交
743
LIB_OBJS += mergesort.o
744
LIB_OBJS += name-hash.o
J
Johannes Schindelin 已提交
745
LIB_OBJS += notes.o
J
Jeff King 已提交
746
LIB_OBJS += notes-cache.o
747
LIB_OBJS += notes-merge.o
748 749
LIB_OBJS += object.o
LIB_OBJS += pack-check.o
750
LIB_OBJS += pack-refs.o
751 752 753 754
LIB_OBJS += pack-revindex.o
LIB_OBJS += pack-write.o
LIB_OBJS += pager.o
LIB_OBJS += parse-options.o
755
LIB_OBJS += parse-options-cb.o
756 757 758 759
LIB_OBJS += patch-delta.o
LIB_OBJS += patch-ids.o
LIB_OBJS += path.o
LIB_OBJS += pkt-line.o
760
LIB_OBJS += preload-index.o
761 762
LIB_OBJS += pretty.o
LIB_OBJS += progress.o
763
LIB_OBJS += prompt.o
764 765 766 767 768 769
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
770
LIB_OBJS += replace_object.o
771
LIB_OBJS += rerere.o
772
LIB_OBJS += resolve-undo.o
773 774
LIB_OBJS += revision.o
LIB_OBJS += run-command.o
775
LIB_OBJS += sequencer.o
776 777
LIB_OBJS += server-info.o
LIB_OBJS += setup.o
778
LIB_OBJS += sha1-array.o
779
LIB_OBJS += sha1-lookup.o
780
LIB_OBJS += sha1_file.o
781 782 783
LIB_OBJS += sha1_name.o
LIB_OBJS += shallow.o
LIB_OBJS += sideband.o
784
LIB_OBJS += sigchain.o
785
LIB_OBJS += strbuf.o
786
LIB_OBJS += streaming.o
787
LIB_OBJS += string-list.o
788
LIB_OBJS += submodule.o
789 790 791 792
LIB_OBJS += symlinks.o
LIB_OBJS += tag.o
LIB_OBJS += trace.o
LIB_OBJS += transport.o
793
LIB_OBJS += transport-helper.o
794 795 796 797
LIB_OBJS += tree-diff.o
LIB_OBJS += tree.o
LIB_OBJS += tree-walk.o
LIB_OBJS += unpack-trees.o
J
Jeff King 已提交
798
LIB_OBJS += url.o
799
LIB_OBJS += usage.o
800
LIB_OBJS += userdiff.o
801
LIB_OBJS += utf8.o
802
LIB_OBJS += varint.o
803
LIB_OBJS += version.o
804
LIB_OBJS += walker.o
805
LIB_OBJS += wrapper.o
806 807 808 809
LIB_OBJS += write_or_die.o
LIB_OBJS += ws.o
LIB_OBJS += wt-status.o
LIB_OBJS += xdiff-interface.o
810
LIB_OBJS += zlib.o
811

812 813 814 815 816 817 818 819 820 821 822 823 824 825 826
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
827
BUILTIN_OBJS += builtin/column.o
828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865
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 已提交
866
BUILTIN_OBJS += builtin/notes.o
867 868 869 870 871 872 873 874 875 876 877
BUILTIN_OBJS += builtin/pack-objects.o
BUILTIN_OBJS += builtin/pack-redundant.o
BUILTIN_OBJS += builtin/pack-refs.o
BUILTIN_OBJS += builtin/patch-id.o
BUILTIN_OBJS += builtin/prune-packed.o
BUILTIN_OBJS += builtin/prune.o
BUILTIN_OBJS += builtin/push.o
BUILTIN_OBJS += builtin/read-tree.o
BUILTIN_OBJS += builtin/receive-pack.o
BUILTIN_OBJS += builtin/reflog.o
BUILTIN_OBJS += builtin/remote.o
I
Ilari Liusvaara 已提交
878
BUILTIN_OBJS += builtin/remote-ext.o
I
Ilari Liusvaara 已提交
879
BUILTIN_OBJS += builtin/remote-fd.o
880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904
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
905

906
GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
907
EXTLIBS =
908

J
Jeff King 已提交
909 910
GIT_USER_AGENT = git/$(GIT_VERSION)

911 912 913
#
# Platform specific tweaks
#
914 915 916 917 918

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

919 920 921
ifeq ($(uname_M),x86_64)
	XDL_FAST_HASH = YesPlease
endif
922 923 924 925 926 927 928
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
929 930
ifeq ($(uname_S),Linux)
	NO_STRLCPY = YesPlease
931
	NO_MKSTEMPS = YesPlease
932
	HAVE_PATHS_H = YesPlease
933
	LIBC_CONTAINS_LIBINTL = YesPlease
J
Jeff King 已提交
934
	HAVE_DEV_TTY = YesPlease
935
endif
G
Gerrit Pape 已提交
936 937
ifeq ($(uname_S),GNU/kFreeBSD)
	NO_STRLCPY = YesPlease
938
	NO_MKSTEMPS = YesPlease
939
	HAVE_PATHS_H = YesPlease
940
	DIR_HAS_BSD_GROUP_SEMANTICS = YesPlease
941
	LIBC_CONTAINS_LIBINTL = YesPlease
G
Gerrit Pape 已提交
942
endif
B
Boyd Lynn Gerber 已提交
943 944 945 946 947 948 949 950 951
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
952
	NO_MKSTEMPS = YesPlease
B
Boyd Lynn Gerber 已提交
953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975
	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
976
	NO_MKSTEMPS = YesPlease
B
Boyd Lynn Gerber 已提交
977 978 979 980 981 982 983
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
	NO_STRCASESTR = YesPlease
	NO_MEMMEM = YesPlease
	INSTALL = ginstall
	TAR = gtar
endif
984
ifeq ($(uname_S),Darwin)
985
	NEEDS_CRYPTO_WITH_SSL = YesPlease
986 987
	NEEDS_SSL_WITH_CRYPTO = YesPlease
	NEEDS_LIBICONV = YesPlease
988
	ifeq ($(shell expr "$(uname_R)" : '[15678]\.'),2)
989 990
		OLD_ICONV = UnfortunatelyYes
	endif
991 992 993
	ifeq ($(shell expr "$(uname_R)" : '[15]\.'),2)
		NO_STRLCPY = YesPlease
	endif
994
	NO_MEMMEM = YesPlease
995
	USE_ST_TIMESPEC = YesPlease
J
Jeff King 已提交
996
	HAVE_DEV_TTY = YesPlease
997
endif
998
ifeq ($(uname_S),SunOS)
999
	NEEDS_SOCKET = YesPlease
1000
	NEEDS_NSL = YesPlease
1001
	SHELL_PATH = /bin/bash
1002
	SANE_TOOL_PATH = /usr/xpg6/bin:/usr/xpg4/bin
1003
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
1004
	NO_MEMMEM = YesPlease
1005
	NO_MKDTEMP = YesPlease
1006
	NO_MKSTEMPS = YesPlease
1007
	NO_REGEX = YesPlease
1008
	NO_FNMATCH_CASEFOLD = YesPlease
1009
	NO_MSGFMT_EXTENDED_OPTIONS = YesPlease
1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020
	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_STRTOUMAX = YesPlease
		GIT_TEST_CMP = cmp
	endif
1021 1022 1023 1024 1025 1026 1027 1028
	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_STRTOUMAX = YesPlease
1029
		GIT_TEST_CMP = cmp
1030
	endif
J
Jason Riedy 已提交
1031
	ifeq ($(uname_R),5.8)
J
Jason Riedy 已提交
1032
		NO_UNSETENV = YesPlease
J
Jason Riedy 已提交
1033
		NO_SETENV = YesPlease
1034
		NO_STRTOUMAX = YesPlease
1035
		GIT_TEST_CMP = cmp
J
Jason Riedy 已提交
1036
	endif
1037 1038 1039
	ifeq ($(uname_R),5.9)
		NO_UNSETENV = YesPlease
		NO_SETENV = YesPlease
1040
		NO_STRTOUMAX = YesPlease
1041
		GIT_TEST_CMP = cmp
1042
	endif
1043
	INSTALL = /usr/ucb/install
1044
	TAR = gtar
1045
	BASIC_CFLAGS += -D__EXTENSIONS__ -D__sun__ -DHAVE_ALLOCA_H
1046
endif
1047
ifeq ($(uname_O),Cygwin)
1048
	ifeq ($(shell expr "$(uname_R)" : '1\.[1-6]\.'),4)
1049 1050 1051 1052 1053 1054 1055 1056 1057
		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 已提交
1058
	NEEDS_LIBICONV = YesPlease
1059
	NO_FAST_WORKING_DIRECTORY = UnfortunatelyYes
1060
	NO_TRUSTABLE_FILEMODE = UnfortunatelyYes
1061
	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
1062 1063
	# There are conflicting reports about this.
	# On some boxes NO_MMAP is needed, and not so elsewhere.
J
Junio C Hamano 已提交
1064 1065
	# Try commenting this out if you suspect MMAP is more efficient
	NO_MMAP = YesPlease
P
Peter Anvin 已提交
1066
	X = .exe
1067 1068
	COMPAT_OBJS += compat/cygwin.o
	UNRELIABLE_FSTAT = UnfortunatelyYes
1069
	SPARSE_FLAGS = -isystem /usr/include/w32api -Wno-one-bit-signed-bitfield
1070
endif
A
Alecs King 已提交
1071 1072
ifeq ($(uname_S),FreeBSD)
	NEEDS_LIBICONV = YesPlease
1073
	OLD_ICONV = YesPlease
1074
	NO_MEMMEM = YesPlease
1075 1076
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
1077
	DIR_HAS_BSD_GROUP_SEMANTICS = YesPlease
1078
	USE_ST_TIMESPEC = YesPlease
1079
	ifeq ($(shell expr "$(uname_R)" : '4\.'),2)
1080
		PTHREAD_LIBS = -pthread
1081 1082 1083
		NO_UINTMAX_T = YesPlease
		NO_STRTOUMAX = YesPlease
	endif
1084
	PYTHON_PATH = /usr/local/bin/python
1085
	HAVE_PATHS_H = YesPlease
A
Alecs King 已提交
1086
endif
1087
ifeq ($(uname_S),OpenBSD)
1088
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
1089
	NO_MEMMEM = YesPlease
T
Tony Kemp 已提交
1090
	USE_ST_TIMESPEC = YesPlease
H
Han Boetes 已提交
1091
	NEEDS_LIBICONV = YesPlease
1092 1093
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
1094
	HAVE_PATHS_H = YesPlease
J
Junio C Hamano 已提交
1095 1096
endif
ifeq ($(uname_S),NetBSD)
1097 1098 1099
	ifeq ($(shell expr "$(uname_R)" : '[01]\.'),2)
		NEEDS_LIBICONV = YesPlease
	endif
1100
	BASIC_CFLAGS += -I/usr/pkg/include
1101
	BASIC_LDFLAGS += -L/usr/pkg/lib $(CC_LD_DYNPATH)/usr/pkg/lib
P
Patrick Welche 已提交
1102
	USE_ST_TIMESPEC = YesPlease
1103
	NO_MKSTEMPS = YesPlease
1104
	HAVE_PATHS_H = YesPlease
H
Han Boetes 已提交
1105
endif
1106
ifeq ($(uname_S),AIX)
1107
	DEFAULT_PAGER = more
1108
	NO_STRCASESTR=YesPlease
R
René Scharfe 已提交
1109
	NO_MEMMEM = YesPlease
1110
	NO_MKDTEMP = YesPlease
1111
	NO_MKSTEMPS = YesPlease
1112
	NO_STRLCPY = YesPlease
1113
	NO_NSEC = YesPlease
1114 1115
	FREAD_READS_DIRECTORIES = UnfortunatelyYes
	INTERNAL_QSORT = UnfortunatelyYes
1116
	NEEDS_LIBICONV=YesPlease
1117
	BASIC_CFLAGS += -D_LARGE_FILES
1118
	ifeq ($(shell expr "$(uname_V)" : '[1234]'),1)
J
Junio C Hamano 已提交
1119
		NO_PTHREADS = YesPlease
1120 1121
	else
		PTHREAD_LIBS = -lpthread
J
Junio C Hamano 已提交
1122
	endif
1123 1124
	ifeq ($(shell expr "$(uname_V).$(uname_R)" : '5\.1'),3)
		INLINE=''
J
Junio C Hamano 已提交
1125
	endif
1126
	GIT_TEST_CMP = cmp
1127
endif
T
Thomas Schwinge 已提交
1128 1129 1130
ifeq ($(uname_S),GNU)
	# GNU/Hurd
	NO_STRLCPY=YesPlease
1131
	NO_MKSTEMPS = YesPlease
1132
	HAVE_PATHS_H = YesPlease
1133
	LIBC_CONTAINS_LIBINTL = YesPlease
T
Thomas Schwinge 已提交
1134
endif
1135 1136 1137 1138 1139 1140 1141
ifeq ($(uname_S),IRIX)
	NO_SETENV = YesPlease
	NO_UNSETENV = YesPlease
	NO_STRCASESTR = YesPlease
	NO_MEMMEM = YesPlease
	NO_MKSTEMPS = YesPlease
	NO_MKDTEMP = YesPlease
1142 1143 1144 1145 1146 1147
	# 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.
1148
	NO_MMAP = YesPlease
1149
	NO_REGEX = YesPlease
1150
	NO_FNMATCH_CASEFOLD = YesPlease
1151 1152 1153 1154
	SNPRINTF_RETURNS_BOGUS = YesPlease
	SHELL_PATH = /usr/gnu/bin/bash
	NEEDS_LIBGEN = YesPlease
endif
J
Johannes Schindelin 已提交
1155 1156
ifeq ($(uname_S),IRIX64)
	NO_SETENV=YesPlease
B
Brandon Casey 已提交
1157
	NO_UNSETENV = YesPlease
J
Johannes Schindelin 已提交
1158
	NO_STRCASESTR=YesPlease
R
René Scharfe 已提交
1159
	NO_MEMMEM = YesPlease
1160
	NO_MKSTEMPS = YesPlease
B
Brandon Casey 已提交
1161
	NO_MKDTEMP = YesPlease
1162 1163 1164 1165 1166 1167
	# 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 已提交
1168
	NO_MMAP = YesPlease
1169
	NO_REGEX = YesPlease
1170
	NO_FNMATCH_CASEFOLD = YesPlease
B
Brandon Casey 已提交
1171
	SNPRINTF_RETURNS_BOGUS = YesPlease
J
Johannes Schindelin 已提交
1172
	SHELL_PATH=/usr/gnu/bin/bash
B
Brandon Casey 已提交
1173
	NEEDS_LIBGEN = YesPlease
J
Johannes Schindelin 已提交
1174
endif
1175
ifeq ($(uname_S),HP-UX)
1176
	INLINE = __inline
1177 1178 1179 1180
	NO_IPV6=YesPlease
	NO_SETENV=YesPlease
	NO_STRCASESTR=YesPlease
	NO_MEMMEM = YesPlease
1181
	NO_MKSTEMPS = YesPlease
1182 1183 1184 1185 1186
	NO_STRLCPY = YesPlease
	NO_MKDTEMP = YesPlease
	NO_UNSETENV = YesPlease
	NO_HSTRERROR = YesPlease
	NO_SYS_SELECT_H = YesPlease
1187
	NO_FNMATCH_CASEFOLD = YesPlease
1188
	SNPRINTF_RETURNS_BOGUS = YesPlease
1189 1190 1191 1192
	NO_NSEC = YesPlease
	ifeq ($(uname_R),B.11.00)
		NO_INET_NTOP = YesPlease
		NO_INET_PTON = YesPlease
1193 1194 1195 1196 1197 1198 1199 1200
	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
1201
	endif
1202
	GIT_TEST_CMP = cmp
1203
endif
1204
ifeq ($(uname_S),Windows)
1205
	GIT_VERSION := $(GIT_VERSION).MSVC
M
Marius Storm-Olsen 已提交
1206 1207
	pathsep = ;
	NO_PREAD = YesPlease
1208
	NEEDS_CRYPTO_WITH_SSL = YesPlease
M
Marius Storm-Olsen 已提交
1209
	NO_LIBGEN_H = YesPlease
1210
	NO_SYS_POLL_H = YesPlease
M
Marius Storm-Olsen 已提交
1211 1212
	NO_SYMLINK_HEAD = YesPlease
	NO_IPV6 = YesPlease
1213
	NO_UNIX_SOCKETS = YesPlease
M
Marius Storm-Olsen 已提交
1214 1215 1216 1217
	NO_SETENV = YesPlease
	NO_UNSETENV = YesPlease
	NO_STRCASESTR = YesPlease
	NO_STRLCPY = YesPlease
J
Jonathan Nieder 已提交
1218
	NO_STRTOK_R = YesPlease
1219
	NO_FNMATCH = YesPlease
M
Marius Storm-Olsen 已提交
1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238
	NO_MEMMEM = YesPlease
	# NEEDS_LIBICONV = YesPlease
	NO_ICONV = YesPlease
	NO_STRTOUMAX = YesPlease
	NO_STRTOULL = YesPlease
	NO_MKDTEMP = YesPlease
	NO_MKSTEMPS = YesPlease
	SNPRINTF_RETURNS_BOGUS = YesPlease
	NO_SVN_TESTS = YesPlease
	NO_PERL_MAKEMAKER = YesPlease
	RUNTIME_PREFIX = YesPlease
	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
	NO_NSEC = YesPlease
	USE_WIN32_MMAP = YesPlease
	# USE_NED_ALLOCATOR = YesPlease
	UNRELIABLE_FSTAT = UnfortunatelyYes
	OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
	NO_REGEX = YesPlease
	NO_CURL = YesPlease
E
Erik Faye-Lund 已提交
1239
	NO_PYTHON = YesPlease
J
Johannes Sixt 已提交
1240
	BLK_SHA1 = YesPlease
1241
	NO_POSIX_GOODIES = UnfortunatelyYes
1242
	NATIVE_CRLF = YesPlease
M
Marius Storm-Olsen 已提交
1243 1244 1245 1246

	CC = compat/vcbuild/scripts/clink.pl
	AR = compat/vcbuild/scripts/lib.pl
	CFLAGS =
R
Ramsay Jones 已提交
1247
	BASIC_CFLAGS = -nologo -I. -I../zlib -Icompat/vcbuild -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE
J
Junio C Hamano 已提交
1248
	COMPAT_OBJS = compat/msvc.o compat/winansi.o \
E
Erik Faye-Lund 已提交
1249
		compat/win32/pthread.o compat/win32/syslog.o \
1250
		compat/win32/poll.o compat/win32/dirent.o
1251
	COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DNOGDI -DHAVE_STRING_H -DHAVE_ALLOCA_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
M
Marius Storm-Olsen 已提交
1252
	BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -SUBSYSTEM:CONSOLE -NODEFAULTLIB:MSVCRT.lib
1253
	EXTLIBS = user32.lib advapi32.lib shell32.lib wininet.lib ws2_32.lib
1254
	PTHREAD_LIBS =
M
Marius Storm-Olsen 已提交
1255 1256 1257 1258 1259 1260 1261 1262 1263
	lib =
ifndef DEBUG
	BASIC_CFLAGS += -GL -Os -MT
	BASIC_LDFLAGS += -LTCG
	AR += -LTCG
else
	BASIC_CFLAGS += -Zi -MTd
endif
	X = .exe
1264
endif
1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275
ifeq ($(uname_S),Interix)
	NO_INITGROUPS = YesPlease
	NO_IPV6 = YesPlease
	NO_MEMMEM = YesPlease
	NO_MKDTEMP = YesPlease
	NO_STRTOUMAX = YesPlease
	NO_NSEC = YesPlease
	NO_MKSTEMPS = YesPlease
	ifeq ($(uname_R),3.5)
		NO_INET_NTOP = YesPlease
		NO_INET_PTON = YesPlease
1276 1277
		NO_SOCKADDR_STORAGE = YesPlease
		NO_FNMATCH_CASEFOLD = YesPlease
1278 1279 1280 1281
	endif
	ifeq ($(uname_R),5.2)
		NO_INET_NTOP = YesPlease
		NO_INET_PTON = YesPlease
1282 1283
		NO_SOCKADDR_STORAGE = YesPlease
		NO_FNMATCH_CASEFOLD = YesPlease
1284 1285
	endif
endif
1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299
ifeq ($(uname_S),Minix)
	NO_IPV6 = YesPlease
	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
	NO_NSEC = YesPlease
	NEEDS_LIBGEN =
	NEEDS_CRYPTO_WITH_SSL = YesPlease
	NEEDS_IDN_WITH_CURL = YesPlease
	NEEDS_SSL_WITH_CURL = YesPlease
	NEEDS_RESOLV =
	NO_HSTRERROR = YesPlease
	NO_MMAP = YesPlease
	NO_CURL =
	NO_EXPAT =
endif
J
Johannes Sixt 已提交
1300
ifneq (,$(findstring MINGW,$(uname_S)))
1301
	pathsep = ;
J
Johannes Sixt 已提交
1302
	NO_PREAD = YesPlease
E
Erik Faye-Lund 已提交
1303
	NEEDS_CRYPTO_WITH_SSL = YesPlease
1304
	NO_LIBGEN_H = YesPlease
1305
	NO_SYS_POLL_H = YesPlease
J
Johannes Sixt 已提交
1306
	NO_SYMLINK_HEAD = YesPlease
1307
	NO_UNIX_SOCKETS = YesPlease
J
Johannes Sixt 已提交
1308 1309 1310 1311
	NO_SETENV = YesPlease
	NO_UNSETENV = YesPlease
	NO_STRCASESTR = YesPlease
	NO_STRLCPY = YesPlease
J
Jonathan Nieder 已提交
1312
	NO_STRTOK_R = YesPlease
1313
	NO_FNMATCH = YesPlease
J
Johannes Sixt 已提交
1314 1315 1316 1317 1318
	NO_MEMMEM = YesPlease
	NEEDS_LIBICONV = YesPlease
	OLD_ICONV = YesPlease
	NO_STRTOUMAX = YesPlease
	NO_MKDTEMP = YesPlease
1319
	NO_MKSTEMPS = YesPlease
J
Johannes Sixt 已提交
1320 1321
	NO_SVN_TESTS = YesPlease
	NO_PERL_MAKEMAKER = YesPlease
1322
	RUNTIME_PREFIX = YesPlease
1323
	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
1324
	NO_NSEC = YesPlease
J
Janos Laube 已提交
1325
	USE_WIN32_MMAP = YesPlease
1326
	USE_NED_ALLOCATOR = YesPlease
1327
	UNRELIABLE_FSTAT = UnfortunatelyYes
1328
	OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
1329
	NO_REGEX = YesPlease
E
Erik Faye-Lund 已提交
1330
	NO_PYTHON = YesPlease
J
Johannes Sixt 已提交
1331
	BLK_SHA1 = YesPlease
1332
	ETAGS_TARGET = ETAGS
1333 1334 1335
	NO_INET_PTON = YesPlease
	NO_INET_NTOP = YesPlease
	NO_POSIX_GOODIES = UnfortunatelyYes
1336
	COMPAT_CFLAGS += -D__USE_MINGW_ACCESS -DNOGDI -Icompat -Icompat/win32
1337
	COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
J
Junio C Hamano 已提交
1338
	COMPAT_OBJS += compat/mingw.o compat/winansi.o \
1339
		compat/win32/pthread.o compat/win32/syslog.o \
1340
		compat/win32/poll.o compat/win32/dirent.o
J
Johannes Sixt 已提交
1341
	EXTLIBS += -lws2_32
1342
	PTHREAD_LIBS =
J
Johannes Sixt 已提交
1343
	X = .exe
1344
	SPARSE_FLAGS = -Wno-one-bit-signed-bitfield
1345 1346 1347 1348 1349 1350 1351
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
1352
	HAVE_LIBCHARSET_H = YesPlease
1353 1354 1355
else
	NO_CURL = YesPlease
endif
J
Johannes Sixt 已提交
1356
endif
1357

1358
-include config.mak.autogen
1359
-include config.mak
1360

1361 1362 1363 1364 1365 1366 1367 1368
ifndef sysconfdir
ifeq ($(prefix),/usr)
sysconfdir = /etc
else
sysconfdir = etc
endif
endif

1369
ifdef CHECK_HEADER_DEPENDENCIES
1370
COMPUTE_HEADER_DEPENDENCIES = no
1371
USE_COMPUTED_HEADER_DEPENDENCIES =
1372 1373
endif

1374
ifndef COMPUTE_HEADER_DEPENDENCIES
1375 1376 1377 1378
COMPUTE_HEADER_DEPENDENCIES = auto
endif

ifeq ($(COMPUTE_HEADER_DEPENDENCIES),auto)
1379 1380 1381
dep_check = $(shell $(CC) $(ALL_CFLAGS) \
	-c -MF /dev/null -MMD -MP -x c /dev/null -o /dev/null 2>&1; \
	echo $$?)
1382
ifeq ($(dep_check),0)
1383 1384 1385
override COMPUTE_HEADER_DEPENDENCIES = yes
else
override COMPUTE_HEADER_DEPENDENCIES = no
1386
endif
1387 1388
endif

1389
ifeq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
1390
USE_COMPUTED_HEADER_DEPENDENCIES = YesPlease
1391 1392 1393 1394 1395
else
ifneq ($(COMPUTE_HEADER_DEPENDENCIES),no)
$(error please set COMPUTE_HEADER_DEPENDENCIES to yes, no, or auto \
(not "$(COMPUTE_HEADER_DEPENDENCIES)"))
endif
1396 1397
endif

1398
ifdef SANE_TOOL_PATH
1399 1400
SANE_TOOL_PATH_SQ = $(subst ','\'',$(SANE_TOOL_PATH))
BROKEN_PATH_FIX = 's|^\# @@BROKEN_PATH_FIX@@$$|git_broken_path_fix $(SANE_TOOL_PATH_SQ)|'
1401 1402
PATH := $(SANE_TOOL_PATH):${PATH}
else
1403
BROKEN_PATH_FIX = '/^\# @@BROKEN_PATH_FIX@@$$/d'
1404 1405
endif

G
Gary V. Vaughan 已提交
1406 1407 1408 1409
ifneq (,$(INLINE))
	BASIC_CFLAGS += -Dinline=$(INLINE)
endif

1410 1411 1412 1413
ifneq (,$(SOCKLEN_T))
	BASIC_CFLAGS += -Dsocklen_t=$(SOCKLEN_T)
endif

1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426
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
1427
	PTHREAD_LIBS =
1428 1429
endif

1430 1431 1432 1433 1434 1435 1436 1437
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
1438 1439
endif

1440 1441 1442 1443 1444
ifdef NO_LIBGEN_H
	COMPAT_CFLAGS += -DNO_LIBGEN_H
	COMPAT_OBJS += compat/basename.o
endif

M
Michał Kiedrowicz 已提交
1445 1446 1447 1448 1449 1450 1451 1452 1453
ifdef USE_LIBPCRE
	BASIC_CFLAGS += -DUSE_LIBPCRE
	ifdef LIBPCREDIR
		BASIC_CFLAGS += -I$(LIBPCREDIR)/include
		EXTLIBS += -L$(LIBPCREDIR)/$(lib) $(CC_LD_DYNPATH)$(LIBPCREDIR)/$(lib)
	endif
	EXTLIBS += -lpcre
endif

D
Daniel Barkalow 已提交
1454 1455
ifdef NO_CURL
	BASIC_CFLAGS += -DNO_CURL
1456 1457 1458
	REMOTE_CURL_PRIMARY =
	REMOTE_CURL_ALIASES =
	REMOTE_CURL_NAMES =
D
Daniel Barkalow 已提交
1459
else
1460
	ifdef CURLDIR
1461
		# Try "-Wl,-rpath=$(CURLDIR)/$(lib)" in such a case.
1462
		BASIC_CFLAGS += -I$(CURLDIR)/include
1463
		CURL_LIBCURL = -L$(CURLDIR)/$(lib) $(CC_LD_DYNPATH)$(CURLDIR)/$(lib) -lcurl
1464 1465 1466
	else
		CURL_LIBCURL = -lcurl
	endif
1467 1468 1469 1470 1471 1472 1473 1474 1475 1476
	ifdef NEEDS_SSL_WITH_CURL
		CURL_LIBCURL +=	-lssl
		ifdef NEEDS_CRYPTO_WITH_SSL
			CURL_LIBCURL += -lcrypto
		endif
	endif
	ifdef NEEDS_IDN_WITH_CURL
		CURL_LIBCURL += -lidn
	endif

1477 1478 1479
	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)
1480 1481
	PROGRAM_OBJS += http-fetch.o
	PROGRAMS += $(REMOTE_CURL_NAMES)
1482 1483 1484
	curl_check := $(shell (echo 070908; curl-config --vernum) | sort -r | sed -ne 2p)
	ifeq "$(curl_check)" "070908"
		ifndef NO_EXPAT
1485
			PROGRAM_OBJS += http-push.o
1486
		endif
1487
	endif
1488
	ifndef NO_EXPAT
1489 1490 1491 1492 1493 1494
		ifdef EXPATDIR
			BASIC_CFLAGS += -I$(EXPATDIR)/include
			EXPAT_LIBEXPAT = -L$(EXPATDIR)/$(lib) $(CC_LD_DYNPATH)$(EXPATDIR)/$(lib) -lexpat
		else
			EXPAT_LIBEXPAT = -lexpat
		endif
1495
	endif
1496 1497
endif

1498 1499
ifdef ZLIB_PATH
	BASIC_CFLAGS += -I$(ZLIB_PATH)/include
1500
	EXTLIBS += -L$(ZLIB_PATH)/$(lib) $(CC_LD_DYNPATH)$(ZLIB_PATH)/$(lib)
1501 1502 1503
endif
EXTLIBS += -lz

P
Petr Baudis 已提交
1504
ifndef NO_OPENSSL
J
Junio C Hamano 已提交
1505
	OPENSSL_LIBSSL = -lssl
J
Junio C Hamano 已提交
1506
	ifdef OPENSSLDIR
1507
		BASIC_CFLAGS += -I$(OPENSSLDIR)/include
1508
		OPENSSL_LINK = -L$(OPENSSLDIR)/$(lib) $(CC_LD_DYNPATH)$(OPENSSLDIR)/$(lib)
J
Junio C Hamano 已提交
1509 1510 1511
	else
		OPENSSL_LINK =
	endif
1512
	ifdef NEEDS_CRYPTO_WITH_SSL
1513
		OPENSSL_LIBSSL += -lcrypto
1514
	endif
P
Petr Baudis 已提交
1515
else
1516
	BASIC_CFLAGS += -DNO_OPENSSL
1517
	BLK_SHA1 = 1
J
Junio C Hamano 已提交
1518
	OPENSSL_LIBSSL =
P
Petr Baudis 已提交
1519
endif
1520 1521 1522
ifdef NO_OPENSSL
	LIB_4_CRYPTO =
else
1523
ifdef NEEDS_SSL_WITH_CRYPTO
J
Junio C Hamano 已提交
1524
	LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto -lssl
1525
else
J
Junio C Hamano 已提交
1526
	LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto
1527
endif
1528
endif
1529
ifdef NEEDS_LIBICONV
J
Junio C Hamano 已提交
1530
	ifdef ICONVDIR
1531
		BASIC_CFLAGS += -I$(ICONVDIR)/include
1532
		ICONV_LINK = -L$(ICONVDIR)/$(lib) $(CC_LD_DYNPATH)$(ICONVDIR)/$(lib)
J
Junio C Hamano 已提交
1533 1534 1535
	else
		ICONV_LINK =
	endif
1536
	EXTLIBS += $(ICONV_LINK) -liconv
1537
endif
1538 1539 1540
ifdef NEEDS_LIBGEN
	EXTLIBS += -lgen
endif
1541 1542 1543 1544 1545
ifndef NO_GETTEXT
ifndef LIBC_CONTAINS_LIBINTL
	EXTLIBS += -lintl
endif
endif
1546
ifdef NEEDS_SOCKET
1547
	EXTLIBS += -lsocket
1548
endif
1549
ifdef NEEDS_NSL
1550
	EXTLIBS += -lnsl
1551
endif
1552 1553 1554
ifdef NEEDS_RESOLV
	EXTLIBS += -lresolv
endif
1555
ifdef NO_D_TYPE_IN_DIRENT
1556
	BASIC_CFLAGS += -DNO_D_TYPE_IN_DIRENT
1557
endif
1558
ifdef NO_D_INO_IN_DIRENT
1559
	BASIC_CFLAGS += -DNO_D_INO_IN_DIRENT
1560
endif
1561 1562 1563
ifdef NO_ST_BLOCKS_IN_STRUCT_STAT
	BASIC_CFLAGS += -DNO_ST_BLOCKS_IN_STRUCT_STAT
endif
1564 1565 1566
ifdef USE_NSEC
	BASIC_CFLAGS += -DUSE_NSEC
endif
1567 1568 1569
ifdef USE_ST_TIMESPEC
	BASIC_CFLAGS += -DUSE_ST_TIMESPEC
endif
J
Junio C Hamano 已提交
1570 1571 1572
ifdef NO_NORETURN
	BASIC_CFLAGS += -DNO_NORETURN
endif
1573 1574 1575
ifdef NO_NSEC
	BASIC_CFLAGS += -DNO_NSEC
endif
1576 1577 1578 1579
ifdef SNPRINTF_RETURNS_BOGUS
	COMPAT_CFLAGS += -DSNPRINTF_RETURNS_BOGUS
	COMPAT_OBJS += compat/snprintf.o
endif
1580 1581 1582 1583
ifdef FREAD_READS_DIRECTORIES
	COMPAT_CFLAGS += -DFREAD_READS_DIRECTORIES
	COMPAT_OBJS += compat/fopen.o
endif
1584
ifdef NO_SYMLINK_HEAD
1585
	BASIC_CFLAGS += -DNO_SYMLINK_HEAD
1586
endif
1587 1588 1589
ifdef GETTEXT_POISON
	BASIC_CFLAGS += -DGETTEXT_POISON
endif
1590 1591
ifdef NO_GETTEXT
	BASIC_CFLAGS += -DNO_GETTEXT
1592
	USE_GETTEXT_SCHEME ?= fallthrough
1593
endif
1594
ifdef NO_STRCASESTR
1595
	COMPAT_CFLAGS += -DNO_STRCASESTR
J
Jason Riedy 已提交
1596 1597
	COMPAT_OBJS += compat/strcasestr.o
endif
1598 1599 1600 1601
ifdef NO_STRLCPY
	COMPAT_CFLAGS += -DNO_STRLCPY
	COMPAT_OBJS += compat/strlcpy.o
endif
1602 1603
ifdef NO_STRTOUMAX
	COMPAT_CFLAGS += -DNO_STRTOUMAX
1604
	COMPAT_OBJS += compat/strtoumax.o compat/strtoimax.o
1605 1606 1607 1608
endif
ifdef NO_STRTOULL
	COMPAT_CFLAGS += -DNO_STRTOULL
endif
J
Jonathan Nieder 已提交
1609 1610 1611 1612
ifdef NO_STRTOK_R
	COMPAT_CFLAGS += -DNO_STRTOK_R
	COMPAT_OBJS += compat/strtok_r.o
endif
1613 1614 1615 1616
ifdef NO_FNMATCH
	COMPAT_CFLAGS += -Icompat/fnmatch
	COMPAT_CFLAGS += -DNO_FNMATCH
	COMPAT_OBJS += compat/fnmatch/fnmatch.o
1617 1618 1619 1620 1621 1622
else
ifdef NO_FNMATCH_CASEFOLD
	COMPAT_CFLAGS += -Icompat/fnmatch
	COMPAT_CFLAGS += -DNO_FNMATCH_CASEFOLD
	COMPAT_OBJS += compat/fnmatch/fnmatch.o
endif
1623
endif
J
Jason Riedy 已提交
1624
ifdef NO_SETENV
1625
	COMPAT_CFLAGS += -DNO_SETENV
J
Jason Riedy 已提交
1626
	COMPAT_OBJS += compat/setenv.o
1627
endif
1628 1629 1630 1631
ifdef NO_MKDTEMP
	COMPAT_CFLAGS += -DNO_MKDTEMP
	COMPAT_OBJS += compat/mkdtemp.o
endif
1632 1633 1634
ifdef NO_MKSTEMPS
	COMPAT_CFLAGS += -DNO_MKSTEMPS
endif
J
Johannes Schindelin 已提交
1635
ifdef NO_UNSETENV
J
Jason Riedy 已提交
1636 1637 1638
	COMPAT_CFLAGS += -DNO_UNSETENV
	COMPAT_OBJS += compat/unsetenv.o
endif
1639 1640 1641
ifdef NO_SYS_SELECT_H
	BASIC_CFLAGS += -DNO_SYS_SELECT_H
endif
1642 1643 1644 1645 1646 1647 1648 1649 1650
ifdef NO_SYS_POLL_H
	BASIC_CFLAGS += -DNO_SYS_POLL_H
endif
ifdef NO_INTTYPES_H
	BASIC_CFLAGS += -DNO_INTTYPES_H
endif
ifdef NO_INITGROUPS
	BASIC_CFLAGS += -DNO_INITGROUPS
endif
1651
ifdef NO_MMAP
1652
	COMPAT_CFLAGS += -DNO_MMAP
J
Jason Riedy 已提交
1653
	COMPAT_OBJS += compat/mmap.o
J
Janos Laube 已提交
1654 1655 1656 1657 1658
else
	ifdef USE_WIN32_MMAP
		COMPAT_CFLAGS += -DUSE_WIN32_MMAP
		COMPAT_OBJS += compat/win32mmap.o
	endif
1659
endif
1660 1661
ifdef OBJECT_CREATION_USES_RENAMES
	COMPAT_CFLAGS += -DOBJECT_CREATION_MODE=1
1662
endif
1663 1664 1665 1666
ifdef NO_PREAD
	COMPAT_CFLAGS += -DNO_PREAD
	COMPAT_OBJS += compat/pread.o
endif
1667 1668 1669
ifdef NO_FAST_WORKING_DIRECTORY
	BASIC_CFLAGS += -DNO_FAST_WORKING_DIRECTORY
endif
1670 1671 1672
ifdef NO_TRUSTABLE_FILEMODE
	BASIC_CFLAGS += -DNO_TRUSTABLE_FILEMODE
endif
1673
ifdef NO_IPV6
1674
	BASIC_CFLAGS += -DNO_IPV6
1675
endif
1676 1677 1678
ifdef NO_UINTMAX_T
	BASIC_CFLAGS += -Duintmax_t=uint32_t
endif
1679 1680
ifdef NO_SOCKADDR_STORAGE
ifdef NO_IPV6
1681
	BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in
1682
else
1683
	BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in6
1684
endif
1685
endif
1686 1687
ifdef NO_INET_NTOP
	LIB_OBJS += compat/inet_ntop.o
1688
	BASIC_CFLAGS += -DNO_INET_NTOP
1689
endif
1690 1691
ifdef NO_INET_PTON
	LIB_OBJS += compat/inet_pton.o
1692
	BASIC_CFLAGS += -DNO_INET_PTON
1693
endif
1694 1695 1696 1697 1698 1699
ifndef NO_UNIX_SOCKETS
	LIB_OBJS += unix-socket.o
	LIB_H += unix-socket.h
	PROGRAM_OBJS += credential-cache.o
	PROGRAM_OBJS += credential-cache--daemon.o
endif
1700

1701
ifdef NO_ICONV
1702
	BASIC_CFLAGS += -DNO_ICONV
1703 1704
endif

1705 1706 1707 1708
ifdef OLD_ICONV
	BASIC_CFLAGS += -DOLD_ICONV
endif

1709 1710 1711 1712
ifdef NO_DEFLATE_BOUND
	BASIC_CFLAGS += -DNO_DEFLATE_BOUND
endif

1713 1714 1715 1716
ifdef NO_POSIX_GOODIES
	BASIC_CFLAGS += -DNO_POSIX_GOODIES
endif

1717 1718 1719
ifdef BLK_SHA1
	SHA1_HEADER = "block-sha1/sha1.h"
	LIB_OBJS += block-sha1/sha1.o
1720
	LIB_H += block-sha1/sha1.h
1721
else
1722 1723 1724
ifdef PPC_SHA1
	SHA1_HEADER = "ppc/sha1.h"
	LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
1725
	LIB_H += ppc/sha1.h
1726 1727
else
	SHA1_HEADER = <openssl/sha.h>
1728
	EXTLIBS += $(LIB_4_CRYPTO)
1729 1730
endif
endif
1731 1732 1733
ifdef NO_PERL_MAKEMAKER
	export NO_PERL_MAKEMAKER
endif
1734 1735 1736 1737
ifdef NO_HSTRERROR
	COMPAT_CFLAGS += -DNO_HSTRERROR
	COMPAT_OBJS += compat/hstrerror.o
endif
R
René Scharfe 已提交
1738 1739 1740 1741
ifdef NO_MEMMEM
	COMPAT_CFLAGS += -DNO_MEMMEM
	COMPAT_OBJS += compat/memmem.o
endif
1742 1743 1744 1745
ifdef INTERNAL_QSORT
	COMPAT_CFLAGS += -DINTERNAL_QSORT
	COMPAT_OBJS += compat/qsort.o
endif
1746 1747 1748
ifdef RUNTIME_PREFIX
	COMPAT_CFLAGS += -DRUNTIME_PREFIX
endif
1749

J
Junio C Hamano 已提交
1750 1751 1752
ifdef NO_PTHREADS
	BASIC_CFLAGS += -DNO_PTHREADS
else
1753
	BASIC_CFLAGS += $(PTHREAD_CFLAGS)
J
Junio C Hamano 已提交
1754
	EXTLIBS += $(PTHREAD_LIBS)
1755
	LIB_OBJS += thread-utils.o
N
Nicolas Pitre 已提交
1756
endif
1757

1758 1759 1760 1761
ifdef HAVE_PATHS_H
	BASIC_CFLAGS += -DHAVE_PATHS_H
endif

1762 1763
ifdef HAVE_LIBCHARSET_H
	BASIC_CFLAGS += -DHAVE_LIBCHARSET_H
1764
	EXTLIBS += $(CHARSET_LIB)
1765 1766
endif

J
Jeff King 已提交
1767 1768 1769 1770
ifdef HAVE_DEV_TTY
	BASIC_CFLAGS += -DHAVE_DEV_TTY
endif

1771 1772 1773
ifdef DIR_HAS_BSD_GROUP_SEMANTICS
	COMPAT_CFLAGS += -DDIR_HAS_BSD_GROUP_SEMANTICS
endif
1774 1775 1776
ifdef UNRELIABLE_FSTAT
	BASIC_CFLAGS += -DUNRELIABLE_FSTAT
endif
1777 1778 1779 1780
ifdef NO_REGEX
	COMPAT_CFLAGS += -Icompat/regex
	COMPAT_OBJS += compat/regex/regex.o
endif
N
Nicolas Pitre 已提交
1781

1782
ifdef USE_NED_ALLOCATOR
1783
       COMPAT_CFLAGS += -Icompat/nedmalloc
1784 1785 1786
       COMPAT_OBJS += compat/nedmalloc/nedmalloc.o
endif

1787 1788 1789 1790
ifdef GIT_TEST_CMP_USE_COPIED_CONTEXT
	export GIT_TEST_CMP_USE_COPIED_CONTEXT
endif

1791 1792 1793 1794
ifndef NO_MSGFMT_EXTENDED_OPTIONS
	MSGFMT += --check --statistics
endif

1795 1796 1797 1798
ifneq (,$(XDL_FAST_HASH))
	BASIC_CFLAGS += -DXDL_FAST_HASH
endif

1799 1800 1801 1802
ifeq ($(TCLTK_PATH),)
NO_TCLTK=NoThanks
endif

1803 1804 1805 1806
ifeq ($(PERL_PATH),)
NO_PERL=NoThanks
endif

1807 1808 1809 1810
ifeq ($(PYTHON_PATH),)
NO_PYTHON=NoThanks
endif

1811
QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
1812 1813
QUIET_SUBDIR1  =

1814 1815 1816 1817 1818 1819
ifneq ($(findstring $(MAKEFLAGS),w),w)
PRINT_DIR = --no-print-directory
else # "make -w"
NO_SUBDIR = :
endif

1820
ifneq ($(findstring $(MAKEFLAGS),s),s)
S
Shawn O. Pearce 已提交
1821
ifndef V
A
Alex Riesen 已提交
1822
	QUIET_CC       = @echo '   ' CC $@;
1823 1824 1825 1826
	QUIET_AR       = @echo '   ' AR $@;
	QUIET_LINK     = @echo '   ' LINK $@;
	QUIET_BUILT_IN = @echo '   ' BUILTIN $@;
	QUIET_GEN      = @echo '   ' GEN $@;
1827
	QUIET_LNCP     = @echo '   ' LN/CP $@;
1828
	QUIET_XGETTEXT = @echo '   ' XGETTEXT $@;
1829
	QUIET_MSGFMT   = @echo '   ' MSGFMT $@;
1830
	QUIET_GCOV     = @echo '   ' GCOV $@;
1831
	QUIET_SP       = @echo '   ' SP $<;
1832
	QUIET_SUBDIR0  = +@subdir=
1833 1834
	QUIET_SUBDIR1  = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
			 $(MAKE) $(PRINT_DIR) -C $$subdir
S
Shawn O. Pearce 已提交
1835
	export V
A
Alex Riesen 已提交
1836
	export QUIET_GEN
1837 1838
	export QUIET_BUILT_IN
endif
1839
endif
1840

J
Jeff King 已提交
1841 1842
ifdef ASCIIDOC7
	export ASCIIDOC7
1843 1844
endif

J
Junio C Hamano 已提交
1845 1846 1847 1848
ifdef NO_INSTALL_HARDLINKS
	export NO_INSTALL_HARDLINKS
endif

1849 1850 1851 1852 1853 1854 1855
### profile feedback build
#

# Can adjust this to be a global directory if you want to do extended
# data gathering
PROFILE_DIR := $(CURDIR)

1856
ifeq ("$(PROFILE)","GEN")
1857 1858 1859 1860
	CFLAGS += -fprofile-generate=$(PROFILE_DIR) -DNO_NORETURN=1
	EXTLIBS += -lgcov
	export CCACHE_DISABLE=t
	V=1
1861 1862
else
ifneq ("$(PROFILE)","")
1863 1864 1865 1866
	CFLAGS += -fprofile-use=$(PROFILE_DIR) -fprofile-correction -DNO_NORETURN=1
	export CCACHE_DISABLE=t
	V=1
endif
1867
endif
1868

P
Pavel Roskin 已提交
1869
# Shell quote (do not use $(call) to accommodate ancient setups);
1870 1871

SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER))
1872
ETC_GITCONFIG_SQ = $(subst ','\'',$(ETC_GITCONFIG))
1873
ETC_GITATTRIBUTES_SQ = $(subst ','\'',$(ETC_GITATTRIBUTES))
1874 1875 1876

DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
bindir_SQ = $(subst ','\'',$(bindir))
1877
bindir_relative_SQ = $(subst ','\'',$(bindir_relative))
1878
mandir_SQ = $(subst ','\'',$(mandir))
1879
infodir_SQ = $(subst ','\'',$(infodir))
1880
localedir_SQ = $(subst ','\'',$(localedir))
1881 1882
gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
template_dir_SQ = $(subst ','\'',$(template_dir))
1883
htmldir_SQ = $(subst ','\'',$(htmldir))
1884
prefix_SQ = $(subst ','\'',$(prefix))
1885
gitwebdir_SQ = $(subst ','\'',$(gitwebdir))
1886 1887 1888

SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
1889
PYTHON_PATH_SQ = $(subst ','\'',$(PYTHON_PATH))
1890
TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH))
1891
DIFF_SQ = $(subst ','\'',$(DIFF))
1892

1893 1894
LIBS = $(GITLIBS) $(EXTLIBS)

1895
BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' \
1896
	$(COMPAT_CFLAGS)
J
Jason Riedy 已提交
1897
LIB_OBJS += $(COMPAT_OBJS)
1898

1899 1900 1901 1902 1903 1904 1905 1906 1907
# 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

1908 1909 1910 1911 1912 1913 1914
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

1915 1916 1917 1918 1919 1920 1921
ifdef SHELL_PATH
SHELL_PATH_CQ = "$(subst ",\",$(subst \,\\,$(SHELL_PATH)))"
SHELL_PATH_CQ_SQ = $(subst ','\'',$(SHELL_PATH_CQ))

BASIC_CFLAGS += -DSHELL_PATH='$(SHELL_PATH_CQ_SQ)'
endif

J
Jeff King 已提交
1922 1923 1924
GIT_USER_AGENT_SQ = $(subst ','\'',$(GIT_USER_AGENT))
GIT_USER_AGENT_CQ = "$(subst ",\",$(subst \,\\,$(GIT_USER_AGENT)))"
GIT_USER_AGENT_CQ_SQ = $(subst ','\'',$(GIT_USER_AGENT_CQ))
1925 1926 1927 1928
GIT-USER-AGENT: FORCE
	@if test x'$(GIT_USER_AGENT_SQ)' != x"`cat GIT-USER-AGENT 2>/dev/null`"; then \
		echo '$(GIT_USER_AGENT_SQ)' >GIT-USER-AGENT; \
	fi
J
Jeff King 已提交
1929

1930 1931 1932
ALL_CFLAGS += $(BASIC_CFLAGS)
ALL_LDFLAGS += $(BASIC_LDFLAGS)

1933
export DIFF TAR INSTALL DESTDIR SHELL_PATH
1934 1935


P
Petr Baudis 已提交
1936 1937
### Build rules

1938 1939
SHELL = $(SHELL_PATH)

1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950
all:: shell_compatibility_test

ifeq "$(PROFILE)" "BUILD"
ifeq ($(filter all,$(MAKECMDGOALS)),all)
all:: profile-clean
	$(MAKE) PROFILE=GEN all
	$(MAKE) PROFILE=GEN -j1 test
endif
endif

all:: $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) $(OTHER_PROGRAMS) GIT-BUILD-OPTIONS
1951
ifneq (,$X)
1952
	$(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';)
1953
endif
1954

1955
all::
E
Eygene Ryabinkin 已提交
1956
ifndef NO_TCLTK
1957
	$(QUIET_SUBDIR0)git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all
J
Junio C Hamano 已提交
1958
	$(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all
E
Eygene Ryabinkin 已提交
1959
endif
1960
ifndef NO_PERL
1961
	$(QUIET_SUBDIR0)perl $(QUIET_SUBDIR1) PERL_PATH='$(PERL_PATH_SQ)' prefix='$(prefix_SQ)' localedir='$(localedir_SQ)' all
1962 1963 1964
endif
ifndef NO_PYTHON
	$(QUIET_SUBDIR0)git_remote_helpers $(QUIET_SUBDIR1) PYTHON_PATH='$(PYTHON_PATH_SQ)' prefix='$(prefix_SQ)' all
1965
endif
1966
	$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1) SHELL_PATH='$(SHELL_PATH_SQ)' PERL_PATH='$(PERL_PATH_SQ)'
1967

1968 1969 1970 1971 1972
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 已提交
1973 1974 1975
strip: $(PROGRAMS) git$X
	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X

1976
git.sp git.s git.o: GIT-PREFIX
1977
git.sp git.s git.o: EXTRA_CPPFLAGS = \
1978 1979 1980
	'-DGIT_HTML_PATH="$(htmldir_SQ)"' \
	'-DGIT_MAN_PATH="$(mandir_SQ)"' \
	'-DGIT_INFO_PATH="$(infodir_SQ)"'
1981

1982
git$X: git.o GIT-LDFLAGS $(BUILTIN_OBJS) $(GITLIBS)
1983
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ git.o \
1984
		$(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)
1985

1986
help.sp help.s help.o: common-cmds.h
1987

1988
builtin/help.sp builtin/help.s builtin/help.o: common-cmds.h GIT-PREFIX
1989
builtin/help.sp builtin/help.s builtin/help.o: EXTRA_CPPFLAGS = \
1990 1991 1992
	'-DGIT_HTML_PATH="$(htmldir_SQ)"' \
	'-DGIT_MAN_PATH="$(mandir_SQ)"' \
	'-DGIT_INFO_PATH="$(infodir_SQ)"'
1993

1994
version.sp version.s version.o: GIT-USER-AGENT
1995
version.sp version.s version.o: EXTRA_CPPFLAGS = \
1996 1997
	'-DGIT_VERSION="$(GIT_VERSION)"' \
	'-DGIT_USER_AGENT=$(GIT_USER_AGENT_CQ_SQ)'
1998

J
Junio C Hamano 已提交
1999
$(BUILT_INS): git$X
2000 2001 2002 2003
	$(QUIET_BUILT_IN)$(RM) $@ && \
	ln git$X $@ 2>/dev/null || \
	ln -s git$X $@ 2>/dev/null || \
	cp git$X $@
J
Junio C Hamano 已提交
2004

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

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

2010
SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):$(GIT_VERSION):\
2011 2012
	$(localedir_SQ):$(NO_CURL):$(USE_GETTEXT_SCHEME):$(SANE_TOOL_PATH_SQ):\
	$(gitwebdir_SQ):$(PERL_PATH_SQ)
2013 2014 2015 2016
define cmd_munge_script
$(RM) $@ $@+ && \
sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
    -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \
2017
    -e 's|@@DIFF@@|$(DIFF_SQ)|' \
2018
    -e 's|@@LOCALEDIR@@|$(localedir_SQ)|g' \
2019
    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
2020
    -e 's/@@USE_GETTEXT_SCHEME@@/$(USE_GETTEXT_SCHEME)/g' \
2021
    -e $(BROKEN_PATH_FIX) \
2022 2023
    -e 's|@@GITWEBDIR@@|$(gitwebdir_SQ)|g' \
    -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
2024 2025 2026
    $@.sh >$@+
endef

2027 2028 2029 2030 2031 2032 2033 2034 2035
GIT-SCRIPT-DEFINES: FORCE
	@FLAGS='$(SCRIPT_DEFINES)'; \
	    if test x"$$FLAGS" != x"`cat $@ 2>/dev/null`" ; then \
		echo 1>&2 "    * new script parameters"; \
		echo "$$FLAGS" >$@; \
            fi


$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh GIT-SCRIPT-DEFINES
2036
	$(QUIET_GEN)$(cmd_munge_script) && \
2037
	chmod +x $@+ && \
2038
	mv $@+ $@
2039

2040
$(SCRIPT_LIB) : % : %.sh GIT-SCRIPT-DEFINES
2041 2042 2043
	$(QUIET_GEN)$(cmd_munge_script) && \
	mv $@+ $@

2044
ifndef NO_PERL
2045 2046
$(patsubst %.perl,%,$(SCRIPT_PERL)): perl/perl.mak

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

2050
$(patsubst %.perl,%,$(SCRIPT_PERL)): % : %.perl
2051
	$(QUIET_GEN)$(RM) $@ $@+ && \
2052
	INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C perl -s --no-print-directory instlibdir` && \
2053 2054 2055
	sed -e '1{' \
	    -e '	s|#!.*perl|#!$(PERL_PATH_SQ)|' \
	    -e '	h' \
2056
	    -e '	s=.*=use lib (split(/$(pathsep)/, $$ENV{GITPERLLIB} || "'"$$INSTLIBDIR"'"));=' \
2057 2058 2059
	    -e '	H' \
	    -e '	x' \
	    -e '}' \
2060
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
2061 2062
	    $@.perl >$@+ && \
	chmod +x $@+ && \
2063
	mv $@+ $@
2064

2065 2066 2067 2068 2069

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

2070 2071
git-instaweb: git-instaweb.sh gitweb GIT-SCRIPT-DEFINES
	$(QUIET_GEN)$(cmd_munge_script) && \
2072
	chmod +x $@+ && \
2073
	mv $@+ $@
2074 2075 2076 2077 2078 2079 2080 2081 2082
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
2083

2084
ifndef NO_PYTHON
2085
$(patsubst %.py,%,$(SCRIPT_PYTHON)): GIT-CFLAGS GIT-PREFIX
2086 2087 2088 2089 2090
$(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` && \
2091 2092
	sed -e '1s|#!.*python|#!$(PYTHON_PATH_SQ)|' \
	    -e 's|\(os\.getenv("GITPYTHONLIB"\)[^)]*)|\1,"@@INSTLIBDIR@@")|' \
2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106
	    -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

2107
configure: configure.ac
2108
	$(QUIET_GEN)$(RM) $@ $<+ && \
2109
	sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
2110 2111
	    $< > $<+ && \
	autoconf -o $@ $<+ && \
2112
	$(RM) $<+
2113

2114
# These can record GIT_VERSION
2115
version.o git.spec \
2116 2117
	$(patsubst %.perl,%,$(SCRIPT_PERL)) \
	: GIT-VERSION-FILE
2118

2119 2120 2121 2122 2123 2124
XDIFF_OBJS += xdiff/xdiffi.o
XDIFF_OBJS += xdiff/xprepare.o
XDIFF_OBJS += xdiff/xutils.o
XDIFF_OBJS += xdiff/xemit.o
XDIFF_OBJS += xdiff/xmerge.o
XDIFF_OBJS += xdiff/xpatience.o
2125
XDIFF_OBJS += xdiff/xhistogram.o
2126 2127

VCSSVN_OBJS += vcs-svn/line_buffer.o
2128
VCSSVN_OBJS += vcs-svn/sliding_window.o
2129 2130
VCSSVN_OBJS += vcs-svn/repo_tree.o
VCSSVN_OBJS += vcs-svn/fast_export.o
2131
VCSSVN_OBJS += vcs-svn/svndiff.o
2132 2133
VCSSVN_OBJS += vcs-svn/svndump.o

2134 2135 2136 2137 2138 2139 2140 2141
TEST_OBJS := $(patsubst test-%$X,test-%.o,$(TEST_PROGRAMS))
OBJECTS := $(LIB_OBJS) $(BUILTIN_OBJS) $(PROGRAM_OBJS) $(TEST_OBJS) \
	$(XDIFF_OBJS) \
	$(VCSSVN_OBJS) \
	git.o
ifndef NO_CURL
	OBJECTS += http.o http-walker.o remote-curl.o
endif
2142

2143
dep_files := $(foreach f,$(OBJECTS),$(dir $f).depend/$(notdir $f).d)
2144
dep_dirs := $(addsuffix .depend,$(sort $(dir $(OBJECTS))))
2145

2146
ifeq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
2147
$(dep_dirs):
2148
	@mkdir -p $@
2149 2150

missing_dep_dirs := $(filter-out $(wildcard $(dep_dirs)),$(dep_dirs))
2151
dep_file = $(dir $@).depend/$(notdir $@).d
2152 2153 2154 2155 2156 2157 2158
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

2159
ifneq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
2160
ifndef CHECK_HEADER_DEPENDENCIES
2161 2162
dep_dirs =
missing_dep_dirs =
2163 2164
dep_args =
endif
2165 2166
endif

2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180
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))

2181 2182
.SUFFIXES:

2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216
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
2217
$(C_OBJ): %.o: %.c GIT-CFLAGS $(missing_dep_dirs)
2218
	$(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
2219
$(ASM_OBJ): %.o: %.S GIT-CFLAGS $(missing_dep_dirs)
2220
	$(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
2221
endif
2222

2223
%.s: %.c GIT-CFLAGS FORCE
2224
	$(QUIET_CC)$(CC) -S $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
2225 2226

ifdef USE_COMPUTED_HEADER_DEPENDENCIES
2227 2228
# Take advantage of gcc's on-the-fly dependency generation
# See <http://gcc.gnu.org/gcc-3.0/features.html>.
2229 2230 2231
dep_files_present := $(wildcard $(dep_files))
ifneq ($(dep_files_present),)
include $(dep_files_present)
2232 2233 2234 2235 2236 2237 2238 2239
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.
J
Jonathan Nieder 已提交
2240

2241
$(OBJECTS): $(LIB_H)
2242
endif
2243

2244
exec_cmd.sp exec_cmd.s exec_cmd.o: GIT-PREFIX
2245
exec_cmd.sp exec_cmd.s exec_cmd.o: EXTRA_CPPFLAGS = \
2246 2247 2248
	'-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
	'-DBINDIR="$(bindir_relative_SQ)"' \
	'-DPREFIX="$(prefix_SQ)"'
2249

2250
builtin/init-db.sp builtin/init-db.s builtin/init-db.o: GIT-PREFIX
2251
builtin/init-db.sp builtin/init-db.s builtin/init-db.o: EXTRA_CPPFLAGS = \
2252
	-DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"'
2253

2254
config.sp config.s config.o: GIT-PREFIX
2255 2256
config.sp config.s config.o: EXTRA_CPPFLAGS = \
	-DETC_GITCONFIG='"$(ETC_GITCONFIG_SQ)"'
2257

2258
attr.sp attr.s attr.o: GIT-PREFIX
2259 2260
attr.sp attr.s attr.o: EXTRA_CPPFLAGS = \
	-DETC_GITATTRIBUTES='"$(ETC_GITATTRIBUTES_SQ)"'
2261

2262
gettext.sp gettext.s gettext.o: GIT-PREFIX
2263 2264 2265
gettext.sp gettext.s gettext.o: EXTRA_CPPFLAGS = \
	-DGIT_LOCALE_PATH='"$(localedir_SQ)"'

2266
ifdef NO_EXPAT
2267
http-walker.sp http-walker.s http-walker.o: EXTRA_CPPFLAGS = -DNO_EXPAT
2268 2269
endif

2270
ifdef NO_REGEX
2271 2272
compat/regex/regex.sp compat/regex/regex.o: EXTRA_CPPFLAGS = \
	-DGAWK -DNO_MBSUPPORT
2273 2274
endif

2275
ifdef USE_NED_ALLOCATOR
2276
compat/nedmalloc/nedmalloc.sp compat/nedmalloc/nedmalloc.o: EXTRA_CPPFLAGS = \
2277 2278 2279
	-DNDEBUG -DOVERRIDE_STRDUP -DREPLACE_SYSTEM_ALLOCATOR
endif

2280
git-%$X: %.o GIT-LDFLAGS $(GITLIBS)
2281
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
2282

2283
git-imap-send$X: imap-send.o GIT-LDFLAGS $(GITLIBS)
R
Robert Shearman 已提交
2284
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2285
		$(LIBS) $(OPENSSL_LINK) $(OPENSSL_LIBSSL) $(LIB_4_CRYPTO)
2286

2287
git-http-fetch$X: revision.o http.o http-walker.o http-fetch.o GIT-LDFLAGS $(GITLIBS)
L
Linus Torvalds 已提交
2288
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2289
		$(LIBS) $(CURL_LIBCURL)
2290
git-http-push$X: revision.o http.o http-push.o GIT-LDFLAGS $(GITLIBS)
2291
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2292 2293
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

2294 2295 2296 2297 2298 2299
$(REMOTE_CURL_ALIASES): $(REMOTE_CURL_PRIMARY)
	$(QUIET_LNCP)$(RM) $@ && \
	ln $< $@ 2>/dev/null || \
	ln -s $< $@ 2>/dev/null || \
	cp $< $@

2300
$(REMOTE_CURL_PRIMARY): remote-curl.o http.o http-walker.o GIT-LDFLAGS $(GITLIBS)
2301 2302 2303
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

P
Petr Baudis 已提交
2304
$(LIB_FILE): $(LIB_OBJS)
2305
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)
P
Petr Baudis 已提交
2306

2307
$(XDIFF_LIB): $(XDIFF_OBJS)
2308
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(XDIFF_OBJS)
2309

J
Jonathan Nieder 已提交
2310 2311
$(VCSSVN_LIB): $(VCSSVN_OBJS)
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(VCSSVN_OBJS)
2312

2313 2314
export DEFAULT_EDITOR DEFAULT_PAGER

P
Petr Baudis 已提交
2315 2316 2317
doc:
	$(MAKE) -C Documentation all

2318 2319 2320 2321 2322 2323
man:
	$(MAKE) -C Documentation man

html:
	$(MAKE) -C Documentation html

2324 2325 2326
info:
	$(MAKE) -C Documentation info

2327 2328 2329
pdf:
	$(MAKE) -C Documentation pdf

2330 2331 2332 2333 2334
XGETTEXT_FLAGS = \
	--force-po \
	--add-comments \
	--msgid-bugs-address="Git Mailing List <git@vger.kernel.org>" \
	--from-code=UTF-8
2335 2336
XGETTEXT_FLAGS_C = $(XGETTEXT_FLAGS) --language=C \
	--keyword=_ --keyword=N_ --keyword="Q_:1,2"
2337
XGETTEXT_FLAGS_SH = $(XGETTEXT_FLAGS) --language=Shell
2338
XGETTEXT_FLAGS_PERL = $(XGETTEXT_FLAGS) --keyword=__ --language=Perl
2339
LOCALIZED_C := $(C_OBJ:o=c) $(LIB_H) $(GENERATED_H)
2340
LOCALIZED_SH := $(SCRIPT_SH)
2341 2342 2343 2344 2345 2346 2347
LOCALIZED_PERL := $(SCRIPT_PERL)

ifdef XGETTEXT_INCLUDE_TESTS
LOCALIZED_C += t/t0200/test.c
LOCALIZED_SH += t/t0200/test.sh
LOCALIZED_PERL += t/t0200/test.perl
endif
2348 2349

po/git.pot: $(LOCALIZED_C)
2350 2351 2352
	$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ $(XGETTEXT_FLAGS_C) $(LOCALIZED_C)
	$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_SH) \
		$(LOCALIZED_SH)
2353 2354
	$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_PERL) \
		$(LOCALIZED_PERL)
2355 2356 2357 2358
	mv $@+ $@

pot: po/git.pot

2359 2360 2361 2362 2363 2364 2365 2366 2367 2368
POFILES := $(wildcard po/*.po)
MOFILES := $(patsubst po/%.po,po/build/locale/%/LC_MESSAGES/git.mo,$(POFILES))

ifndef NO_GETTEXT
all:: $(MOFILES)
endif

po/build/locale/%/LC_MESSAGES/git.mo: po/%.po
	$(QUIET_MSGFMT)mkdir -p $(dir $@) && $(MSGFMT) -o $@ $<

2369 2370 2371 2372
FIND_SOURCE_FILES = ( git ls-files '*.[hcS]' 2>/dev/null || \
			$(FIND) . \( -name .git -type d -prune \) \
				-o \( -name '*.[hcS]' -type f -print \) )

2373 2374
$(ETAGS_TARGET): FORCE
	$(RM) $(ETAGS_TARGET)
2375
	$(FIND_SOURCE_FILES) | xargs etags -a -o $(ETAGS_TARGET)
2376

2377
tags: FORCE
2378
	$(RM) tags
2379
	$(FIND_SOURCE_FILES) | xargs ctags -a
P
Petr Baudis 已提交
2380

K
Kristof Provost 已提交
2381 2382
cscope:
	$(RM) cscope*
2383
	$(FIND_SOURCE_FILES) | xargs cscope -b
K
Kristof Provost 已提交
2384

2385
### Detect prefix changes
2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396
TRACK_PREFIX = $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ):\
		$(localedir_SQ)

GIT-PREFIX: FORCE
	@FLAGS='$(TRACK_PREFIX)'; \
	if test x"$$FLAGS" != x"`cat GIT-PREFIX 2>/dev/null`" ; then \
		echo 1>&2 "    * new prefix flags"; \
		echo "$$FLAGS" >GIT-PREFIX; \
	fi

TRACK_CFLAGS = $(CC):$(subst ','\'',$(ALL_CFLAGS)):$(USE_GETTEXT_SCHEME)
2397

2398
GIT-CFLAGS: FORCE
2399 2400
	@FLAGS='$(TRACK_CFLAGS)'; \
	    if test x"$$FLAGS" != x"`cat GIT-CFLAGS 2>/dev/null`" ; then \
2401
		echo 1>&2 "    * new build flags"; \
2402 2403 2404
		echo "$$FLAGS" >GIT-CFLAGS; \
            fi

2405 2406 2407 2408 2409 2410 2411 2412 2413
TRACK_LDFLAGS = $(subst ','\'',$(ALL_LDFLAGS))

GIT-LDFLAGS: FORCE
	@FLAGS='$(TRACK_LDFLAGS)'; \
	    if test x"$$FLAGS" != x"`cat GIT-LDFLAGS 2>/dev/null`" ; then \
		echo 1>&2 "    * new link flags"; \
		echo "$$FLAGS" >GIT-LDFLAGS; \
            fi

J
Junio C Hamano 已提交
2414 2415 2416
# 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".
2417
GIT-BUILD-OPTIONS: FORCE
J
Junio C Hamano 已提交
2418
	@echo SHELL_PATH=\''$(subst ','\'',$(SHELL_PATH_SQ))'\' >$@
2419
	@echo PERL_PATH=\''$(subst ','\'',$(PERL_PATH_SQ))'\' >>$@
2420
	@echo DIFF=\''$(subst ','\'',$(subst ','\'',$(DIFF)))'\' >>$@
2421
	@echo PYTHON_PATH=\''$(subst ','\'',$(PYTHON_PATH_SQ))'\' >>$@
J
Junio C Hamano 已提交
2422
	@echo TAR=\''$(subst ','\'',$(subst ','\'',$(TAR)))'\' >>$@
J
Jeff King 已提交
2423
	@echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@
2424
	@echo USE_LIBPCRE=\''$(subst ','\'',$(subst ','\'',$(USE_LIBPCRE)))'\' >>$@
2425
	@echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@
J
Jeff King 已提交
2426
	@echo NO_PYTHON=\''$(subst ','\'',$(subst ','\'',$(NO_PYTHON)))'\' >>$@
2427 2428 2429 2430
	@echo NO_UNIX_SOCKETS=\''$(subst ','\'',$(subst ','\'',$(NO_UNIX_SOCKETS)))'\' >>$@
ifdef GIT_TEST_OPTS
	@echo GIT_TEST_OPTS=\''$(subst ','\'',$(subst ','\'',$(GIT_TEST_OPTS)))'\' >>$@
endif
2431 2432 2433 2434 2435 2436
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
2437
	@echo NO_GETTEXT=\''$(subst ','\'',$(subst ','\'',$(NO_GETTEXT)))'\' >>$@
2438
	@echo GETTEXT_POISON=\''$(subst ','\'',$(subst ','\'',$(GETTEXT_POISON)))'\' >>$@
2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450
ifdef GIT_PERF_REPEAT_COUNT
	@echo GIT_PERF_REPEAT_COUNT=\''$(subst ','\'',$(subst ','\'',$(GIT_PERF_REPEAT_COUNT)))'\' >>$@
endif
ifdef GIT_PERF_REPO
	@echo GIT_PERF_REPO=\''$(subst ','\'',$(subst ','\'',$(GIT_PERF_REPO)))'\' >>$@
endif
ifdef GIT_PERF_LARGE_REPO
	@echo GIT_PERF_LARGE_REPO=\''$(subst ','\'',$(subst ','\'',$(GIT_PERF_LARGE_REPO)))'\' >>$@
endif
ifdef GIT_PERF_MAKE_OPTS
	@echo GIT_PERF_MAKE_OPTS=\''$(subst ','\'',$(subst ','\'',$(GIT_PERF_MAKE_OPTS)))'\' >>$@
endif
2451

2452 2453 2454 2455
### Detect Tck/Tk interpreter path changes
ifndef NO_TCLTK
TRACK_VARS = $(subst ','\'',-DTCLTK_PATH='$(TCLTK_PATH_SQ)')

2456
GIT-GUI-VARS: FORCE
2457 2458 2459 2460 2461 2462 2463
	@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

2464 2465 2466 2467 2468 2469 2470 2471 2472 2473
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 $@
2474

2475 2476 2477 2478
# GNU make supports exporting all variables by "export" without parameters.
# However, the environment gets quite big, and some programs have problems
# with that.

2479
export NO_SVN_TESTS
2480

2481 2482
### Testing rules

2483
test: all
P
Petr Baudis 已提交
2484 2485
	$(MAKE) -C t/ all

2486 2487 2488 2489 2490
perf: all
	$(MAKE) -C t/perf/ all

.PHONY: test perf

R
René Scharfe 已提交
2491 2492
test-ctype$X: ctype.o

2493
test-date$X: date.o ctype.o
P
Petr Baudis 已提交
2494

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

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

2499
test-parse-options$X: parse-options.o parse-options-cb.o
2500

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

2503
.PRECIOUS: $(TEST_OBJS)
2504

2505
test-%$X: test-%.o GIT-LDFLAGS $(GITLIBS)
D
David Barr 已提交
2506
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(filter %.a,$^) $(LIBS)
2507

2508 2509 2510
check-sha1:: test-sha1$X
	./test-sha1.sh

2511 2512 2513 2514 2515 2516 2517 2518 2519
SP_OBJ = $(patsubst %.o,%.sp,$(C_OBJ))

$(SP_OBJ): %.sp: %.c GIT-CFLAGS FORCE
	$(QUIET_SP)cgcc -no-compile $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) \
		$(SPARSE_FLAGS) $<

.PHONY: sparse $(SP_OBJ)
sparse: $(SP_OBJ)

2520
check: common-cmds.h
2521
	@if sparse; \
2522
	then \
2523 2524
		echo 2>&1 "Use 'make sparse' instead"; \
		$(MAKE) --no-print-directory sparse; \
2525 2526 2527 2528
	else \
		echo 2>&1 "Did you mean 'make test'?"; \
		exit 1; \
	fi
P
Petr Baudis 已提交
2529

2530
remove-dashes:
2531
	./fixup-builtins $(BUILT_INS) $(PROGRAMS) $(SCRIPTS)
P
Petr Baudis 已提交
2532 2533 2534

### Installation rules

2535
ifneq ($(filter /%,$(firstword $(template_dir))),)
2536
template_instdir = $(template_dir)
2537 2538
else
template_instdir = $(prefix)/$(template_dir)
2539 2540 2541
endif
export template_instdir

2542
ifneq ($(filter /%,$(firstword $(gitexecdir))),)
2543
gitexec_instdir = $(gitexecdir)
2544 2545
else
gitexec_instdir = $(prefix)/$(gitexecdir)
2546 2547 2548 2549
endif
gitexec_instdir_SQ = $(subst ','\'',$(gitexec_instdir))
export gitexec_instdir

2550 2551 2552 2553 2554 2555 2556
ifneq ($(filter /%,$(firstword $(mergetoolsdir))),)
mergetools_instdir = $(mergetoolsdir)
else
mergetools_instdir = $(prefix)/$(mergetoolsdir)
endif
mergetools_instdir_SQ = $(subst ','\'',$(mergetools_instdir))

2557 2558
install_bindir_programs := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X)) $(BINDIR_PROGRAMS_NO_X)

2559
install: all
2560
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
2561 2562
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
	$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
2563
	$(INSTALL) -m 644 $(SCRIPT_LIB) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
2564
	$(INSTALL) $(install_bindir_programs) '$(DESTDIR_SQ)$(bindir_SQ)'
2565
	$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
2566
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(mergetools_instdir_SQ)'
2567
	$(INSTALL) -m 644 mergetools/* '$(DESTDIR_SQ)$(mergetools_instdir_SQ)'
2568 2569 2570 2571 2572
ifndef NO_GETTEXT
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(localedir_SQ)'
	(cd po/build/locale && $(TAR) cf - .) | \
	(cd '$(DESTDIR_SQ)$(localedir_SQ)' && umask 022 && $(TAR) xof -)
endif
2573
ifndef NO_PERL
2574
	$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
J
Junio C Hamano 已提交
2575
	$(MAKE) -C gitweb install
2576
endif
2577 2578 2579
ifndef NO_PYTHON
	$(MAKE) -C git_remote_helpers prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
endif
E
Eygene Ryabinkin 已提交
2580
ifndef NO_TCLTK
J
Junio C Hamano 已提交
2581
	$(MAKE) -C gitk-git install
2582
	$(MAKE) -C git-gui gitexecdir='$(gitexec_instdir_SQ)' install
E
Eygene Ryabinkin 已提交
2583
endif
2584
ifneq (,$X)
2585
	$(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';)
2586
endif
2587

2588
	bindir=$$(cd '$(DESTDIR_SQ)$(bindir_SQ)' && pwd) && \
2589
	execdir=$$(cd '$(DESTDIR_SQ)$(gitexec_instdir_SQ)' && pwd) && \
2590
	{ test "$$bindir/" = "$$execdir/" || \
2591 2592
	  for p in git$X $(filter $(install_bindir_programs),$(ALL_PROGRAMS)); do \
		$(RM) "$$execdir/$$p" && \
J
Junio C Hamano 已提交
2593
		test -z "$(NO_INSTALL_HARDLINKS)$(NO_CROSS_DIRECTORY_HARDLINKS)" && \
2594 2595 2596 2597
		ln "$$bindir/$$p" "$$execdir/$$p" 2>/dev/null || \
		cp "$$bindir/$$p" "$$execdir/$$p" || exit; \
	  done; \
	} && \
2598 2599
	for p in $(filter $(install_bindir_programs),$(BUILT_INS)); do \
		$(RM) "$$bindir/$$p" && \
J
Junio C Hamano 已提交
2600
		test -z "$(NO_INSTALL_HARDLINKS)" && \
2601 2602 2603 2604
		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 && \
2605
	for p in $(BUILT_INS); do \
2606
		$(RM) "$$execdir/$$p" && \
J
Junio C Hamano 已提交
2607
		test -z "$(NO_INSTALL_HARDLINKS)" && \
J
Jeff King 已提交
2608 2609 2610
		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; \
2611
	done && \
2612 2613
	remote_curl_aliases="$(REMOTE_CURL_ALIASES)" && \
	for p in $$remote_curl_aliases; do \
2614
		$(RM) "$$execdir/$$p" && \
J
Junio C Hamano 已提交
2615
		test -z "$(NO_INSTALL_HARDLINKS)" && \
2616 2617 2618
		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; \
2619
	done && \
2620
	./check_bindir "z$$bindir" "z$$execdir" "$$bindir/git-add$X"
P
Petr Baudis 已提交
2621

2622 2623 2624
install-gitweb:
	$(MAKE) -C gitweb install

P
Petr Baudis 已提交
2625 2626 2627
install-doc:
	$(MAKE) -C Documentation install

2628 2629 2630
install-man:
	$(MAKE) -C Documentation install-man

2631 2632 2633
install-html:
	$(MAKE) -C Documentation install-html

2634 2635 2636
install-info:
	$(MAKE) -C Documentation install-info

2637 2638 2639
install-pdf:
	$(MAKE) -C Documentation install-pdf

2640 2641
quick-install-doc:
	$(MAKE) -C Documentation quick-install
P
Petr Baudis 已提交
2642

2643 2644 2645
quick-install-man:
	$(MAKE) -C Documentation quick-install-man

2646 2647 2648
quick-install-html:
	$(MAKE) -C Documentation quick-install-html

P
Petr Baudis 已提交
2649 2650 2651 2652


### Maintainer's dist rules

2653
git.spec: git.spec.in
2654 2655
	sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@+
	mv $@+ $@
2656

J
Junio C Hamano 已提交
2657
GIT_TARNAME=git-$(GIT_VERSION)
2658
dist: git.spec git-archive$(X) configure
2659 2660
	./git-archive --format=tar \
		--prefix=$(GIT_TARNAME)/ HEAD^{tree} > $(GIT_TARNAME).tar
2661
	@mkdir -p $(GIT_TARNAME)
2662
	@cp git.spec configure $(GIT_TARNAME)
2663
	@echo $(GIT_VERSION) > $(GIT_TARNAME)/version
2664
	@$(MAKE) -C git-gui TARDIR=../$(GIT_TARNAME)/git-gui dist-version
2665
	$(TAR) rf $(GIT_TARNAME).tar \
2666
		$(GIT_TARNAME)/git.spec \
2667
		$(GIT_TARNAME)/configure \
2668
		$(GIT_TARNAME)/version \
2669
		$(GIT_TARNAME)/git-gui/version
2670
	@$(RM) -r $(GIT_TARNAME)
2671
	gzip -f -9 $(GIT_TARNAME).tar
2672 2673

rpm: dist
2674 2675 2676 2677
	$(RPMBUILD) \
		--define "_source_filedigest_algorithm md5" \
		--define "_binary_filedigest_algorithm md5" \
		-ta $(GIT_TARNAME).tar.gz
2678

2679 2680 2681
htmldocs = git-htmldocs-$(GIT_VERSION)
manpages = git-manpages-$(GIT_VERSION)
dist-doc:
2682
	$(RM) -r .doc-tmp-dir
2683 2684 2685 2686 2687
	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
	:
2688
	$(RM) -r .doc-tmp-dir
2689
	mkdir -p .doc-tmp-dir/man1 .doc-tmp-dir/man5 .doc-tmp-dir/man7
2690
	$(MAKE) -C Documentation DESTDIR=./ \
2691
		man1dir=../.doc-tmp-dir/man1 \
2692
		man5dir=../.doc-tmp-dir/man5 \
2693
		man7dir=../.doc-tmp-dir/man7 \
2694 2695 2696
		install
	cd .doc-tmp-dir && $(TAR) cf ../$(manpages).tar .
	gzip -n -9 -f $(manpages).tar
2697
	$(RM) -r .doc-tmp-dir
2698

P
Petr Baudis 已提交
2699
### Cleaning rules
2700

2701 2702 2703
distclean: clean
	$(RM) configure

2704 2705 2706 2707 2708
profile-clean:
	$(RM) $(addsuffix *.gcda,$(addprefix $(PROFILE_DIR)/, $(object_dirs)))
	$(RM) $(addsuffix *.gcno,$(addprefix $(PROFILE_DIR)/, $(object_dirs)))

clean: profile-clean
2709 2710
	$(RM) *.o block-sha1/*.o ppc/*.o compat/*.o compat/*/*.o xdiff/*.o vcs-svn/*.o \
		builtin/*.o $(LIB_FILE) $(XDIFF_LIB) $(VCSSVN_LIB)
2711
	$(RM) $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git$X
2712
	$(RM) $(TEST_PROGRAMS)
2713
	$(RM) -r bin-wrappers
2714
	$(RM) -r $(dep_dirs)
2715
	$(RM) -r po/build/
2716
	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h $(ETAGS_TARGET) tags cscope*
2717
	$(RM) -r autom4te.cache
2718
	$(RM) config.log config.mak.autogen config.mak.append config.status config.cache
2719 2720 2721
	$(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
2722
	$(MAKE) -C Documentation/ clean
2723
ifndef NO_PERL
2724
	$(MAKE) -C gitweb clean
2725
	$(MAKE) -C perl clean
2726 2727 2728
endif
ifndef NO_PYTHON
	$(MAKE) -C git_remote_helpers clean
2729
endif
P
Petr Baudis 已提交
2730
	$(MAKE) -C templates/ clean
2731
	$(MAKE) -C t/ clean
E
Eygene Ryabinkin 已提交
2732
ifndef NO_TCLTK
J
Junio C Hamano 已提交
2733
	$(MAKE) -C gitk-git clean
E
Eygene Ryabinkin 已提交
2734 2735
	$(MAKE) -C git-gui clean
endif
2736
	$(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-LDFLAGS GIT-GUI-VARS GIT-BUILD-OPTIONS
2737
	$(RM) GIT-USER-AGENT GIT-PREFIX GIT-SCRIPT-DEFINES
2738

2739
.PHONY: all install profile-clean clean strip
2740
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
2741
.PHONY: FORCE cscope
J
Junio C Hamano 已提交
2742

J
Junio C Hamano 已提交
2743 2744 2745
### Check documentation
#
check-docs::
2746
	@(for v in $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git gitk; \
J
Junio C Hamano 已提交
2747 2748 2749
	do \
		case "$$v" in \
		git-merge-octopus | git-merge-ours | git-merge-recursive | \
M
Miklos Vajna 已提交
2750
		git-merge-resolve | git-merge-subtree | \
2751
		git-fsck-objects | git-init-db | \
2752
		git-remote-* | git-stage | \
2753
		git-?*--?* ) continue ;; \
J
Junio C Hamano 已提交
2754 2755 2756
		esac ; \
		test -f "Documentation/$$v.txt" || \
		echo "no doc: $$v"; \
J
Junio C Hamano 已提交
2757
		sed -e '/^#/d' command-list.txt | \
2758
		grep -q "^$$v[ 	]" || \
J
Junio C Hamano 已提交
2759 2760 2761 2762
		case "$$v" in \
		git) ;; \
		*) echo "no link: $$v";; \
		esac ; \
2763 2764
	done; \
	( \
J
Junio C Hamano 已提交
2765
		sed -e '/^#/d' \
2766
		    -e 's/[ 	].*//' \
J
Junio C Hamano 已提交
2767
		    -e 's/^/listed /' command-list.txt; \
2768 2769 2770 2771 2772 2773 2774 2775
		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 | \
2776
		*,git-help | \
2777 2778 2779
		documented,gitattributes | \
		documented,gitignore | \
		documented,gitmodules | \
2780
		documented,gitcli | \
2781
		documented,git-tools | \
2782 2783 2784 2785 2786 2787
		documented,gitcore-tutorial | \
		documented,gitcvs-migration | \
		documented,gitdiffcore | \
		documented,gitglossary | \
		documented,githooks | \
		documented,gitrepository-layout | \
2788
		documented,gitrevisions | \
2789 2790
		documented,gittutorial | \
		documented,gittutorial-2 | \
2791
		documented,git-bisect-lk2009 | \
2792
		documented,git-remote-helpers | \
2793
		documented,gitworkflows | \
2794 2795
		sentinel,not,matching,is,ok ) continue ;; \
		esac; \
2796
		case " $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git gitk " in \
2797 2798 2799 2800
		*" $$cmd "*)	;; \
		*) echo "removed but $$how: $$cmd" ;; \
		esac; \
	done ) | sort
2801 2802 2803 2804 2805

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

2807 2808 2809 2810 2811 2812 2813 2814
### Test suite coverage testing
#
.PHONY: coverage coverage-clean coverage-build coverage-report

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

2815
object_dirs := $(sort $(dir $(OBJECTS)))
2816
coverage-clean:
2817 2818 2819 2820
	$(RM) $(addsuffix *.gcov,$(object_dirs))
	$(RM) $(addsuffix *.gcda,$(object_dirs))
	$(RM) $(addsuffix *.gcno,$(object_dirs))
	$(RM) coverage-untested-functions
2821
	$(RM) -r cover_db/
2822
	$(RM) -r cover_db_html/
2823 2824 2825

COVERAGE_CFLAGS = $(CFLAGS) -O0 -ftest-coverage -fprofile-arcs
COVERAGE_LDFLAGS = $(CFLAGS)  -O0 -lgcov
2826
GCOVFLAGS = --preserve-paths --branch-probabilities --all-blocks
2827 2828 2829 2830 2831 2832 2833

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

coverage-report:
2834
	$(QUIET_GCOV)for dir in $(object_dirs); do \
2835
		$(GCOV) $(GCOVFLAGS) --object-directory=$$dir $$dir*.c || exit; \
2836
	done
2837 2838

coverage-untested-functions: coverage-report
2839 2840
	grep '^function.*called 0 ' *.c.gcov \
		| sed -e 's/\([^:]*\)\.gcov: *function \([^ ]*\) called.*/\1: \2/' \
2841
		> coverage-untested-functions
2842 2843 2844

cover_db: coverage-report
	gcov2perl -db cover_db *.gcov
2845 2846 2847

cover_db_html: cover_db
	cover -report html -outputdir cover_db_html cover_db
A
Andi Kleen 已提交
2848