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

S
Shawn O. Pearce 已提交
4
# Define V=1 to have a more verbose compile.
5
#
6 7 8 9 10
# Define SHELL_PATH to a POSIX shell if your /bin/sh is broken.
#
# Define SANE_TOOL_PATH to a colon-separated list of paths to prepend
# to PATH if your tools in /usr/bin are broken.
#
11 12 13 14
# Define SNPRINTF_RETURNS_BOGUS if your are on a system which snprintf()
# or vsnprintf() return -1 instead of number of characters which would
# have been written to the final string if enough space had been available.
#
15 16 17
# Define FREAD_READS_DIRECTORIES if your are on a system which succeeds
# when attempting to read from an fopen'ed directory.
#
18
# Define NO_OPENSSL environment variable if you do not have OpenSSL.
19
# This also implies BLK_SHA1.
20
#
21
# Define NO_CURL if you do not have libcurl installed.  git-http-pull and
22 23
# git-http-push are not built, and you cannot use http:// and https://
# transports.
24
#
P
Patrick Mauritz 已提交
25 26 27
# Define CURLDIR=/foo/bar if your curl header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
28 29 30
# Define NO_EXPAT if you do not have expat installed.  git-http-push is
# not built, and you cannot push using http:// and https:// transports.
#
31 32 33
# Define EXPATDIR=/foo/bar if your expat header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
34 35
# Define NO_D_INO_IN_DIRENT if you don't have d_ino in your struct dirent.
#
36 37 38
# Define NO_D_TYPE_IN_DIRENT if your platform defines DT_UNKNOWN but lacks
# d_type in struct dirent (latest Cygwin -- will be fixed soonish).
#
39 40 41
# Define NO_C99_FORMAT if your formatted IO functions (printf/scanf et.al.)
# do not support the 'size specifiers' introduced by C99, namely ll, hh,
# j, z, t. (representing long long int, char, intmax_t, size_t, ptrdiff_t).
42
# some C compilers supported these specifiers prior to C99 as an extension.
43
#
44 45
# Define NO_STRCASESTR if you don't have strcasestr.
#
R
René Scharfe 已提交
46 47
# Define NO_MEMMEM if you don't have memmem.
#
48 49
# Define NO_STRLCPY if you don't have strlcpy.
#
50 51 52 53
# Define NO_STRTOUMAX if you don't have strtoumax in the C library.
# If your compiler also does not support long long or does not have
# strtoull, define NO_STRTOULL.
#
J
Jason Riedy 已提交
54 55
# Define NO_SETENV if you don't have setenv in the C library.
#
56 57
# Define NO_UNSETENV if you don't have unsetenv in the C library.
#
58 59
# Define NO_MKDTEMP if you don't have mkdtemp in the C library.
#
60 61
# Define NO_MKSTEMPS if you don't have mkstemps in the C library.
#
62 63
# Define NO_LIBGEN_H if you don't have libgen.h.
#
64 65
# Define NEEDS_LIBGEN if your libgen needs -lgen when linking
#
66 67
# Define NO_SYS_SELECT_H if you don't have sys/select.h.
#
68 69
# Define NO_SYMLINK_HEAD if you never want .git/HEAD to be a symbolic link.
# Enable it on Windows.  By default, symrefs are still used.
70
#
P
Pavel Roskin 已提交
71
# Define NO_SVN_TESTS if you want to skip time-consuming SVN interoperability
E
Eric Wong 已提交
72 73 74
# tests.  These tests take up a significant amount of the total test time
# but are not needed unless you plan to talk to SVN repos.
#
75 76 77 78 79 80 81 82 83 84 85 86
# Define NO_FINK if you are building on Darwin/Mac OS X, have Fink
# installed in /sw, but don't want GIT to link against any libraries
# installed there.  If defined you may specify your own (or Fink's)
# include directories and library directories by defining CFLAGS
# and LDFLAGS appropriately.
#
# Define NO_DARWIN_PORTS if you are building on Darwin/Mac OS X,
# have DarwinPorts installed in /opt/local, but don't want GIT to
# link against any libraries installed there.  If defined you may
# specify your own (or DarwinPort's) include directories and
# library directories by defining CFLAGS and LDFLAGS appropriately.
#
87 88 89 90
# Define BLK_SHA1 environment variable if you want the C version
# of the SHA1 that assumes you can do unaligned 32-bit loads and
# have a fast htonl() function.
#
91 92
# Define PPC_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine optimized for PowerPC.
93
#
94 95 96
# Define NEEDS_CRYPTO_WITH_SSL if you need -lcrypto when using -lssl (Darwin).
#
# Define NEEDS_SSL_WITH_CRYPTO if you need -lssl when using -lcrypto (Darwin).
97
#
98
# Define NEEDS_LIBICONV if linking with libc is not enough (Darwin).
99 100 101 102
#
# Define NEEDS_SOCKET if linking with libc is not enough (SunOS,
# Patrick Mauritz).
#
103 104 105 106
# Define NEEDS_RESOLV if linking with -lnsl and/or -lsocket is not enough.
# Notably on Solaris hstrerror resides in libresolv and on Solaris 7
# inet_ntop and inet_pton additionally reside there.
#
107 108
# Define NO_MMAP if you want to avoid mmap.
#
J
Junio C Hamano 已提交
109 110
# Define NO_PTHREADS if you do not have or do not want to use Pthreads.
#
111 112 113
# Define NO_PREAD if you have a problem with pread() system call (e.g.
# cygwin.dll before v1.5.22).
#
114 115 116
# Define NO_FAST_WORKING_DIRECTORY if accessing objects in pack files is
# generally faster on your platform than accessing the working directory.
#
117 118 119
# Define NO_TRUSTABLE_FILEMODE if your filesystem may claim to support
# the executable mode bit, but doesn't really do so.
#
120 121
# Define NO_IPV6 if you lack IPv6 support and getaddrinfo().
#
122 123 124
# Define NO_SOCKADDR_STORAGE if your platform does not have struct
# sockaddr_storage.
#
125 126
# Define NO_ICONV if your libc does not properly support iconv.
#
127 128 129
# Define OLD_ICONV if your library has an old iconv(), where the second
# (input buffer pointer) parameter is declared with type (const char **).
#
130 131
# Define NO_DEFLATE_BOUND if your zlib does not have deflateBound.
#
132 133 134
# Define NO_R_TO_GCC_LINKER if your gcc does not like "-R/path/lib"
# that tells runtime paths to dynamic libraries;
# "-Wl,-rpath=/path/lib" is used instead.
135
#
136 137 138 139 140
# Define USE_NSEC below if you want git to care about sub-second file mtimes
# and ctimes. Note that you need recent glibc (at least 2.2.4) for this, and
# it will BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely
# randomly break unless your underlying filesystem supports those sub-second
# times (my ext3 doesn't).
141
#
142 143 144
# Define USE_ST_TIMESPEC if your "struct stat" uses "st_ctimespec" instead of
# "st_ctim"
#
145 146 147
# Define NO_NSEC if your "struct stat" does not have "st_ctim.tv_nsec"
# available.  This automatically turns USE_NSEC off.
#
148
# Define USE_STDEV below if you want git to care about the underlying device
149
# change being considered an inode change from the update-index perspective.
150
#
151 152 153
# Define NO_ST_BLOCKS_IN_STRUCT_STAT if your platform does not have st_blocks
# field that counts the on-disk footprint in 512-byte blocks.
#
154 155
# Define ASCIIDOC8 if you want to format documentation with AsciiDoc 8
#
156 157 158 159 160
# Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72
# (not v1.73 or v1.71).
#
# Define ASCIIDOC_NO_ROFF if your DocBook XSL escapes raw roff directives
# (versions 1.72 and later and 1.68.1 and earlier).
161
#
162 163 164
# Define NO_PERL_MAKEMAKER if you cannot use Makefiles generated by perl's
# MakeMaker (e.g. using ActiveState under Cygwin).
#
165 166
# Define NO_PERL if you do not want Perl scripts or libraries at all.
#
E
Eygene Ryabinkin 已提交
167 168
# Define NO_TCLTK if you do not want Tcl/Tk GUI.
#
169 170 171 172 173
# 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.
174 175 176
# If not set it defaults to the bare 'wish'. If it is set to the empty
# string then NO_TCLTK will be forced (this is used by configure script).
#
N
Nicolas Pitre 已提交
177 178 179
# Define THREADED_DELTA_SEARCH if you have pthreads and wish to exploit
# parallel delta searching when packing objects.
#
180 181 182 183
# Define INTERNAL_QSORT to use Git's implementation of qsort(), which
# is a simplified version of the merge sort used in glibc. This is
# recommended if Git triggers O(n^2) behavior in your platform's qsort().
#
J
Jeff King 已提交
184 185 186
# Define NO_EXTERNAL_GREP if you don't want "git grep" to ever call
# your external grep (e.g., if your system lacks grep, if its grep is
# broken, or spawning external process is slower than built-in grep git has).
187 188 189 190
#
# 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.
191
#
192 193
# Define OBJECT_CREATION_USES_RENAMES if your operating systems has problems
# when hardlinking a file to another name and unlinking the original file right
194
# away (some NTFS drivers seem to zero the contents in that scenario).
195
#
196 197
# 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.
198 199 200
#
# Define USE_NED_ALLOCATOR if you want to replace the platforms default
# memory allocators with the nedmalloc allocator written by Niall Douglas.
201 202
#
# Define NO_REGEX if you have no or inferior regex support in your C library.
203

