Makefile 78.4 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 250 251
#
# Define USE_NED_ALLOCATOR if you want to replace the platforms default
# memory allocators with the nedmalloc allocator written by Niall Douglas.
252 253
#
# Define NO_REGEX if you have no or inferior regex support in your C library.
254
#
J
Jeff King 已提交
255 256 257
# Define HAVE_DEV_TTY if your system can open /dev/tty to interact with the
# user.
#
258
# Define GETTEXT_POISON if you are debugging the choice of strings marked
259 260 261
# 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.
262
#
263 264
# Define JSMIN to point to JavaScript minifier that functions as
# a filter to have gitweb.js minified.
J
Junio C Hamano 已提交
265
#
266 267 268
# Define CSSMIN to point to a CSS minifier in order to generate a minified
# version of gitweb.css
#
269 270 271 272
# 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.
#
273 274 275 276 277 278 279
# 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'
280
#
281 282 283 284 285 286
# 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.
#
287 288
# Define CHECK_HEADER_DEPENDENCIES to check for problems in the hard-coded
# dependency rules.
J
Junio C Hamano 已提交
289
#
290
# Define NATIVE_CRLF if your platform uses CRLF for line endings.
291

292
GIT-VERSION-FILE: FORCE
293
	@$(SHELL_PATH) ./GIT-VERSION-GEN
294
-include GIT-VERSION-FILE
295

296 297 298 299 300
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 已提交
301
uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not')
302

303 304 305 306 307 308
ifdef MSVC
	# avoid the MingW and Cygwin configuration sections
	uname_S := Windows
	uname_O := Windows
endif

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

311
CFLAGS = -g -O2 -Wall
J
Junio C Hamano 已提交
312
LDFLAGS =
313
ALL_CFLAGS = $(CPPFLAGS) $(CFLAGS)
J
Junio C Hamano 已提交
314
ALL_LDFLAGS = $(LDFLAGS)
J
Junio C Hamano 已提交
315
STRIP ?= strip
316

317 318 319
# Among the variables below, these:
#   gitexecdir
#   template_dir
320 321
#   mandir
#   infodir
322
#   htmldir
323
#   sysconfdir
324 325
# can be specified as a relative path some/where/else;
# this is interpreted as relative to $(prefix) and "git" at
326 327 328
# runtime figures out where they are based on the path to the executable.
# This can help installing the suite in a relocatable way.

329
prefix = $(HOME)
330 331 332 333 334
bindir_relative = bin
bindir = $(prefix)/$(bindir_relative)
mandir = share/man
infodir = share/info
gitexecdir = libexec/git-core
335
mergetoolsdir = $(gitexecdir)/mergetools
336
sharedir = $(prefix)/share
337
gitwebdir = $(sharedir)/gitweb
338
localedir = $(sharedir)/locale
339 340 341
template_dir = share/git-core/templates
htmldir = share/doc/git-doc
ETC_GITCONFIG = $(sysconfdir)/gitconfig
342
ETC_GITATTRIBUTES = $(sysconfdir)/gitattributes
343
lib = lib
344
# DESTDIR=
345
pathsep = :
346

347
export prefix bindir sharedir sysconfdir gitwebdir localedir
348

349
CC = cc
350
AR = ar
351
RM = rm -f
352
DIFF = diff
353
TAR = tar
354
FIND = find
355 356
INSTALL = install
RPMBUILD = rpmbuild
357
TCL_PATH = tclsh
358
TCLTK_PATH = wish
359
XGETTEXT = xgettext
360
MSGFMT = msgfmt
361
PTHREAD_LIBS = -lpthread
362
PTHREAD_CFLAGS =
363
GCOV = gcov
364

365 366
export TCL_PATH TCLTK_PATH

367
SPARSE_FLAGS =
368

P
Petr Baudis 已提交
369 370 371 372


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

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

379 380 381 382 383
# Guard against environment variables
BUILTIN_OBJS =
BUILT_INS =
COMPAT_CFLAGS =
COMPAT_OBJS =
384 385 386 387 388
XDIFF_H =
XDIFF_OBJS =
VCSSVN_H =
VCSSVN_OBJS =
VCSSVN_TEST_OBJS =
389
MISC_H =
390
EXTRA_CPPFLAGS =
391 392
LIB_H =
LIB_OBJS =
393
PROGRAM_OBJS =
394 395
PROGRAMS =
SCRIPT_PERL =
396
SCRIPT_PYTHON =
397
SCRIPT_SH =
398
SCRIPT_LIB =
399
TEST_PROGRAMS_NEED_X =
400

J
Jonathan Nieder 已提交
401 402 403 404 405 406
# 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

407 408
SCRIPT_SH += git-am.sh
SCRIPT_SH += git-bisect.sh
409
SCRIPT_SH += git-difftool--helper.sh
410 411 412 413 414 415 416 417 418 419 420 421 422 423 424
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

425 426
SCRIPT_LIB += git-mergetool--lib
SCRIPT_LIB += git-parse-remote
427 428 429
SCRIPT_LIB += git-rebase--am
SCRIPT_LIB += git-rebase--interactive
SCRIPT_LIB += git-rebase--merge
430
SCRIPT_LIB += git-sh-setup
431
SCRIPT_LIB += git-sh-i18n
432

433
SCRIPT_PERL += git-add--interactive.perl
434
SCRIPT_PERL += git-difftool.perl
435 436 437 438 439 440 441
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
442

443 444
SCRIPT_PYTHON += git-remote-testgit.py

445 446
SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
	  $(patsubst %.perl,%,$(SCRIPT_PERL)) \
447
	  $(patsubst %.py,%,$(SCRIPT_PYTHON)) \
448
	  git-instaweb
449

450 451
ETAGS_TARGET = TAGS

452 453
# Empty...
EXTRA_PROGRAMS =
454

455 456
# ... and all the rest that could be moved out of bindir to gitexecdir
PROGRAMS += $(EXTRA_PROGRAMS)
457

458
PROGRAM_OBJS += daemon.o
459 460 461 462 463 464
PROGRAM_OBJS += fast-import.o
PROGRAM_OBJS += imap-send.o
PROGRAM_OBJS += shell.o
PROGRAM_OBJS += show-index.o
PROGRAM_OBJS += upload-pack.o
PROGRAM_OBJS += http-backend.o
465
PROGRAM_OBJS += sh-i18n--envsubst.o
J
Jeff King 已提交
466
PROGRAM_OBJS += credential-store.o
467

468 469 470
# Binary suffix, set to .exe for Windows builds
X =

471
PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS))
472

473
TEST_PROGRAMS_NEED_X += test-chmtime
J
Jeff King 已提交
474
TEST_PROGRAMS_NEED_X += test-credential
475 476 477 478
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
T
Thomas Rast 已提交
479
TEST_PROGRAMS_NEED_X += test-scrap-cache-tree
480
TEST_PROGRAMS_NEED_X += test-genrandom
J
Jeff King 已提交
481
TEST_PROGRAMS_NEED_X += test-index-version
D
David Barr 已提交
482
TEST_PROGRAMS_NEED_X += test-line-buffer
483
TEST_PROGRAMS_NEED_X += test-match-trees
J
Jeff King 已提交
484
TEST_PROGRAMS_NEED_X += test-mktemp
485 486 487 488 489
TEST_PROGRAMS_NEED_X += test-parse-options
TEST_PROGRAMS_NEED_X += test-path-utils
TEST_PROGRAMS_NEED_X += test-run-command
TEST_PROGRAMS_NEED_X += test-sha1
TEST_PROGRAMS_NEED_X += test-sigchain
490
TEST_PROGRAMS_NEED_X += test-subprocess
D
David Barr 已提交
491
TEST_PROGRAMS_NEED_X += test-svn-fe
492

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

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

