Makefile 54.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 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
PROGRAMS += git-show-index$X
PROGRAMS += git-unpack-file$X
PROGRAMS += git-upload-pack$X
PROGRAMS += git-var$X
368
PROGRAMS += git-http-backend$X
369

J
Junio C Hamano 已提交
370 371
# 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.
372 373 374
BUILT_INS += $(patsubst builtin-%.o,git-%$X,$(BUILTIN_OBJS))

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

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

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

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

L
Luben Tuikov 已提交
403 404
export PERL_PATH

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

408
LIB_H += advice.h
409 410 411 412 413 414 415
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
416
LIB_H += compat/cygwin.h
417
LIB_H += compat/mingw.h
418 419 420 421 422 423 424 425
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 已提交
426
LIB_H += graph.h
427 428
LIB_H += grep.h
LIB_H += hash.h
429
LIB_H += help.h
430
LIB_H += levenshtein.h
431 432 433 434
LIB_H += list-objects.h
LIB_H += ll-merge.h
LIB_H += log-tree.h
LIB_H += mailmap.h
435
LIB_H += merge-recursive.h
436 437
LIB_H += object.h
LIB_H += pack.h
438
LIB_H += pack-refs.h
439 440 441 442 443 444 445 446 447
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
448
LIB_H += rerere.h
449 450
LIB_H += revision.h
LIB_H += run-command.h
451
LIB_H += sha1-lookup.h
452
LIB_H += sideband.h
453
LIB_H += sigchain.h
454
LIB_H += strbuf.h
455
LIB_H += string-list.h
456 457 458 459 460
LIB_H += tag.h
LIB_H += transport.h
LIB_H += tree.h
LIB_H += tree-walk.h
LIB_H += unpack-trees.h
461
LIB_H += userdiff.h
462
LIB_H += utf8.h
463
LIB_H += wt-status.h
464

465
LIB_OBJS += abspath.o
466
LIB_OBJS += advice.o
467 468 469 470 471 472 473
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
474
LIB_OBJS += bisect.o
475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496
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
497
LIB_OBJS += diff-no-index.o
498 499
LIB_OBJS += diff.o
LIB_OBJS += dir.o
500
LIB_OBJS += editor.o
501 502 503 504
LIB_OBJS += entry.o
LIB_OBJS += environment.o
LIB_OBJS += exec_cmd.o
LIB_OBJS += fsck.o
A
Adam Simpkins 已提交
505
LIB_OBJS += graph.o
506 507 508 509
LIB_OBJS += grep.o
LIB_OBJS += hash.o
LIB_OBJS += help.o
LIB_OBJS += ident.o
510
LIB_OBJS += levenshtein.o
511 512 513 514 515 516 517
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
518
LIB_OBJS += merge-recursive.o
519
LIB_OBJS += name-hash.o
520 521
LIB_OBJS += object.o
LIB_OBJS += pack-check.o
522
LIB_OBJS += pack-refs.o
523 524 525 526 527 528 529 530
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
531
LIB_OBJS += preload-index.o
532 533 534 535 536 537 538 539
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
540
LIB_OBJS += replace_object.o
541
LIB_OBJS += rerere.o
542 543 544 545
LIB_OBJS += revision.o
LIB_OBJS += run-command.o
LIB_OBJS += server-info.o
LIB_OBJS += setup.o
546
LIB_OBJS += sha1-lookup.o
547
LIB_OBJS += sha1_file.o
548 549 550
LIB_OBJS += sha1_name.o
LIB_OBJS += shallow.o
LIB_OBJS += sideband.o
551
LIB_OBJS += sigchain.o
552
LIB_OBJS += strbuf.o
553
LIB_OBJS += string-list.o
554 555 556 557
LIB_OBJS += symlinks.o
LIB_OBJS += tag.o
LIB_OBJS += trace.o
LIB_OBJS += transport.o
558
LIB_OBJS += transport-helper.o
559 560 561 562 563
LIB_OBJS += tree-diff.o
LIB_OBJS += tree.o
LIB_OBJS += tree-walk.o
LIB_OBJS += unpack-trees.o
LIB_OBJS += usage.o
564
LIB_OBJS += userdiff.o
565 566
LIB_OBJS += utf8.o
LIB_OBJS += walker.o
567
LIB_OBJS += wrapper.o
568 569 570 571 572 573 574 575 576
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
577
BUILTIN_OBJS += builtin-bisect--helper.o
578 579 580 581 582 583 584 585 586
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 已提交
587
BUILTIN_OBJS += builtin-clone.o
588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605
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 已提交
606
BUILTIN_OBJS += builtin-help.o
607 608 609 610 611 612 613
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 已提交
614
BUILTIN_OBJS += builtin-merge.o
615 616 617 618
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 已提交
619
BUILTIN_OBJS += builtin-mktree.o
620 621 622 623 624 625 626 627
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 已提交
628
BUILTIN_OBJS += builtin-receive-pack.o
629 630
BUILTIN_OBJS += builtin-reflog.o
BUILTIN_OBJS += builtin-remote.o
C
Christian Couder 已提交
631
BUILTIN_OBJS += builtin-replace.o
632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648
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
649
BUILTIN_OBJS += builtin-update-server-info.o
650 651 652 653
BUILTIN_OBJS += builtin-upload-archive.o
BUILTIN_OBJS += builtin-verify-pack.o
BUILTIN_OBJS += builtin-verify-tag.o
BUILTIN_OBJS += builtin-write-tree.o
654

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

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

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