204
GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
205
	@$(SHELL_PATH) ./GIT-VERSION-GEN
206
-include GIT-VERSION-FILE
207

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

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

217
CFLAGS = -g -O2 -Wall
J
Junio C Hamano 已提交
218
LDFLAGS =
219
ALL_CFLAGS = $(CFLAGS)
J
Junio C Hamano 已提交
220
ALL_LDFLAGS = $(LDFLAGS)
J
Junio C Hamano 已提交
221
STRIP ?= strip
222

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

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

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

273
export prefix bindir sharedir sysconfdir
274

275 276
CC = gcc
AR = ar
277
RM = rm -f
278
TAR = tar
279
FIND = find
280 281
INSTALL = install
RPMBUILD = rpmbuild
282
TCL_PATH = tclsh
283
TCLTK_PATH = wish
284
PTHREAD_LIBS = -lpthread
285

286 287
export TCL_PATH TCLTK_PATH

288 289
# sparse is architecture-neutral, which means that we need to tell it
# explicitly what architecture to check for. Fix this up for yours..
290
SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__
291

P
Petr Baudis 已提交
292 293 294 295


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

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

302 303 304 305 306 307 308 309 310 311 312 313
# Guard against environment variables
BUILTIN_OBJS =
BUILT_INS =
COMPAT_CFLAGS =
COMPAT_OBJS =
LIB_H =
LIB_OBJS =
PROGRAMS =
SCRIPT_PERL =
SCRIPT_SH =
TEST_PROGRAMS =

314 315
SCRIPT_SH += git-am.sh
SCRIPT_SH += git-bisect.sh
316
SCRIPT_SH += git-difftool--helper.sh
317 318 319 320 321 322
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
323
SCRIPT_SH += git-mergetool--lib.sh
324 325 326 327 328 329 330 331 332 333 334 335 336
SCRIPT_SH += git-parse-remote.sh
SCRIPT_SH += git-pull.sh
SCRIPT_SH += git-quiltimport.sh
SCRIPT_SH += git-rebase--interactive.sh
SCRIPT_SH += git-rebase.sh
SCRIPT_SH += git-repack.sh
SCRIPT_SH += git-request-pull.sh
SCRIPT_SH += git-sh-setup.sh
SCRIPT_SH += git-stash.sh
SCRIPT_SH += git-submodule.sh
SCRIPT_SH += git-web--browse.sh

SCRIPT_PERL += git-add--interactive.perl
337
SCRIPT_PERL += git-difftool.perl
338 339 340 341 342 343 344
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
345

346 347
SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
	  $(patsubst %.perl,%,$(SCRIPT_PERL)) \
348
	  git-instaweb
349

350 351
# Empty...
EXTRA_PROGRAMS =
352

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

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

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

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

E
Eygene Ryabinkin 已提交
391
# what 'all' will build but not install in gitexecdir
392
OTHER_PROGRAMS = git$X
E
Eygene Ryabinkin 已提交
393

394 395 396 397 398 399 400
# 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
401

L
Luben Tuikov 已提交
402 403
export PERL_PATH

L
Linus Torvalds 已提交
404
LIB_FILE=libgit.a
405
XDIFF_LIB=xdiff/lib.a
J
Junio C Hamano 已提交
406

407
LIB_H += advice.h
408 409 410 411 412 413 414
LIB_H += archive.h
LIB_H += attr.h
LIB_H += blob.h
LIB_H += builtin.h
LIB_H += cache.h
LIB_H += cache-tree.h
LIB_H += commit.h
415
LIB_H += compat/cygwin.h
416
LIB_H += compat/mingw.h
417 418 419 420 421 422 423 424
LIB_H += csum-file.h
LIB_H += decorate.h
LIB_H += delta.h
LIB_H += diffcore.h
LIB_H += diff.h
LIB_H += dir.h
LIB_H += fsck.h
LIB_H += git-compat-util.h
A
Adam Simpkins 已提交
425
LIB_H += graph.h
426 427
LIB_H += grep.h
LIB_H += hash.h
428
LIB_H += help.h
429
LIB_H += levenshtein.h
430 431 432 433
LIB_H += list-objects.h
LIB_H += ll-merge.h
LIB_H += log-tree.h
LIB_H += mailmap.h
434
LIB_H += merge-recursive.h
435 436
LIB_H += object.h
LIB_H += pack.h
437
LIB_H += pack-refs.h
438 439 440 441 442 443 444 445 446
LIB_H += pack-revindex.h
LIB_H += parse-options.h
LIB_H += patch-ids.h
LIB_H += pkt-line.h
LIB_H += progress.h
LIB_H += quote.h
LIB_H += reflog-walk.h
LIB_H += refs.h
LIB_H += remote.h
447
LIB_H += rerere.h
448 449
LIB_H += revision.h
LIB_H += run-command.h
450
LIB_H += sha1-lookup.h
451
LIB_H += sideband.h
452
LIB_H += sigchain.h
453
LIB_H += strbuf.h
454
LIB_H += string-list.h
455 456 457 458 459
LIB_H += tag.h
LIB_H += transport.h
LIB_H += tree.h
LIB_H += tree-walk.h
LIB_H += unpack-trees.h
460
LIB_H += userdiff.h
461
LIB_H += utf8.h
462
LIB_H += wt-status.h
463

