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

S
Shawn O. Pearce 已提交
4
# Define V=1 to have a more verbose compile.
5
#
6 7 8 9 10
# Define SHELL_PATH to a POSIX shell if your /bin/sh is broken.
#
# Define SANE_TOOL_PATH to a colon-separated list of paths to prepend
# to PATH if your tools in /usr/bin are broken.
#
11 12 13
# Define SOCKLEN_T to a suitable type (such as 'size_t') if your
# system headers do not define a socklen_t type.
#
G
Gary V. Vaughan 已提交
14 15 16
# Define INLINE to a suitable substitute (such as '__inline' or '') if git
# fails to compile with errors about undefined inline functions or similar.
#
17 18 19 20
# Define SNPRINTF_RETURNS_BOGUS if your are on a system which snprintf()
# or vsnprintf() return -1 instead of number of characters which would
# have been written to the final string if enough space had been available.
#
21 22 23
# Define FREAD_READS_DIRECTORIES if your are on a system which succeeds
# when attempting to read from an fopen'ed directory.
#
24
# Define NO_OPENSSL environment variable if you do not have OpenSSL.
25
# This also implies BLK_SHA1.
26
#
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 \
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
ifdef NO_EXPAT
2278
http-walker.sp http-walker.s http-walker.o: EXTRA_CPPFLAGS = -DNO_EXPAT
2279 2280
endif

2281
ifdef NO_REGEX
2282 2283
compat/regex/regex.sp compat/regex/regex.o: EXTRA_CPPFLAGS = \
	-DGAWK -DNO_MBSUPPORT
2284 2285
endif

2286
ifdef USE_NED_ALLOCATOR
2287
compat/nedmalloc/nedmalloc.sp compat/nedmalloc/nedmalloc.o: EXTRA_CPPFLAGS = \
2288 2289 2290
	-DNDEBUG -DOVERRIDE_STRDUP -DREPLACE_SYSTEM_ALLOCATOR
endif

2291
git-%$X: %.o GIT-LDFLAGS $(GITLIBS)
2292
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
2293

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

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

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

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

P
Petr Baudis 已提交
2315
$(LIB_FILE): $(LIB_OBJS)
2316
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)
P
Petr Baudis 已提交
2317

2318
$(XDIFF_LIB): $(XDIFF_OBJS)
2319
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(XDIFF_OBJS)
2320

J
Jonathan Nieder 已提交
2321 2322
$(VCSSVN_LIB): $(VCSSVN_OBJS)
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(VCSSVN_OBJS)
2323

2324 2325
export DEFAULT_EDITOR DEFAULT_PAGER

P
Petr Baudis 已提交
2326 2327 2328
doc:
	$(MAKE) -C Documentation all

2329 2330 2331 2332 2333 2334
man:
	$(MAKE) -C Documentation man

html:
	$(MAKE) -C Documentation html

2335 2336 2337
info:
	$(MAKE) -C Documentation info

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

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

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

pot: po/git.pot

2370 2371 2372 2373 2374 2375 2376 2377 2378 2379
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 $@ $<

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

2384 2385
$(ETAGS_TARGET): FORCE
	$(RM) $(ETAGS_TARGET)
2386
	$(FIND_SOURCE_FILES) | xargs etags -a -o $(ETAGS_TARGET)
2387

2388
tags: FORCE
2389
	$(RM) tags
2390
	$(FIND_SOURCE_FILES) | xargs ctags -a
P
Petr Baudis 已提交
2391

K
Kristof Provost 已提交
2392 2393
cscope:
	$(RM) cscope*
2394
	$(FIND_SOURCE_FILES) | xargs cscope -b
K
Kristof Provost 已提交
2395

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

2401
GIT-CFLAGS: FORCE
2402 2403 2404 2405 2406 2407
	@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

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

2455 2456 2457 2458
### Detect Tck/Tk interpreter path changes
ifndef NO_TCLTK
TRACK_VARS = $(subst ','\'',-DTCLTK_PATH='$(TCLTK_PATH_SQ)')

2459
GIT-GUI-VARS: FORCE
2460 2461 2462 2463 2464 2465 2466
	@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

2467 2468 2469 2470 2471 2472 2473 2474 2475 2476
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 $@
2477

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

2482
export NO_SVN_TESTS
2483

2484 2485
### Testing rules

2486
test: all
P
Petr Baudis 已提交
2487 2488
	$(MAKE) -C t/ all

2489 2490 2491 2492 2493
perf: all
	$(MAKE) -C t/perf/ all

.PHONY: test perf

R
René Scharfe 已提交
2494 2495
test-ctype$X: ctype.o

2496
test-date$X: date.o ctype.o
P
Petr Baudis 已提交
2497

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

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

2502
test-parse-options$X: parse-options.o parse-options-cb.o
2503

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

2506
.PRECIOUS: $(TEST_OBJS)
2507

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

2511 2512 2513
check-sha1:: test-sha1$X
	./test-sha1.sh

2514 2515 2516 2517 2518 2519 2520 2521 2522
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)

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

2533
remove-dashes:
2534
	./fixup-builtins $(BUILT_INS) $(PROGRAMS) $(SCRIPTS)
P
Petr Baudis 已提交
2535 2536 2537

### Installation rules

2538
ifneq ($(filter /%,$(firstword $(template_dir))),)
2539
template_instdir = $(template_dir)
2540 2541
else
template_instdir = $(prefix)/$(template_dir)
2542 2543 2544
endif
export template_instdir

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

2553 2554 2555 2556 2557 2558 2559
ifneq ($(filter /%,$(firstword $(mergetoolsdir))),)
mergetools_instdir = $(mergetoolsdir)
else
mergetools_instdir = $(prefix)/$(mergetoolsdir)
endif
mergetools_instdir_SQ = $(subst ','\'',$(mergetools_instdir))

2560 2561
install_bindir_programs := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X)) $(BINDIR_PROGRAMS_NO_X)

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

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

2625 2626 2627
install-gitweb:
	$(MAKE) -C gitweb install

P
Petr Baudis 已提交
2628 2629 2630
install-doc:
	$(MAKE) -C Documentation install

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

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

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

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

2643 2644
quick-install-doc:
	$(MAKE) -C Documentation quick-install
P
Petr Baudis 已提交
2645

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

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

P
Petr Baudis 已提交
2652 2653 2654 2655


### Maintainer's dist rules

2656
git.spec: git.spec.in
2657 2658
	sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@+
	mv $@+ $@
2659

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

rpm: dist
2677 2678 2679 2680
	$(RPMBUILD) \
		--define "_source_filedigest_algorithm md5" \
		--define "_binary_filedigest_algorithm md5" \
		-ta $(GIT_TARNAME).tar.gz
2681

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

P
Petr Baudis 已提交
2702
### Cleaning rules
2703

2704 2705 2706
distclean: clean
	$(RM) configure

2707 2708 2709 2710 2711
profile-clean:
	$(RM) $(addsuffix *.gcda,$(addprefix $(PROFILE_DIR)/, $(object_dirs)))
	$(RM) $(addsuffix *.gcno,$(addprefix $(PROFILE_DIR)/, $(object_dirs)))

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

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

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

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

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

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

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

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

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

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

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

cover_db: coverage-report
	gcov2perl -db cover_db *.gcov
2847 2848 2849

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