BUILT_INS += git-cherry$X
500
BUILT_INS += git-cherry-pick$X
501 502 503 504 505 506 507 508
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 已提交
509
BUILT_INS += git-stage$X
510 511
BUILT_INS += git-status$X
BUILT_INS += git-whatchanged$X
J
Junio C Hamano 已提交
512

513 514
# what 'all' will build and 'install' will install in gitexecdir,
# excluding programs for built-in commands
J
Junio C Hamano 已提交
515
ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
516

E
Eygene Ryabinkin 已提交
517
# what 'all' will build but not install in gitexecdir
518
OTHER_PROGRAMS = git$X
E
Eygene Ryabinkin 已提交
519

520 521 522 523 524 525 526 527 528
# 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

529 530 531 532 533 534 535
# 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
536 537 538
ifndef PYTHON_PATH
	PYTHON_PATH = /usr/bin/python
endif
539

L
Luben Tuikov 已提交
540
export PERL_PATH
541
export PYTHON_PATH
L
Luben Tuikov 已提交
542

L
Linus Torvalds 已提交
543
LIB_FILE=libgit.a
544
XDIFF_LIB=xdiff/lib.a
J
Jonathan Nieder 已提交
545
VCSSVN_LIB=vcs-svn/lib.a
J
Junio C Hamano 已提交
546

547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575
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

MISC_H += branch.h
MISC_H += bundle.h
MISC_H += bisect.h
MISC_H += fetch-pack.h
MISC_H += thread-utils.h
MISC_H += send-pack.h
MISC_H += shortlog.h
MISC_H += reachable.h
MISC_H += wt-status.h
MISC_H += tar.h
MISC_H += url.h
MISC_H += walker.h

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

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

793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845
BUILTIN_OBJS += builtin/add.o
BUILTIN_OBJS += builtin/annotate.o
BUILTIN_OBJS += builtin/apply.o
BUILTIN_OBJS += builtin/archive.o
BUILTIN_OBJS += builtin/bisect--helper.o
BUILTIN_OBJS += builtin/blame.o
BUILTIN_OBJS += builtin/branch.o
BUILTIN_OBJS += builtin/bundle.o
BUILTIN_OBJS += builtin/cat-file.o
BUILTIN_OBJS += builtin/check-attr.o
BUILTIN_OBJS += builtin/check-ref-format.o
BUILTIN_OBJS += builtin/checkout-index.o
BUILTIN_OBJS += builtin/checkout.o
BUILTIN_OBJS += builtin/clean.o
BUILTIN_OBJS += builtin/clone.o
BUILTIN_OBJS += builtin/commit-tree.o
BUILTIN_OBJS += builtin/commit.o
BUILTIN_OBJS += builtin/config.o
BUILTIN_OBJS += builtin/count-objects.o
BUILTIN_OBJS += builtin/describe.o
BUILTIN_OBJS += builtin/diff-files.o
BUILTIN_OBJS += builtin/diff-index.o
BUILTIN_OBJS += builtin/diff-tree.o
BUILTIN_OBJS += builtin/diff.o
BUILTIN_OBJS += builtin/fast-export.o
BUILTIN_OBJS += builtin/fetch-pack.o
BUILTIN_OBJS += builtin/fetch.o
BUILTIN_OBJS += builtin/fmt-merge-msg.o
BUILTIN_OBJS += builtin/for-each-ref.o
BUILTIN_OBJS += builtin/fsck.o
BUILTIN_OBJS += builtin/gc.o
BUILTIN_OBJS += builtin/grep.o
BUILTIN_OBJS += builtin/hash-object.o
BUILTIN_OBJS += builtin/help.o
BUILTIN_OBJS += builtin/index-pack.o
BUILTIN_OBJS += builtin/init-db.o
BUILTIN_OBJS += builtin/log.o
BUILTIN_OBJS += builtin/ls-files.o
BUILTIN_OBJS += builtin/ls-remote.o
BUILTIN_OBJS += builtin/ls-tree.o
BUILTIN_OBJS += builtin/mailinfo.o
BUILTIN_OBJS += builtin/mailsplit.o
BUILTIN_OBJS += builtin/merge.o
BUILTIN_OBJS += builtin/merge-base.o
BUILTIN_OBJS += builtin/merge-file.o
BUILTIN_OBJS += builtin/merge-index.o
BUILTIN_OBJS += builtin/merge-ours.o
BUILTIN_OBJS += builtin/merge-recursive.o
BUILTIN_OBJS += builtin/merge-tree.o
BUILTIN_OBJS += builtin/mktag.o
BUILTIN_OBJS += builtin/mktree.o
BUILTIN_OBJS += builtin/mv.o
BUILTIN_OBJS += builtin/name-rev.o
J
Junio C Hamano 已提交
846
BUILTIN_OBJS += builtin/notes.o
847 848 849 850 851 852 853 854 855 856 857
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 已提交
858
BUILTIN_OBJS += builtin/remote-ext.o
I
Ilari Liusvaara 已提交
859
BUILTIN_OBJS += builtin/remote-fd.o
860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884
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
885

886
GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
887
EXTLIBS =
888

889 890 891
#
# Platform specific tweaks
#
892 893 894 895 896

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

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

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

1333
-include config.mak.autogen
1334
-include config.mak
1335

1336 1337 1338 1339 1340 1341 1342 1343
ifndef sysconfdir
ifeq ($(prefix),/usr)
sysconfdir = /etc
else
sysconfdir = etc
endif
endif

1344
ifdef CHECK_HEADER_DEPENDENCIES
1345
COMPUTE_HEADER_DEPENDENCIES = no
1346
USE_COMPUTED_HEADER_DEPENDENCIES =
1347 1348
endif

1349
ifndef COMPUTE_HEADER_DEPENDENCIES
1350 1351 1352 1353
COMPUTE_HEADER_DEPENDENCIES = auto
endif

ifeq ($(COMPUTE_HEADER_DEPENDENCIES),auto)
1354 1355 1356
dep_check = $(shell $(CC) $(ALL_CFLAGS) \
	-c -MF /dev/null -MMD -MP -x c /dev/null -o /dev/null 2>&1; \
	echo $$?)
1357
ifeq ($(dep_check),0)
1358 1359 1360
override COMPUTE_HEADER_DEPENDENCIES = yes
else
override COMPUTE_HEADER_DEPENDENCIES = no
1361
endif
1362 1363
endif

1364
ifeq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
1365
USE_COMPUTED_HEADER_DEPENDENCIES = YesPlease
1366 1367 1368 1369 1370
else
ifneq ($(COMPUTE_HEADER_DEPENDENCIES),no)
$(error please set COMPUTE_HEADER_DEPENDENCIES to yes, no, or auto \
(not "$(COMPUTE_HEADER_DEPENDENCIES)"))
endif
1371 1372
endif

1373
ifdef SANE_TOOL_PATH
1374 1375
SANE_TOOL_PATH_SQ = $(subst ','\'',$(SANE_TOOL_PATH))
BROKEN_PATH_FIX = 's|^\# @@BROKEN_PATH_FIX@@$$|git_broken_path_fix $(SANE_TOOL_PATH_SQ)|'
1376 1377
PATH := $(SANE_TOOL_PATH):${PATH}
else
1378
BROKEN_PATH_FIX = '/^\# @@BROKEN_PATH_FIX@@$$/d'
1379 1380
endif

G
Gary V. Vaughan 已提交
1381 1382 1383 1384
ifneq (,$(INLINE))
	BASIC_CFLAGS += -Dinline=$(INLINE)
