Makefile 80.1 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 397 398 399
XDIFF_H =
XDIFF_OBJS =
VCSSVN_H =
VCSSVN_OBJS =
VCSSVN_TEST_OBJS =
400
MISC_H =
401
EXTRA_CPPFLAGS =
402 403
LIB_H =
LIB_OBJS =
404
PROGRAM_OBJS =
405 406
PROGRAMS =
SCRIPT_PERL =
407
SCRIPT_PYTHON =
408
SCRIPT_SH =
409
SCRIPT_LIB =
410
TEST_PROGRAMS_NEED_X =
411

J
Jonathan Nieder 已提交
412 413 414 415 416 417
# 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

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

436 437
SCRIPT_LIB += git-mergetool--lib
SCRIPT_LIB += git-parse-remote
438 439 440
SCRIPT_LIB += git-rebase--am
SCRIPT_LIB += git-rebase--interactive
SCRIPT_LIB += git-rebase--merge
441
SCRIPT_LIB += git-sh-setup
442
SCRIPT_LIB += git-sh-i18n
443

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

454
SCRIPT_PYTHON += git-remote-testgit.py
P
Pete Wyckoff 已提交
455
SCRIPT_PYTHON += git-p4.py
456

457 458
SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
	  $(patsubst %.perl,%,$(SCRIPT_PERL)) \
459
	  $(patsubst %.py,%,$(SCRIPT_PYTHON)) \
460
	  git-instaweb
461

462 463
ETAGS_TARGET = TAGS

464 465
# Empty...
EXTRA_PROGRAMS =
466

467 468
# ... and all the rest that could be moved out of bindir to gitexecdir
PROGRAMS += $(EXTRA_PROGRAMS)
469

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

480 481 482
# Binary suffix, set to .exe for Windows builds
X =

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

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

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

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

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

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

E
Eygene Ryabinkin 已提交
531
# what 'all' will build but not install in gitexecdir
532
OTHER_PROGRAMS = git$X
E
Eygene Ryabinkin 已提交
533

534 535 536 537 538 539 540 541 542
# 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

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

L
Luben Tuikov 已提交
554
export PERL_PATH
555
export PYTHON_PATH
L
Luben Tuikov 已提交
556

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

561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576
XDIFF_H += xdiff/xinclude.h
XDIFF_H += xdiff/xmacros.h
XDIFF_H += xdiff/xdiff.h
XDIFF_H += xdiff/xtypes.h
XDIFF_H += xdiff/xutils.h
XDIFF_H += xdiff/xprepare.h
XDIFF_H += xdiff/xdiffi.h
XDIFF_H += xdiff/xemit.h

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

577
MISC_H += bisect.h
578 579
MISC_H += branch.h
MISC_H += bundle.h
580
MISC_H += common-cmds.h
581
MISC_H += fetch-pack.h
582
MISC_H += reachable.h
583 584 585
MISC_H += send-pack.h
MISC_H += shortlog.h
MISC_H += tar.h
586
MISC_H += thread-utils.h
587 588
MISC_H += url.h
MISC_H += walker.h
589
MISC_H += wt-status.h
590

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

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

814 815 816 817 818 819 820 821 822 823 824 825 826 827 828
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
829
BUILTIN_OBJS += builtin/column.o
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 866 867
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 已提交
868
BUILTIN_OBJS += builtin/notes.o
869 870 871 872 873 874 875 876 877 878 879
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 已提交
880
BUILTIN_OBJS += builtin/remote-ext.o
I
Ilari Liusvaara 已提交
881
BUILTIN_OBJS += builtin/remote-fd.o
882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906
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
907

908
GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
909
EXTLIBS =
910

J
Jeff King 已提交
911 912
GIT_USER_AGENT = git/$(GIT_VERSION)

913 914 915
#
# Platform specific tweaks
#
916 917 918 919 920

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

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

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

1360
-include config.mak.autogen
1361
-include config.mak
1362

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

