Makefile 48.2 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
# 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.
#
10 11 12
# Define FREAD_READS_DIRECTORIES if your are on a system which succeeds
# when attempting to read from an fopen'ed directory.
#
13 14
# Define NO_OPENSSL environment variable if you do not have OpenSSL.
# This also implies MOZILLA_SHA1.
15
#
16
# Define NO_CURL if you do not have libcurl installed.  git-http-pull and
17 18
# git-http-push are not built, and you cannot use http:// and https://
# transports.
19
#
P
Patrick Mauritz 已提交
20 21 22
# Define CURLDIR=/foo/bar if your curl header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
23 24 25
# 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.
#
26 27 28
# Define EXPATDIR=/foo/bar if your expat header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
29 30
# Define NO_D_INO_IN_DIRENT if you don't have d_ino in your struct dirent.
#
31 32 33
# 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).
#
34 35 36
# 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).
37
# some C compilers supported these specifiers prior to C99 as an extension.
38
#
39 40
# Define NO_STRCASESTR if you don't have strcasestr.
#
R
René Scharfe 已提交
41 42
# Define NO_MEMMEM if you don't have memmem.
#
43 44
# Define NO_STRLCPY if you don't have strlcpy.
#
45 46 47 48
# 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 已提交
49 50
# Define NO_SETENV if you don't have setenv in the C library.
#
51 52
# Define NO_UNSETENV if you don't have unsetenv in the C library.
#
53 54
# Define NO_MKDTEMP if you don't have mkdtemp in the C library.
#
55 56
# Define NO_SYS_SELECT_H if you don't have sys/select.h.
#
57 58
# 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.
59
#
P
Pavel Roskin 已提交
60
# Define NO_SVN_TESTS if you want to skip time-consuming SVN interoperability
E
Eric Wong 已提交
61 62 63
# 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.
#
64 65 66 67 68 69 70 71 72 73 74 75
# 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.
#
76 77
# Define PPC_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine optimized for PowerPC.
78
#
79 80 81
# Define ARM_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine optimized for ARM.
#
82 83 84 85 86
# Define MOZILLA_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine coming from Mozilla. It is GPL'd and should be fast
# on non-x86 architectures (e.g. PowerPC), while the OpenSSL version (default
# choice) has very fast version optimized for i586.
#
87
# Define NEEDS_SSL_WITH_CRYPTO if you need -lcrypto with -lssl (Darwin).
88
#
89
# Define NEEDS_LIBICONV if linking with libc is not enough (Darwin).
90 91 92 93
#
# Define NEEDS_SOCKET if linking with libc is not enough (SunOS,
# Patrick Mauritz).
#
94 95
# Define NO_MMAP if you want to avoid mmap.
#
J
Junio C Hamano 已提交
96 97
# Define NO_PTHREADS if you do not have or do not want to use Pthreads.
#
98 99 100
# Define NO_PREAD if you have a problem with pread() system call (e.g.
# cygwin.dll before v1.5.22).
#
101 102 103
# Define NO_FAST_WORKING_DIRECTORY if accessing objects in pack files is
# generally faster on your platform than accessing the working directory.
#
104 105 106
# Define NO_TRUSTABLE_FILEMODE if your filesystem may claim to support
# the executable mode bit, but doesn't really do so.
#
107 108
# Define NO_IPV6 if you lack IPv6 support and getaddrinfo().
#
109 110 111
# Define NO_SOCKADDR_STORAGE if your platform does not have struct
# sockaddr_storage.
#
112 113
# Define NO_ICONV if your libc does not properly support iconv.
#
114 115 116
# Define OLD_ICONV if your library has an old iconv(), where the second
# (input buffer pointer) parameter is declared with type (const char **).
#
117 118
# Define NO_DEFLATE_BOUND if your zlib does not have deflateBound.
#
119 120 121
# 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.
122
#
123 124 125 126 127
# 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).
128
#
129 130 131
# Define USE_ST_TIMESPEC if your "struct stat" uses "st_ctimespec" instead of
# "st_ctim"
#
132 133 134
# Define NO_NSEC if your "struct stat" does not have "st_ctim.tv_nsec"
# available.  This automatically turns USE_NSEC off.
#
135
# Define USE_STDEV below if you want git to care about the underlying device
136
# change being considered an inode change from the update-index perspective.
137
#
138 139 140
# 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.
#
141 142
# Define ASCIIDOC8 if you want to format documentation with AsciiDoc 8
#
143 144
# Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72.
#
145 146 147
# Define NO_PERL_MAKEMAKER if you cannot use Makefiles generated by perl's
# MakeMaker (e.g. using ActiveState under Cygwin).
#
148 149
# Define NO_PERL if you do not want Perl scripts or libraries at all.
#
E
Eygene Ryabinkin 已提交
150 151
# Define NO_TCLTK if you do not want Tcl/Tk GUI.
#
152 153 154 155 156
# 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.
157 158 159
# 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 已提交
160 161 162
# Define THREADED_DELTA_SEARCH if you have pthreads and wish to exploit
# parallel delta searching when packing objects.
#
163 164 165 166
# 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 已提交
167 168 169
# 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).
170 171 172 173
#
# 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.
174
#
175 176
# Define OBJECT_CREATION_USES_RENAMES if your operating systems has problems
# when hardlinking a file to another name and unlinking the original file right
177
# away (some NTFS drivers seem to zero the contents in that scenario).
178

179
GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
180
	@$(SHELL_PATH) ./GIT-VERSION-GEN
181
-include GIT-VERSION-FILE
182

183 184 185 186 187
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 已提交
188
uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not')
189

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

192
CFLAGS = -g -O2 -Wall
J
Junio C Hamano 已提交
193
LDFLAGS =
194
ALL_CFLAGS = $(CFLAGS)
J
Junio C Hamano 已提交
195
ALL_LDFLAGS = $(LDFLAGS)
J
Junio C Hamano 已提交
196
STRIP ?= strip
197

198 199 200
# Among the variables below, these:
#   gitexecdir
#   template_dir
201 202
#   mandir
#   infodir
203 204
#   htmldir
#   ETC_GITCONFIG (but not sysconfdir)
205 206
# can be specified as a relative path some/where/else;
# this is interpreted as relative to $(prefix) and "git" at
207 208 209
# runtime figures out where they are based on the path to the executable.
# This can help installing the suite in a relocatable way.

210
prefix = $(HOME)
211 212 213 214 215
bindir_relative = bin
bindir = $(prefix)/$(bindir_relative)
mandir = share/man
infodir = share/info
gitexecdir = libexec/git-core
216
sharedir = $(prefix)/share
217 218
template_dir = share/git-core/templates
htmldir = share/doc/git-doc
219 220
ifeq ($(prefix),/usr)
sysconfdir = /etc
221
ETC_GITCONFIG = $(sysconfdir)/gitconfig
222 223
else
sysconfdir = $(prefix)/etc
224
ETC_GITCONFIG = etc/gitconfig
225
endif
226
lib = lib
227
# DESTDIR=
228

229
# default configuration for gitweb
230
GITWEB_CONFIG = gitweb_config.perl
231
GITWEB_CONFIG_SYSTEM = /etc/gitweb.conf
232
GITWEB_HOME_LINK_STR = projects
233 234
GITWEB_SITENAME =
GITWEB_PROJECTROOT = /pub/git
235
GITWEB_PROJECT_MAXDEPTH = 2007
M
Matthias Lederhofer 已提交
236 237
GITWEB_EXPORT_OK =
GITWEB_STRICT_EXPORT =
238
GITWEB_BASE_URL =
239 240 241
GITWEB_LIST =
GITWEB_HOMETEXT = indextext.html
GITWEB_CSS = gitweb.css
M
Martin Waitz 已提交
242
GITWEB_LOGO = git-logo.png
243
GITWEB_FAVICON = git-favicon.png
244 245
GITWEB_SITE_HEADER =
GITWEB_SITE_FOOTER =
246

247
export prefix bindir sharedir sysconfdir
248