endif

1385 1386 1387 1388
ifneq (,$(SOCKLEN_T))
	BASIC_CFLAGS += -Dsocklen_t=$(SOCKLEN_T)
endif

1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401
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
1402
	PTHREAD_LIBS =
1403 1404
endif

1405 1406 1407 1408 1409 1410 1411 1412
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
1413 1414
endif

1415 1416 1417 1418 1419
ifdef NO_LIBGEN_H
	COMPAT_CFLAGS += -DNO_LIBGEN_H
	COMPAT_OBJS += compat/basename.o
endif

M
Michał Kiedrowicz 已提交
1420 1421 1422 1423 1424 1425 1426 1427 1428
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 已提交
1429 1430
ifdef NO_CURL
	BASIC_CFLAGS += -DNO_CURL
1431 1432 1433
	REMOTE_CURL_PRIMARY =
	REMOTE_CURL_ALIASES =
	REMOTE_CURL_NAMES =
D
Daniel Barkalow 已提交
1434
else
1435
	ifdef CURLDIR
1436
		# Try "-Wl,-rpath=$(CURLDIR)/$(lib)" in such a case.
1437
		BASIC_CFLAGS += -I$(CURLDIR)/include
1438
		CURL_LIBCURL = -L$(CURLDIR)/$(lib) $(CC_LD_DYNPATH)$(CURLDIR)/$(lib) -lcurl
1439 1440 1441
	else
		CURL_LIBCURL = -lcurl
	endif
1442 1443 1444 1445 1446 1447 1448 1449 1450 1451
	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

1452 1453 1454
	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)
1455 1456
	PROGRAM_OBJS += http-fetch.o
	PROGRAMS += $(REMOTE_CURL_NAMES)
1457 1458 1459
	curl_check := $(shell (echo 070908; curl-config --vernum) | sort -r | sed -ne 2p)
	ifeq "$(curl_check)" "070908"
		ifndef NO_EXPAT
1460
			PROGRAM_OBJS += http-push.o
1461
		endif
1462
	endif
1463
	ifndef NO_EXPAT
1464 1465 1466 1467 1468 1469
		ifdef EXPATDIR
			BASIC_CFLAGS += -I$(EXPATDIR)/include
			EXPAT_LIBEXPAT = -L$(EXPATDIR)/$(lib) $(CC_LD_DYNPATH)$(EXPATDIR)/$(lib) -lexpat
		else
			EXPAT_LIBEXPAT = -lexpat
		endif
1470
	endif
1471 1472
endif

1473 1474
ifdef ZLIB_PATH
	BASIC_CFLAGS += -I$(ZLIB_PATH)/include
1475
	EXTLIBS += -L$(ZLIB_PATH)/$(lib) $(CC_LD_DYNPATH)$(ZLIB_PATH)/$(lib)
1476 1477 1478
endif
EXTLIBS += -lz

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

1676
ifdef NO_ICONV
1677
	BASIC_CFLAGS += -DNO_ICONV
1678 1679
endif

1680 1681 1682 1683
ifdef OLD_ICONV
	BASIC_CFLAGS += -DOLD_ICONV
endif

1684 1685 1686 1687
ifdef NO_DEFLATE_BOUND
	BASIC_CFLAGS += -DNO_DEFLATE_BOUND
endif

1688 1689 1690 1691
ifdef NO_POSIX_GOODIES
	BASIC_CFLAGS += -DNO_POSIX_GOODIES
endif

1692 1693 1694
ifdef BLK_SHA1
	SHA1_HEADER = "block-sha1/sha1.h"
	LIB_OBJS += block-sha1/sha1.o
1695
	LIB_H += block-sha1/sha1.h
1696
else
1697 1698 1699
ifdef PPC_SHA1
	SHA1_HEADER = "ppc/sha1.h"
	LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
1700
	LIB_H += ppc/sha1.h
1701 1702
else
	SHA1_HEADER = <openssl/sha.h>
1703
	EXTLIBS += $(LIB_4_CRYPTO)
1704 1705
endif
endif
1706 1707 1708
ifdef NO_PERL_MAKEMAKER
	export NO_PERL_MAKEMAKER
endif
1709 1710 1711 1712
ifdef NO_HSTRERROR
	COMPAT_CFLAGS += -DNO_HSTRERROR
	COMPAT_OBJS += compat/hstrerror.o
endif
R
René Scharfe 已提交
1713 1714 1715 1716
ifdef NO_MEMMEM
	COMPAT_CFLAGS += -DNO_MEMMEM
	COMPAT_OBJS += compat/memmem.o
endif
1717 1718 1719 1720
ifdef INTERNAL_QSORT
	COMPAT_CFLAGS += -DINTERNAL_QSORT
	COMPAT_OBJS += compat/qsort.o
endif
1721 1722 1723
ifdef RUNTIME_PREFIX
	COMPAT_CFLAGS += -DRUNTIME_PREFIX
endif
1724

J
Junio C Hamano 已提交
1725 1726 1727
ifdef NO_PTHREADS
	BASIC_CFLAGS += -DNO_PTHREADS
else
1728
	BASIC_CFLAGS += $(PTHREAD_CFLAGS)
J
Junio C Hamano 已提交
1729
	EXTLIBS += $(PTHREAD_LIBS)
1730
	LIB_OBJS += thread-utils.o
N
Nicolas Pitre 已提交
1731
endif
1732

1733 1734 1735 1736
ifdef HAVE_PATHS_H
	BASIC_CFLAGS += -DHAVE_PATHS_H
endif

1737 1738
ifdef HAVE_LIBCHARSET_H
	BASIC_CFLAGS += -DHAVE_LIBCHARSET_H
1739
	EXTLIBS += $(CHARSET_LIB)
1740 1741
endif

J
Jeff King 已提交
1742 1743 1744 1745
ifdef HAVE_DEV_TTY
	BASIC_CFLAGS += -DHAVE_DEV_TTY
endif

1746 1747 1748
ifdef DIR_HAS_BSD_GROUP_SEMANTICS
	COMPAT_CFLAGS += -DDIR_HAS_BSD_GROUP_SEMANTICS
endif
1749 1750 1751
ifdef UNRELIABLE_FSTAT
	BASIC_CFLAGS += -DUNRELIABLE_FSTAT
endif
1752 1753 1754 1755
ifdef NO_REGEX
	COMPAT_CFLAGS += -Icompat/regex
	COMPAT_OBJS += compat/regex/regex.o
endif
N
Nicolas Pitre 已提交
1756

1757
ifdef USE_NED_ALLOCATOR
1758
       COMPAT_CFLAGS += -Icompat/nedmalloc
1759 1760 1761
       COMPAT_OBJS += compat/nedmalloc/nedmalloc.o
endif

1762 1763 1764 1765
ifdef GIT_TEST_CMP_USE_COPIED_CONTEXT
	export GIT_TEST_CMP_USE_COPIED_CONTEXT
endif

1766 1767 1768 1769
ifndef NO_MSGFMT_EXTENDED_OPTIONS
	MSGFMT += --check --statistics
endif

1770 1771 1772 1773
ifeq ($(TCLTK_PATH),)
NO_TCLTK=NoThanks
endif

1774 1775 1776 1777
ifeq ($(PERL_PATH),)
NO_PERL=NoThanks
endif

1778 1779 1780 1781
ifeq ($(PYTHON_PATH),)
NO_PYTHON=NoThanks
endif

1782
QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
1783 1784
QUIET_SUBDIR1  =