464
LIB_OBJS += abspath.o
465
LIB_OBJS += advice.o
466 467 468 469 470 471 472
LIB_OBJS += alias.o
LIB_OBJS += alloc.o
LIB_OBJS += archive.o
LIB_OBJS += archive-tar.o
LIB_OBJS += archive-zip.o
LIB_OBJS += attr.o
LIB_OBJS += base85.o
473
LIB_OBJS += bisect.o
474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495
LIB_OBJS += blob.o
LIB_OBJS += branch.o
LIB_OBJS += bundle.o
LIB_OBJS += cache-tree.o
LIB_OBJS += color.o
LIB_OBJS += combine-diff.o
LIB_OBJS += commit.o
LIB_OBJS += config.o
LIB_OBJS += connect.o
LIB_OBJS += convert.o
LIB_OBJS += copy.o
LIB_OBJS += csum-file.o
LIB_OBJS += ctype.o
LIB_OBJS += date.o
LIB_OBJS += decorate.o
LIB_OBJS += diffcore-break.o
LIB_OBJS += diffcore-delta.o
LIB_OBJS += diffcore-order.o
LIB_OBJS += diffcore-pickaxe.o
LIB_OBJS += diffcore-rename.o
LIB_OBJS += diff-delta.o
LIB_OBJS += diff-lib.o
496
LIB_OBJS += diff-no-index.o
497 498
LIB_OBJS += diff.o
LIB_OBJS += dir.o
499
LIB_OBJS += editor.o
500 501 502 503
LIB_OBJS += entry.o
LIB_OBJS += environment.o
LIB_OBJS += exec_cmd.o
LIB_OBJS += fsck.o
A
Adam Simpkins 已提交
504
LIB_OBJS += graph.o
505 506 507 508
LIB_OBJS += grep.o
LIB_OBJS += hash.o
LIB_OBJS += help.o
LIB_OBJS += ident.o
509
LIB_OBJS += levenshtein.o
510 511 512 513 514 515 516
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
517
LIB_OBJS += merge-recursive.o
518
LIB_OBJS += name-hash.o
519 520
LIB_OBJS += object.o
LIB_OBJS += pack-check.o
521
LIB_OBJS += pack-refs.o
522 523 524 525 526 527 528 529
LIB_OBJS += pack-revindex.o
LIB_OBJS += pack-write.o
LIB_OBJS += pager.o
LIB_OBJS += parse-options.o
LIB_OBJS += patch-delta.o
LIB_OBJS += patch-ids.o
LIB_OBJS += path.o
LIB_OBJS += pkt-line.o
530
LIB_OBJS += preload-index.o
531 532 533 534 535 536 537 538
LIB_OBJS += pretty.o
LIB_OBJS += progress.o
LIB_OBJS += quote.o
LIB_OBJS += reachable.o
LIB_OBJS += read-cache.o
LIB_OBJS += reflog-walk.o
LIB_OBJS += refs.o
LIB_OBJS += remote.o
539
LIB_OBJS += replace_object.o
540
LIB_OBJS += rerere.o
541 542 543 544
LIB_OBJS += revision.o
LIB_OBJS += run-command.o
LIB_OBJS += server-info.o
LIB_OBJS += setup.o
545
LIB_OBJS += sha1-lookup.o
546
LIB_OBJS += sha1_file.o
547 548 549
LIB_OBJS += sha1_name.o
LIB_OBJS += shallow.o
LIB_OBJS += sideband.o
550
LIB_OBJS += sigchain.o
551
LIB_OBJS += strbuf.o
552
LIB_OBJS += string-list.o
553 554 555 556
LIB_OBJS += symlinks.o
LIB_OBJS += tag.o
LIB_OBJS += trace.o
LIB_OBJS += transport.o
557
LIB_OBJS += transport-helper.o
558 559 560 561 562
LIB_OBJS += tree-diff.o
LIB_OBJS += tree.o
LIB_OBJS += tree-walk.o
LIB_OBJS += unpack-trees.o
LIB_OBJS += usage.o
563
LIB_OBJS += userdiff.o
564 565
LIB_OBJS += utf8.o
LIB_OBJS += walker.o
566
LIB_OBJS += wrapper.o
567 568 569 570 571 572 573 574 575
LIB_OBJS += write_or_die.o
LIB_OBJS += ws.o
LIB_OBJS += wt-status.o
LIB_OBJS += xdiff-interface.o

BUILTIN_OBJS += builtin-add.o
BUILTIN_OBJS += builtin-annotate.o
BUILTIN_OBJS += builtin-apply.o
BUILTIN_OBJS += builtin-archive.o
576
BUILTIN_OBJS += builtin-bisect--helper.o
577 578 579 580 581 582 583 584 585
BUILTIN_OBJS += builtin-blame.o
BUILTIN_OBJS += builtin-branch.o
BUILTIN_OBJS += builtin-bundle.o
BUILTIN_OBJS += builtin-cat-file.o
BUILTIN_OBJS += builtin-check-attr.o
BUILTIN_OBJS += builtin-check-ref-format.o
BUILTIN_OBJS += builtin-checkout-index.o
BUILTIN_OBJS += builtin-checkout.o
BUILTIN_OBJS += builtin-clean.o
D
Daniel Barkalow 已提交
586
BUILTIN_OBJS += builtin-clone.o
587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604
BUILTIN_OBJS += builtin-commit-tree.o
BUILTIN_OBJS += builtin-commit.o
BUILTIN_OBJS += builtin-config.o
BUILTIN_OBJS += builtin-count-objects.o
BUILTIN_OBJS += builtin-describe.o
BUILTIN_OBJS += builtin-diff-files.o
BUILTIN_OBJS += builtin-diff-index.o
BUILTIN_OBJS += builtin-diff-tree.o
BUILTIN_OBJS += builtin-diff.o
BUILTIN_OBJS += builtin-fast-export.o
BUILTIN_OBJS += builtin-fetch--tool.o
BUILTIN_OBJS += builtin-fetch-pack.o
BUILTIN_OBJS += builtin-fetch.o
BUILTIN_OBJS += builtin-fmt-merge-msg.o
BUILTIN_OBJS += builtin-for-each-ref.o
BUILTIN_OBJS += builtin-fsck.o
BUILTIN_OBJS += builtin-gc.o
BUILTIN_OBJS += builtin-grep.o
M
Miklos Vajna 已提交
605
BUILTIN_OBJS += builtin-help.o
606 607 608 609 610 611 612
BUILTIN_OBJS += builtin-init-db.o
BUILTIN_OBJS += builtin-log.o
BUILTIN_OBJS += builtin-ls-files.o
BUILTIN_OBJS += builtin-ls-remote.o
BUILTIN_OBJS += builtin-ls-tree.o
BUILTIN_OBJS += builtin-mailinfo.o
BUILTIN_OBJS += builtin-mailsplit.o
M
Miklos Vajna 已提交
613
BUILTIN_OBJS += builtin-merge.o
614 615 616 617
BUILTIN_OBJS += builtin-merge-base.o
BUILTIN_OBJS += builtin-merge-file.o
BUILTIN_OBJS += builtin-merge-ours.o
BUILTIN_OBJS += builtin-merge-recursive.o
J
Junio C Hamano 已提交
618
BUILTIN_OBJS += builtin-mktree.o
619 620 621 622 623 624 625 626
BUILTIN_OBJS += builtin-mv.o
BUILTIN_OBJS += builtin-name-rev.o
BUILTIN_OBJS += builtin-pack-objects.o
BUILTIN_OBJS += builtin-pack-refs.o
BUILTIN_OBJS += builtin-prune-packed.o
BUILTIN_OBJS += builtin-prune.o
BUILTIN_OBJS += builtin-push.o
BUILTIN_OBJS += builtin-read-tree.o
J
Junio C Hamano 已提交
627
BUILTIN_OBJS += builtin-receive-pack.o
628 629
BUILTIN_OBJS += builtin-reflog.o
BUILTIN_OBJS += builtin-remote.o
C
Christian Couder 已提交
630
BUILTIN_OBJS += builtin-replace.o
631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647
BUILTIN_OBJS += builtin-rerere.o
BUILTIN_OBJS += builtin-reset.o
BUILTIN_OBJS += builtin-rev-list.o
BUILTIN_OBJS += builtin-rev-parse.o
BUILTIN_OBJS += builtin-revert.o
BUILTIN_OBJS += builtin-rm.o
BUILTIN_OBJS += builtin-send-pack.o
BUILTIN_OBJS += builtin-shortlog.o
BUILTIN_OBJS += builtin-show-branch.o
BUILTIN_OBJS += builtin-show-ref.o
BUILTIN_OBJS += builtin-stripspace.o
BUILTIN_OBJS += builtin-symbolic-ref.o
BUILTIN_OBJS += builtin-tag.o
BUILTIN_OBJS += builtin-tar-tree.o
BUILTIN_OBJS += builtin-unpack-objects.o
BUILTIN_OBJS += builtin-update-index.o
BUILTIN_OBJS += builtin-update-ref.o
648
BUILTIN_OBJS += builtin-update-server-info.o
649 650 651 652
BUILTIN_OBJS += builtin-upload-archive.o
BUILTIN_OBJS += builtin-verify-pack.o
BUILTIN_OBJS += builtin-verify-tag.o
BUILTIN_OBJS += builtin-write-tree.o
653