1371
ifdef CHECK_HEADER_DEPENDENCIES
1372
COMPUTE_HEADER_DEPENDENCIES = no
1373
USE_COMPUTED_HEADER_DEPENDENCIES =
1374 1375
endif

1376
ifndef COMPUTE_HEADER_DEPENDENCIES
1377 1378 1379 1380
COMPUTE_HEADER_DEPENDENCIES = auto
endif

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

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

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

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

1412 1413 1414 1415
ifneq (,$(SOCKLEN_T))
	BASIC_CFLAGS += -Dsocklen_t=$(SOCKLEN_T)
endif

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

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

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

M
Michał Kiedrowicz 已提交
1447 1448 1449 1450 1451 1452 1453 1454 1455
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 已提交
1456 1457
ifdef NO_CURL
	BASIC_CFLAGS += -DNO_CURL
1458 1459 1460
	REMOTE_CURL_PRIMARY =
	REMOTE_CURL_ALIASES =
	REMOTE_CURL_NAMES =
D
Daniel Barkalow 已提交
1461
else
1462
	ifdef CURLDIR
1463
		# Try "-Wl,-rpath=$(CURLDIR)/$(lib)" in such a case.
1464
		BASIC_CFLAGS += -I$(CURLDIR)/include
1465
		CURL_LIBCURL = -L$(CURLDIR)/$(lib) $(CC_LD_DYNPATH)$(CURLDIR)/$(lib) -lcurl
1466 1467 1468
	else
		CURL_LIBCURL = -lcurl
	endif
1469 1470 1471 1472 1473 1474 1475 1476 1477 1478
	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

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

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

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

1703
ifdef NO_ICONV
1704
	BASIC_CFLAGS += -DNO_ICONV
1705 1706
endif

1707 1708 1709 1710
ifdef OLD_ICONV
	BASIC_CFLAGS += -DOLD_ICONV
endif

1711 1712 1713 1714
ifdef NO_DEFLATE_BOUND
	BASIC_CFLAGS += -DNO_DEFLATE_BOUND
endif

1715 1716 1717 1718
ifdef NO_POSIX_GOODIES
	BASIC_CFLAGS += -DNO_POSIX_GOODIES
endif

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

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

1760 1761 1762 1763
ifdef HAVE_PATHS_H
	BASIC_CFLAGS += -DHAVE_PATHS_H
endif

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

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

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

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

1789 1790 1791 1792
ifdef GIT_TEST_CMP_USE_COPIED_CONTEXT
	export GIT_TEST_CMP_USE_COPIED_CONTEXT
endif

1793 1794 1795 1796
ifndef NO_MSGFMT_EXTENDED_OPTIONS
	MSGFMT += --check --statistics
endif

1797 1798 1799 1800
ifneq (,$(XDL_FAST_HASH))
	BASIC_CFLAGS += -DXDL_FAST_HASH
endif

1801 1802 1803 1804
ifeq ($(TCLTK_PATH),)
NO_TCLTK=NoThanks
endif

1805 1806 1807 1808
ifeq ($(PERL_PATH),)
NO_PERL=NoThanks
endif

1809 1810 1811 1812
ifeq ($(PYTHON_PATH),)
NO_PYTHON=NoThanks
endif

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

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

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

J
Jeff King 已提交
1843 1844
ifdef ASCIIDOC7
	export ASCIIDOC7
1845 1846
endif

J
Junio C Hamano 已提交
1847 1848 1849 1850
ifdef NO_INSTALL_HARDLINKS
	export NO_INSTALL_HARDLINKS
endif

1851 1852 1853 1854 1855 1856 1857
### profile feedback build
#

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

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

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

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

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

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

1895 1896
LIBS = $(GITLIBS) $(EXTLIBS)

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

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

1910 1911 1912 1913 1914 1915 1916
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