249 250
CC = gcc
AR = ar
251
RM = rm -f
252
TAR = tar
253
FIND = find
254 255
INSTALL = install
RPMBUILD = rpmbuild
256
TCL_PATH = tclsh
257
TCLTK_PATH = wish
258
PTHREAD_LIBS = -lpthread
259

260 261
export TCL_PATH TCLTK_PATH

262 263
# sparse is architecture-neutral, which means that we need to tell it
# explicitly what architecture to check for. Fix this up for yours..
264
SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__
265

P
Petr Baudis 已提交
266 267 268 269


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

270
# Those must not be GNU-specific; they are shared with perl/ which may
P
Petr Baudis 已提交
271 272 273 274
# 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 =
275

276 277 278 279 280 281 282 283 284 285 286 287
# Guard against environment variables
BUILTIN_OBJS =
BUILT_INS =
COMPAT_CFLAGS =
COMPAT_OBJS =
LIB_H =
LIB_OBJS =
PROGRAMS =
SCRIPT_PERL =
SCRIPT_SH =
TEST_PROGRAMS =

288 289
SCRIPT_SH += git-am.sh
SCRIPT_SH += git-bisect.sh
290
SCRIPT_SH += git-difftool--helper.sh
291 292 293 294 295 296
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
297
SCRIPT_SH += git-mergetool--lib.sh
298 299 300 301 302 303 304 305 306 307 308 309 310
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
311
SCRIPT_PERL += git-difftool.perl
312 313 314 315 316 317 318
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
319

320 321
SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
	  $(patsubst %.perl,%,$(SCRIPT_PERL)) \
322
	  git-instaweb
323

324 325
# Empty...
EXTRA_PROGRAMS =
326

327 328 329 330 331 332 333 334 335 336 337
# ... 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-mktree$X
PROGRAMS += git-pack-redundant$X
PROGRAMS += git-patch-id$X
338
PROGRAMS += git-shell$X
339 340 341 342 343 344
PROGRAMS += git-show-index$X
PROGRAMS += git-unpack-file$X
PROGRAMS += git-update-server-info$X
PROGRAMS += git-upload-pack$X
PROGRAMS += git-var$X

J
Junio C Hamano 已提交
345 346
# 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.
347 348 349
BUILT_INS += $(patsubst builtin-%.o,git-%$X,$(BUILTIN_OBJS))

BUILT_INS += git-cherry$X
350
BUILT_INS += git-cherry-pick$X
351 352 353 354 355 356 357 358
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 已提交
359
BUILT_INS += git-stage$X
360 361
BUILT_INS += git-status$X
BUILT_INS += git-whatchanged$X
J
Junio C Hamano 已提交
362

J
Junio C Hamano 已提交
363
# what 'all' will build and 'install' will install, in gitexecdir
J
Junio C Hamano 已提交
364
ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
365

E
Eygene Ryabinkin 已提交
366
# what 'all' will build but not install in gitexecdir
367
OTHER_PROGRAMS = git$X
E
Eygene Ryabinkin 已提交
368

369 370 371 372 373 374 375
# 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
376

L
Luben Tuikov 已提交
377 378
export PERL_PATH

L
Linus Torvalds 已提交
379
LIB_FILE=libgit.a
380
XDIFF_LIB=xdiff/lib.a
J
Junio C Hamano 已提交
381

382 383 384 385 386 387 388
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
389
LIB_H += compat/cygwin.h
390
LIB_H += compat/mingw.h
391 392 393 394 395 396 397 398
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 已提交
399
LIB_H += graph.h
400 401
LIB_H += grep.h
LIB_H += hash.h
402
LIB_H += help.h
403
LIB_H += levenshtein.h
404 405 406 407
LIB_H += list-objects.h
LIB_H += ll-merge.h
LIB_H += log-tree.h
LIB_H += mailmap.h
408
LIB_H += merge-recursive.h
409 410
LIB_H += object.h
LIB_H += pack.h
411
LIB_H += pack-refs.h
412 413 414 415 416 417 418 419 420
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
421
LIB_H += rerere.h
422 423
LIB_H += revision.h
LIB_H += run-command.h
424
LIB_H += sha1-lookup.h
425
LIB_H += sideband.h
426
LIB_H += sigchain.h
427
LIB_H += strbuf.h
428
LIB_H += string-list.h
429 430 431 432 433
LIB_H += tag.h
LIB_H += transport.h
LIB_H += tree.h
LIB_H += tree-walk.h
LIB_H += unpack-trees.h
434
LIB_H += userdiff.h
435
LIB_H += utf8.h
436
LIB_H += wt-status.h
437

438
LIB_OBJS += abspath.o
439 440 441 442 443 444 445
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
446
LIB_OBJS += bisect.o
447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468
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
469
LIB_OBJS += diff-no-index.o
470 471
LIB_OBJS += diff.o
LIB_OBJS += dir.o
472
LIB_OBJS += editor.o
473 474 475 476
LIB_OBJS += entry.o
LIB_OBJS += environment.o
LIB_OBJS += exec_cmd.o
LIB_OBJS += fsck.o
A
Adam Simpkins 已提交
477
LIB_OBJS += graph.o
478 479 480 481
LIB_OBJS += grep.o
LIB_OBJS += hash.o
LIB_OBJS += help.o
LIB_OBJS += ident.o
482
LIB_OBJS += levenshtein.o
483 484 485 486 487 488 489
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
490
LIB_OBJS += merge-recursive.o
491
LIB_OBJS += name-hash.o
492 493
LIB_OBJS += object.o
LIB_OBJS += pack-check.o
494
LIB_OBJS += pack-refs.o
495 496 497 498 499 500 501 502
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
503
LIB_OBJS += preload-index.o
504 505 506 507 508 509 510 511
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
512
LIB_OBJS += rerere.o
513 514 515 516
LIB_OBJS += revision.o
LIB_OBJS += run-command.o
LIB_OBJS += server-info.o
LIB_OBJS += setup.o
517
LIB_OBJS += sha1-lookup.o
518
LIB_OBJS += sha1_file.o
519 520 521
LIB_OBJS += sha1_name.o
LIB_OBJS += shallow.o
LIB_OBJS += sideband.o
522
LIB_OBJS += sigchain.o
523
LIB_OBJS += strbuf.o
524
LIB_OBJS += string-list.o
525 526 527 528 529 530 531 532 533
LIB_OBJS += symlinks.o
LIB_OBJS += tag.o
LIB_OBJS += trace.o
LIB_OBJS += transport.o
LIB_OBJS += tree-diff.o
LIB_OBJS += tree.o
LIB_OBJS += tree-walk.o
LIB_OBJS += unpack-trees.o
LIB_OBJS += usage.o
534
LIB_OBJS += userdiff.o
535 536
LIB_OBJS += utf8.o
LIB_OBJS += walker.o
537
LIB_OBJS += wrapper.o
538 539 540 541 542 543 544 545 546
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
547
BUILTIN_OBJS += builtin-bisect--helper.o
548 549 550 551 552 553 554 555 556
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 已提交
557
BUILTIN_OBJS += builtin-clone.o
558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575
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 已提交
576
BUILTIN_OBJS += builtin-help.o
577 578 579 580 581 582 583
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 已提交
584
BUILTIN_OBJS += builtin-merge.o
585 586 587 588 589 590 591 592 593 594 595 596
BUILTIN_OBJS += builtin-merge-base.o
BUILTIN_OBJS += builtin-merge-file.o
BUILTIN_OBJS += builtin-merge-ours.o
BUILTIN_OBJS += builtin-merge-recursive.o
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 已提交
597
BUILTIN_OBJS += builtin-receive-pack.o
598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620
BUILTIN_OBJS += builtin-reflog.o
BUILTIN_OBJS += builtin-remote.o
BUILTIN_OBJS += builtin-rerere.o
BUILTIN_OBJS += builtin-reset.o
BUILTIN_OBJS += builtin-rev-list.o
BUILTIN_OBJS += builtin-rev-parse.o
BUILTIN_OBJS += builtin-revert.o
BUILTIN_OBJS += builtin-rm.o
BUILTIN_OBJS += builtin-send-pack.o
BUILTIN_OBJS += builtin-shortlog.o
BUILTIN_OBJS += builtin-show-branch.o
BUILTIN_OBJS += builtin-show-ref.o
BUILTIN_OBJS += builtin-stripspace.o
BUILTIN_OBJS += builtin-symbolic-ref.o
BUILTIN_OBJS += builtin-tag.o
BUILTIN_OBJS += builtin-tar-tree.o
BUILTIN_OBJS += builtin-unpack-objects.o
BUILTIN_OBJS += builtin-update-index.o
BUILTIN_OBJS += builtin-update-ref.o
BUILTIN_OBJS += builtin-upload-archive.o
BUILTIN_OBJS += builtin-verify-pack.o
BUILTIN_OBJS += builtin-verify-tag.o
BUILTIN_OBJS += builtin-write-tree.o
621