654
GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
655
EXTLIBS =
656

657 658 659
#
# Platform specific tweaks
#
660 661 662 663 664

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

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

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

1001
-include config.mak.autogen
1002
-include config.mak
1003

1004
ifdef SANE_TOOL_PATH
1005 1006
SANE_TOOL_PATH_SQ = $(subst ','\'',$(SANE_TOOL_PATH))
BROKEN_PATH_FIX = 's|^\# @@BROKEN_PATH_FIX@@$$|git_broken_path_fix $(SANE_TOOL_PATH_SQ)|'
1007 1008
PATH := $(SANE_TOOL_PATH):${PATH}
else
1009
BROKEN_PATH_FIX = '/^\# @@BROKEN_PATH_FIX@@$$/d'
1010 1011
endif

1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024
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
1025
	PTHREAD_LIBS =
1026 1027
endif

1028 1029 1030 1031 1032 1033 1034 1035
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
1036 1037
endif

1038 1039 1040 1041 1042
ifdef NO_LIBGEN_H
	COMPAT_CFLAGS += -DNO_LIBGEN_H
	COMPAT_OBJS += compat/basename.o
endif

D
Daniel Barkalow 已提交
1043 1044 1045
ifdef NO_CURL
	BASIC_CFLAGS += -DNO_CURL
else
1046
	ifdef CURLDIR
1047
		# Try "-Wl,-rpath=$(CURLDIR)/$(lib)" in such a case.
1048
		BASIC_CFLAGS += -I$(CURLDIR)/include
1049
		CURL_LIBCURL = -L$(CURLDIR)/$(lib) $(CC_LD_DYNPATH)$(CURLDIR)/$(lib) -lcurl
1050 1051 1052
	else
		CURL_LIBCURL = -lcurl
	endif
1053
	PROGRAMS += git-remote-curl$X git-http-fetch$X
1054 1055 1056 1057 1058
	curl_check := $(shell (echo 070908; curl-config --vernum) | sort -r | sed -ne 2p)
	ifeq "$(curl_check)" "070908"
		ifndef NO_EXPAT
			PROGRAMS += git-http-push$X
		endif
1059
	endif
1060
	ifndef NO_EXPAT
1061 1062 1063 1064 1065 1066
		ifdef EXPATDIR
			BASIC_CFLAGS += -I$(EXPATDIR)/include
			EXPAT_LIBEXPAT = -L$(EXPATDIR)/$(lib) $(CC_LD_DYNPATH)$(EXPATDIR)/$(lib) -lexpat
		else
			EXPAT_LIBEXPAT = -lexpat
		endif
1067
	endif
1068 1069
endif

1070 1071
ifdef ZLIB_PATH
	BASIC_CFLAGS += -I$(ZLIB_PATH)/include
1072
	EXTLIBS += -L$(ZLIB_PATH)/$(lib) $(CC_LD_DYNPATH)$(ZLIB_PATH)/$(lib)
1073 1074 1075
endif
EXTLIBS += -lz

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

1230
ifdef NO_ICONV
1231
	BASIC_CFLAGS += -DNO_ICONV
1232 1233
endif

1234 1235 1236 1237
ifdef OLD_ICONV
	BASIC_CFLAGS += -DOLD_ICONV
endif

1238 1239 1240 1241
ifdef NO_DEFLATE_BOUND
	BASIC_CFLAGS += -DNO_DEFLATE_BOUND
endif

1242 1243 1244 1245
ifdef BLK_SHA1
	SHA1_HEADER = "block-sha1/sha1.h"
	LIB_OBJS += block-sha1/sha1.o
else
1246 1247 1248 1249 1250
ifdef PPC_SHA1
	SHA1_HEADER = "ppc/sha1.h"
	LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
else
	SHA1_HEADER = <openssl/sha.h>
1251
	EXTLIBS += $(LIB_4_CRYPTO)
1252 1253
endif
endif
1254 1255 1256
ifdef NO_PERL_MAKEMAKER
	export NO_PERL_MAKEMAKER
endif
1257 1258 1259 1260
ifdef NO_HSTRERROR
	COMPAT_CFLAGS += -DNO_HSTRERROR
	COMPAT_OBJS += compat/hstrerror.o
endif
R
René Scharfe 已提交
1261 1262 1263 1264
ifdef NO_MEMMEM
	COMPAT_CFLAGS += -DNO_MEMMEM
	COMPAT_OBJS += compat/memmem.o
endif
1265 1266 1267 1268
ifdef INTERNAL_QSORT
	COMPAT_CFLAGS += -DINTERNAL_QSORT
	COMPAT_OBJS += compat/qsort.o
endif
1269 1270 1271
ifdef RUNTIME_PREFIX
	COMPAT_CFLAGS += -DRUNTIME_PREFIX
endif
1272