1917 1918 1919 1920 1921 1922 1923
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 已提交
1924 1925 1926 1927 1928
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))
BASIC_CFLAGS += -DGIT_USER_AGENT='$(GIT_USER_AGENT_CQ_SQ)'

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

1932
export DIFF TAR INSTALL DESTDIR SHELL_PATH
1933 1934


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

1937 1938
SHELL = $(SHELL_PATH)

1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949
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
1950
ifneq (,$X)
1951
	$(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';)
1952
endif
1953

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

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

1975
git.o: common-cmds.h
1976
git.sp git.s git.o: EXTRA_CPPFLAGS = \
1977 1978 1979
	'-DGIT_HTML_PATH="$(htmldir_SQ)"' \
	'-DGIT_MAN_PATH="$(mandir_SQ)"' \
	'-DGIT_INFO_PATH="$(infodir_SQ)"'
1980

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

1985
help.sp help.o: common-cmds.h
1986

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

1993 1994 1995
version.sp version.s version.o: EXTRA_CPPFLAGS = \
	'-DGIT_VERSION="$(GIT_VERSION)"'

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

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

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

2007 2008 2009 2010
define cmd_munge_script
$(RM) $@ $@+ && \
sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
    -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \
2011
    -e 's|@@DIFF@@|$(DIFF_SQ)|' \
2012
    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
J
Jeff King 已提交
2013
    -e 's|@@GIT_USER_AGENT@@|$(GIT_USER_AGENT_SQ)|g' \
2014
    -e 's|@@LOCALEDIR@@|$(localedir_SQ)|g' \
2015
    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
2016
    -e 's/@@USE_GETTEXT_SCHEME@@/$(USE_GETTEXT_SCHEME)/g' \
2017 2018 2019 2020
    -e $(BROKEN_PATH_FIX) \
    $@.sh >$@+
endef

2021
$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
2022
	$(QUIET_GEN)$(cmd_munge_script) && \
2023
	chmod +x $@+ && \
2024
	mv $@+ $@
2025

2026 2027 2028 2029
$(SCRIPT_LIB) : % : %.sh
	$(QUIET_GEN)$(cmd_munge_script) && \
	mv $@+ $@

2030
ifndef NO_PERL
2031 2032
$(patsubst %.perl,%,$(SCRIPT_PERL)): perl/perl.mak

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

2036
$(patsubst %.perl,%,$(SCRIPT_PERL)): % : %.perl
2037
	$(QUIET_GEN)$(RM) $@ $@+ && \
2038
	INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C perl -s --no-print-directory instlibdir` && \
2039 2040 2041
	sed -e '1{' \
	    -e '	s|#!.*perl|#!$(PERL_PATH_SQ)|' \
	    -e '	h' \
2042
	    -e '	s=.*=use lib (split(/$(pathsep)/, $$ENV{GITPERLLIB} || "'"$$INSTLIBDIR"'"));=' \
2043 2044 2045
	    -e '	H' \
	    -e '	x' \
	    -e '}' \
2046
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
2047 2048
	    $@.perl >$@+ && \
	chmod +x $@+ && \
2049
	mv $@+ $@
2050

2051 2052 2053 2054 2055

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

2056
git-instaweb: git-instaweb.sh gitweb
2057
	$(QUIET_GEN)$(RM) $@ $@+ && \
2058 2059 2060
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
2061
	    -e 's|@@GITWEBDIR@@|$(gitwebdir_SQ)|g' \
2062
	    -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
2063 2064
	    $@.sh > $@+ && \
	chmod +x $@+ && \
2065
	mv $@+ $@
2066 2067 2068 2069 2070 2071 2072 2073 2074
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
2075

2076 2077 2078 2079 2080 2081 2082
ifndef NO_PYTHON
$(patsubst %.py,%,$(SCRIPT_PYTHON)): GIT-CFLAGS
$(patsubst %.py,%,$(SCRIPT_PYTHON)): % : %.py
	$(QUIET_GEN)$(RM) $@ $@+ && \
	INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C git_remote_helpers -s \
		--no-print-directory prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' \
		instlibdir` && \
2083 2084
	sed -e '1s|#!.*python|#!$(PYTHON_PATH_SQ)|' \
	    -e 's|\(os\.getenv("GITPYTHONLIB"\)[^)]*)|\1,"@@INSTLIBDIR@@")|' \
2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098
	    -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

2099
configure: configure.ac
2100
	$(QUIET_GEN)$(RM) $@ $<+ && \
2101
	sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
2102 2103
	    $< > $<+ && \
	autoconf -o $@ $<+ && \
2104
	$(RM) $<+
2105

2106
# These can record GIT_VERSION
2107
version.o git.spec http.o \
2108 2109 2110
	$(patsubst %.sh,%,$(SCRIPT_SH)) \
	$(patsubst %.perl,%,$(SCRIPT_PERL)) \
	: GIT-VERSION-FILE
2111

2112
TEST_OBJS := $(patsubst test-%$X,test-%.o,$(TEST_PROGRAMS))
2113
GIT_OBJS := $(LIB_OBJS) $(BUILTIN_OBJS) $(PROGRAM_OBJS) $(TEST_OBJS) \
2114 2115 2116 2117
	git.o
ifndef NO_CURL
	GIT_OBJS += http.o http-walker.o remote-curl.o
endif
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 2134 2135
VCSSVN_OBJS += vcs-svn/svndump.o

VCSSVN_TEST_OBJS += test-line-buffer.o

J
Jonathan Nieder 已提交
2136
OBJECTS := $(GIT_OBJS) $(XDIFF_OBJS) $(VCSSVN_OBJS)
2137

2138
dep_files := $(foreach f,$(OBJECTS),$(dir $f).depend/$(notdir $f).d)
2139
dep_dirs := $(addsuffix .depend,$(sort $(dir $(OBJECTS))))
2140

2141
ifeq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
2142
$(dep_dirs):
2143
	@mkdir -p $@
2144 2145

missing_dep_dirs := $(filter-out $(wildcard $(dep_dirs)),$(dep_dirs))
2146
dep_file = $(dir $@).depend/$(notdir $@).d
2147 2148 2149 2150 2151 2152 2153
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

2154
ifneq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
2155
ifndef CHECK_HEADER_DEPENDENCIES
2156 2157
dep_dirs =
missing_dep_dirs =
2158 2159
dep_args =
endif
2160 2161
endif

2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175
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))