666 667
ifeq ($(uname_S),Linux)
	NO_STRLCPY = YesPlease
668
	NO_MKSTEMPS = YesPlease
669
	THREADED_DELTA_SEARCH = YesPlease
670
endif
G
Gerrit Pape 已提交
671 672
ifeq ($(uname_S),GNU/kFreeBSD)
	NO_STRLCPY = YesPlease
673
	NO_MKSTEMPS = YesPlease
674
	THREADED_DELTA_SEARCH = YesPlease
G
Gerrit Pape 已提交
675
endif
B
Boyd Lynn Gerber 已提交
676 677 678 679 680 681 682 683 684
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
685
	NO_MKSTEMPS = YesPlease
B
Boyd Lynn Gerber 已提交
686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708
	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
709
	NO_MKSTEMPS = YesPlease
B
Boyd Lynn Gerber 已提交
710 711 712 713 714 715 716
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
	NO_STRCASESTR = YesPlease
	NO_MEMMEM = YesPlease
	INSTALL = ginstall
	TAR = gtar
endif
717
ifeq ($(uname_S),Darwin)
718
	NEEDS_CRYPTO_WITH_SSL = YesPlease
719 720
	NEEDS_SSL_WITH_CRYPTO = YesPlease
	NEEDS_LIBICONV = YesPlease
721
	ifeq ($(shell expr "$(uname_R)" : '[15678]\.'),2)
722 723
		OLD_ICONV = UnfortunatelyYes
	endif
724 725 726
	ifeq ($(shell expr "$(uname_R)" : '[15]\.'),2)
		NO_STRLCPY = YesPlease
	endif
727
	NO_MEMMEM = YesPlease
728
	THREADED_DELTA_SEARCH = YesPlease
729
	USE_ST_TIMESPEC = YesPlease
730
endif
731
ifeq ($(uname_S),SunOS)
732
	NEEDS_SOCKET = YesPlease
733
	NEEDS_NSL = YesPlease
734
	SHELL_PATH = /bin/bash
735
	SANE_TOOL_PATH = /usr/xpg6/bin:/usr/xpg4/bin
736
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
737
	NO_MEMMEM = YesPlease
738
	NO_MKDTEMP = YesPlease
739
	NO_MKSTEMPS = YesPlease
740
	NO_REGEX = YesPlease
741
	NO_EXTERNAL_GREP = YesPlease
742
	THREADED_DELTA_SEARCH = YesPlease
743 744 745 746 747 748 749 750 751
	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
752
	endif
J
Jason Riedy 已提交
753
	ifeq ($(uname_R),5.8)
J
Jason Riedy 已提交
754
		NO_UNSETENV = YesPlease
J
Jason Riedy 已提交
755
		NO_SETENV = YesPlease
756
		NO_C99_FORMAT = YesPlease
757
		NO_STRTOUMAX = YesPlease
J
Jason Riedy 已提交
758
	endif
759 760 761
	ifeq ($(uname_R),5.9)
		NO_UNSETENV = YesPlease
		NO_SETENV = YesPlease
762
		NO_C99_FORMAT = YesPlease