1785 1786 1787 1788 1789 1790
ifneq ($(findstring $(MAKEFLAGS),w),w)
PRINT_DIR = --no-print-directory
else # "make -w"
NO_SUBDIR = :
endif

1791
ifneq ($(findstring $(MAKEFLAGS),s),s)
S
Shawn O. Pearce 已提交
1792
ifndef V
A
Alex Riesen 已提交
1793
	QUIET_CC       = @echo '   ' CC $@;
1794 1795 1796 1797
	QUIET_AR       = @echo '   ' AR $@;
	QUIET_LINK     = @echo '   ' LINK $@;
	QUIET_BUILT_IN = @echo '   ' BUILTIN $@;
	QUIET_GEN      = @echo '   ' GEN $@;
1798
	QUIET_LNCP     = @echo '   ' LN/CP $@;
1799
	QUIET_XGETTEXT = @echo '   ' XGETTEXT $@;
1800
	QUIET_MSGFMT   = @echo '   ' MSGFMT $@;
1801
	QUIET_GCOV     = @echo '   ' GCOV $@;
1802
	QUIET_SP       = @echo '   ' SP $<;
1803
	QUIET_SUBDIR0  = +@subdir=
1804 1805
	QUIET_SUBDIR1  = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
			 $(MAKE) $(PRINT_DIR) -C $$subdir
S
Shawn O. Pearce 已提交
1806
	export V
A
Alex Riesen 已提交
1807
	export QUIET_GEN
1808 1809
	export QUIET_BUILT_IN
endif
1810
endif
1811

J
Jeff King 已提交
1812 1813
ifdef ASCIIDOC7
	export ASCIIDOC7
1814 1815
endif

1816 1817 1818 1819 1820 1821 1822
### profile feedback build
#

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

1823
ifeq ("$(PROFILE)","GEN")
1824 1825 1826 1827
	CFLAGS += -fprofile-generate=$(PROFILE_DIR) -DNO_NORETURN=1
	EXTLIBS += -lgcov
	export CCACHE_DISABLE=t
	V=1
1828 1829
else
ifneq ("$(PROFILE)","")
1830 1831 1832 1833
	CFLAGS += -fprofile-use=$(PROFILE_DIR) -fprofile-correction -DNO_NORETURN=1
	export CCACHE_DISABLE=t
	V=1
endif
1834
endif
1835

P
Pavel Roskin 已提交
1836
# Shell quote (do not use $(call) to accommodate ancient setups);
1837 1838

SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER))
1839
ETC_GITCONFIG_SQ = $(subst ','\'',$(ETC_GITCONFIG))
1840
ETC_GITATTRIBUTES_SQ = $(subst ','\'',$(ETC_GITATTRIBUTES))
1841 1842 1843

DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
bindir_SQ = $(subst ','\'',$(bindir))
1844
bindir_relative_SQ = $(subst ','\'',$(bindir_relative))
1845
mandir_SQ = $(subst ','\'',$(mandir))
1846
infodir_SQ = $(subst ','\'',$(infodir))
1847
localedir_SQ = $(subst ','\'',$(localedir))
1848 1849
gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
template_dir_SQ = $(subst ','\'',$(template_dir))
1850
htmldir_SQ = $(subst ','\'',$(htmldir))
1851
prefix_SQ = $(subst ','\'',$(prefix))
1852
gitwebdir_SQ = $(subst ','\'',$(gitwebdir))
1853 1854 1855

SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
1856
PYTHON_PATH_SQ = $(subst ','\'',$(PYTHON_PATH))
1857
TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH))
1858
DIFF_SQ = $(subst ','\'',$(DIFF))
1859

1860 1861
LIBS = $(GITLIBS) $(EXTLIBS)

1862
BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' \
1863
	$(COMPAT_CFLAGS)
J
Jason Riedy 已提交
1864
LIB_OBJS += $(COMPAT_OBJS)
1865

1866 1867 1868 1869 1870 1871 1872 1873 1874
# 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

1875 1876 1877 1878 1879 1880 1881
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

1882 1883 1884 1885 1886 1887 1888
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

1889 1890 1891
ALL_CFLAGS += $(BASIC_CFLAGS)
ALL_LDFLAGS += $(BASIC_LDFLAGS)

1892
export DIFF TAR INSTALL DESTDIR SHELL_PATH
1893 1894


P
Petr Baudis 已提交
1895 1896
### Build rules

1897 1898
SHELL = $(SHELL_PATH)