622
GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
623
EXTLIBS =
624

625 626 627
#
# Platform specific tweaks
#
628 629 630 631 632

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

633 634
ifeq ($(uname_S),Linux)
	NO_STRLCPY = YesPlease
635
	THREADED_DELTA_SEARCH = YesPlease
636
endif
G
Gerrit Pape 已提交
637 638
ifeq ($(uname_S),GNU/kFreeBSD)
	NO_STRLCPY = YesPlease
639
	THREADED_DELTA_SEARCH = YesPlease
G
Gerrit Pape 已提交
640
endif
B
Boyd Lynn Gerber 已提交
641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679
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
	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
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
	NO_STRCASESTR = YesPlease
	NO_MEMMEM = YesPlease
	INSTALL = ginstall
	TAR = gtar
endif
680
ifeq ($(uname_S),Darwin)
681 682
	NEEDS_SSL_WITH_CRYPTO = YesPlease
	NEEDS_LIBICONV = YesPlease
683
	ifeq ($(shell expr "$(uname_R)" : '[15678]\.'),2)
684 685
		OLD_ICONV = UnfortunatelyYes
	endif
686 687 688
	ifeq ($(shell expr "$(uname_R)" : '[15]\.'),2)
		NO_STRLCPY = YesPlease
	endif
689
	NO_MEMMEM = YesPlease
690
	THREADED_DELTA_SEARCH = YesPlease
691
	USE_ST_TIMESPEC = YesPlease
692
endif
693
ifeq ($(uname_S),SunOS)
694
	NEEDS_SOCKET = YesPlease
695
	NEEDS_NSL = YesPlease
696 697
	SHELL_PATH = /bin/bash
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
698
	NO_MEMMEM = YesPlease
699
	NO_HSTRERROR = YesPlease
700
	NO_MKDTEMP = YesPlease
701
	OLD_ICONV = UnfortunatelyYes
J
Jason Riedy 已提交
702
	ifeq ($(uname_R),5.8)
J
Jason Riedy 已提交
703
		NO_UNSETENV = YesPlease
J
Jason Riedy 已提交
704
		NO_SETENV = YesPlease
705
		NO_C99_FORMAT = YesPlease
706
		NO_STRTOUMAX = YesPlease
J
Jason Riedy 已提交
707
	endif
708 709 710
	ifeq ($(uname_R),5.9)
		NO_UNSETENV = YesPlease
		NO_SETENV = YesPlease
711
		NO_C99_FORMAT = YesPlease
712
		NO_STRTOUMAX = YesPlease
713
	endif
714 715
	INSTALL = ginstall
	TAR = gtar
716
	BASIC_CFLAGS += -D__EXTENSIONS__
717
endif
718
ifeq ($(uname_O),Cygwin)
719
	NO_D_TYPE_IN_DIRENT = YesPlease
720
	NO_D_INO_IN_DIRENT = YesPlease
H
hpa 已提交
721
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
722
	NO_MEMMEM = YesPlease
723
	NO_SYMLINK_HEAD = YesPlease
H
hpa 已提交
724
	NEEDS_LIBICONV = YesPlease
725
	NO_FAST_WORKING_DIRECTORY = UnfortunatelyYes
726
	NO_TRUSTABLE_FILEMODE = UnfortunatelyYes
P
Pascal Obry 已提交
727
	OLD_ICONV = UnfortunatelyYes
728 729
	# There are conflicting reports about this.
	# On some boxes NO_MMAP is needed, and not so elsewhere.
J
Junio C Hamano 已提交
730 731
	# Try commenting this out if you suspect MMAP is more efficient
	NO_MMAP = YesPlease
732
	NO_IPV6 = YesPlease
P
Peter Anvin 已提交
733
	X = .exe
734
endif
A
Alecs King 已提交
735 736
ifeq ($(uname_S),FreeBSD)
	NEEDS_LIBICONV = YesPlease
737
	NO_MEMMEM = YesPlease
738 739
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
740
	DIR_HAS_BSD_GROUP_SEMANTICS = YesPlease
741
	USE_ST_TIMESPEC = YesPlease
742
	THREADED_DELTA_SEARCH = YesPlease
743
	ifeq ($(shell expr "$(uname_R)" : '4\.'),2)
744
		PTHREAD_LIBS = -pthread
745 746 747
		NO_UINTMAX_T = YesPlease
		NO_STRTOUMAX = YesPlease
	endif
A
Alecs King 已提交
748
endif
749
ifeq ($(uname_S),OpenBSD)
750
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
751
	NO_MEMMEM = YesPlease
T
Tony Kemp 已提交
752
	USE_ST_TIMESPEC = YesPlease
H
Han Boetes 已提交
753
	NEEDS_LIBICONV = YesPlease
754 755
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
756
	THREADED_DELTA_SEARCH = YesPlease
J
Junio C Hamano 已提交
757 758
endif
ifeq ($(uname_S),NetBSD)
759 760 761
	ifeq ($(shell expr "$(uname_R)" : '[01]\.'),2)
		NEEDS_LIBICONV = YesPlease
	endif
762
	BASIC_CFLAGS += -I/usr/pkg/include
763
	BASIC_LDFLAGS += -L/usr/pkg/lib $(CC_LD_DYNPATH)/usr/pkg/lib
764
	THREADED_DELTA_SEARCH = YesPlease
P
Patrick Welche 已提交
765
	USE_ST_TIMESPEC = YesPlease
H
Han Boetes 已提交
766
endif
767 768
ifeq ($(uname_S),AIX)
	NO_STRCASESTR=YesPlease
R
René Scharfe 已提交
769
	NO_MEMMEM = YesPlease
770
	NO_MKDTEMP = YesPlease
771
	NO_STRLCPY = YesPlease
772
	NO_NSEC = YesPlease
773 774
	FREAD_READS_DIRECTORIES = UnfortunatelyYes
	INTERNAL_QSORT = UnfortunatelyYes
775
	NEEDS_LIBICONV=YesPlease
776
	BASIC_CFLAGS += -D_LARGE_FILES
J
Junio C Hamano 已提交
777 778 779 780 781
	ifneq ($(shell expr "$(uname_V)" : '[1234]'),1)
		THREADED_DELTA_SEARCH = YesPlease
	else
		NO_PTHREADS = YesPlease
	endif
782
endif
T
Thomas Schwinge 已提交
783 784 785 786
ifeq ($(uname_S),GNU)
	# GNU/Hurd
	NO_STRLCPY=YesPlease
endif
J
Johannes Schindelin 已提交
787 788 789 790
ifeq ($(uname_S),IRIX64)
	NO_IPV6=YesPlease
	NO_SETENV=YesPlease
	NO_STRCASESTR=YesPlease
R
René Scharfe 已提交
791
	NO_MEMMEM = YesPlease
792
	NO_STRLCPY = YesPlease
J
Johannes Schindelin 已提交
793 794
	NO_SOCKADDR_STORAGE=YesPlease
	SHELL_PATH=/usr/gnu/bin/bash
795
	BASIC_CFLAGS += -DPATH_MAX=1024
J
Johannes Schindelin 已提交
796
	# for now, build 32-bit version
797
	BASIC_LDFLAGS += -L/usr/lib32