763
		NO_STRTOUMAX = YesPlease
764
	endif
765
	INSTALL = /usr/ucb/install
766
	TAR = gtar
767
	BASIC_CFLAGS += -D__EXTENSIONS__ -D__sun__ -DHAVE_ALLOCA_H
768
endif
769
ifeq ($(uname_O),Cygwin)
770
	NO_D_TYPE_IN_DIRENT = YesPlease
771
	NO_D_INO_IN_DIRENT = YesPlease
H
hpa 已提交
772
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
773
	NO_MEMMEM = YesPlease
774
	NO_MKSTEMPS = YesPlease
775
	NO_SYMLINK_HEAD = YesPlease
H
hpa 已提交
776
	NEEDS_LIBICONV = YesPlease
777
	NO_FAST_WORKING_DIRECTORY = UnfortunatelyYes
778
	NO_TRUSTABLE_FILEMODE = UnfortunatelyYes
P
Pascal Obry 已提交
779
	OLD_ICONV = UnfortunatelyYes
780 781
	# There are conflicting reports about this.
	# On some boxes NO_MMAP is needed, and not so elsewhere.
J
Junio C Hamano 已提交
782 783
	# Try commenting this out if you suspect MMAP is more efficient
	NO_MMAP = YesPlease
784
	NO_IPV6 = YesPlease
P
Peter Anvin 已提交
785
	X = .exe
786
endif
A
Alecs King 已提交
787 788
ifeq ($(uname_S),FreeBSD)
	NEEDS_LIBICONV = YesPlease
789
	NO_MEMMEM = YesPlease
790 791
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
792
	DIR_HAS_BSD_GROUP_SEMANTICS = YesPlease
793
	USE_ST_TIMESPEC = YesPlease
794
	THREADED_DELTA_SEARCH = YesPlease
795
	ifeq ($(shell expr "$(uname_R)" : '4\.'),2)
796
		PTHREAD_LIBS = -pthread
797 798 799
		NO_UINTMAX_T = YesPlease
		NO_STRTOUMAX = YesPlease
	endif
A
Alecs King 已提交
800
endif
801
ifeq ($(uname_S),OpenBSD)
802
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
803
	NO_MEMMEM = YesPlease
T
Tony Kemp 已提交
804
	USE_ST_TIMESPEC = YesPlease
H
Han Boetes 已提交
805
	NEEDS_LIBICONV = YesPlease
806 807
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
808
	THREADED_DELTA_SEARCH = YesPlease
J
Junio C Hamano 已提交
809 810
endif
ifeq ($(uname_S),NetBSD)
811 812 813
	ifeq ($(shell expr "$(uname_R)" : '[01]\.'),2)
		NEEDS_LIBICONV = YesPlease
	endif
814
	BASIC_CFLAGS += -I/usr/pkg/include
815
	BASIC_LDFLAGS += -L/usr/pkg/lib $(CC_LD_DYNPATH)/usr/pkg/lib
816
	THREADED_DELTA_SEARCH = YesPlease
P
Patrick Welche 已提交
817
	USE_ST_TIMESPEC = YesPlease
818
	NO_MKSTEMPS = YesPlease
H
Han Boetes 已提交
819
endif
820 821
ifeq ($(uname_S),AIX)
	NO_STRCASESTR=YesPlease
R
René Scharfe 已提交
822
	NO_MEMMEM = YesPlease
823
	NO_MKDTEMP = YesPlease
824
	NO_MKSTEMPS = YesPlease
825
	NO_STRLCPY = YesPlease
826
	NO_NSEC = YesPlease
827 828
	FREAD_READS_DIRECTORIES = UnfortunatelyYes
	INTERNAL_QSORT = UnfortunatelyYes
829
	NEEDS_LIBICONV=YesPlease
830
	BASIC_CFLAGS += -D_LARGE_FILES
J
Junio C Hamano 已提交
831 832 833 834 835
	ifneq ($(shell expr "$(uname_V)" : '[1234]'),1)
		THREADED_DELTA_SEARCH = YesPlease
	else
		NO_PTHREADS = YesPlease
	endif
836
endif
T
Thomas Schwinge 已提交
837 838 839
ifeq ($(uname_S),GNU)
	# GNU/Hurd
	NO_STRLCPY=YesPlease
840
	NO_MKSTEMPS = YesPlease