2176 2177
.SUFFIXES:

2178 2179 2180 2181 2182 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
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
2212
$(C_OBJ): %.o: %.c GIT-CFLAGS $(missing_dep_dirs)
2213
	$(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
2214
$(ASM_OBJ): %.o: %.S GIT-CFLAGS $(missing_dep_dirs)
2215
	$(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
2216
endif
2217

2218
%.s: %.c GIT-CFLAGS FORCE
2219
	$(QUIET_CC)$(CC) -S $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
2220 2221

ifdef USE_COMPUTED_HEADER_DEPENDENCIES
2222 2223
# Take advantage of gcc's on-the-fly dependency generation
# See <http://gcc.gnu.org/gcc-3.0/features.html>.
2224 2225 2226
dep_files_present := $(wildcard $(dep_files))
ifneq ($(dep_files_present),)
include $(dep_files_present)
2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237
endif
else
# Dependencies on header files, for platforms that do not support
# the gcc -MMD option.
#
# Dependencies on automatically generated headers such as common-cmds.h
# should _not_ be included here, since they are necessary even when
# building an object for the first time.
#
# XXX. Please check occasionally that these include all dependencies
# gcc detects!
2238

2239
$(GIT_OBJS): $(LIB_H)
2240 2241 2242 2243
builtin/branch.o builtin/checkout.o builtin/clone.o builtin/reset.o branch.o transport.o: branch.h
builtin/bundle.o bundle.o transport.o: bundle.h
builtin/bisect--helper.o builtin/rev-list.o bisect.o: bisect.h
builtin/clone.o builtin/fetch-pack.o transport.o: fetch-pack.h
2244
builtin/index-pack.o builtin/grep.o builtin/pack-objects.o transport-helper.o thread-utils.o: thread-utils.h
2245 2246 2247 2248 2249
builtin/send-pack.o transport.o: send-pack.h
builtin/log.o builtin/shortlog.o: shortlog.h
builtin/prune.o builtin/reflog.o reachable.o: reachable.h
builtin/commit.o builtin/revert.o wt-status.o: wt-status.h
builtin/tar-tree.o archive-tar.o: tar.h
2250
connect.o transport.o url.o http-backend.o: url.h
N
Nguyễn Thái Ngọc Duy 已提交
2251
builtin/branch.o builtin/commit.o builtin/tag.o column.o help.o pager.o: column.h
2252
http-fetch.o http-walker.o remote-curl.o transport.o walker.o: walker.h
2253
http.o http-walker.o http-push.o http-fetch.o remote-curl.o: http.h url.h
2254

2255
xdiff-interface.o $(XDIFF_OBJS): $(XDIFF_H)
J
Jonathan Nieder 已提交
2256

2257
$(VCSSVN_OBJS) $(VCSSVN_TEST_OBJS): $(LIB_H) $(VCSSVN_H)
2258
endif
2259

2260
exec_cmd.sp exec_cmd.s exec_cmd.o: EXTRA_CPPFLAGS = \
2261 2262 2263
	'-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
	'-DBINDIR="$(bindir_relative_SQ)"' \
	'-DPREFIX="$(prefix_SQ)"'
2264

2265
builtin/init-db.sp builtin/init-db.s builtin/init-db.o: EXTRA_CPPFLAGS = \
2266
	-DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"'
2267

2268 2269
config.sp config.s config.o: EXTRA_CPPFLAGS = \
	-DETC_GITCONFIG='"$(ETC_GITCONFIG_SQ)"'
2270

2271 2272
attr.sp attr.s attr.o: EXTRA_CPPFLAGS = \
	-DETC_GITATTRIBUTES='"$(ETC_GITATTRIBUTES_SQ)"'
2273

2274 2275 2276
gettext.sp gettext.s gettext.o: EXTRA_CPPFLAGS = \
	-DGIT_LOCALE_PATH='"$(localedir_SQ)"'

2277 2278
http.sp http.s http.o: EXTRA_CPPFLAGS = \
	-DGIT_HTTP_USER_AGENT='"git/$(GIT_VERSION)"'
2279

2280
ifdef NO_EXPAT
2281
http-walker.sp http-walker.s http-walker.o: EXTRA_CPPFLAGS = -DNO_EXPAT
2282 2283
endif

2284
ifdef NO_REGEX
2285 2286
compat/regex/regex.sp compat/regex/regex.o: EXTRA_CPPFLAGS = \
	-DGAWK -DNO_MBSUPPORT
2287 2288
endif

2289
ifdef USE_NED_ALLOCATOR
2290
compat/nedmalloc/nedmalloc.sp compat/nedmalloc/nedmalloc.o: EXTRA_CPPFLAGS = \
2291 2292 2293
	-DNDEBUG -DOVERRIDE_STRDUP -DREPLACE_SYSTEM_ALLOCATOR
endif

2294
git-%$X: %.o GIT-LDFLAGS $(GITLIBS)
2295
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
2296

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

2301
git-http-fetch$X: revision.o http.o http-walker.o http-fetch.o GIT-LDFLAGS $(GITLIBS)
L
Linus Torvalds 已提交
2302
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2303
		$(LIBS) $(CURL_LIBCURL)
2304
git-http-push$X: revision.o http.o http-push.o GIT-LDFLAGS $(GITLIBS)
2305
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2306 2307
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

2308 2309 2310 2311 2312 2313
$(REMOTE_CURL_ALIASES): $(REMOTE_CURL_PRIMARY)
	$(QUIET_LNCP)$(RM) $@ && \
	ln $< $@ 2>/dev/null || \
	ln -s $< $@ 2>/dev/null || \
	cp $< $@

2314
$(REMOTE_CURL_PRIMARY): remote-curl.o http.o http-walker.o GIT-LDFLAGS $(GITLIBS)
2315 2316 2317
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

P
Petr Baudis 已提交
2318
$(LIB_FILE): $(LIB_OBJS)
2319
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)
P
Petr Baudis 已提交
2320

2321
$(XDIFF_LIB): $(XDIFF_OBJS)
2322
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(XDIFF_OBJS)
2323

J
Jonathan Nieder 已提交
2324 2325
$(VCSSVN_LIB): $(VCSSVN_OBJS)
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(VCSSVN_OBJS)
2326

2327 2328
export DEFAULT_EDITOR DEFAULT_PAGER

P
Petr Baudis 已提交
2329 2330 2331
doc:
	$(MAKE) -C Documentation all

2332 2333 2334 2335 2336 2337
man:
	$(MAKE) -C Documentation man

html:
	$(MAKE) -C Documentation html

2338 2339 2340
info:
	$(MAKE) -C Documentation info

2341 2342 2343
pdf:
	$(MAKE) -C Documentation pdf

2344 2345 2346 2347 2348
XGETTEXT_FLAGS = \
	--force-po \
	--add-comments \
	--msgid-bugs-address="Git Mailing List <git@vger.kernel.org>" \
	--from-code=UTF-8
2349 2350
XGETTEXT_FLAGS_C = $(XGETTEXT_FLAGS) --language=C \
	--keyword=_ --keyword=N_ --keyword="Q_:1,2"
2351
XGETTEXT_FLAGS_SH = $(XGETTEXT_FLAGS) --language=Shell
2352
XGETTEXT_FLAGS_PERL = $(XGETTEXT_FLAGS) --keyword=__ --language=Perl
2353
LOCALIZED_C := $(C_OBJ:o=c) $(LIB_H) $(XDIFF_H) $(VCSSVN_H) $(MISC_H)
2354
LOCALIZED_SH := $(SCRIPT_SH)
2355 2356 2357 2358 2359 2360 2361
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
2362 2363

po/git.pot: $(LOCALIZED_C)
2364 2365 2366
	$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ $(XGETTEXT_FLAGS_C) $(LOCALIZED_C)
	$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_SH) \
		$(LOCALIZED_SH)