J
Johannes Schindelin 已提交
798
endif
799 800 801 802 803 804 805 806 807 808
ifeq ($(uname_S),HP-UX)
	NO_IPV6=YesPlease
	NO_SETENV=YesPlease
	NO_STRCASESTR=YesPlease
	NO_MEMMEM = YesPlease
	NO_STRLCPY = YesPlease
	NO_MKDTEMP = YesPlease
	NO_UNSETENV = YesPlease
	NO_HSTRERROR = YesPlease
	NO_SYS_SELECT_H = YesPlease
809
	SNPRINTF_RETURNS_BOGUS = YesPlease
810
endif
811 812
ifneq (,$(findstring CYGWIN,$(uname_S)))
	COMPAT_OBJS += compat/cygwin.o
813
	UNRELIABLE_FSTAT = UnfortunatelyYes
814
endif
J
Johannes Sixt 已提交
815 816 817 818 819 820 821 822 823 824 825
ifneq (,$(findstring MINGW,$(uname_S)))
	NO_PREAD = YesPlease
	NO_OPENSSL = YesPlease
	NO_CURL = YesPlease
	NO_SYMLINK_HEAD = YesPlease
	NO_IPV6 = YesPlease
	NO_SETENV = YesPlease
	NO_UNSETENV = YesPlease
	NO_STRCASESTR = YesPlease
	NO_STRLCPY = YesPlease
	NO_MEMMEM = YesPlease
J
Junio C Hamano 已提交
826
	NO_PTHREADS = YesPlease
J
Johannes Sixt 已提交
827 828 829 830 831 832 833 834
	NEEDS_LIBICONV = YesPlease
	OLD_ICONV = YesPlease
	NO_C99_FORMAT = YesPlease
	NO_STRTOUMAX = YesPlease
	NO_MKDTEMP = YesPlease
	SNPRINTF_RETURNS_BOGUS = YesPlease
	NO_SVN_TESTS = YesPlease
	NO_PERL_MAKEMAKER = YesPlease
835
	RUNTIME_PREFIX = YesPlease
J
Johannes Sixt 已提交
836
	NO_POSIX_ONLY_PROGRAMS = YesPlease
837
	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
838
	NO_NSEC = YesPlease
J
Janos Laube 已提交
839
	USE_WIN32_MMAP = YesPlease
840
	UNRELIABLE_FSTAT = UnfortunatelyYes
841
	OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
842
	COMPAT_CFLAGS += -D__USE_MINGW_ACCESS -DNOGDI -Icompat -Icompat/regex -Icompat/fnmatch
J
Johannes Sixt 已提交
843
	COMPAT_CFLAGS += -DSNPRINTF_SIZE_CORR=1
844
	COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
845
	COMPAT_OBJS += compat/mingw.o compat/fnmatch/fnmatch.o compat/regex/regex.o compat/winansi.o
J
Johannes Sixt 已提交
846 847 848
	EXTLIBS += -lws2_32
	X = .exe
endif
849 850 851
ifneq (,$(findstring arm,$(uname_M)))
	ARM_SHA1 = YesPlease
endif
852

853
-include config.mak.autogen
854
-include config.mak
855

856 857 858 859 860 861 862 863 864 865 866 867 868
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
869
	PTHREAD_LIBS =
870 871
endif

872 873 874 875 876 877 878 879
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
880 881
endif

D
Daniel Barkalow 已提交
882 883 884
ifdef NO_CURL
	BASIC_CFLAGS += -DNO_CURL
else
885
	ifdef CURLDIR
886
		# Try "-Wl,-rpath=$(CURLDIR)/$(lib)" in such a case.
887
		BASIC_CFLAGS += -I$(CURLDIR)/include
888
		CURL_LIBCURL = -L$(CURLDIR)/$(lib) $(CC_LD_DYNPATH)$(CURLDIR)/$(lib) -lcurl
889 890 891
	else
		CURL_LIBCURL = -lcurl
	endif
D
Daniel Barkalow 已提交
892 893
	BUILTIN_OBJS += builtin-http-fetch.o
	EXTLIBS += $(CURL_LIBCURL)
894
	LIB_OBJS += http.o http-walker.o
895 896 897 898 899
	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
900
	endif
901
	ifndef NO_EXPAT
902 903 904 905 906 907
		ifdef EXPATDIR
			BASIC_CFLAGS += -I$(EXPATDIR)/include
			EXPAT_LIBEXPAT = -L$(EXPATDIR)/$(lib) $(CC_LD_DYNPATH)$(EXPATDIR)/$(lib) -lexpat
		else
			EXPAT_LIBEXPAT = -lexpat
		endif
908
	endif
909 910
endif

911 912
ifdef ZLIB_PATH
	BASIC_CFLAGS += -I$(ZLIB_PATH)/include
913
	EXTLIBS += -L$(ZLIB_PATH)/$(lib) $(CC_LD_DYNPATH)$(ZLIB_PATH)/$(lib)
914 915 916
endif
EXTLIBS += -lz

917 918 919 920
ifndef NO_POSIX_ONLY_PROGRAMS
	PROGRAMS += git-daemon$X
	PROGRAMS += git-imap-send$X
endif
P
Petr Baudis 已提交
921
ifndef NO_OPENSSL
J
Junio C Hamano 已提交
922
	OPENSSL_LIBSSL = -lssl
J
Junio C Hamano 已提交
923
	ifdef OPENSSLDIR
924
		BASIC_CFLAGS += -I$(OPENSSLDIR)/include
925
		OPENSSL_LINK = -L$(OPENSSLDIR)/$(lib) $(CC_LD_DYNPATH)$(OPENSSLDIR)/$(lib)
J
Junio C Hamano 已提交
926 927 928
	else
		OPENSSL_LINK =
	endif
P
Petr Baudis 已提交
929
else
930
	BASIC_CFLAGS += -DNO_OPENSSL
J
Junio C Hamano 已提交
931 932
	MOZILLA_SHA1 = 1
	OPENSSL_LIBSSL =
P
Petr Baudis 已提交
933
endif
934
ifdef NEEDS_SSL_WITH_CRYPTO
J
Junio C Hamano 已提交
935
	LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto -lssl
936
else
J
Junio C Hamano 已提交
937
	LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto
938 939
endif
ifdef NEEDS_LIBICONV
J
Junio C Hamano 已提交
940
	ifdef ICONVDIR
941
		BASIC_CFLAGS += -I$(ICONVDIR)/include
942
		ICONV_LINK = -L$(ICONVDIR)/$(lib) $(CC_LD_DYNPATH)$(ICONVDIR)/$(lib)
J
Junio C Hamano 已提交
943 944 945
	else
		ICONV_LINK =
	endif
946
	EXTLIBS += $(ICONV_LINK) -liconv
947
endif
948
ifdef NEEDS_SOCKET
949
	EXTLIBS += -lsocket
950
endif
951
ifdef NEEDS_NSL
952
	EXTLIBS += -lnsl
953
endif
954
ifdef NO_D_TYPE_IN_DIRENT
955
	BASIC_CFLAGS += -DNO_D_TYPE_IN_DIRENT
956
endif
957
ifdef NO_D_INO_IN_DIRENT
958
	BASIC_CFLAGS += -DNO_D_INO_IN_DIRENT
959
endif
960 961 962
ifdef NO_ST_BLOCKS_IN_STRUCT_STAT
	BASIC_CFLAGS += -DNO_ST_BLOCKS_IN_STRUCT_STAT
endif
963 964 965
ifdef USE_NSEC
	BASIC_CFLAGS += -DUSE_NSEC
endif
966 967 968
ifdef USE_ST_TIMESPEC
	BASIC_CFLAGS += -DUSE_ST_TIMESPEC
endif
969 970 971
ifdef NO_NSEC
	BASIC_CFLAGS += -DNO_NSEC
endif
972
ifdef NO_C99_FORMAT
973
	BASIC_CFLAGS += -DNO_C99_FORMAT
974
endif
975 976 977 978
ifdef SNPRINTF_RETURNS_BOGUS
	COMPAT_CFLAGS += -DSNPRINTF_RETURNS_BOGUS
	COMPAT_OBJS += compat/snprintf.o