T
Thomas Schwinge 已提交
841
endif
842 843 844 845 846 847 848
ifeq ($(uname_S),IRIX)
	NO_SETENV = YesPlease
	NO_UNSETENV = YesPlease
	NO_STRCASESTR = YesPlease
	NO_MEMMEM = YesPlease
	NO_MKSTEMPS = YesPlease
	NO_MKDTEMP = YesPlease
849 850 851 852 853 854
	# 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.
855 856 857 858 859
	NO_MMAP = YesPlease
	NO_EXTERNAL_GREP = UnfortunatelyYes
	SNPRINTF_RETURNS_BOGUS = YesPlease
	SHELL_PATH = /usr/gnu/bin/bash
	NEEDS_LIBGEN = YesPlease
860
	THREADED_DELTA_SEARCH = YesPlease
861
endif
J
Johannes Schindelin 已提交
862 863
ifeq ($(uname_S),IRIX64)
	NO_SETENV=YesPlease
B
Brandon Casey 已提交
864
	NO_UNSETENV = YesPlease
J
Johannes Schindelin 已提交
865
	NO_STRCASESTR=YesPlease
R
René Scharfe 已提交
866
	NO_MEMMEM = YesPlease
867
	NO_MKSTEMPS = YesPlease
B
Brandon Casey 已提交
868
	NO_MKDTEMP = YesPlease
869 870 871 872 873 874
	# 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 已提交
875 876 877
	NO_MMAP = YesPlease
	NO_EXTERNAL_GREP = UnfortunatelyYes
	SNPRINTF_RETURNS_BOGUS = YesPlease
J
Johannes Schindelin 已提交
878
	SHELL_PATH=/usr/gnu/bin/bash
B
Brandon Casey 已提交
879
	NEEDS_LIBGEN = YesPlease
880
	THREADED_DELTA_SEARCH = YesPlease
J
Johannes Schindelin 已提交
881
endif
882 883 884 885 886
ifeq ($(uname_S),HP-UX)
	NO_IPV6=YesPlease
	NO_SETENV=YesPlease
	NO_STRCASESTR=YesPlease
	NO_MEMMEM = YesPlease
887
	NO_MKSTEMPS = YesPlease
888 889 890 891 892
	NO_STRLCPY = YesPlease
	NO_MKDTEMP = YesPlease
	NO_UNSETENV = YesPlease
	NO_HSTRERROR = YesPlease
	NO_SYS_SELECT_H = YesPlease
893
	SNPRINTF_RETURNS_BOGUS = YesPlease
894
endif
895 896
ifneq (,$(findstring CYGWIN,$(uname_S)))
	COMPAT_OBJS += compat/cygwin.o
897
	UNRELIABLE_FSTAT = UnfortunatelyYes
898
endif
M
Marius Storm-Olsen 已提交
899
ifdef MSVC
900
	GIT_VERSION := $(GIT_VERSION).MSVC
M
Marius Storm-Olsen 已提交
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 936
	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 已提交
937
	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 已提交
938 939 940 941 942 943 944 945 946 947 948 949 950 951
	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 已提交
952
ifneq (,$(findstring MINGW,$(uname_S)))
953
	pathsep = ;
J
Johannes Sixt 已提交
954 955
	NO_PREAD = YesPlease
	NO_OPENSSL = YesPlease
956
	NO_LIBGEN_H = YesPlease
J
Johannes Sixt 已提交
957 958 959 960 961 962 963 964 965 966 967 968
	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
969
	NO_MKSTEMPS = YesPlease
J
Johannes Sixt 已提交
970 971 972
	SNPRINTF_RETURNS_BOGUS = YesPlease
	NO_SVN_TESTS = YesPlease
	NO_PERL_MAKEMAKER = YesPlease
973
	RUNTIME_PREFIX = YesPlease
J
Johannes Sixt 已提交
974
	NO_POSIX_ONLY_PROGRAMS = YesPlease
975
	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
976
	NO_NSEC = YesPlease
J
Janos Laube 已提交
977
	USE_WIN32_MMAP = YesPlease
978
	USE_NED_ALLOCATOR = YesPlease
979
	UNRELIABLE_FSTAT = UnfortunatelyYes
980
	OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
981 982
	NO_REGEX = YesPlease
	COMPAT_CFLAGS += -D__USE_MINGW_ACCESS -DNOGDI -Icompat -Icompat/fnmatch