2367 2368
	$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_PERL) \
		$(LOCALIZED_PERL)
2369 2370 2371 2372
	mv $@+ $@

pot: po/git.pot

2373 2374 2375 2376 2377 2378 2379 2380 2381 2382
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 $@ $<

2383 2384 2385 2386
FIND_SOURCE_FILES = ( git ls-files '*.[hcS]' 2>/dev/null || \
			$(FIND) . \( -name .git -type d -prune \) \
				-o \( -name '*.[hcS]' -type f -print \) )

2387 2388
$(ETAGS_TARGET): FORCE
	$(RM) $(ETAGS_TARGET)
2389
	$(FIND_SOURCE_FILES) | xargs etags -a -o $(ETAGS_TARGET)
2390

2391
tags: FORCE
2392
	$(RM) tags
2393
	$(FIND_SOURCE_FILES) | xargs ctags -a
P
Petr Baudis 已提交
2394

K
Kristof Provost 已提交
2395 2396
cscope:
	$(RM) cscope*
2397
	$(FIND_SOURCE_FILES) | xargs cscope -b
K
Kristof Provost 已提交
2398

2399
### Detect prefix changes
2400
TRACK_CFLAGS = $(CC):$(subst ','\'',$(ALL_CFLAGS)):\
2401
             $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ):\