1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909
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
1910
ifneq (,$X)
1911
	$(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';)
1912
endif
1913

1914
all::
E
Eygene Ryabinkin 已提交
1915
ifndef NO_TCLTK
1916
	$(QUIET_SUBDIR0)git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all
J
Junio C Hamano 已提交
1917
	$(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all
E
Eygene Ryabinkin 已提交
1918
endif
1919
ifndef NO_PERL
1920
	$(QUIET_SUBDIR0)perl $(QUIET_SUBDIR1) PERL_PATH='$(PERL_PATH_SQ)' prefix='$(prefix_SQ)' localedir='$(localedir_SQ)' all
1921 1922 1923
endif
ifndef NO_PYTHON
	$(QUIET_SUBDIR0)git_remote_helpers $(QUIET_SUBDIR1) PYTHON_PATH='$(PYTHON_PATH_SQ)' prefix='$(prefix_SQ)' all
1924
endif
1925
	$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1) SHELL_PATH='$(SHELL_PATH_SQ)' PERL_PATH='$(PERL_PATH_SQ)'
1926

1927 1928 1929 1930 1931
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 已提交
1932 1933 1934
strip: $(PROGRAMS) git$X
	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X

1935
git.o: common-cmds.h
1936
git.sp git.s git.o: EXTRA_CPPFLAGS = -DGIT_VERSION='"$(GIT_VERSION)"' \
1937 1938 1939
	'-DGIT_HTML_PATH="$(htmldir_SQ)"' \
	'-DGIT_MAN_PATH="$(mandir_SQ)"' \
	'-DGIT_INFO_PATH="$(infodir_SQ)"'
1940

1941
git$X: git.o GIT-LDFLAGS $(BUILTIN_OBJS) $(GITLIBS)
1942
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ git.o \
1943
		$(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)
1944

1945
help.sp help.o: common-cmds.h
1946

1947 1948
builtin/help.sp builtin/help.o: common-cmds.h
builtin/help.sp builtin/help.s builtin/help.o: EXTRA_CPPFLAGS = \
1949 1950 1951
	'-DGIT_HTML_PATH="$(htmldir_SQ)"' \
	'-DGIT_MAN_PATH="$(mandir_SQ)"' \
	'-DGIT_INFO_PATH="$(infodir_SQ)"'
1952

J
Junio C Hamano 已提交
1953
$(BUILT_INS): git$X
1954 1955 1956 1957
	$(QUIET_BUILT_IN)$(RM) $@ && \
	ln git$X $@ 2>/dev/null || \
	ln -s git$X $@ 2>/dev/null || \
	cp git$X $@
J
Junio C Hamano 已提交
1958

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

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

1964 1965 1966 1967
define cmd_munge_script
$(RM) $@ $@+ && \
sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
    -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \
1968
    -e 's|@@DIFF@@|$(DIFF_SQ)|' \
1969
    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1970
    -e 's|@@LOCALEDIR@@|$(localedir_SQ)|g' \
1971
    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
1972
    -e 's/@@USE_GETTEXT_SCHEME@@/$(USE_GETTEXT_SCHEME)/g' \
1973 1974 1975 1976
    -e $(BROKEN_PATH_FIX) \
    $@.sh >$@+
endef

1977
$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
1978
	$(QUIET_GEN)$(cmd_munge_script) && \
1979
	chmod +x $@+ && \
1980
	mv $@+ $@
1981

1982 1983 1984 1985
$(SCRIPT_LIB) : % : %.sh
	$(QUIET_GEN)$(cmd_munge_script) && \
	mv $@+ $@

1986
ifndef NO_PERL
1987 1988
$(patsubst %.perl,%,$(SCRIPT_PERL)): perl/perl.mak

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

1992
$(patsubst %.perl,%,$(SCRIPT_PERL)): % : %.perl
1993
	$(QUIET_GEN)$(RM) $@ $@+ && \
1994
	INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C perl -s --no-print-directory instlibdir` && \
1995 1996 1997
	sed -e '1{' \
	    -e '	s|#!.*perl|#!$(PERL_PATH_SQ)|' \
	    -e '	h' \
1998
	    -e '	s=.*=use lib (split(/$(pathsep)/, $$ENV{GITPERLLIB} || "'"$$INSTLIBDIR"'"));=' \
1999 2000 2001
	    -e '	H' \
	    -e '	x' \
	    -e '}' \
2002
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
2003 2004
	    $@.perl >$@+ && \
	chmod +x $@+ && \
2005
	mv $@+ $@
2006

2007 2008 2009 2010 2011

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

2012
git-instaweb: git-instaweb.sh gitweb
2013
	$(QUIET_GEN)$(RM) $@ $@+ && \
2014 2015 2016
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
2017
	    -e 's|@@GITWEBDIR@@|$(gitwebdir_SQ)|g' \
2018
	    -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
2019 2020
	    $@.sh > $@+ && \
	chmod +x $@+ && \
2021
	mv $@+ $@
2022 2023 2024 2025 2026 2027 2028 2029 2030
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
2031

2032 2033 2034 2035 2036 2037 2038
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` && \
2039 2040
	sed -e '1s|#!.*python|#!$(PYTHON_PATH_SQ)|' \
	    -e 's|\(os\.getenv("GITPYTHONLIB"\)[^)]*)|\1,"@@INSTLIBDIR@@")|' \
2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054
	    -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

2055
configure: configure.ac
2056
	$(QUIET_GEN)$(RM) $@ $<+ && \
2057
	sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
2058 2059
	    $< > $<+ && \
	autoconf -o $@ $<+ && \
2060
	$(RM) $<+
2061

2062
# These can record GIT_VERSION
2063
git.o git.spec \
2064 2065 2066
	$(patsubst %.sh,%,$(SCRIPT_SH)) \
	$(patsubst %.perl,%,$(SCRIPT_PERL)) \
	: GIT-VERSION-FILE
2067

2068
TEST_OBJS := $(patsubst test-%$X,test-%.o,$(TEST_PROGRAMS))
2069
GIT_OBJS := $(LIB_OBJS) $(BUILTIN_OBJS) $(PROGRAM_OBJS) $(TEST_OBJS) \
2070 2071 2072 2073
	git.o
ifndef NO_CURL
	GIT_OBJS += http.o http-walker.o remote-curl.o
endif
2074 2075 2076 2077 2078 2079 2080

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
2081
XDIFF_OBJS += xdiff/xhistogram.o
2082 2083

VCSSVN_OBJS += vcs-svn/line_buffer.o
2084
VCSSVN_OBJS += vcs-svn/sliding_window.o
2085 2086
VCSSVN_OBJS += vcs-svn/repo_tree.o
VCSSVN_OBJS += vcs-svn/fast_export.o
2087
VCSSVN_OBJS += vcs-svn/svndiff.o
2088 2089 2090 2091
VCSSVN_OBJS += vcs-svn/svndump.o

VCSSVN_TEST_OBJS += test-line-buffer.o

J
Jonathan Nieder 已提交
2092
OBJECTS := $(GIT_OBJS) $(XDIFF_OBJS) $(VCSSVN_OBJS)
2093

2094
dep_files := $(foreach f,$(OBJECTS),$(dir $f).depend/$(notdir $f).d)
2095
dep_dirs := $(addsuffix .depend,$(sort $(dir $(OBJECTS))))
2096

2097
ifeq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
2098
$(dep_dirs):
2099
	@mkdir -p $@
2100 2101

missing_dep_dirs := $(filter-out $(wildcard $(dep_dirs)),$(dep_dirs))
2102
dep_file = $(dir $@).depend/$(notdir $@).d
2103 2104 2105 2106 2107 2108 2109
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

2110
ifneq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
2111
ifndef CHECK_HEADER_DEPENDENCIES
2112 2113
dep_dirs =
missing_dep_dirs =
2114 2115
dep_args =
endif
2116 2117
endif

2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131
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))

2132 2133
.SUFFIXES:

2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167
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
2168
$(C_OBJ): %.o: %.c GIT-CFLAGS $(missing_dep_dirs)
2169
	$(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
2170
$(ASM_OBJ): %.o: %.S GIT-CFLAGS $(missing_dep_dirs)
2171
	$(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
2172
endif
2173

2174
%.s: %.c GIT-CFLAGS FORCE
2175
	$(QUIET_CC)$(CC) -S $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
2176 2177

ifdef USE_COMPUTED_HEADER_DEPENDENCIES
2178 2179
# Take advantage of gcc's on-the-fly dependency generation
# See <http://gcc.gnu.org/gcc-3.0/features.html>.
2180 2181 2182
dep_files_present := $(wildcard $(dep_files))
ifneq ($(dep_files_present),)
include $(dep_files_present)
2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193
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!
2194

2195
$(GIT_OBJS): $(LIB_H)
2196 2197 2198 2199
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
2200
builtin/grep.o builtin/pack-objects.o transport-helper.o thread-utils.o: thread-utils.h
2201 2202 2203 2204 2205
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
2206
connect.o transport.o url.o http-backend.o: url.h
2207
http-fetch.o http-walker.o remote-curl.o transport.o walker.o: walker.h
2208
http.o http-walker.o http-push.o http-fetch.o remote-curl.o: http.h url.h
2209

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

2212
$(VCSSVN_OBJS) $(VCSSVN_TEST_OBJS): $(LIB_H) $(VCSSVN_H)
2213
endif
2214

2215
exec_cmd.sp exec_cmd.s exec_cmd.o: EXTRA_CPPFLAGS = \
2216 2217 2218
	'-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
	'-DBINDIR="$(bindir_relative_SQ)"' \
	'-DPREFIX="$(prefix_SQ)"'
2219

2220
builtin/init-db.sp builtin/init-db.s builtin/init-db.o: EXTRA_CPPFLAGS = \
2221
	-DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"'
2222

2223 2224
config.sp config.s config.o: EXTRA_CPPFLAGS = \
	-DETC_GITCONFIG='"$(ETC_GITCONFIG_SQ)"'
2225

2226 2227
attr.sp attr.s attr.o: EXTRA_CPPFLAGS = \
	-DETC_GITATTRIBUTES='"$(ETC_GITATTRIBUTES_SQ)"'
2228

2229 2230 2231
gettext.sp gettext.s gettext.o: EXTRA_CPPFLAGS = \
	-DGIT_LOCALE_PATH='"$(localedir_SQ)"'

2232 2233
http.sp http.s http.o: EXTRA_CPPFLAGS = \
	-DGIT_HTTP_USER_AGENT='"git/$(GIT_VERSION)"'
2234

2235
ifdef NO_EXPAT
2236
http-walker.sp http-walker.s http-walker.o: EXTRA_CPPFLAGS = -DNO_EXPAT
2237 2238
endif

2239
ifdef NO_REGEX
2240 2241
compat/regex/regex.sp compat/regex/regex.o: EXTRA_CPPFLAGS = \
	-DGAWK -DNO_MBSUPPORT
2242 2243
endif

2244
ifdef USE_NED_ALLOCATOR
2245
compat/nedmalloc/nedmalloc.sp compat/nedmalloc/nedmalloc.o: EXTRA_CPPFLAGS = \
2246 2247 2248
	-DNDEBUG -DOVERRIDE_STRDUP -DREPLACE_SYSTEM_ALLOCATOR
endif

2249
git-%$X: %.o GIT-LDFLAGS $(GITLIBS)
2250
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
2251

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

2256
git-http-fetch$X: revision.o http.o http-walker.o http-fetch.o GIT-LDFLAGS $(GITLIBS)
L
Linus Torvalds 已提交
2257
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2258
		$(LIBS) $(CURL_LIBCURL)
2259
git-http-push$X: revision.o http.o http-push.o GIT-LDFLAGS $(GITLIBS)
2260
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2261 2262
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

2263 2264 2265 2266 2267 2268
$(REMOTE_CURL_ALIASES): $(REMOTE_CURL_PRIMARY)
	$(QUIET_LNCP)$(RM) $@ && \
	ln $< $@ 2>/dev/null || \
	ln -s $< $@ 2>/dev/null || \
	cp $< $@

2269
$(REMOTE_CURL_PRIMARY): remote-curl.o http.o http-walker.o GIT-LDFLAGS $(GITLIBS)
2270 2271 2272
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

P
Petr Baudis 已提交
2273
$(LIB_FILE): $(LIB_OBJS)
2274
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)
P
Petr Baudis 已提交
2275

2276
$(XDIFF_LIB): $(XDIFF_OBJS)
2277
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(XDIFF_OBJS)
2278

J
Jonathan Nieder 已提交
2279 2280
$(VCSSVN_LIB): $(VCSSVN_OBJS)
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(VCSSVN_OBJS)
2281

P
Petr Baudis 已提交
2282 2283 2284
doc:
	$(MAKE) -C Documentation all

2285 2286 2287 2288 2289 2290
man:
	$(MAKE) -C Documentation man

html:
	$(MAKE) -C Documentation html

2291 2292 2293
info:
	$(MAKE) -C Documentation info

2294 2295 2296
pdf:
	$(MAKE) -C Documentation pdf

2297 2298 2299 2300 2301
XGETTEXT_FLAGS = \
	--force-po \
	--add-comments \
	--msgid-bugs-address="Git Mailing List <git@vger.kernel.org>" \
	--from-code=UTF-8
2302 2303
XGETTEXT_FLAGS_C = $(XGETTEXT_FLAGS) --language=C \
	--keyword=_ --keyword=N_ --keyword="Q_:1,2"
2304
XGETTEXT_FLAGS_SH = $(XGETTEXT_FLAGS) --language=Shell
2305
XGETTEXT_FLAGS_PERL = $(XGETTEXT_FLAGS) --keyword=__ --language=Perl
2306
LOCALIZED_C := $(C_OBJ:o=c) $(LIB_H) $(XDIFF_H) $(VCSSVN_H) $(MISC_H)
2307
LOCALIZED_SH := $(SCRIPT_SH)
2308 2309 2310 2311 2312 2313 2314
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
2315 2316

po/git.pot: $(LOCALIZED_C)
2317 2318 2319
	$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ $(XGETTEXT_FLAGS_C) $(LOCALIZED_C)
	$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_SH) \
		$(LOCALIZED_SH)
2320 2321
	$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_PERL) \
		$(LOCALIZED_PERL)
2322 2323 2324 2325
	mv $@+ $@

pot: po/git.pot

2326 2327 2328 2329 2330 2331 2332 2333 2334 2335
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 $@ $<

2336 2337 2338 2339
FIND_SOURCE_FILES = ( git ls-files '*.[hcS]' 2>/dev/null || \
			$(FIND) . \( -name .git -type d -prune \) \
				-o \( -name '*.[hcS]' -type f -print \) )

2340 2341
$(ETAGS_TARGET): FORCE
	$(RM) $(ETAGS_TARGET)
2342
	$(FIND_SOURCE_FILES) | xargs etags -a -o $(ETAGS_TARGET)
2343

2344
tags: FORCE
2345
	$(RM) tags
2346
	$(FIND_SOURCE_FILES) | xargs ctags -a
P
Petr Baudis 已提交
2347

K
Kristof Provost 已提交
2348 2349
cscope:
	$(RM) cscope*
2350
	$(FIND_SOURCE_FILES) | xargs cscope -b
K
Kristof Provost 已提交
2351

2352
### Detect prefix changes
2353
TRACK_CFLAGS = $(CC):$(subst ','\'',$(ALL_CFLAGS)):\
2354
             $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ):\
2355
             $(localedir_SQ):$(USE_GETTEXT_SCHEME)
2356

2357
GIT-CFLAGS: FORCE
2358 2359 2360 2361 2362 2363
	@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

2364 2365 2366 2367 2368 2369 2370 2371 2372
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 已提交
2373 2374 2375
# 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".
2376
GIT-BUILD-OPTIONS: FORCE
J
Junio C Hamano 已提交
2377
	@echo SHELL_PATH=\''$(subst ','\'',$(SHELL_PATH_SQ))'\' >$@
2378
	@echo PERL_PATH=\''$(subst ','\'',$(PERL_PATH_SQ))'\' >>$@
2379
	@echo DIFF=\''$(subst ','\'',$(subst ','\'',$(DIFF)))'\' >>$@
2380
	@echo PYTHON_PATH=\''$(subst ','\'',$(PYTHON_PATH_SQ))'\' >>$@
J
Junio C Hamano 已提交
2381
	@echo TAR=\''$(subst ','\'',$(subst ','\'',$(TAR)))'\' >>$@
J
Jeff King 已提交
2382
	@echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@
2383
	@echo USE_LIBPCRE=\''$(subst ','\'',$(subst ','\'',$(USE_LIBPCRE)))'\' >>$@
2384
	@echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@
J
Jeff King 已提交
2385
	@echo NO_PYTHON=\''$(subst ','\'',$(subst ','\'',$(NO_PYTHON)))'\' >>$@
2386 2387 2388 2389
	@echo NO_UNIX_SOCKETS=\''$(subst ','\'',$(subst ','\'',$(NO_UNIX_SOCKETS)))'\' >>$@
ifdef GIT_TEST_OPTS
	@echo GIT_TEST_OPTS=\''$(subst ','\'',$(subst ','\'',$(GIT_TEST_OPTS)))'\' >>$@
endif
2390 2391 2392 2393 2394 2395
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
2396
	@echo NO_GETTEXT=\''$(subst ','\'',$(subst ','\'',$(NO_GETTEXT)))'\' >>$@
2397
	@echo GETTEXT_POISON=\''$(subst ','\'',$(subst ','\'',$(GETTEXT_POISON)))'\' >>$@
2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409
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
2410

2411 2412 2413 2414
### Detect Tck/Tk interpreter path changes
ifndef NO_TCLTK
TRACK_VARS = $(subst ','\'',-DTCLTK_PATH='$(TCLTK_PATH_SQ)')

2415
GIT-GUI-VARS: FORCE
2416 2417 2418 2419 2420 2421 2422
	@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

2423 2424 2425 2426 2427 2428 2429 2430 2431 2432
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 $@
2433

2434 2435 2436 2437
# GNU make supports exporting all variables by "export" without parameters.
# However, the environment gets quite big, and some programs have problems
# with that.

2438
export NO_SVN_TESTS
2439