endif
979 980 981 982
ifdef FREAD_READS_DIRECTORIES
	COMPAT_CFLAGS += -DFREAD_READS_DIRECTORIES
	COMPAT_OBJS += compat/fopen.o
endif
983
ifdef NO_SYMLINK_HEAD
984
	BASIC_CFLAGS += -DNO_SYMLINK_HEAD
985
endif
986
ifdef NO_STRCASESTR
987
	COMPAT_CFLAGS += -DNO_STRCASESTR
J
Jason Riedy 已提交
988 989
	COMPAT_OBJS += compat/strcasestr.o
endif
990 991 992 993
ifdef NO_STRLCPY
	COMPAT_CFLAGS += -DNO_STRLCPY
	COMPAT_OBJS += compat/strlcpy.o
endif
994 995 996 997 998 999 1000
ifdef NO_STRTOUMAX
	COMPAT_CFLAGS += -DNO_STRTOUMAX
	COMPAT_OBJS += compat/strtoumax.o
endif
ifdef NO_STRTOULL
	COMPAT_CFLAGS += -DNO_STRTOULL
endif
J
Jason Riedy 已提交
1001
ifdef NO_SETENV
1002
	COMPAT_CFLAGS += -DNO_SETENV
J
Jason Riedy 已提交
1003
	COMPAT_OBJS += compat/setenv.o
1004
endif
1005 1006 1007 1008
ifdef NO_MKDTEMP
	COMPAT_CFLAGS += -DNO_MKDTEMP
	COMPAT_OBJS += compat/mkdtemp.o
endif
J
Johannes Schindelin 已提交
1009
ifdef NO_UNSETENV
J
Jason Riedy 已提交
1010 1011 1012
	COMPAT_CFLAGS += -DNO_UNSETENV
	COMPAT_OBJS += compat/unsetenv.o
endif
1013 1014 1015
ifdef NO_SYS_SELECT_H
	BASIC_CFLAGS += -DNO_SYS_SELECT_H
endif
1016
ifdef NO_MMAP
1017
	COMPAT_CFLAGS += -DNO_MMAP
J
Jason Riedy 已提交
1018
	COMPAT_OBJS += compat/mmap.o
J
Janos Laube 已提交
1019 1020 1021 1022 1023
else
	ifdef USE_WIN32_MMAP
		COMPAT_CFLAGS += -DUSE_WIN32_MMAP
		COMPAT_OBJS += compat/win32mmap.o
	endif
1024
endif
1025 1026
ifdef OBJECT_CREATION_USES_RENAMES
	COMPAT_CFLAGS += -DOBJECT_CREATION_MODE=1
1027
endif
1028 1029 1030 1031
ifdef NO_PREAD
	COMPAT_CFLAGS += -DNO_PREAD
	COMPAT_OBJS += compat/pread.o
endif
1032 1033 1034
ifdef NO_FAST_WORKING_DIRECTORY
	BASIC_CFLAGS += -DNO_FAST_WORKING_DIRECTORY
endif
1035 1036 1037
ifdef NO_TRUSTABLE_FILEMODE
	BASIC_CFLAGS += -DNO_TRUSTABLE_FILEMODE
endif
1038
ifdef NO_IPV6
1039
	BASIC_CFLAGS += -DNO_IPV6
1040
endif
1041 1042 1043
ifdef NO_UINTMAX_T
	BASIC_CFLAGS += -Duintmax_t=uint32_t
endif
1044 1045
ifdef NO_SOCKADDR_STORAGE
ifdef NO_IPV6
1046
	BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in
1047
else
1048
	BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in6
1049
endif
1050
endif
1051 1052 1053
ifdef NO_INET_NTOP
	LIB_OBJS += compat/inet_ntop.o
endif
1054 1055 1056
ifdef NO_INET_PTON
	LIB_OBJS += compat/inet_pton.o
endif
1057

1058
ifdef NO_ICONV
1059
	BASIC_CFLAGS += -DNO_ICONV
1060 1061
endif

1062 1063 1064 1065
ifdef OLD_ICONV
	BASIC_CFLAGS += -DOLD_ICONV
endif

1066 1067 1068 1069
ifdef NO_DEFLATE_BOUND
	BASIC_CFLAGS += -DNO_DEFLATE_BOUND
endif

1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082
ifdef PPC_SHA1
	SHA1_HEADER = "ppc/sha1.h"
	LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
else
ifdef ARM_SHA1
	SHA1_HEADER = "arm/sha1.h"
	LIB_OBJS += arm/sha1.o arm/sha1_arm.o
else
ifdef MOZILLA_SHA1
	SHA1_HEADER = "mozilla-sha1/sha1.h"
	LIB_OBJS += mozilla-sha1/sha1.o
else
	SHA1_HEADER = <openssl/sha.h>
1083
	EXTLIBS += $(LIB_4_CRYPTO)
1084 1085 1086
endif
endif
endif
1087 1088 1089
ifdef NO_PERL_MAKEMAKER
	export NO_PERL_MAKEMAKER
endif
1090 1091 1092 1093
ifdef NO_HSTRERROR
	COMPAT_CFLAGS += -DNO_HSTRERROR
	COMPAT_OBJS += compat/hstrerror.o
endif
R
René Scharfe 已提交
1094 1095 1096 1097
ifdef NO_MEMMEM
	COMPAT_CFLAGS += -DNO_MEMMEM
	COMPAT_OBJS += compat/memmem.o
endif
1098 1099 1100 1101
ifdef INTERNAL_QSORT
	COMPAT_CFLAGS += -DINTERNAL_QSORT
	COMPAT_OBJS += compat/qsort.o
endif
1102 1103 1104
ifdef RUNTIME_PREFIX
	COMPAT_CFLAGS += -DRUNTIME_PREFIX
endif
1105

J
Junio C Hamano 已提交
1106 1107 1108 1109 1110 1111 1112
ifdef NO_PTHREADS
	THREADED_DELTA_SEARCH =
	BASIC_CFLAGS += -DNO_PTHREADS
else
	EXTLIBS += $(PTHREAD_LIBS)
endif

N
Nicolas Pitre 已提交
1113 1114
ifdef THREADED_DELTA_SEARCH
	BASIC_CFLAGS += -DTHREADED_DELTA_SEARCH
1115
	LIB_OBJS += thread-utils.o
N
Nicolas Pitre 已提交
1116
endif
1117 1118 1119
ifdef DIR_HAS_BSD_GROUP_SEMANTICS
	COMPAT_CFLAGS += -DDIR_HAS_BSD_GROUP_SEMANTICS
endif
J
Jeff King 已提交
1120 1121 1122
ifdef NO_EXTERNAL_GREP
	BASIC_CFLAGS += -DNO_EXTERNAL_GREP
endif
1123 1124 1125
ifdef UNRELIABLE_FSTAT
	BASIC_CFLAGS += -DUNRELIABLE_FSTAT
endif
N
Nicolas Pitre 已提交
1126

1127 1128 1129 1130
ifeq ($(TCLTK_PATH),)
NO_TCLTK=NoThanks
endif

1131 1132 1133 1134
ifeq ($(PERL_PATH),)
NO_PERL=NoThanks
endif

1135
QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
1136 1137
QUIET_SUBDIR1  =

1138 1139 1140 1141 1142 1143
ifneq ($(findstring $(MAKEFLAGS),w),w)
PRINT_DIR = --no-print-directory
else # "make -w"
NO_SUBDIR = :
endif

1144
ifneq ($(findstring $(MAKEFLAGS),s),s)
S
Shawn O. Pearce 已提交
1145
ifndef V
A
Alex Riesen 已提交
1146
	QUIET_CC       = @echo '   ' CC $@;
1147 1148 1149 1150
	QUIET_AR       = @echo '   ' AR $@;
	QUIET_LINK     = @echo '   ' LINK $@;
	QUIET_BUILT_IN = @echo '   ' BUILTIN $@;
	QUIET_GEN      = @echo '   ' GEN $@;