J
Junio C Hamano 已提交
1273 1274 1275 1276 1277 1278 1279
ifdef NO_PTHREADS
	THREADED_DELTA_SEARCH =
	BASIC_CFLAGS += -DNO_PTHREADS
else
	EXTLIBS += $(PTHREAD_LIBS)
endif

N
Nicolas Pitre 已提交
1280 1281
ifdef THREADED_DELTA_SEARCH
	BASIC_CFLAGS += -DTHREADED_DELTA_SEARCH
1282
	LIB_OBJS += thread-utils.o
N
Nicolas Pitre 已提交
1283
endif
1284 1285 1286
ifdef DIR_HAS_BSD_GROUP_SEMANTICS
	COMPAT_CFLAGS += -DDIR_HAS_BSD_GROUP_SEMANTICS
endif
J
Jeff King 已提交
1287 1288 1289
ifdef NO_EXTERNAL_GREP
	BASIC_CFLAGS += -DNO_EXTERNAL_GREP
endif
1290 1291 1292
ifdef UNRELIABLE_FSTAT
	BASIC_CFLAGS += -DUNRELIABLE_FSTAT
endif
1293 1294 1295 1296
ifdef NO_REGEX
	COMPAT_CFLAGS += -Icompat/regex
	COMPAT_OBJS += compat/regex/regex.o
endif
N
Nicolas Pitre 已提交
1297

1298 1299 1300 1301 1302
ifdef USE_NED_ALLOCATOR
       COMPAT_CFLAGS += -DUSE_NED_ALLOCATOR -DOVERRIDE_STRDUP -DNDEBUG -DREPLACE_SYSTEM_ALLOCATOR -Icompat/nedmalloc
       COMPAT_OBJS += compat/nedmalloc/nedmalloc.o
endif

1303 1304 1305 1306
ifeq ($(TCLTK_PATH),)
NO_TCLTK=NoThanks
endif

1307 1308 1309 1310
ifeq ($(PERL_PATH),)
NO_PERL=NoThanks
endif

1311
QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
1312 1313
QUIET_SUBDIR1  =

1314 1315 1316 1317 1318 1319
ifneq ($(findstring $(MAKEFLAGS),w),w)
PRINT_DIR = --no-print-directory
else # "make -w"
NO_SUBDIR = :
endif

1320
ifneq ($(findstring $(MAKEFLAGS),s),s)
S
Shawn O. Pearce 已提交
1321
ifndef V
A
Alex Riesen 已提交
1322
	QUIET_CC       = @echo '   ' CC $@;
1323 1324 1325 1326
	QUIET_AR       = @echo '   ' AR $@;
	QUIET_LINK     = @echo '   ' LINK $@;
	QUIET_BUILT_IN = @echo '   ' BUILTIN $@;
	QUIET_GEN      = @echo '   ' GEN $@;
1327
	QUIET_LNCP     = @echo '   ' LN/CP $@;
1328
	QUIET_SUBDIR0  = +@subdir=
1329 1330
	QUIET_SUBDIR1  = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
			 $(MAKE) $(PRINT_DIR) -C $$subdir
S
Shawn O. Pearce 已提交
1331
	export V
A
Alex Riesen 已提交
1332
	export QUIET_GEN
1333 1334
	export QUIET_BUILT_IN
endif
1335
endif
1336

1337 1338 1339 1340
ifdef ASCIIDOC8
	export ASCIIDOC8
endif

P
Pavel Roskin 已提交
1341
# Shell quote (do not use $(call) to accommodate ancient setups);
1342 1343

SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER))
1344
ETC_GITCONFIG_SQ = $(subst ','\'',$(ETC_GITCONFIG))
1345 1346 1347

DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
bindir_SQ = $(subst ','\'',$(bindir))
1348
bindir_relative_SQ = $(subst ','\'',$(bindir_relative))
1349
mandir_SQ = $(subst ','\'',$(mandir))
1350
infodir_SQ = $(subst ','\'',$(infodir))
1351 1352
gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
template_dir_SQ = $(subst ','\'',$(template_dir))
1353
htmldir_SQ = $(subst ','\'',$(htmldir))
1354
prefix_SQ = $(subst ','\'',$(prefix))
1355 1356 1357

SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
1358
TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH))
1359

1360 1361
LIBS = $(GITLIBS) $(EXTLIBS)

1362
BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' \
1363
	$(COMPAT_CFLAGS)
J
Jason Riedy 已提交
1364
LIB_OBJS += $(COMPAT_OBJS)
1365 1366 1367 1368

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

1369
export TAR INSTALL DESTDIR SHELL_PATH
1370 1371


P
Petr Baudis 已提交
1372 1373
### Build rules

1374 1375
SHELL = $(SHELL_PATH)

1376
all:: shell_compatibility_test $(ALL_PROGRAMS) $(BUILT_INS) $(OTHER_PROGRAMS) GIT-BUILD-OPTIONS
1377
ifneq (,$X)
1378
	$(QUIET_BUILT_IN)$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), test '$p' -ef '$p$X' || $(RM) '$p';)
1379
endif
1380

1381
all::
E
Eygene Ryabinkin 已提交
1382
ifndef NO_TCLTK
1383
	$(QUIET_SUBDIR0)git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all
J
Junio C Hamano 已提交
1384
	$(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all
E
Eygene Ryabinkin 已提交
1385
endif
1386
ifndef NO_PERL
1387
	$(QUIET_SUBDIR0)perl $(QUIET_SUBDIR1) PERL_PATH='$(PERL_PATH_SQ)' prefix='$(prefix_SQ)' all
1388
endif
1389
	$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1)
1390

1391 1392 1393 1394 1395
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 已提交
1396 1397 1398
strip: $(PROGRAMS) git$X
	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X

1399 1400
git.o: git.c common-cmds.h GIT-CFLAGS
	$(QUIET_CC)$(CC) -DGIT_VERSION='"$(GIT_VERSION)"' \
1401
		'-DGIT_HTML_PATH="$(htmldir_SQ)"' \
M
Marius Storm-Olsen 已提交
1402
		$(ALL_CFLAGS) -o $@ -c $(filter %.c,$^)
1403 1404

git$X: git.o $(BUILTIN_OBJS) $(GITLIBS)
1405
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ git.o \
1406
		$(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)
1407

M
Miklos Vajna 已提交
1408
builtin-help.o: builtin-help.c common-cmds.h GIT-CFLAGS
1409
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) \
1410
		'-DGIT_HTML_PATH="$(htmldir_SQ)"' \
1411 1412
		'-DGIT_MAN_PATH="$(mandir_SQ)"' \
		'-DGIT_INFO_PATH="$(infodir_SQ)"' $<
1413

J
Junio C Hamano 已提交
1414
$(BUILT_INS): git$X
1415 1416 1417 1418
	$(QUIET_BUILT_IN)$(RM) $@ && \
	ln git$X $@ 2>/dev/null || \
	ln -s git$X $@ 2>/dev/null || \
	cp git$X $@
J
Junio C Hamano 已提交
1419

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

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

1425
$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
1426
	$(QUIET_GEN)$(RM) $@ $@+ && \
1427
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
1428
	    -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \
1429
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1430
	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
1431
	    -e $(BROKEN_PATH_FIX) \
1432 1433
	    $@.sh >$@+ && \
	chmod +x $@+ && \
1434
	mv $@+ $@
1435

