Makefile 48.1 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 177
#
# Define UNRELIABLE_HARDLINKS if your operating systems has problems when
# hardlinking a file to another name and unlinking the original file right
# 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 368 369 370
OTHER_PROGRAMS = git$X
ifndef NO_PERL
OTHER_PROGRAMS += gitweb/gitweb.cgi
endif
E
Eygene Ryabinkin 已提交
371

372 373 374 375 376 377 378
# 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
379

L
Luben Tuikov 已提交
380 381
export PERL_PATH

L
Linus Torvalds 已提交
382
LIB_FILE=libgit.a
383
XDIFF_LIB=xdiff/lib.a
J
Junio C Hamano 已提交
384

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

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

625
GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
626
EXTLIBS =
627

628 629 630
#
# Platform specific tweaks
#
631 632 633 634 635

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

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

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

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

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

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

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

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

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

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

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

1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083
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>
1084
	EXTLIBS += $(LIB_4_CRYPTO)
1085 1086 1087
endif
endif
endif
1088 1089 1090
ifdef NO_PERL_MAKEMAKER
	export NO_PERL_MAKEMAKER
endif
1091 1092 1093 1094
ifdef NO_HSTRERROR
	COMPAT_CFLAGS += -DNO_HSTRERROR
	COMPAT_OBJS += compat/hstrerror.o
endif
R
René Scharfe 已提交
1095 1096 1097 1098
ifdef NO_MEMMEM
	COMPAT_CFLAGS += -DNO_MEMMEM
	COMPAT_OBJS += compat/memmem.o
endif
1099 1100 1101 1102
ifdef INTERNAL_QSORT
	COMPAT_CFLAGS += -DINTERNAL_QSORT
	COMPAT_OBJS += compat/qsort.o
endif
1103 1104 1105
ifdef RUNTIME_PREFIX
	COMPAT_CFLAGS += -DRUNTIME_PREFIX
endif
1106

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

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

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

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

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

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

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

1161 1162 1163 1164
ifdef ASCIIDOC8
	export ASCIIDOC8
endif

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

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

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

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

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

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

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

1193
export TAR INSTALL DESTDIR SHELL_PATH
1194 1195


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

1198 1199
SHELL = $(SHELL_PATH)

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

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

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

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

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

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

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

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

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

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

1260
ifndef NO_PERL
1261 1262
$(patsubst %.perl,%,$(SCRIPT_PERL)): perl/perl.mak

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

html:
	$(MAKE) -C Documentation html

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

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

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

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

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

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

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

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

all:: $(TEST_PROGRAMS)

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

1481
export NO_SVN_TESTS
1482

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

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

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

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

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

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

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

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

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

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

### Installation rules

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

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

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

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

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

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

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

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

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

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

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

P
Petr Baudis 已提交
1587 1588 1589 1590


### Maintainer's dist rules

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

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

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

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

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

1636 1637 1638
distclean: clean
	$(RM) configure

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

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

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

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

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