1151
	QUIET_SUBDIR0  = +@subdir=
1152 1153
	QUIET_SUBDIR1  = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
			 $(MAKE) $(PRINT_DIR) -C $$subdir
S
Shawn O. Pearce 已提交
1154
	export V
A
Alex Riesen 已提交
1155
	export QUIET_GEN
1156 1157
	export QUIET_BUILT_IN
endif
1158
endif
1159

1160 1161 1162 1163
ifdef ASCIIDOC8
	export ASCIIDOC8
endif

P
Pavel Roskin 已提交
1164
# Shell quote (do not use $(call) to accommodate ancient setups);
1165 1166

SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER))
1167
ETC_GITCONFIG_SQ = $(subst ','\'',$(ETC_GITCONFIG))
1168 1169 1170

DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
bindir_SQ = $(subst ','\'',$(bindir))
1171
bindir_relative_SQ = $(subst ','\'',$(bindir_relative))
1172
mandir_SQ = $(subst ','\'',$(mandir))
1173
infodir_SQ = $(subst ','\'',$(infodir))
1174 1175
gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
template_dir_SQ = $(subst ','\'',$(template_dir))
1176
htmldir_SQ = $(subst ','\'',$(htmldir))
1177
prefix_SQ = $(subst ','\'',$(prefix))
1178 1179 1180

SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
1181
TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH))
1182

1183 1184
LIBS = $(GITLIBS) $(EXTLIBS)

1185
BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' \
1186
	$(COMPAT_CFLAGS)
J
Jason Riedy 已提交
1187
LIB_OBJS += $(COMPAT_OBJS)
1188 1189 1190 1191

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

1192
export TAR INSTALL DESTDIR SHELL_PATH
1193 1194


P
Petr Baudis 已提交
1195 1196
### Build rules

1197 1198
SHELL = $(SHELL_PATH)

1199
all:: shell_compatibility_test $(ALL_PROGRAMS) $(BUILT_INS) $(OTHER_PROGRAMS) GIT-BUILD-OPTIONS
1200
ifneq (,$X)
1201
	$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), test '$p' -ef '$p$X' || $(RM) '$p';)
1202
endif
1203

1204
all::
E
Eygene Ryabinkin 已提交
1205
ifndef NO_TCLTK
1206
	$(QUIET_SUBDIR0)git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all
J
Junio C Hamano 已提交
1207
	$(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all
E
Eygene Ryabinkin 已提交
1208
endif
1209
ifndef NO_PERL
1210
	$(QUIET_SUBDIR0)perl $(QUIET_SUBDIR1) PERL_PATH='$(PERL_PATH_SQ)' prefix='$(prefix_SQ)' all
1211
endif
1212
	$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1)
1213

1214 1215 1216 1217 1218
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 已提交
1219 1220 1221
strip: $(PROGRAMS) git$X
	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X

1222 1223
git.o: git.c common-cmds.h GIT-CFLAGS
	$(QUIET_CC)$(CC) -DGIT_VERSION='"$(GIT_VERSION)"' \
1224
		'-DGIT_HTML_PATH="$(htmldir_SQ)"' \
1225 1226 1227
		$(ALL_CFLAGS) -c $(filter %.c,$^)

git$X: git.o $(BUILTIN_OBJS) $(GITLIBS)
1228
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ git.o \
1229
		$(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)
1230

M
Miklos Vajna 已提交
1231
builtin-help.o: builtin-help.c common-cmds.h GIT-CFLAGS
1232
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) \
1233
		'-DGIT_HTML_PATH="$(htmldir_SQ)"' \
1234 1235
		'-DGIT_MAN_PATH="$(mandir_SQ)"' \
		'-DGIT_INFO_PATH="$(infodir_SQ)"' $<
1236

J
Junio C Hamano 已提交
1237
$(BUILT_INS): git$X
1238 1239 1240 1241
	$(QUIET_BUILT_IN)$(RM) $@ && \
	ln git$X $@ 2>/dev/null || \
	ln -s git$X $@ 2>/dev/null || \
	cp git$X $@
J
Junio C Hamano 已提交
1242

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

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

1248
$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
1249
	$(QUIET_GEN)$(RM) $@ $@+ && \
1250
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
1251
	    -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \
1252
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1253
	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
1254 1255
	    $@.sh >$@+ && \
	chmod +x $@+ && \
1256
	mv $@+ $@
1257

1258
ifndef NO_PERL
1259 1260
$(patsubst %.perl,%,$(SCRIPT_PERL)): perl/perl.mak

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

1264
$(patsubst %.perl,%,$(SCRIPT_PERL)): % : %.perl
1265
	$(QUIET_GEN)$(RM) $@ $@+ && \