2440 2441
### Testing rules

2442
test: all
P
Petr Baudis 已提交
2443 2444
	$(MAKE) -C t/ all

2445 2446 2447 2448 2449
perf: all
	$(MAKE) -C t/perf/ all

.PHONY: test perf

R
René Scharfe 已提交
2450 2451
test-ctype$X: ctype.o

2452
test-date$X: date.o ctype.o
P
Petr Baudis 已提交
2453

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

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

2458
test-parse-options$X: parse-options.o parse-options-cb.o
2459

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

2462
.PRECIOUS: $(TEST_OBJS)
2463

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

2467 2468 2469
check-sha1:: test-sha1$X
	./test-sha1.sh

2470 2471 2472 2473 2474 2475 2476 2477 2478
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)

2479
check: common-cmds.h
2480
	@if sparse; \
2481
	then \
2482 2483
		echo 2>&1 "Use 'make sparse' instead"; \
		$(MAKE) --no-print-directory sparse; \
2484 2485 2486 2487
	else \
		echo 2>&1 "Did you mean 'make test'?"; \
		exit 1; \
	fi
P
Petr Baudis 已提交
2488

2489
remove-dashes:
2490
	./fixup-builtins $(BUILT_INS) $(PROGRAMS) $(SCRIPTS)
P
Petr Baudis 已提交
2491 2492 2493

### Installation rules

2494
ifneq ($(filter /%,$(firstword $(template_dir))),)
2495
template_instdir = $(template_dir)
2496 2497
else
template_instdir = $(prefix)/$(template_dir)
2498 2499 2500
endif
export template_instdir

2501
ifneq ($(filter /%,$(firstword $(gitexecdir))),)
2502
gitexec_instdir = $(gitexecdir)
2503 2504
else
gitexec_instdir = $(prefix)/$(gitexecdir)
2505 2506 2507 2508
endif
gitexec_instdir_SQ = $(subst ','\'',$(gitexec_instdir))
export gitexec_instdir

2509 2510 2511 2512 2513 2514 2515
ifneq ($(filter /%,$(firstword $(mergetoolsdir))),)
mergetools_instdir = $(mergetoolsdir)
else
mergetools_instdir = $(prefix)/$(mergetoolsdir)
endif
mergetools_instdir_SQ = $(subst ','\'',$(mergetools_instdir))

2516 2517
install_bindir_programs := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X)) $(BINDIR_PROGRAMS_NO_X)

2518
install: all
2519
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
2520 2521
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
	$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
2522
	$(INSTALL) -m 644 $(SCRIPT_LIB) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
2523
	$(INSTALL) $(install_bindir_programs) '$(DESTDIR_SQ)$(bindir_SQ)'
2524
	$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
2525
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(mergetools_instdir_SQ)'
2526
	$(INSTALL) -m 644 mergetools/* '$(DESTDIR_SQ)$(mergetools_instdir_SQ)'
2527 2528 2529 2530 2531
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
2532
ifndef NO_PERL
2533
	$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
J
Junio C Hamano 已提交
2534
	$(MAKE) -C gitweb install
2535
endif
2536 2537 2538
ifndef NO_PYTHON
	$(MAKE) -C git_remote_helpers prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
endif
E
Eygene Ryabinkin 已提交
2539
ifndef NO_TCLTK
J
Junio C Hamano 已提交
2540
	$(MAKE) -C gitk-git install
2541
	$(MAKE) -C git-gui gitexecdir='$(gitexec_instdir_SQ)' install
E
Eygene Ryabinkin 已提交
2542
endif
2543
ifneq (,$X)
2544
	$(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';)
2545
endif
2546

2547
	bindir=$$(cd '$(DESTDIR_SQ)$(bindir_SQ)' && pwd) && \
2548
	execdir=$$(cd '$(DESTDIR_SQ)$(gitexec_instdir_SQ)' && pwd) && \
2549
	{ test "$$bindir/" = "$$execdir/" || \
2550 2551
	  for p in git$X $(filter $(install_bindir_programs),$(ALL_PROGRAMS)); do \
		$(RM) "$$execdir/$$p" && \
2552
		test -z "$(NO_CROSS_DIRECTORY_HARDLINKS)" && \
2553 2554 2555 2556
		ln "$$bindir/$$p" "$$execdir/$$p" 2>/dev/null || \
		cp "$$bindir/$$p" "$$execdir/$$p" || exit; \
	  done; \
	} && \
2557 2558 2559 2560 2561 2562
	for p in $(filter $(install_bindir_programs),$(BUILT_INS)); do \
		$(RM) "$$bindir/$$p" && \
		ln "$$bindir/git$X" "$$bindir/$$p" 2>/dev/null || \
		ln -s "git$X" "$$bindir/$$p" 2>/dev/null || \
		cp "$$bindir/git$X" "$$bindir/$$p" || exit; \
	done && \
2563
	for p in $(BUILT_INS); do \
2564
		$(RM) "$$execdir/$$p" && \
J
Jeff King 已提交
2565 2566 2567
		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; \
2568
	done && \
2569 2570
	remote_curl_aliases="$(REMOTE_CURL_ALIASES)" && \
	for p in $$remote_curl_aliases; do \
2571 2572 2573 2574
		$(RM) "$$execdir/$$p" && \
		ln "$$execdir/git-remote-http$X" "$$execdir/$$p" 2>/dev/null || \
		ln -s "git-remote-http$X" "$$execdir/$$p" 2>/dev/null || \
		cp "$$execdir/git-remote-http$X" "$$execdir/$$p" || exit; \
2575
	done && \
2576
	./check_bindir "z$$bindir" "z$$execdir" "$$bindir/git-add$X"
P
Petr Baudis 已提交
2577

2578 2579 2580
install-gitweb:
	$(MAKE) -C gitweb install

P
Petr Baudis 已提交
2581 2582 2583
install-doc:
	$(MAKE) -C Documentation install

2584 2585 2586
install-man:
	$(MAKE) -C Documentation install-man

2587 2588 2589
install-html:
	$(MAKE) -C Documentation install-html

2590 2591 2592
install-info:
	$(MAKE) -C Documentation install-info

2593 2594 2595
install-pdf:
	$(MAKE) -C Documentation install-pdf

2596 2597
quick-install-doc:
	$(MAKE) -C Documentation quick-install
P
Petr Baudis 已提交
2598

2599 2600 2601
quick-install-man:
	$(MAKE) -C Documentation quick-install-man

2602 2603 2604
quick-install-html:
	$(MAKE) -C Documentation quick-install-html

P
Petr Baudis 已提交
2605 2606 2607 2608


### Maintainer's dist rules

2609
git.spec: git.spec.in
2610 2611
	sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@+
	mv $@+ $@
2612

J
Junio C Hamano 已提交
2613
GIT_TARNAME=git-$(GIT_VERSION)
2614
dist: git.spec git-archive$(X) configure
2615 2616
	./git-archive --format=tar \
		--prefix=$(GIT_TARNAME)/ HEAD^{tree} > $(GIT_TARNAME).tar
2617
	@mkdir -p $(GIT_TARNAME)
2618
	@cp git.spec configure $(GIT_TARNAME)
2619
	@echo $(GIT_VERSION) > $(GIT_TARNAME)/version
2620
	@$(MAKE) -C git-gui TARDIR=../$(GIT_TARNAME)/git-gui dist-version
2621
	$(TAR) rf $(GIT_TARNAME).tar \
2622
		$(GIT_TARNAME)/git.spec \
2623
		$(GIT_TARNAME)/configure \
2624
		$(GIT_TARNAME)/version \
2625
		$(GIT_TARNAME)/git-gui/version
2626
	@$(RM) -r $(GIT_TARNAME)
2627
	gzip -f -9 $(GIT_TARNAME).tar
2628 2629

rpm: dist
2630 2631 2632 2633
	$(RPMBUILD) \
		--define "_source_filedigest_algorithm md5" \
		--define "_binary_filedigest_algorithm md5" \
		-ta $(GIT_TARNAME).tar.gz
2634

2635 2636 2637
htmldocs = git-htmldocs-$(GIT_VERSION)
manpages = git-manpages-$(GIT_VERSION)
dist-doc:
2638
	$(RM) -r .doc-tmp-dir
2639 2640 2641 2642 2643
	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
	:
2644
	$(RM) -r .doc-tmp-dir
2645
	mkdir -p .doc-tmp-dir/man1 .doc-tmp-dir/man5 .doc-tmp-dir/man7
2646
	$(MAKE) -C Documentation DESTDIR=./ \
2647
		man1dir=../.doc-tmp-dir/man1 \
2648
		man5dir=../.doc-tmp-dir/man5 \
2649
		man7dir=../.doc-tmp-dir/man7 \
2650 2651 2652
		install
	cd .doc-tmp-dir && $(TAR) cf ../$(manpages).tar .
	gzip -n -9 -f $(manpages).tar
2653
	$(RM) -r .doc-tmp-dir
2654

P
Petr Baudis 已提交
2655
### Cleaning rules
2656

2657 2658 2659
distclean: clean
	$(RM) configure

2660 2661 2662 2663 2664
profile-clean:
	$(RM) $(addsuffix *.gcda,$(addprefix $(PROFILE_DIR)/, $(object_dirs)))
	$(RM) $(addsuffix *.gcno,$(addprefix $(PROFILE_DIR)/, $(object_dirs)))

clean: profile-clean
2665 2666
	$(RM) *.o block-sha1/*.o ppc/*.o compat/*.o compat/*/*.o xdiff/*.o vcs-svn/*.o \
		builtin/*.o $(LIB_FILE) $(XDIFF_LIB) $(VCSSVN_LIB)
2667
	$(RM) $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git$X
2668
	$(RM) $(TEST_PROGRAMS)
2669
	$(RM) -r bin-wrappers
2670
	$(RM) -r $(dep_dirs)
2671
	$(RM) -r po/build/
2672
	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h $(ETAGS_TARGET) tags cscope*
2673
	$(RM) -r autom4te.cache
2674
	$(RM) config.log config.mak.autogen config.mak.append config.status config.cache
2675 2676 2677
	$(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
2678
	$(MAKE) -C Documentation/ clean
2679
ifndef NO_PERL
2680
	$(MAKE) -C gitweb clean
2681
	$(MAKE) -C perl clean
2682 2683 2684
endif
ifndef NO_PYTHON
	$(MAKE) -C git_remote_helpers clean
2685
endif
P
Petr Baudis 已提交
2686
	$(MAKE) -C templates/ clean
2687
	$(MAKE) -C t/ clean
E
Eygene Ryabinkin 已提交
2688
ifndef NO_TCLTK
J
Junio C Hamano 已提交
2689
	$(MAKE) -C gitk-git clean
E
Eygene Ryabinkin 已提交
2690 2691
	$(MAKE) -C git-gui clean
endif
2692
	$(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-LDFLAGS GIT-GUI-VARS GIT-BUILD-OPTIONS
2693

2694
.PHONY: all install profile-clean clean strip
2695
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
2696
.PHONY: FORCE cscope
J
Junio C Hamano 已提交
2697

J
Junio C Hamano 已提交
2698 2699 2700
### Check documentation
#
check-docs::
2701
	@(for v in $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git gitk; \
J
Junio C Hamano 已提交
2702 2703 2704
	do \
		case "$$v" in \
		git-merge-octopus | git-merge-ours | git-merge-recursive | \
M
Miklos Vajna 已提交
2705
		git-merge-resolve | git-merge-subtree | \
2706
		git-fsck-objects | git-init-db | \
2707
		git-remote-* | git-stage | \
2708
		git-?*--?* ) continue ;; \
J
Junio C Hamano 已提交
2709 2710 2711
		esac ; \
		test -f "Documentation/$$v.txt" || \
		echo "no doc: $$v"; \
J
Junio C Hamano 已提交
2712
		sed -e '/^#/d' command-list.txt | \
2713
		grep -q "^$$v[ 	]" || \
J
Junio C Hamano 已提交
2714 2715 2716 2717
		case "$$v" in \
		git) ;; \
		*) echo "no link: $$v";; \
		esac ; \
2718 2719
	done; \
	( \
J
Junio C Hamano 已提交
2720
		sed -e '/^#/d' \
2721
		    -e 's/[ 	].*//' \
J
Junio C Hamano 已提交
2722
		    -e 's/^/listed /' command-list.txt; \