2402
             $(localedir_SQ):$(USE_GETTEXT_SCHEME)
2403

2404
GIT-CFLAGS: FORCE
2405 2406 2407 2408 2409 2410
	@FLAGS='$(TRACK_CFLAGS)'; \
	    if test x"$$FLAGS" != x"`cat GIT-CFLAGS 2>/dev/null`" ; then \
		echo 1>&2 "    * new build flags or prefix"; \
		echo "$$FLAGS" >GIT-CFLAGS; \
            fi

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

2458 2459 2460 2461
### Detect Tck/Tk interpreter path changes
ifndef NO_TCLTK
TRACK_VARS = $(subst ','\'',-DTCLTK_PATH='$(TCLTK_PATH_SQ)')

2462
GIT-GUI-VARS: FORCE
2463 2464 2465 2466 2467 2468 2469
	@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

2470 2471 2472 2473 2474 2475 2476 2477 2478 2479
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 $@
2480

2481 2482 2483 2484
# GNU make supports exporting all variables by "export" without parameters.
# However, the environment gets quite big, and some programs have problems
# with that.

2485
export NO_SVN_TESTS
2486

2487 2488
### Testing rules

2489
test: all
P
Petr Baudis 已提交
2490 2491
	$(MAKE) -C t/ all

2492 2493 2494 2495 2496
perf: all
	$(MAKE) -C t/perf/ all