1266
	INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C perl -s --no-print-directory instlibdir` && \
1267 1268 1269 1270 1271 1272 1273
	sed -e '1{' \
	    -e '	s|#!.*perl|#!$(PERL_PATH_SQ)|' \
	    -e '	h' \
	    -e '	s=.*=use lib (split(/:/, $$ENV{GITPERLLIB} || "@@INSTLIBDIR@@"));=' \
	    -e '	H' \
	    -e '	x' \
	    -e '}' \
1274
	    -e 's|@@INSTLIBDIR@@|'"$$INSTLIBDIR"'|g' \
1275
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1276 1277
	    $@.perl >$@+ && \
	chmod +x $@+ && \
1278
	mv $@+ $@
1279

1280
OTHER_PROGRAMS += gitweb/gitweb.cgi
1281
gitweb/gitweb.cgi: gitweb/gitweb.perl
1282
	$(QUIET_GEN)$(RM) $@ $@+ && \
1283
	sed -e '1s|#!.*perl|#!$(PERL_PATH_SQ)|' \
1284 1285 1286
	    -e 's|++GIT_VERSION++|$(GIT_VERSION)|g' \
	    -e 's|++GIT_BINDIR++|$(bindir)|g' \
	    -e 's|++GITWEB_CONFIG++|$(GITWEB_CONFIG)|g' \
1287
	    -e 's|++GITWEB_CONFIG_SYSTEM++|$(GITWEB_CONFIG_SYSTEM)|g' \
1288
	    -e 's|++GITWEB_HOME_LINK_STR++|$(GITWEB_HOME_LINK_STR)|g' \
1289 1290
	    -e 's|++GITWEB_SITENAME++|$(GITWEB_SITENAME)|g' \
	    -e 's|++GITWEB_PROJECTROOT++|$(GITWEB_PROJECTROOT)|g' \
1291
	    -e 's|"++GITWEB_PROJECT_MAXDEPTH++"|$(GITWEB_PROJECT_MAXDEPTH)|g' \
M
Matthias Lederhofer 已提交
1292 1293
	    -e 's|++GITWEB_EXPORT_OK++|$(GITWEB_EXPORT_OK)|g' \
	    -e 's|++GITWEB_STRICT_EXPORT++|$(GITWEB_STRICT_EXPORT)|g' \
1294
	    -e 's|++GITWEB_BASE_URL++|$(GITWEB_BASE_URL)|g' \
1295 1296 1297 1298
	    -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' \
1299
	    -e 's|++GITWEB_FAVICON++|$(GITWEB_FAVICON)|g' \
1300 1301
	    -e 's|++GITWEB_SITE_HEADER++|$(GITWEB_SITE_HEADER)|g' \
	    -e 's|++GITWEB_SITE_FOOTER++|$(GITWEB_SITE_FOOTER)|g' \
1302 1303
	    $< >$@+ && \
	chmod +x $@+ && \
1304 1305
	mv $@+ $@

1306
git-instaweb: git-instaweb.sh gitweb/gitweb.cgi gitweb/gitweb.css
1307
	$(QUIET_GEN)$(RM) $@ $@+ && \
1308 1309 1310
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
1311
	    -e '/@@GITWEB_CGI@@/r gitweb/gitweb.cgi' \
1312
	    -e '/@@GITWEB_CGI@@/d' \
1313
	    -e '/@@GITWEB_CSS@@/r gitweb/gitweb.css' \
1314
	    -e '/@@GITWEB_CSS@@/d' \
1315
	    -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
1316 1317
	    $@.sh > $@+ && \
	chmod +x $@+ && \
1318
	mv $@+ $@
1319 1320 1321 1322 1323 1324 1325 1326 1327
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
1328

1329
configure: configure.ac
1330
	$(QUIET_GEN)$(RM) $@ $<+ && \
1331
	sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1332 1333
	    $< > $<+ && \
	autoconf -o $@ $<+ && \
1334
	$(RM) $<+
1335

1336
# These can record GIT_VERSION
1337
git.o git.spec \
1338 1339 1340
	$(patsubst %.sh,%,$(SCRIPT_SH)) \
	$(patsubst %.perl,%,$(SCRIPT_PERL)) \
	: GIT-VERSION-FILE
1341

1342
%.o: %.c GIT-CFLAGS
1343
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) $<
1344 1345
%.s: %.c GIT-CFLAGS
	$(QUIET_CC)$(CC) -S $(ALL_CFLAGS) $<
1346
%.o: %.S
1347
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) $<
1348

1349
exec_cmd.o: exec_cmd.c GIT-CFLAGS
1350 1351 1352 1353 1354 1355
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) \
		'-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
		'-DBINDIR="$(bindir_relative_SQ)"' \
		'-DPREFIX="$(prefix_SQ)"' \
		$<

1356
builtin-init-db.o: builtin-init-db.c GIT-CFLAGS
1357
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"' $<
1358

1359 1360 1361
config.o: config.c GIT-CFLAGS
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DETC_GITCONFIG='"$(ETC_GITCONFIG_SQ)"' $<

1362
http.o: http.c GIT-CFLAGS
1363
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DGIT_USER_AGENT='"git/$(GIT_VERSION)"' $<
1364

1365
ifdef NO_EXPAT
D
Daniel Barkalow 已提交
1366
http-walker.o: http-walker.c http.h GIT-CFLAGS
1367
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DNO_EXPAT $<
1368 1369
endif

1370
git-%$X: %.o $(GITLIBS)
1371
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
1372

R
Robert Shearman 已提交
1373 1374 1375
git-imap-send$X: imap-send.o $(GITLIBS)
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIBS) $(OPENSSL_LINK) $(OPENSSL_LIBSSL)
1376

M
Mike Hommey 已提交
1377
http.o http-walker.o http-push.o transport.o: http.h
1378

1379
git-http-push$X: revision.o http.o http-push.o $(GITLIBS)
1380
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
1381 1382
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

1383
$(LIB_OBJS) $(BUILTIN_OBJS): $(LIB_H)
1384
$(patsubst git-%$X,%.o,$(PROGRAMS)): $(LIB_H) $(wildcard */*.h)
J
Junio C Hamano 已提交
1385
builtin-revert.o wt-status.o: wt-status.h
1386

P
Petr Baudis 已提交
1387
$(LIB_FILE): $(LIB_OBJS)
1388
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)
P
Petr Baudis 已提交
1389

J
Johannes Schindelin 已提交
1390
XDIFF_OBJS=xdiff/xdiffi.o xdiff/xprepare.o xdiff/xutils.o xdiff/xemit.o \
1391
	xdiff/xmerge.o xdiff/xpatience.o
1392 1393
$(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
1394 1395

$(XDIFF_LIB): $(XDIFF_OBJS)
1396
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(XDIFF_OBJS)
1397 1398


P
Petr Baudis 已提交
1399 1400 1401
doc:
	$(MAKE) -C Documentation all

1402 1403 1404 1405 1406 1407
man:
	$(MAKE) -C Documentation man

html:
	$(MAKE) -C Documentation html

1408 1409 1410
info:
	$(MAKE) -C Documentation info

1411 1412 1413
pdf:
	$(MAKE) -C Documentation pdf

1414
TAGS:
1415
	$(RM) TAGS
1416
	$(FIND) . -name '*.[hcS]' -print | xargs etags -a
1417 1418

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

K
Kristof Provost 已提交
1422 1423 1424 1425
cscope:
	$(RM) cscope*
	$(FIND) . -name '*.[hcS]' -print | xargs cscope -b

1426
### Detect prefix changes
J
Junio C Hamano 已提交
1427
TRACK_CFLAGS = $(subst ','\'',$(ALL_CFLAGS)):\
1428 1429 1430 1431 1432 1433 1434 1435 1436
             $(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 已提交
1437 1438 1439
# 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".
1440
GIT-BUILD-OPTIONS: .FORCE-GIT-BUILD-OPTIONS
J
Junio C Hamano 已提交
1441 1442
	@echo SHELL_PATH=\''$(subst ','\'',$(SHELL_PATH_SQ))'\' >$@
	@echo TAR=\''$(subst ','\'',$(subst ','\'',$(TAR)))'\' >>$@
J
Jeff King 已提交
1443
	@echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@
1444
	@echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@
1445

1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459
### 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 已提交
1460 1461
### Testing rules

1462
TEST_PROGRAMS += test-chmtime$X
R
René Scharfe 已提交
1463
TEST_PROGRAMS += test-ctype$X
1464 1465
TEST_PROGRAMS += test-date$X
TEST_PROGRAMS += test-delta$X
J
Junio C Hamano 已提交
1466
TEST_PROGRAMS += test-dump-cache-tree$X
1467 1468 1469 1470 1471
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
1472
TEST_PROGRAMS += test-sigchain$X
1473 1474 1475

all:: $(TEST_PROGRAMS)

1476 1477 1478 1479
# GNU make supports exporting all variables by "export" without parameters.
# However, the environment gets quite big, and some programs have problems
# with that.

1480
export NO_SVN_TESTS
1481

1482
test: all
P
Petr Baudis 已提交
1483 1484
	$(MAKE) -C t/ all

R
René Scharfe 已提交
1485 1486
test-ctype$X: ctype.o

1487
test-date$X: date.o ctype.o
P
Petr Baudis 已提交
1488

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

1491 1492
test-parse-options$X: parse-options.o

1493 1494
.PRECIOUS: $(patsubst test-%$X,test-%.o,$(TEST_PROGRAMS))

1495 1496
test-%$X: test-%.o $(GITLIBS)
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
1497

1498 1499 1500
check-sha1:: test-sha1$X
	./test-sha1.sh

1501
check: common-cmds.h
1502 1503 1504 1505 1506 1507 1508 1509 1510 1511
	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 已提交
1512

1513
remove-dashes:
1514
	./fixup-builtins $(BUILT_INS) $(PROGRAMS) $(SCRIPTS)
P
Petr Baudis 已提交
1515 1516 1517

### Installation rules

1518
ifneq ($(filter /%,$(firstword $(template_dir))),)
1519
template_instdir = $(template_dir)
1520 1521
else
template_instdir = $(prefix)/$(template_dir)
1522 1523 1524
endif
export template_instdir

1525
ifneq ($(filter /%,$(firstword $(gitexecdir))),)
1526
gitexec_instdir = $(gitexecdir)
1527 1528
else
gitexec_instdir = $(prefix)/$(gitexecdir)
1529 1530 1531 1532
endif
gitexec_instdir_SQ = $(subst ','\'',$(gitexec_instdir))
export gitexec_instdir

1533
install: all
1534
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
1535 1536
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
	$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
1537
	$(INSTALL) git$X git-upload-pack$X git-receive-pack$X git-upload-archive$X git-shell$X git-cvsserver '$(DESTDIR_SQ)$(bindir_SQ)'
1538
	$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
1539
ifndef NO_PERL
1540
	$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
1541
endif
E
Eygene Ryabinkin 已提交
1542
ifndef NO_TCLTK
J
Junio C Hamano 已提交
1543
	$(MAKE) -C gitk-git install
1544
	$(MAKE) -C git-gui gitexecdir='$(gitexec_instdir_SQ)' install
E
Eygene Ryabinkin 已提交
1545
endif
1546
ifneq (,$X)
1547
	$(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';)
1548
endif
1549
	bindir=$$(cd '$(DESTDIR_SQ)$(bindir_SQ)' && pwd) && \
1550
	execdir=$$(cd '$(DESTDIR_SQ)$(gitexec_instdir_SQ)' && pwd) && \
1551
	{ $(RM) "$$execdir/git-add$X" && \
1552 1553
		ln "$$bindir/git$X" "$$execdir/git-add$X" 2>/dev/null || \
		cp "$$bindir/git$X" "$$execdir/git-add$X"; } && \
1554 1555 1556 1557 1558
	{ for p in $(filter-out git-add$X,$(BUILT_INS)); do \
		$(RM) "$$execdir/$$p" && \
		ln "$$execdir/git-add$X" "$$execdir/$$p" 2>/dev/null || \
		ln -s "git-add$X" "$$execdir/$$p" 2>/dev/null || \
		cp "$$execdir/git-add$X" "$$execdir/$$p" || exit; \
1559
	  done; } && \
1560
	./check_bindir "z$$bindir" "z$$execdir" "$$bindir/git-add$X"
P
Petr Baudis 已提交
1561 1562 1563 1564

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

1565 1566 1567
install-man:
	$(MAKE) -C Documentation install-man

1568 1569 1570
install-html:
	$(MAKE) -C Documentation install-html

1571 1572 1573
install-info:
	$(MAKE) -C Documentation install-info

1574 1575 1576
install-pdf:
	$(MAKE) -C Documentation install-pdf

1577 1578
quick-install-doc:
	$(MAKE) -C Documentation quick-install
P
Petr Baudis 已提交
1579

1580 1581 1582
quick-install-man:
	$(MAKE) -C Documentation quick-install-man

1583 1584 1585
quick-install-html:
	$(MAKE) -C Documentation quick-install-html

P
Petr Baudis 已提交
1586 1587 1588 1589


### Maintainer's dist rules

1590
git.spec: git.spec.in
1591 1592
	sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@+
	mv $@+ $@
1593

J
Junio C Hamano 已提交
1594
GIT_TARNAME=git-$(GIT_VERSION)
1595
dist: git.spec git-archive$(X) configure
1596 1597
	./git-archive --format=tar \
		--prefix=$(GIT_TARNAME)/ HEAD^{tree} > $(GIT_TARNAME).tar
1598
	@mkdir -p $(GIT_TARNAME)
1599
	@cp git.spec configure $(GIT_TARNAME)
1600
	@echo $(GIT_VERSION) > $(GIT_TARNAME)/version
1601
	@$(MAKE) -C git-gui TARDIR=../$(GIT_TARNAME)/git-gui dist-version
1602
	$(TAR) rf $(GIT_TARNAME).tar \
1603
		$(GIT_TARNAME)/git.spec \
1604
		$(GIT_TARNAME)/configure \
1605
		$(GIT_TARNAME)/version \
1606
		$(GIT_TARNAME)/git-gui/version
1607
	@$(RM) -r $(GIT_TARNAME)
1608
	gzip -f -9 $(GIT_TARNAME).tar
1609 1610

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

1613 1614 1615
htmldocs = git-htmldocs-$(GIT_VERSION)
manpages = git-manpages-$(GIT_VERSION)
dist-doc:
1616
	$(RM) -r .doc-tmp-dir
1617 1618 1619 1620 1621
	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
	:
1622
	$(RM) -r .doc-tmp-dir
1623
	mkdir -p .doc-tmp-dir/man1 .doc-tmp-dir/man5 .doc-tmp-dir/man7
1624
	$(MAKE) -C Documentation DESTDIR=./ \
1625
		man1dir=../.doc-tmp-dir/man1 \
1626
		man5dir=../.doc-tmp-dir/man5 \
1627
		man7dir=../.doc-tmp-dir/man7 \
1628 1629 1630
		install
	cd .doc-tmp-dir && $(TAR) cf ../$(manpages).tar .
	gzip -n -9 -f $(manpages).tar
1631
	$(RM) -r .doc-tmp-dir
1632

P
Petr Baudis 已提交
1633
### Cleaning rules
1634

1635 1636 1637
distclean: clean
	$(RM) configure

1638
clean:
1639
	$(RM) *.o mozilla-sha1/*.o arm/*.o ppc/*.o compat/*.o xdiff/*.o \
1640
		$(LIB_FILE) $(XDIFF_LIB)
1641 1642
	$(RM) $(ALL_PROGRAMS) $(BUILT_INS) git$X
	$(RM) $(TEST_PROGRAMS)
K
Kristof Provost 已提交
1643
	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h TAGS tags cscope*
1644
	$(RM) -r autom4te.cache
1645
	$(RM) config.log config.mak.autogen config.mak.append config.status config.cache
1646 1647 1648
	$(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
1649
	$(MAKE) -C Documentation/ clean
1650 1651
ifndef NO_PERL
	$(RM) gitweb/gitweb.cgi
1652
	$(MAKE) -C perl clean
1653
endif
P
Petr Baudis 已提交
1654
	$(MAKE) -C templates/ clean
1655
	$(MAKE) -C t/ clean
E
Eygene Ryabinkin 已提交
1656
ifndef NO_TCLTK
J
Junio C Hamano 已提交
1657
	$(MAKE) -C gitk-git clean
E
Eygene Ryabinkin 已提交
1658 1659
	$(MAKE) -C git-gui clean
endif
1660
	$(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-GUI-VARS GIT-BUILD-OPTIONS
1661

J
Junio C Hamano 已提交
1662
.PHONY: all install clean strip
1663
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
K
Kristof Provost 已提交
1664
.PHONY: .FORCE-GIT-VERSION-FILE TAGS tags cscope .FORCE-GIT-CFLAGS
1665
.PHONY: .FORCE-GIT-BUILD-OPTIONS
J
Junio C Hamano 已提交
1666

J
Junio C Hamano 已提交
1667 1668 1669
### Check documentation
#
check-docs::
1670
	@(for v in $(ALL_PROGRAMS) $(BUILT_INS) git gitk; \
J
Junio C Hamano 已提交
1671 1672 1673
	do \
		case "$$v" in \
		git-merge-octopus | git-merge-ours | git-merge-recursive | \
M
Miklos Vajna 已提交
1674
		git-merge-resolve | git-merge-subtree | \
1675
		git-fsck-objects | git-init-db | \
1676
		git-?*--?* ) continue ;; \
J
Junio C Hamano 已提交
1677 1678 1679
		esac ; \
		test -f "Documentation/$$v.txt" || \
		echo "no doc: $$v"; \
J
Junio C Hamano 已提交
1680
		sed -e '/^#/d' command-list.txt | \
1681
		grep -q "^$$v[ 	]" || \
J
Junio C Hamano 已提交
1682 1683 1684 1685
		case "$$v" in \
		git) ;; \
		*) echo "no link: $$v";; \
		esac ; \
1686 1687
	done; \
	( \
J
Junio C Hamano 已提交
1688
		sed -e '/^#/d' \
1689
		    -e 's/[ 	].*//' \
J
Junio C Hamano 已提交
1690
		    -e 's/^/listed /' command-list.txt; \
1691 1692 1693 1694 1695 1696 1697 1698
		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 | \
1699
		*,git-help | \
1700 1701 1702
		documented,gitattributes | \
		documented,gitignore | \
		documented,gitmodules | \
1703
		documented,gitcli | \
1704
		documented,git-tools | \
1705 1706 1707 1708 1709 1710 1711 1712
		documented,gitcore-tutorial | \
		documented,gitcvs-migration | \
		documented,gitdiffcore | \
		documented,gitglossary | \
		documented,githooks | \
		documented,gitrepository-layout | \
		documented,gittutorial | \
		documented,gittutorial-2 | \
1713 1714 1715 1716 1717 1718 1719
		sentinel,not,matching,is,ok ) continue ;; \
		esac; \
		case " $(ALL_PROGRAMS) $(BUILT_INS) git gitk " in \
		*" $$cmd "*)	;; \
		*) echo "removed but $$how: $$cmd" ;; \
		esac; \
	done ) | sort
1720 1721 1722 1723 1724

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

1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749
### 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