983
	COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
984
	COMPAT_OBJS += compat/mingw.o compat/fnmatch/fnmatch.o compat/winansi.o
J
Johannes Sixt 已提交
985 986
	EXTLIBS += -lws2_32
	X = .exe
987 988 989 990 991 992 993 994 995 996 997 998
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 已提交
999
endif
M
Marius Storm-Olsen 已提交
1000
endif
1001

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

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

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

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

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

D
Daniel Barkalow 已提交
1044 1045 1046
ifdef NO_CURL
	BASIC_CFLAGS += -DNO_CURL
else
1047
	ifdef CURLDIR
1048
		# Try "-Wl,-rpath=$(CURLDIR)/$(lib)" in such a case.
1049
		BASIC_CFLAGS += -I$(CURLDIR)/include
1050
		CURL_LIBCURL = -L$(CURLDIR)/$(lib) $(CC_LD_DYNPATH)$(CURLDIR)/$(lib) -lcurl
1051 1052 1053
	else
		CURL_LIBCURL = -lcurl
	endif
1054
	PROGRAMS += git-remote-curl$X git-http-fetch$X
1055 1056 1057 1058 1059
	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
1060
	endif
1061
	ifndef NO_EXPAT
1062 1063 1064 1065 1066 1067
		ifdef EXPATDIR
			BASIC_CFLAGS += -I$(EXPATDIR)/include
			EXPAT_LIBEXPAT = -L$(EXPATDIR)/$(lib) $(CC_LD_DYNPATH)$(EXPATDIR)/$(lib) -lexpat
		else
			EXPAT_LIBEXPAT = -lexpat
		endif
1068
	endif
1069 1070
endif

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1338 1339 1340 1341
ifdef ASCIIDOC8
	export ASCIIDOC8
endif

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

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

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

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

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

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

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

1370
export TAR INSTALL DESTDIR SHELL_PATH
1371 1372


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

1375 1376
SHELL = $(SHELL_PATH)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

J
Johannes Schindelin 已提交
1578
XDIFF_OBJS=xdiff/xdiffi.o xdiff/xprepare.o xdiff/xutils.o xdiff/xemit.o \
1579
	xdiff/xmerge.o xdiff/xpatience.o
1580 1581
$(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
1582 1583

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


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

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

html:
	$(MAKE) -C Documentation html

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

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

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

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

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

1614
### Detect prefix changes
J
Junio C Hamano 已提交
1615
TRACK_CFLAGS = $(subst ','\'',$(ALL_CFLAGS)):\
1616 1617 1618 1619 1620 1621 1622 1623 1624
             $(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 已提交
1625 1626 1627
# 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".
1628
GIT-BUILD-OPTIONS: .FORCE-GIT-BUILD-OPTIONS
J
Junio C Hamano 已提交
1629 1630
	@echo SHELL_PATH=\''$(subst ','\'',$(SHELL_PATH_SQ))'\' >$@
	@echo TAR=\''$(subst ','\'',$(subst ','\'',$(TAR)))'\' >>$@
J
Jeff King 已提交
1631
	@echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@
1632
	@echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@
1633

1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647
### 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 已提交
1648 1649
### Testing rules

1650
TEST_PROGRAMS += test-chmtime$X
R
René Scharfe 已提交
1651
TEST_PROGRAMS += test-ctype$X
1652 1653
TEST_PROGRAMS += test-date$X
TEST_PROGRAMS += test-delta$X
J
Junio C Hamano 已提交
1654
TEST_PROGRAMS += test-dump-cache-tree$X
1655 1656 1657 1658 1659
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
1660
TEST_PROGRAMS += test-sigchain$X
1661 1662 1663

all:: $(TEST_PROGRAMS)

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

1668
export NO_SVN_TESTS
1669

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

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

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

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

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

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

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

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

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

1691
check: common-cmds.h
1692 1693 1694 1695 1696 1697 1698 1699 1700 1701
	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 已提交
1702

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

### Installation rules

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

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

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

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

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

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

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

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

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

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

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

P
Petr Baudis 已提交
1778 1779 1780 1781


### Maintainer's dist rules

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

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

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

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

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

1827 1828 1829
distclean: clean
	$(RM) configure

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

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

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

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

1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941
### 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