1436
ifndef NO_PERL
1437 1438
$(patsubst %.perl,%,$(SCRIPT_PERL)): perl/perl.mak

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

1442
$(patsubst %.perl,%,$(SCRIPT_PERL)): % : %.perl
1443
	$(QUIET_GEN)$(RM) $@ $@+ && \
1444
	INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C perl -s --no-print-directory instlibdir` && \
1445 1446 1447
	sed -e '1{' \
	    -e '	s|#!.*perl|#!$(PERL_PATH_SQ)|' \
	    -e '	h' \
1448
	    -e '	s=.*=use lib (split(/$(pathsep)/, $$ENV{GITPERLLIB} || "@@INSTLIBDIR@@"));=' \
1449 1450 1451
	    -e '	H' \
	    -e '	x' \
	    -e '}' \
1452
	    -e 's|@@INSTLIBDIR@@|'"$$INSTLIBDIR"'|g' \
1453
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1454 1455
	    $@.perl >$@+ && \
	chmod +x $@+ && \
1456
	mv $@+ $@
1457

1458
OTHER_PROGRAMS += gitweb/gitweb.cgi
1459
gitweb/gitweb.cgi: gitweb/gitweb.perl
1460
	$(QUIET_GEN)$(RM) $@ $@+ && \
1461
	sed -e '1s|#!.*perl|#!$(PERL_PATH_SQ)|' \
1462 1463 1464
	    -e 's|++GIT_VERSION++|$(GIT_VERSION)|g' \
	    -e 's|++GIT_BINDIR++|$(bindir)|g' \
	    -e 's|++GITWEB_CONFIG++|$(GITWEB_CONFIG)|g' \
1465
	    -e 's|++GITWEB_CONFIG_SYSTEM++|$(GITWEB_CONFIG_SYSTEM)|g' \
1466
	    -e 's|++GITWEB_HOME_LINK_STR++|$(GITWEB_HOME_LINK_STR)|g' \
1467 1468
	    -e 's|++GITWEB_SITENAME++|$(GITWEB_SITENAME)|g' \
	    -e 's|++GITWEB_PROJECTROOT++|$(GITWEB_PROJECTROOT)|g' \
1469
	    -e 's|"++GITWEB_PROJECT_MAXDEPTH++"|$(GITWEB_PROJECT_MAXDEPTH)|g' \
M
Matthias Lederhofer 已提交
1470 1471
	    -e 's|++GITWEB_EXPORT_OK++|$(GITWEB_EXPORT_OK)|g' \
	    -e 's|++GITWEB_STRICT_EXPORT++|$(GITWEB_STRICT_EXPORT)|g' \
1472
	    -e 's|++GITWEB_BASE_URL++|$(GITWEB_BASE_URL)|g' \
1473 1474 1475 1476
	    -e 's|++GITWEB_LIST++|$(GITWEB_LIST)|g' \
	    -e 's|++GITWEB_HOMETEXT++|$(GITWEB_HOMETEXT)|g' \
	    -e 's|++GITWEB_CSS++|$(GITWEB_CSS)|g' \
	    -e 's|++GITWEB_LOGO++|$(GITWEB_LOGO)|g' \
1477
	    -e 's|++GITWEB_FAVICON++|$(GITWEB_FAVICON)|g' \
1478 1479
	    -e 's|++GITWEB_SITE_HEADER++|$(GITWEB_SITE_HEADER)|g' \
	    -e 's|++GITWEB_SITE_FOOTER++|$(GITWEB_SITE_FOOTER)|g' \
1480 1481
	    $< >$@+ && \
	chmod +x $@+ && \
1482 1483
	mv $@+ $@

1484
git-instaweb: git-instaweb.sh gitweb/gitweb.cgi gitweb/gitweb.css
1485
	$(QUIET_GEN)$(RM) $@ $@+ && \
1486 1487 1488
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
1489
	    -e '/@@GITWEB_CGI@@/r gitweb/gitweb.cgi' \
1490
	    -e '/@@GITWEB_CGI@@/d' \
1491
	    -e '/@@GITWEB_CSS@@/r gitweb/gitweb.css' \
1492
	    -e '/@@GITWEB_CSS@@/d' \
1493
	    -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
1494 1495
	    $@.sh > $@+ && \
	chmod +x $@+ && \
1496
	mv $@+ $@
1497 1498 1499 1500 1501 1502 1503 1504 1505
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
1506

1507
configure: configure.ac
1508
	$(QUIET_GEN)$(RM) $@ $<+ && \
1509
	sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1510 1511
	    $< > $<+ && \
	autoconf -o $@ $<+ && \
1512
	$(RM) $<+
1513

1514
# These can record GIT_VERSION
1515
git.o git.spec \
1516 1517 1518
	$(patsubst %.sh,%,$(SCRIPT_SH)) \
	$(patsubst %.perl,%,$(SCRIPT_PERL)) \
	: GIT-VERSION-FILE
1519

1520
%.o: %.c GIT-CFLAGS
1521
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) $<
1522 1523
%.s: %.c GIT-CFLAGS
	$(QUIET_CC)$(CC) -S $(ALL_CFLAGS) $<
1524
%.o: %.S
1525
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) $<
1526

1527
exec_cmd.o: exec_cmd.c GIT-CFLAGS
1528 1529 1530 1531 1532 1533
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) \
		'-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
		'-DBINDIR="$(bindir_relative_SQ)"' \
		'-DPREFIX="$(prefix_SQ)"' \
		$<

1534
builtin-init-db.o: builtin-init-db.c GIT-CFLAGS
1535
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"' $<
1536

1537 1538 1539
config.o: config.c GIT-CFLAGS
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DETC_GITCONFIG='"$(ETC_GITCONFIG_SQ)"' $<

1540
http.o: http.c GIT-CFLAGS
1541
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DGIT_USER_AGENT='"git/$(GIT_VERSION)"' $<
1542

1543
ifdef NO_EXPAT
D
Daniel Barkalow 已提交
1544
http-walker.o: http-walker.c http.h GIT-CFLAGS
1545
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DNO_EXPAT $<
1546 1547
endif

1548
git-%$X: %.o $(GITLIBS)
1549
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
1550

R
Robert Shearman 已提交
1551 1552 1553
git-imap-send$X: imap-send.o $(GITLIBS)
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIBS) $(OPENSSL_LINK) $(OPENSSL_LIBSSL)
1554

L
Linus Torvalds 已提交
1555
http.o http-walker.o http-push.o: http.h
1556

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

1559
git-http-fetch$X: revision.o http.o http-walker.o http-fetch.o $(GITLIBS)
L
Linus Torvalds 已提交
1560
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
1561
		$(LIBS) $(CURL_LIBCURL)
1562
git-http-push$X: revision.o http.o http-push.o $(GITLIBS)
1563
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
1564 1565
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

1566
git-remote-curl$X: remote-curl.o http.o http-walker.o $(GITLIBS)
1567 1568 1569
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

1570
$(LIB_OBJS) $(BUILTIN_OBJS): $(LIB_H)
1571
$(patsubst git-%$X,%.o,$(PROGRAMS)) git.o: $(LIB_H) $(wildcard */*.h)
J
Junio C Hamano 已提交
1572
builtin-revert.o wt-status.o: wt-status.h
1573

P
Petr Baudis 已提交
1574
$(LIB_FILE): $(LIB_OBJS)
1575
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)
P
Petr Baudis 已提交
1576

J
Johannes Schindelin 已提交
1577
XDIFF_OBJS=xdiff/xdiffi.o xdiff/xprepare.o xdiff/xutils.o xdiff/xemit.o \
1578
	xdiff/xmerge.o xdiff/xpatience.o
1579 1580
$(XDIFF_OBJS): xdiff/xinclude.h xdiff/xmacros.h xdiff/xdiff.h xdiff/xtypes.h \
	xdiff/xutils.h xdiff/xprepare.h xdiff/xdiffi.h xdiff/xemit.h
1581 1582

$(XDIFF_LIB): $(XDIFF_OBJS)
1583
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(XDIFF_OBJS)
1584 1585


P
Petr Baudis 已提交
1586 1587 1588
doc:
	$(MAKE) -C Documentation all

1589 1590 1591 1592 1593 1594
man:
	$(MAKE) -C Documentation man

html:
	$(MAKE) -C Documentation html

1595 1596 1597
info:
	$(MAKE) -C Documentation info

1598 1599 1600
pdf:
	$(MAKE) -C Documentation pdf

1601
TAGS:
1602
	$(RM) TAGS
1603
	$(FIND) . -name '*.[hcS]' -print | xargs etags -a
1604 1605

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

K
Kristof Provost 已提交
1609 1610 1611 1612
cscope:
	$(RM) cscope*
	$(FIND) . -name '*.[hcS]' -print | xargs cscope -b

1613
### Detect prefix changes
J
Junio C Hamano 已提交
1614
TRACK_CFLAGS = $(subst ','\'',$(ALL_CFLAGS)):\
1615 1616 1617 1618 1619 1620 1621 1622 1623
             $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ)

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

J
Junio C Hamano 已提交
1624 1625 1626
# 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".
1627
GIT-BUILD-OPTIONS: .FORCE-GIT-BUILD-OPTIONS
J
Junio C Hamano 已提交
1628 1629
	@echo SHELL_PATH=\''$(subst ','\'',$(SHELL_PATH_SQ))'\' >$@
	@echo TAR=\''$(subst ','\'',$(subst ','\'',$(TAR)))'\' >>$@
J
Jeff King 已提交
1630
	@echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@
1631
	@echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@
1632

1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646
### Detect Tck/Tk interpreter path changes
ifndef NO_TCLTK
TRACK_VARS = $(subst ','\'',-DTCLTK_PATH='$(TCLTK_PATH_SQ)')

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

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

P
Petr Baudis 已提交
1647 1648
### Testing rules

1649
TEST_PROGRAMS += test-chmtime$X
R
René Scharfe 已提交
1650
TEST_PROGRAMS += test-ctype$X
1651 1652
TEST_PROGRAMS += test-date$X
TEST_PROGRAMS += test-delta$X
J
Junio C Hamano 已提交
1653
TEST_PROGRAMS += test-dump-cache-tree$X
1654 1655 1656 1657 1658
TEST_PROGRAMS += test-genrandom$X
TEST_PROGRAMS += test-match-trees$X
TEST_PROGRAMS += test-parse-options$X
TEST_PROGRAMS += test-path-utils$X
TEST_PROGRAMS += test-sha1$X
1659
TEST_PROGRAMS += test-sigchain$X
1660 1661 1662

all:: $(TEST_PROGRAMS)

1663 1664 1665 1666
# GNU make supports exporting all variables by "export" without parameters.
# However, the environment gets quite big, and some programs have problems
# with that.

1667
export NO_SVN_TESTS
1668

1669
test: all
P
Petr Baudis 已提交
1670 1671
	$(MAKE) -C t/ all

R
René Scharfe 已提交
1672 1673
test-ctype$X: ctype.o

1674
test-date$X: date.o ctype.o
P
Petr Baudis 已提交
1675

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

1678 1679
test-parse-options$X: parse-options.o

1680 1681
test-parse-options.o: parse-options.h

1682 1683
.PRECIOUS: $(patsubst test-%$X,test-%.o,$(TEST_PROGRAMS))

1684 1685
test-%$X: test-%.o $(GITLIBS)
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
1686

1687 1688 1689
check-sha1:: test-sha1$X
	./test-sha1.sh

1690
check: common-cmds.h
1691 1692 1693 1694 1695 1696 1697 1698 1699 1700
	if sparse; \
	then \
		for i in *.c; \
		do \
			sparse $(ALL_CFLAGS) $(SPARSE_FLAGS) $$i || exit; \
		done; \
	else \
		echo 2>&1 "Did you mean 'make test'?"; \
		exit 1; \
	fi
P
Petr Baudis 已提交
1701

1702
remove-dashes:
1703
	./fixup-builtins $(BUILT_INS) $(PROGRAMS) $(SCRIPTS)
P
Petr Baudis 已提交
1704 1705 1706

### Installation rules

1707
ifneq ($(filter /%,$(firstword $(template_dir))),)
1708
template_instdir = $(template_dir)
1709 1710
else
template_instdir = $(prefix)/$(template_dir)
1711 1712 1713
endif
export template_instdir

1714
ifneq ($(filter /%,$(firstword $(gitexecdir))),)
1715
gitexec_instdir = $(gitexecdir)
1716 1717
else
gitexec_instdir = $(prefix)/$(gitexecdir)
1718 1719 1720 1721
endif
gitexec_instdir_SQ = $(subst ','\'',$(gitexec_instdir))
export gitexec_instdir

1722
install: all
1723
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
1724 1725
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
	$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
1726
	$(INSTALL) git$X git-upload-pack$X git-receive-pack$X git-upload-archive$X git-shell$X git-cvsserver '$(DESTDIR_SQ)$(bindir_SQ)'
1727
	$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
1728
ifndef NO_PERL
1729
	$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
1730
endif
E
Eygene Ryabinkin 已提交
1731
ifndef NO_TCLTK
J
Junio C Hamano 已提交
1732
	$(MAKE) -C gitk-git install
1733
	$(MAKE) -C git-gui gitexecdir='$(gitexec_instdir_SQ)' install
E
Eygene Ryabinkin 已提交
1734
endif
1735
ifneq (,$X)
1736
	$(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';)
1737
endif
1738
	bindir=$$(cd '$(DESTDIR_SQ)$(bindir_SQ)' && pwd) && \
1739
	execdir=$$(cd '$(DESTDIR_SQ)$(gitexec_instdir_SQ)' && pwd) && \
1740 1741
	{ test "$$bindir/" = "$$execdir/" || \
		{ $(RM) "$$execdir/git$X" && \
1742
		test -z "$(NO_CROSS_DIRECTORY_HARDLINKS)" && \
J
Jeff King 已提交
1743
		ln "$$bindir/git$X" "$$execdir/git$X" 2>/dev/null || \
1744
		cp "$$bindir/git$X" "$$execdir/git$X"; } ; } && \
J
Jeff King 已提交
1745
	{ for p in $(BUILT_INS); do \
1746
		$(RM) "$$execdir/$$p" && \
J
Jeff King 已提交
1747 1748 1749
		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; \
1750
	  done; } && \
1751
	./check_bindir "z$$bindir" "z$$execdir" "$$bindir/git-add$X"
P
Petr Baudis 已提交
1752 1753 1754 1755

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

1756 1757 1758
install-man:
	$(MAKE) -C Documentation install-man

1759 1760 1761
install-html:
	$(MAKE) -C Documentation install-html

1762 1763 1764
install-info:
	$(MAKE) -C Documentation install-info

1765 1766 1767
install-pdf:
	$(MAKE) -C Documentation install-pdf

1768 1769
quick-install-doc:
	$(MAKE) -C Documentation quick-install
P
Petr Baudis 已提交
1770

1771 1772 1773
quick-install-man:
	$(MAKE) -C Documentation quick-install-man

1774 1775 1776
quick-install-html:
	$(MAKE) -C Documentation quick-install-html

P
Petr Baudis 已提交
1777 1778 1779 1780


### Maintainer's dist rules

1781
git.spec: git.spec.in
1782 1783
	sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@+
	mv $@+ $@
1784

J
Junio C Hamano 已提交
1785
GIT_TARNAME=git-$(GIT_VERSION)
1786
dist: git.spec git-archive$(X) configure
1787 1788
	./git-archive --format=tar \
		--prefix=$(GIT_TARNAME)/ HEAD^{tree} > $(GIT_TARNAME).tar
1789
	@mkdir -p $(GIT_TARNAME)
1790
	@cp git.spec configure $(GIT_TARNAME)
1791
	@echo $(GIT_VERSION) > $(GIT_TARNAME)/version
1792
	@$(MAKE) -C git-gui TARDIR=../$(GIT_TARNAME)/git-gui dist-version
1793
	$(TAR) rf $(GIT_TARNAME).tar \
1794
		$(GIT_TARNAME)/git.spec \
1795
		$(GIT_TARNAME)/configure \
1796
		$(GIT_TARNAME)/version \
1797
		$(GIT_TARNAME)/git-gui/version
1798
	@$(RM) -r $(GIT_TARNAME)
1799
	gzip -f -9 $(GIT_TARNAME).tar
1800 1801

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

1804 1805 1806
htmldocs = git-htmldocs-$(GIT_VERSION)
manpages = git-manpages-$(GIT_VERSION)
dist-doc:
1807
	$(RM) -r .doc-tmp-dir
1808 1809 1810 1811 1812
	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
	:
1813
	$(RM) -r .doc-tmp-dir
1814
	mkdir -p .doc-tmp-dir/man1 .doc-tmp-dir/man5 .doc-tmp-dir/man7
1815
	$(MAKE) -C Documentation DESTDIR=./ \
1816
		man1dir=../.doc-tmp-dir/man1 \
1817
		man5dir=../.doc-tmp-dir/man5 \
1818
		man7dir=../.doc-tmp-dir/man7 \
1819 1820 1821
		install
	cd .doc-tmp-dir && $(TAR) cf ../$(manpages).tar .
	gzip -n -9 -f $(manpages).tar
1822
	$(RM) -r .doc-tmp-dir
1823

P
Petr Baudis 已提交
1824
### Cleaning rules
1825

1826 1827 1828
distclean: clean
	$(RM) configure

1829
clean:
1830
	$(RM) *.o mozilla-sha1/*.o arm/*.o ppc/*.o compat/*.o compat/*/*.o xdiff/*.o \
1831
		$(LIB_FILE) $(XDIFF_LIB)
1832 1833
	$(RM) $(ALL_PROGRAMS) $(BUILT_INS) git$X
	$(RM) $(TEST_PROGRAMS)
K
Kristof Provost 已提交
1834
	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h TAGS tags cscope*
1835
	$(RM) -r autom4te.cache
1836
	$(RM) config.log config.mak.autogen config.mak.append config.status config.cache
1837 1838 1839
	$(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
1840
	$(MAKE) -C Documentation/ clean
1841 1842
ifndef NO_PERL
	$(RM) gitweb/gitweb.cgi
1843
	$(MAKE) -C perl clean
1844
endif
P
Petr Baudis 已提交
1845
	$(MAKE) -C templates/ clean
1846
	$(MAKE) -C t/ clean
E
Eygene Ryabinkin 已提交
1847
ifndef NO_TCLTK
J
Junio C Hamano 已提交
1848
	$(MAKE) -C gitk-git clean
E
Eygene Ryabinkin 已提交
1849 1850
	$(MAKE) -C git-gui clean
endif
1851
	$(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-GUI-VARS GIT-BUILD-OPTIONS
1852

J
Junio C Hamano 已提交
1853
.PHONY: all install clean strip
1854
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
K
Kristof Provost 已提交
1855
.PHONY: .FORCE-GIT-VERSION-FILE TAGS tags cscope .FORCE-GIT-CFLAGS
1856
.PHONY: .FORCE-GIT-BUILD-OPTIONS
J
Junio C Hamano 已提交
1857

J
Junio C Hamano 已提交
1858 1859 1860
### Check documentation
#
check-docs::
1861
	@(for v in $(ALL_PROGRAMS) $(BUILT_INS) git gitk; \
J
Junio C Hamano 已提交
1862 1863 1864
	do \
		case "$$v" in \
		git-merge-octopus | git-merge-ours | git-merge-recursive | \
M
Miklos Vajna 已提交
1865
		git-merge-resolve | git-merge-subtree | \
1866
		git-fsck-objects | git-init-db | \
1867
		git-?*--?* ) continue ;; \
J
Junio C Hamano 已提交
1868 1869 1870
		esac ; \
		test -f "Documentation/$$v.txt" || \
		echo "no doc: $$v"; \
J
Junio C Hamano 已提交
1871
		sed -e '/^#/d' command-list.txt | \
1872
		grep -q "^$$v[ 	]" || \
J
Junio C Hamano 已提交
1873 1874 1875 1876
		case "$$v" in \
		git) ;; \
		*) echo "no link: $$v";; \
		esac ; \
1877 1878
	done; \
	( \
J
Junio C Hamano 已提交
1879
		sed -e '/^#/d' \
1880
		    -e 's/[ 	].*//' \
J
Junio C Hamano 已提交
1881
		    -e 's/^/listed /' command-list.txt; \
1882 1883 1884 1885 1886 1887 1888 1889
		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 | \
1890
		*,git-help | \
1891 1892 1893
		documented,gitattributes | \
		documented,gitignore | \
		documented,gitmodules | \
1894
		documented,gitcli | \
1895
		documented,git-tools | \
1896 1897 1898 1899 1900 1901 1902 1903
		documented,gitcore-tutorial | \
		documented,gitcvs-migration | \
		documented,gitdiffcore | \
		documented,gitglossary | \
		documented,githooks | \
		documented,gitrepository-layout | \
		documented,gittutorial | \
		documented,gittutorial-2 | \
1904 1905 1906 1907 1908 1909 1910
		sentinel,not,matching,is,ok ) continue ;; \
		esac; \
		case " $(ALL_PROGRAMS) $(BUILT_INS) git gitk " in \
		*" $$cmd "*)	;; \
		*) echo "removed but $$how: $$cmd" ;; \
		esac; \
	done ) | sort
1911 1912 1913 1914 1915

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

1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940
### Test suite coverage testing
#
.PHONY: coverage coverage-clean coverage-build coverage-report

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

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

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

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

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