.PHONY: test perf

R
René Scharfe 已提交
2497 2498
test-ctype$X: ctype.o

2499
test-date$X: date.o ctype.o
P
Petr Baudis 已提交
2500

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

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

2505
test-parse-options$X: parse-options.o parse-options-cb.o
2506

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

2509
.PRECIOUS: $(TEST_OBJS)
2510

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

2514 2515 2516
check-sha1:: test-sha1$X
	./test-sha1.sh

2517 2518 2519 2520 2521 2522 2523 2524 2525
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)

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

2536
remove-dashes:
2537
	./fixup-builtins $(BUILT_INS) $(PROGRAMS) $(SCRIPTS)
P
Petr Baudis 已提交
2538 2539 2540

### Installation rules

2541
ifneq ($(filter /%,$(firstword $(template_dir))),)
2542
template_instdir = $(template_dir)
2543 2544
else
template_instdir = $(prefix)/$(template_dir)
2545 2546 2547
endif
export template_instdir

2548
ifneq ($(filter /%,$(firstword $(gitexecdir))),)
2549
gitexec_instdir = $(gitexecdir)
2550 2551
else
gitexec_instdir = $(prefix)/$(gitexecdir)
2552 2553 2554 2555
endif
gitexec_instdir_SQ = $(subst ','\'',$(gitexec_instdir))
export gitexec_instdir

2556 2557 2558 2559 2560 2561 2562
ifneq ($(filter /%,$(firstword $(mergetoolsdir))),)
mergetools_instdir = $(mergetoolsdir)
else
mergetools_instdir = $(prefix)/$(mergetoolsdir)
endif
mergetools_instdir_SQ = $(subst ','\'',$(mergetools_instdir))

2563 2564
install_bindir_programs := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X)) $(BINDIR_PROGRAMS_NO_X)

2565
install: all
2566
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
2567 2568
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
	$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
2569
	$(INSTALL) -m 644 $(SCRIPT_LIB) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
2570
	$(INSTALL) $(install_bindir_programs) '$(DESTDIR_SQ)$(bindir_SQ)'
2571
	$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