2723 2724 2725 2726 2727 2728 2729 2730
		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 | \
2731
		*,git-help | \
2732 2733 2734
		documented,gitattributes | \
		documented,gitignore | \
		documented,gitmodules | \
2735
		documented,gitcli | \
2736
		documented,git-tools | \
2737 2738 2739 2740 2741 2742
		documented,gitcore-tutorial | \
		documented,gitcvs-migration | \
		documented,gitdiffcore | \
		documented,gitglossary | \
		documented,githooks | \
		documented,gitrepository-layout | \
2743
		documented,gitrevisions | \
2744 2745
		documented,gittutorial | \
		documented,gittutorial-2 | \
2746
		documented,git-bisect-lk2009 | \
2747
		documented,git-remote-helpers | \
2748
		documented,gitworkflows | \
2749 2750
		sentinel,not,matching,is,ok ) continue ;; \
		esac; \
2751
		case " $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git gitk " in \
2752 2753 2754 2755
		*" $$cmd "*)	;; \
		*) echo "removed but $$how: $$cmd" ;; \
		esac; \
	done ) | sort
2756 2757 2758 2759 2760

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

2762 2763 2764 2765 2766 2767 2768 2769
### Test suite coverage testing
#
.PHONY: coverage coverage-clean coverage-build coverage-report

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

2770
object_dirs := $(sort $(dir $(OBJECTS)))
2771
coverage-clean:
2772 2773 2774 2775
	$(RM) $(addsuffix *.gcov,$(object_dirs))
	$(RM) $(addsuffix *.gcda,$(object_dirs))
	$(RM) $(addsuffix *.gcno,$(object_dirs))
	$(RM) coverage-untested-functions
2776
	$(RM) -r cover_db/
2777
	$(RM) -r cover_db_html/
2778 2779 2780

COVERAGE_CFLAGS = $(CFLAGS) -O0 -ftest-coverage -fprofile-arcs
COVERAGE_LDFLAGS = $(CFLAGS)  -O0 -lgcov
2781
GCOVFLAGS = --preserve-paths --branch-probabilities --all-blocks
2782 2783 2784 2785 2786 2787 2788

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

coverage-report:
2789
	$(QUIET_GCOV)for dir in $(object_dirs); do \
2790
		$(GCOV) $(GCOVFLAGS) --object-directory=$$dir $$dir*.c || exit; \
2791
	done
2792 2793

coverage-untested-functions: coverage-report
2794 2795
	grep '^function.*called 0 ' *.c.gcov \
		| sed -e 's/\([^:]*\)\.gcov: *function \([^ ]*\) called.*/\1: \2/' \
2796
		> coverage-untested-functions
2797 2798 2799

cover_db: coverage-report
	gcov2perl -db cover_db *.gcov
2800 2801 2802

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