2572
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(mergetools_instdir_SQ)'
2573
	$(INSTALL) -m 644 mergetools/* '$(DESTDIR_SQ)$(mergetools_instdir_SQ)'
2574 2575 2576 2577 2578
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
2579
ifndef NO_PERL
2580
	$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
J
Junio C Hamano 已提交
2581
	$(MAKE) -C gitweb install
2582
endif
2583 2584 2585
ifndef NO_PYTHON
	$(MAKE) -C git_remote_helpers prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
endif
E
Eygene Ryabinkin 已提交
2586
ifndef NO_TCLTK
J
Junio C Hamano 已提交
2587
	$(MAKE) -C gitk-git install
2588
	$(MAKE) -C git-gui gitexecdir='$(gitexec_instdir_SQ)' install
E
Eygene Ryabinkin 已提交
2589
endif
2590
ifneq (,$X)
2591
	$(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';)
2592
endif
2593

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

2628 2629 2630
install-gitweb:
	$(MAKE) -C gitweb install

P
Petr Baudis 已提交
2631 2632 2633
install-doc:
	$(MAKE) -C Documentation install

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

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

2640 2641 2642
install-info:
	$(MAKE) -C Documentation install-info

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

2646 2647
quick-install-doc:
	$(MAKE) -C Documentation quick-install
P
Petr Baudis 已提交
2648

2649 2650 2651
quick-install-man:
	$(MAKE) -C Documentation quick-install-man

2652 2653 2654
quick-install-html:
	$(MAKE) -C Documentation quick-install-html

P
Petr Baudis 已提交
2655 2656 2657 2658


### Maintainer's dist rules

2659
git.spec: git.spec.in
2660 2661
	sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@+
	mv $@+ $@
2662

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

rpm: dist
2680 2681 2682 2683
	$(RPMBUILD) \
		--define "_source_filedigest_algorithm md5" \
		--define "_binary_filedigest_algorithm md5" \
		-ta $(GIT_TARNAME).tar.gz
2684

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

P
Petr Baudis 已提交
2705
### Cleaning rules
2706

2707 2708 2709
distclean: clean
	$(RM) configure

2710 2711 2712 2713 2714
profile-clean:
	$(RM) $(addsuffix *.gcda,$(addprefix $(PROFILE_DIR)/, $(object_dirs)))
	$(RM) $(addsuffix *.gcno,$(addprefix $(PROFILE_DIR)/, $(object_dirs)))

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

2744
.PHONY: all install profile-clean clean strip
2745
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
2746
.PHONY: FORCE cscope
J
Junio C Hamano 已提交
2747

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

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

2812 2813 2814 2815 2816 2817 2818 2819
### Test suite coverage testing
#
.PHONY: coverage coverage-clean coverage-build coverage-report

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

2820
object_dirs := $(sort $(dir $(OBJECTS)))
2821
coverage-clean:
2822 2823 2824 2825
	$(RM) $(addsuffix *.gcov,$(object_dirs))
	$(RM) $(addsuffix *.gcda,$(object_dirs))
	$(RM) $(addsuffix *.gcno,$(object_dirs))
	$(RM) coverage-untested-functions
2826
	$(RM) -r cover_db/
2827
	$(RM) -r cover_db_html/
2828 2829 2830

COVERAGE_CFLAGS = $(CFLAGS) -O0 -ftest-coverage -fprofile-arcs
COVERAGE_LDFLAGS = $(CFLAGS)  -O0 -lgcov
2831
GCOVFLAGS = --preserve-paths --branch-probabilities --all-blocks
2832 2833 2834 2835 2836 2837 2838

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

coverage-report:
2839
	$(QUIET_GCOV)for dir in $(object_dirs); do \
2840
		$(GCOV) $(GCOVFLAGS) --object-directory=$$dir $$dir*.c || exit; \
2841
	done
2842 2843

coverage-untested-functions: coverage-report
2844 2845
	grep '^function.*called 0 ' *.c.gcov \
		| sed -e 's/\([^:]*\)\.gcov: *function \([^ ]*\) called.*/\1: \2/' \
2846
		> coverage-untested-functions
2847 2848 2849

cover_db: coverage-report
	gcov2perl -db cover_db *.gcov
2850 2851 2852

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