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

S
Shawn O. Pearce 已提交
4
# Define V=1 to have a more verbose compile.
5
#
6 7 8 9
# 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 17 18
# Define NO_CURL if you do not have curl installed.  git-http-pull and
# 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
# Define NO_D_INO_IN_DIRENT if you don't have d_ino in your struct dirent.
#
28 29 30
# 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).
#
31 32 33
# 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).
34
# some C compilers supported these specifiers prior to C99 as an extension.
35
#
36 37
# Define NO_STRCASESTR if you don't have strcasestr.
#
R
René Scharfe 已提交
38 39
# Define NO_MEMMEM if you don't have memmem.
#
40 41
# Define NO_STRLCPY if you don't have strlcpy.
#
42 43 44 45
# 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 已提交
46 47
# Define NO_SETENV if you don't have setenv in the C library.
#
48 49
# Define NO_UNSETENV if you don't have unsetenv in the C library.
#
50 51
# Define NO_MKDTEMP if you don't have mkdtemp in the C library.
#
52 53
# Define NO_SYS_SELECT_H if you don't have sys/select.h.
#
54 55
# 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.
56
#
P
Pavel Roskin 已提交
57
# Define NO_SVN_TESTS if you want to skip time-consuming SVN interoperability
E
Eric Wong 已提交
58 59 60
# 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.
#
61 62 63 64 65 66 67 68 69 70 71 72
# 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.
#
73 74
# Define PPC_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine optimized for PowerPC.
75
#
76 77 78
# Define ARM_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine optimized for ARM.
#
79 80 81 82 83
# 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.
#
84
# Define NEEDS_SSL_WITH_CRYPTO if you need -lcrypto with -lssl (Darwin).
85
#
86
# Define NEEDS_LIBICONV if linking with libc is not enough (Darwin).
87 88 89 90
#
# Define NEEDS_SOCKET if linking with libc is not enough (SunOS,
# Patrick Mauritz).
#
91 92
# Define NO_MMAP if you want to avoid mmap.
#
93 94 95
# Define NO_PREAD if you have a problem with pread() system call (e.g.
# cygwin.dll before v1.5.22).
#
96 97 98
# Define NO_FAST_WORKING_DIRECTORY if accessing objects in pack files is
# generally faster on your platform than accessing the working directory.
#
99 100 101
# Define NO_TRUSTABLE_FILEMODE if your filesystem may claim to support
# the executable mode bit, but doesn't really do so.
#
102 103
# Define NO_IPV6 if you lack IPv6 support and getaddrinfo().
#
104 105 106
# Define NO_SOCKADDR_STORAGE if your platform does not have struct
# sockaddr_storage.
#
107 108
# Define NO_ICONV if your libc does not properly support iconv.
#
109 110 111
# Define OLD_ICONV if your library has an old iconv(), where the second
# (input buffer pointer) parameter is declared with type (const char **).
#
112 113
# Define NO_DEFLATE_BOUND if your zlib does not have deflateBound.
#
114 115 116
# 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.
117
#
118 119 120 121 122
# 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).
123
#
124
# Define USE_STDEV below if you want git to care about the underlying device
125
# change being considered an inode change from the update-index perspective.
126
#
127 128
# Define ASCIIDOC8 if you want to format documentation with AsciiDoc 8
#
129 130
# Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72.
#
131 132 133
# Define NO_PERL_MAKEMAKER if you cannot use Makefiles generated by perl's
# MakeMaker (e.g. using ActiveState under Cygwin).
#
E
Eygene Ryabinkin 已提交
134 135
# Define NO_TCLTK if you do not want Tcl/Tk GUI.
#
136 137 138 139 140
# 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.
141 142 143
# 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 已提交
144 145 146
# Define THREADED_DELTA_SEARCH if you have pthreads and wish to exploit
# parallel delta searching when packing objects.
#
147 148 149 150
# 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 已提交
151 152 153
# 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).
154

155
GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
156
	@$(SHELL_PATH) ./GIT-VERSION-GEN
157
-include GIT-VERSION-FILE
158

159 160 161 162 163 164
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 已提交
165
# CFLAGS and LDFLAGS are for the users to override from the command line.
166

167
CFLAGS = -g -O2 -Wall
J
Junio C Hamano 已提交
168
LDFLAGS =
169
ALL_CFLAGS = $(CFLAGS)
J
Junio C Hamano 已提交
170
ALL_LDFLAGS = $(LDFLAGS)
J
Junio C Hamano 已提交
171
STRIP ?= strip
172

173 174
prefix = $(HOME)
bindir = $(prefix)/bin
175
mandir = $(prefix)/share/man
176
infodir = $(prefix)/share/info
177
gitexecdir = $(bindir)
178
sharedir = $(prefix)/share
179
template_dir = $(sharedir)/git-core/templates
180
htmldir=$(sharedir)/doc/git-doc
181 182 183 184 185
ifeq ($(prefix),/usr)
sysconfdir = /etc
else
sysconfdir = $(prefix)/etc
endif
186
lib = lib
187
ETC_GITCONFIG = $(sysconfdir)/gitconfig
188
# DESTDIR=
189

190
# default configuration for gitweb
191
GITWEB_CONFIG = gitweb_config.perl
192
GITWEB_CONFIG_SYSTEM = /etc/gitweb.conf
193
GITWEB_HOME_LINK_STR = projects
194 195
GITWEB_SITENAME =
GITWEB_PROJECTROOT = /pub/git
196
GITWEB_PROJECT_MAXDEPTH = 2007
M
Matthias Lederhofer 已提交
197 198
GITWEB_EXPORT_OK =
GITWEB_STRICT_EXPORT =
199
GITWEB_BASE_URL =
200 201 202
GITWEB_LIST =
GITWEB_HOMETEXT = indextext.html
GITWEB_CSS = gitweb.css
M
Martin Waitz 已提交
203
GITWEB_LOGO = git-logo.png
204
GITWEB_FAVICON = git-favicon.png
205 206
GITWEB_SITE_HEADER =
GITWEB_SITE_FOOTER =
207

208
export prefix bindir gitexecdir sharedir template_dir htmldir sysconfdir
209

210 211
CC = gcc
AR = ar
212
RM = rm -f
213
TAR = tar
214
FIND = find
215 216
INSTALL = install
RPMBUILD = rpmbuild
217
TCL_PATH = tclsh
218
TCLTK_PATH = wish
219

220 221
export TCL_PATH TCLTK_PATH

222 223
# sparse is architecture-neutral, which means that we need to tell it
# explicitly what architecture to check for. Fix this up for yours..
224
SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__
225

P
Petr Baudis 已提交
226 227 228 229


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

230
# Those must not be GNU-specific; they are shared with perl/ which may
P
Petr Baudis 已提交
231 232 233 234
# 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 =
235

236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266
SCRIPT_SH += git-am.sh
SCRIPT_SH += git-bisect.sh
SCRIPT_SH += git-clone.sh
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-merge.sh
SCRIPT_SH += git-merge-stupid.sh
SCRIPT_SH += git-mergetool.sh
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
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
267

268 269
SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
	  $(patsubst %.perl,%,$(SCRIPT_PERL)) \
270
	  git-instaweb
271

272 273
# Empty...
EXTRA_PROGRAMS =
274

275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297
# ... and all the rest that could be moved out of bindir to gitexecdir
PROGRAMS += $(EXTRA_PROGRAMS)
PROGRAMS += git-daemon$X
PROGRAMS += git-fast-import$X
PROGRAMS += git-fetch-pack$X
PROGRAMS += git-hash-object$X
PROGRAMS += git-imap-send$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
PROGRAMS += git-receive-pack$X
PROGRAMS += git-send-pack$X
PROGRAMS += git-shell$X
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 已提交
298 299
# 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.
300 301 302 303 304 305 306 307 308 309 310 311 312 313
BUILT_INS += $(patsubst builtin-%.o,git-%$X,$(BUILTIN_OBJS))

BUILT_INS += git-cherry-pick$X
BUILT_INS += git-cherry$X
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
BUILT_INS += git-status$X
BUILT_INS += git-whatchanged$X
J
Junio C Hamano 已提交
314

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

E
Eygene Ryabinkin 已提交
318 319 320
# what 'all' will build but not install in gitexecdir
OTHER_PROGRAMS = git$X gitweb/gitweb.cgi

321 322 323 324 325 326 327
# 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
328

L
Luben Tuikov 已提交
329 330
export PERL_PATH

L
Linus Torvalds 已提交
331
LIB_FILE=libgit.a
332
XDIFF_LIB=xdiff/lib.a
J
Junio C Hamano 已提交
333

334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368
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
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
LIB_H += grep.h
LIB_H += hash.h
LIB_H += list-objects.h
LIB_H += ll-merge.h
LIB_H += log-tree.h
LIB_H += mailmap.h
LIB_H += object.h
LIB_H += pack.h
LIB_H += pack-revindex.h
LIB_H += parse-options.h
LIB_H += patch-ids.h
LIB_H += path-list.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
LIB_H += revision.h
LIB_H += run-command.h
369
LIB_H += sha1-lookup.h
370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449
LIB_H += sideband.h
LIB_H += strbuf.h
LIB_H += tag.h
LIB_H += transport.h
LIB_H += tree.h
LIB_H += tree-walk.h
LIB_H += unpack-trees.h
LIB_H += utf8.h

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
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
LIB_OBJS += diff.o
LIB_OBJS += dir.o
LIB_OBJS += entry.o
LIB_OBJS += environment.o
LIB_OBJS += exec_cmd.o
LIB_OBJS += fsck.o
LIB_OBJS += grep.o
LIB_OBJS += hash.o
LIB_OBJS += help.o
LIB_OBJS += ident.o
LIB_OBJS += interpolate.o
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
LIB_OBJS += object.o
LIB_OBJS += pack-check.o
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-list.o
LIB_OBJS += path.o
LIB_OBJS += pkt-line.o
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
LIB_OBJS += revision.o
LIB_OBJS += run-command.o
LIB_OBJS += server-info.o
LIB_OBJS += setup.o
LIB_OBJS += sha1_file.o
450
LIB_OBJS += sha1-lookup.o
451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543
LIB_OBJS += sha1_name.o
LIB_OBJS += shallow.o
LIB_OBJS += sideband.o
LIB_OBJS += strbuf.o
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
LIB_OBJS += utf8.o
LIB_OBJS += walker.o
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
BUILTIN_OBJS += builtin-blame.o
BUILTIN_OBJS += builtin-branch.o
BUILTIN_OBJS += builtin-bundle.o
BUILTIN_OBJS += builtin-cat-file.o
BUILTIN_OBJS += builtin-check-attr.o
BUILTIN_OBJS += builtin-check-ref-format.o
BUILTIN_OBJS += builtin-checkout-index.o
BUILTIN_OBJS += builtin-checkout.o
BUILTIN_OBJS += builtin-clean.o
BUILTIN_OBJS += builtin-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
BUILTIN_OBJS += builtin-init-db.o
BUILTIN_OBJS += builtin-log.o
BUILTIN_OBJS += builtin-ls-files.o
BUILTIN_OBJS += builtin-ls-remote.o
BUILTIN_OBJS += builtin-ls-tree.o
BUILTIN_OBJS += builtin-mailinfo.o
BUILTIN_OBJS += builtin-mailsplit.o
BUILTIN_OBJS += builtin-merge-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
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
544

545
GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
546
EXTLIBS =
547

548 549 550
#
# Platform specific tweaks
#
551 552 553 554 555

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

556 557 558
ifeq ($(uname_S),Linux)
	NO_STRLCPY = YesPlease
endif
G
Gerrit Pape 已提交
559 560 561
ifeq ($(uname_S),GNU/kFreeBSD)
	NO_STRLCPY = YesPlease
endif
562
ifeq ($(uname_S),Darwin)
563 564
	NEEDS_SSL_WITH_CRYPTO = YesPlease
	NEEDS_LIBICONV = YesPlease
565 566 567
	ifneq ($(shell expr "$(uname_R)" : '9\.'),2)
		OLD_ICONV = UnfortunatelyYes
	endif
568
	NO_STRLCPY = YesPlease
569
	NO_MEMMEM = YesPlease
570
endif
571
ifeq ($(uname_S),SunOS)
572
	NEEDS_SOCKET = YesPlease
573
	NEEDS_NSL = YesPlease
574 575
	SHELL_PATH = /bin/bash
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
576
	NO_MEMMEM = YesPlease
577
	NO_HSTRERROR = YesPlease
578
	NO_MKDTEMP = YesPlease
J
Jason Riedy 已提交
579
	ifeq ($(uname_R),5.8)
580
		NEEDS_LIBICONV = YesPlease
J
Jason Riedy 已提交
581
		NO_UNSETENV = YesPlease
J
Jason Riedy 已提交
582
		NO_SETENV = YesPlease
583
		NO_C99_FORMAT = YesPlease
584
		NO_STRTOUMAX = YesPlease
J
Jason Riedy 已提交
585
	endif
586 587 588
	ifeq ($(uname_R),5.9)
		NO_UNSETENV = YesPlease
		NO_SETENV = YesPlease
589
		NO_C99_FORMAT = YesPlease
590
		NO_STRTOUMAX = YesPlease
591
	endif
592 593
	INSTALL = ginstall
	TAR = gtar
594
	BASIC_CFLAGS += -D__EXTENSIONS__
595
endif
596
ifeq ($(uname_O),Cygwin)
597
	NO_D_TYPE_IN_DIRENT = YesPlease
598
	NO_D_INO_IN_DIRENT = YesPlease
H
hpa 已提交
599
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
600
	NO_MEMMEM = YesPlease
601
	NO_SYMLINK_HEAD = YesPlease
H
hpa 已提交
602
	NEEDS_LIBICONV = YesPlease
603
	NO_FAST_WORKING_DIRECTORY = UnfortunatelyYes
604
	NO_TRUSTABLE_FILEMODE = UnfortunatelyYes
P
Pascal Obry 已提交
605
	OLD_ICONV = UnfortunatelyYes
606 607
	# There are conflicting reports about this.
	# On some boxes NO_MMAP is needed, and not so elsewhere.
J
Junio C Hamano 已提交
608 609
	# Try commenting this out if you suspect MMAP is more efficient
	NO_MMAP = YesPlease
610
	NO_IPV6 = YesPlease
P
Peter Anvin 已提交
611
	X = .exe
612
endif
A
Alecs King 已提交
613 614
ifeq ($(uname_S),FreeBSD)
	NEEDS_LIBICONV = YesPlease
615
	NO_MEMMEM = YesPlease
616 617
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
618
	DIR_HAS_BSD_GROUP_SEMANTICS = YesPlease
A
Alecs King 已提交
619
endif
620
ifeq ($(uname_S),OpenBSD)
621
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
622
	NO_MEMMEM = YesPlease
H
Han Boetes 已提交
623
	NEEDS_LIBICONV = YesPlease
624 625
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
J
Junio C Hamano 已提交
626 627
endif
ifeq ($(uname_S),NetBSD)
628 629 630
	ifeq ($(shell expr "$(uname_R)" : '[01]\.'),2)
		NEEDS_LIBICONV = YesPlease
	endif
631 632 633
	BASIC_CFLAGS += -I/usr/pkg/include
	BASIC_LDFLAGS += -L/usr/pkg/lib
	ALL_LDFLAGS += -Wl,-rpath,/usr/pkg/lib
H
Han Boetes 已提交
634
endif
635 636
ifeq ($(uname_S),AIX)
	NO_STRCASESTR=YesPlease
R
René Scharfe 已提交
637
	NO_MEMMEM = YesPlease
638
	NO_STRLCPY = YesPlease
639 640
	NEEDS_LIBICONV=YesPlease
endif
T
Thomas Schwinge 已提交
641 642 643 644
ifeq ($(uname_S),GNU)
	# GNU/Hurd
	NO_STRLCPY=YesPlease
endif
J
Johannes Schindelin 已提交
645 646 647 648
ifeq ($(uname_S),IRIX64)
	NO_IPV6=YesPlease
	NO_SETENV=YesPlease
	NO_STRCASESTR=YesPlease
R
René Scharfe 已提交
649
	NO_MEMMEM = YesPlease
650
	NO_STRLCPY = YesPlease
J
Johannes Schindelin 已提交
651 652
	NO_SOCKADDR_STORAGE=YesPlease
	SHELL_PATH=/usr/gnu/bin/bash
653
	BASIC_CFLAGS += -DPATH_MAX=1024
J
Johannes Schindelin 已提交
654
	# for now, build 32-bit version
655
	BASIC_LDFLAGS += -L/usr/lib32
J
Johannes Schindelin 已提交
656
endif
657 658 659 660 661 662 663 664 665 666 667
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
endif
668 669 670
ifneq (,$(findstring arm,$(uname_M)))
	ARM_SHA1 = YesPlease
endif
671

672
-include config.mak.autogen
673
-include config.mak
674

675 676 677 678 679 680 681 682 683 684 685 686 687 688 689
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
endif

690 691 692 693 694 695 696 697
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

D
Daniel Barkalow 已提交
698 699 700
ifdef NO_CURL
	BASIC_CFLAGS += -DNO_CURL
else
701
	ifdef CURLDIR
702
		# Try "-Wl,-rpath=$(CURLDIR)/$(lib)" in such a case.
703
		BASIC_CFLAGS += -I$(CURLDIR)/include
704
		CURL_LIBCURL = -L$(CURLDIR)/$(lib) $(CC_LD_DYNPATH)$(CURLDIR)/$(lib) -lcurl
705 706 707
	else
		CURL_LIBCURL = -lcurl
	endif
D
Daniel Barkalow 已提交
708 709
	BUILTIN_OBJS += builtin-http-fetch.o
	EXTLIBS += $(CURL_LIBCURL)
710
	LIB_OBJS += http.o http-walker.o
711 712 713 714 715
	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
716
	endif
717 718 719
	ifndef NO_EXPAT
		EXPAT_LIBEXPAT = -lexpat
	endif
720 721
endif

722 723
ifdef ZLIB_PATH
	BASIC_CFLAGS += -I$(ZLIB_PATH)/include
724
	EXTLIBS += -L$(ZLIB_PATH)/$(lib) $(CC_LD_DYNPATH)$(ZLIB_PATH)/$(lib)
725 726 727
endif
EXTLIBS += -lz

P
Petr Baudis 已提交
728
ifndef NO_OPENSSL
J
Junio C Hamano 已提交
729
	OPENSSL_LIBSSL = -lssl
J
Junio C Hamano 已提交
730
	ifdef OPENSSLDIR
731
		BASIC_CFLAGS += -I$(OPENSSLDIR)/include
732
		OPENSSL_LINK = -L$(OPENSSLDIR)/$(lib) $(CC_LD_DYNPATH)$(OPENSSLDIR)/$(lib)
J
Junio C Hamano 已提交
733 734 735
	else
		OPENSSL_LINK =
	endif
P
Petr Baudis 已提交
736
else
737
	BASIC_CFLAGS += -DNO_OPENSSL
J
Junio C Hamano 已提交
738 739
	MOZILLA_SHA1 = 1
	OPENSSL_LIBSSL =
P
Petr Baudis 已提交
740
endif
741
ifdef NEEDS_SSL_WITH_CRYPTO
J
Junio C Hamano 已提交
742
	LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto -lssl
743
else
J
Junio C Hamano 已提交
744
	LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto
745 746
endif
ifdef NEEDS_LIBICONV
J
Junio C Hamano 已提交
747
	ifdef ICONVDIR
748
		BASIC_CFLAGS += -I$(ICONVDIR)/include
749
		ICONV_LINK = -L$(ICONVDIR)/$(lib) $(CC_LD_DYNPATH)$(ICONVDIR)/$(lib)
J
Junio C Hamano 已提交
750 751 752
	else
		ICONV_LINK =
	endif
753
	EXTLIBS += $(ICONV_LINK) -liconv
754
endif
755
ifdef NEEDS_SOCKET
756
	EXTLIBS += -lsocket
757
endif
758
ifdef NEEDS_NSL
759
	EXTLIBS += -lnsl
760
endif
761
ifdef NO_D_TYPE_IN_DIRENT
762
	BASIC_CFLAGS += -DNO_D_TYPE_IN_DIRENT
763
endif
764
ifdef NO_D_INO_IN_DIRENT
765
	BASIC_CFLAGS += -DNO_D_INO_IN_DIRENT
766
endif
767
ifdef NO_C99_FORMAT
768
	BASIC_CFLAGS += -DNO_C99_FORMAT
769
endif
770 771 772 773
ifdef SNPRINTF_RETURNS_BOGUS
	COMPAT_CFLAGS += -DSNPRINTF_RETURNS_BOGUS
	COMPAT_OBJS += compat/snprintf.o
endif
774 775 776 777
ifdef FREAD_READS_DIRECTORIES
	COMPAT_CFLAGS += -DFREAD_READS_DIRECTORIES
	COMPAT_OBJS += compat/fopen.o
endif
778
ifdef NO_SYMLINK_HEAD
779
	BASIC_CFLAGS += -DNO_SYMLINK_HEAD
780
endif
781
ifdef NO_STRCASESTR
782
	COMPAT_CFLAGS += -DNO_STRCASESTR
J
Jason Riedy 已提交
783 784
	COMPAT_OBJS += compat/strcasestr.o
endif
785 786 787 788
ifdef NO_STRLCPY
	COMPAT_CFLAGS += -DNO_STRLCPY
	COMPAT_OBJS += compat/strlcpy.o
endif
789 790 791 792 793 794 795
ifdef NO_STRTOUMAX
	COMPAT_CFLAGS += -DNO_STRTOUMAX
	COMPAT_OBJS += compat/strtoumax.o
endif
ifdef NO_STRTOULL
	COMPAT_CFLAGS += -DNO_STRTOULL
endif
J
Jason Riedy 已提交
796
ifdef NO_SETENV
797
	COMPAT_CFLAGS += -DNO_SETENV
J
Jason Riedy 已提交
798
	COMPAT_OBJS += compat/setenv.o
799
endif
800 801 802 803
ifdef NO_MKDTEMP
	COMPAT_CFLAGS += -DNO_MKDTEMP
	COMPAT_OBJS += compat/mkdtemp.o
endif
J
Johannes Schindelin 已提交
804
ifdef NO_UNSETENV
J
Jason Riedy 已提交
805 806 807
	COMPAT_CFLAGS += -DNO_UNSETENV
	COMPAT_OBJS += compat/unsetenv.o
endif
808 809 810
ifdef NO_SYS_SELECT_H
	BASIC_CFLAGS += -DNO_SYS_SELECT_H
endif
811
ifdef NO_MMAP
812
	COMPAT_CFLAGS += -DNO_MMAP
J
Jason Riedy 已提交
813
	COMPAT_OBJS += compat/mmap.o
814
endif
815 816 817 818
ifdef NO_PREAD
	COMPAT_CFLAGS += -DNO_PREAD
	COMPAT_OBJS += compat/pread.o
endif
819 820 821
ifdef NO_FAST_WORKING_DIRECTORY
	BASIC_CFLAGS += -DNO_FAST_WORKING_DIRECTORY
endif
822 823 824
ifdef NO_TRUSTABLE_FILEMODE
	BASIC_CFLAGS += -DNO_TRUSTABLE_FILEMODE
endif
825
ifdef NO_IPV6
826
	BASIC_CFLAGS += -DNO_IPV6
827 828 829
endif
ifdef NO_SOCKADDR_STORAGE
ifdef NO_IPV6
830
	BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in
831
else
832
	BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in6
833
endif
834
endif
835 836 837
ifdef NO_INET_NTOP
	LIB_OBJS += compat/inet_ntop.o
endif
838 839 840
ifdef NO_INET_PTON
	LIB_OBJS += compat/inet_pton.o
endif
841

842
ifdef NO_ICONV
843
	BASIC_CFLAGS += -DNO_ICONV
844 845
endif

846 847 848 849
ifdef OLD_ICONV
	BASIC_CFLAGS += -DOLD_ICONV
endif

850 851 852 853
ifdef NO_DEFLATE_BOUND
	BASIC_CFLAGS += -DNO_DEFLATE_BOUND
endif

854 855 856 857 858 859 860 861 862 863 864 865 866
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>
867
	EXTLIBS += $(LIB_4_CRYPTO)
868 869 870
endif
endif
endif
871 872 873
ifdef NO_PERL_MAKEMAKER
	export NO_PERL_MAKEMAKER
endif
874 875 876 877
ifdef NO_HSTRERROR
	COMPAT_CFLAGS += -DNO_HSTRERROR
	COMPAT_OBJS += compat/hstrerror.o
endif
R
René Scharfe 已提交
878 879 880 881
ifdef NO_MEMMEM
	COMPAT_CFLAGS += -DNO_MEMMEM
	COMPAT_OBJS += compat/memmem.o
endif
882 883 884 885
ifdef INTERNAL_QSORT
	COMPAT_CFLAGS += -DINTERNAL_QSORT
	COMPAT_OBJS += compat/qsort.o
endif
886

N
Nicolas Pitre 已提交
887 888 889
ifdef THREADED_DELTA_SEARCH
	BASIC_CFLAGS += -DTHREADED_DELTA_SEARCH
	EXTLIBS += -lpthread
890
	LIB_OBJS += thread-utils.o
N
Nicolas Pitre 已提交
891
endif
892 893 894
ifdef DIR_HAS_BSD_GROUP_SEMANTICS
	COMPAT_CFLAGS += -DDIR_HAS_BSD_GROUP_SEMANTICS
endif
J
Jeff King 已提交
895 896 897
ifdef NO_EXTERNAL_GREP
	BASIC_CFLAGS += -DNO_EXTERNAL_GREP
endif
N
Nicolas Pitre 已提交
898

899 900 901 902
ifeq ($(TCLTK_PATH),)
NO_TCLTK=NoThanks
endif

903
QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
904 905
QUIET_SUBDIR1  =

906 907 908 909 910 911
ifneq ($(findstring $(MAKEFLAGS),w),w)
PRINT_DIR = --no-print-directory
else # "make -w"
NO_SUBDIR = :
endif

912
ifneq ($(findstring $(MAKEFLAGS),s),s)
S
Shawn O. Pearce 已提交
913
ifndef V
A
Alex Riesen 已提交
914
	QUIET_CC       = @echo '   ' CC $@;
915 916 917 918
	QUIET_AR       = @echo '   ' AR $@;
	QUIET_LINK     = @echo '   ' LINK $@;
	QUIET_BUILT_IN = @echo '   ' BUILTIN $@;
	QUIET_GEN      = @echo '   ' GEN $@;
919
	QUIET_SUBDIR0  = +@subdir=
920 921
	QUIET_SUBDIR1  = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
			 $(MAKE) $(PRINT_DIR) -C $$subdir
S
Shawn O. Pearce 已提交
922
	export V
A
Alex Riesen 已提交
923
	export QUIET_GEN
924 925
	export QUIET_BUILT_IN
endif
926
endif
927

928 929 930 931
ifdef ASCIIDOC8
	export ASCIIDOC8
endif

P
Pavel Roskin 已提交
932
# Shell quote (do not use $(call) to accommodate ancient setups);
933 934

SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER))
935
ETC_GITCONFIG_SQ = $(subst ','\'',$(ETC_GITCONFIG))
936 937 938

DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
bindir_SQ = $(subst ','\'',$(bindir))
939
mandir_SQ = $(subst ','\'',$(mandir))
940
infodir_SQ = $(subst ','\'',$(infodir))
941 942
gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
template_dir_SQ = $(subst ','\'',$(template_dir))
943
htmldir_SQ = $(subst ','\'',$(htmldir))
944
prefix_SQ = $(subst ','\'',$(prefix))
945 946 947

SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
948
TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH))
949

950 951
LIBS = $(GITLIBS) $(EXTLIBS)

952
BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' \
953
	$(COMPAT_CFLAGS)
J
Jason Riedy 已提交
954
LIB_OBJS += $(COMPAT_OBJS)
955 956 957 958

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

959
export TAR INSTALL DESTDIR SHELL_PATH
960 961


P
Petr Baudis 已提交
962 963
### Build rules

964
all:: $(ALL_PROGRAMS) $(BUILT_INS) $(OTHER_PROGRAMS) GIT-BUILD-OPTIONS
965
ifneq (,$X)
966
	$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), $(RM) '$p';)
967
endif
968

969
all::
E
Eygene Ryabinkin 已提交
970
ifndef NO_TCLTK
971
	$(QUIET_SUBDIR0)git-gui $(QUIET_SUBDIR1) all
J
Junio C Hamano 已提交
972
	$(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all
E
Eygene Ryabinkin 已提交
973
endif
974 975
	$(QUIET_SUBDIR0)perl $(QUIET_SUBDIR1) PERL_PATH='$(PERL_PATH_SQ)' prefix='$(prefix_SQ)' all
	$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1)
976

J
Junio C Hamano 已提交
977 978 979
strip: $(PROGRAMS) git$X
	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X

980 981 982 983 984
git.o: git.c common-cmds.h GIT-CFLAGS
	$(QUIET_CC)$(CC) -DGIT_VERSION='"$(GIT_VERSION)"' \
		$(ALL_CFLAGS) -c $(filter %.c,$^)

git$X: git.o $(BUILTIN_OBJS) $(GITLIBS)
985
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ git.o \
986
		$(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)
987

988
help.o: help.c common-cmds.h GIT-CFLAGS
989
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) \
990
		'-DGIT_HTML_PATH="$(htmldir_SQ)"' \
991 992
		'-DGIT_MAN_PATH="$(mandir_SQ)"' \
		'-DGIT_INFO_PATH="$(infodir_SQ)"' $<
993

J
Junio C Hamano 已提交
994
$(BUILT_INS): git$X
995
	$(QUIET_BUILT_IN)$(RM) $@ && ln git$X $@
J
Junio C Hamano 已提交
996

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

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

1002
$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
1003
	$(QUIET_GEN)$(RM) $@ $@+ && \
1004
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
1005
	    -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \
M
Michal Rokos 已提交
1006
	    -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
1007
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1008
	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
1009 1010
	    $@.sh >$@+ && \
	chmod +x $@+ && \
1011
	mv $@+ $@
1012

1013 1014
$(patsubst %.perl,%,$(SCRIPT_PERL)): perl/perl.mak

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

1018
$(patsubst %.perl,%,$(SCRIPT_PERL)): % : %.perl
1019
	$(QUIET_GEN)$(RM) $@ $@+ && \
1020
	INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C perl -s --no-print-directory instlibdir` && \
1021 1022 1023 1024 1025 1026 1027
	sed -e '1{' \
	    -e '	s|#!.*perl|#!$(PERL_PATH_SQ)|' \
	    -e '	h' \
	    -e '	s=.*=use lib (split(/:/, $$ENV{GITPERLLIB} || "@@INSTLIBDIR@@"));=' \
	    -e '	H' \
	    -e '	x' \
	    -e '}' \
1028
	    -e 's|@@INSTLIBDIR@@|'"$$INSTLIBDIR"'|g' \
1029
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1030 1031
	    $@.perl >$@+ && \
	chmod +x $@+ && \
1032
	mv $@+ $@
1033

1034
gitweb/gitweb.cgi: gitweb/gitweb.perl
1035
	$(QUIET_GEN)$(RM) $@ $@+ && \
1036
	sed -e '1s|#!.*perl|#!$(PERL_PATH_SQ)|' \
1037 1038 1039
	    -e 's|++GIT_VERSION++|$(GIT_VERSION)|g' \
	    -e 's|++GIT_BINDIR++|$(bindir)|g' \
	    -e 's|++GITWEB_CONFIG++|$(GITWEB_CONFIG)|g' \
1040
	    -e 's|++GITWEB_CONFIG_SYSTEM++|$(GITWEB_CONFIG_SYSTEM)|g' \
1041
	    -e 's|++GITWEB_HOME_LINK_STR++|$(GITWEB_HOME_LINK_STR)|g' \
1042 1043
	    -e 's|++GITWEB_SITENAME++|$(GITWEB_SITENAME)|g' \
	    -e 's|++GITWEB_PROJECTROOT++|$(GITWEB_PROJECTROOT)|g' \
1044
	    -e 's|"++GITWEB_PROJECT_MAXDEPTH++"|$(GITWEB_PROJECT_MAXDEPTH)|g' \
M
Matthias Lederhofer 已提交
1045 1046
	    -e 's|++GITWEB_EXPORT_OK++|$(GITWEB_EXPORT_OK)|g' \
	    -e 's|++GITWEB_STRICT_EXPORT++|$(GITWEB_STRICT_EXPORT)|g' \
1047
	    -e 's|++GITWEB_BASE_URL++|$(GITWEB_BASE_URL)|g' \
1048 1049 1050 1051
	    -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' \
1052
	    -e 's|++GITWEB_FAVICON++|$(GITWEB_FAVICON)|g' \
1053 1054
	    -e 's|++GITWEB_SITE_HEADER++|$(GITWEB_SITE_HEADER)|g' \
	    -e 's|++GITWEB_SITE_FOOTER++|$(GITWEB_SITE_FOOTER)|g' \
1055 1056
	    $< >$@+ && \
	chmod +x $@+ && \
1057 1058
	mv $@+ $@

1059
git-instaweb: git-instaweb.sh gitweb/gitweb.cgi gitweb/gitweb.css
1060
	$(QUIET_GEN)$(RM) $@ $@+ && \
1061 1062 1063
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
1064
	    -e '/@@GITWEB_CGI@@/r gitweb/gitweb.cgi' \
1065
	    -e '/@@GITWEB_CGI@@/d' \
1066
	    -e '/@@GITWEB_CSS@@/r gitweb/gitweb.css' \
1067
	    -e '/@@GITWEB_CSS@@/d' \
1068
	    -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
1069 1070
	    $@.sh > $@+ && \
	chmod +x $@+ && \
1071 1072
	mv $@+ $@

1073
configure: configure.ac
1074
	$(QUIET_GEN)$(RM) $@ $<+ && \
1075
	sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1076 1077
	    $< > $<+ && \
	autoconf -o $@ $<+ && \
1078
	$(RM) $<+
1079

1080
# These can record GIT_VERSION
1081
git.o git.spec \
1082 1083 1084
	$(patsubst %.sh,%,$(SCRIPT_SH)) \
	$(patsubst %.perl,%,$(SCRIPT_PERL)) \
	: GIT-VERSION-FILE
1085

1086
%.o: %.c GIT-CFLAGS
1087
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) $<
1088 1089
%.s: %.c GIT-CFLAGS
	$(QUIET_CC)$(CC) -S $(ALL_CFLAGS) $<
1090
%.o: %.S
1091
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) $<
1092

1093
exec_cmd.o: exec_cmd.c GIT-CFLAGS
1094
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) '-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' $<
1095
builtin-init-db.o: builtin-init-db.c GIT-CFLAGS
1096
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"' $<
1097

1098 1099 1100
config.o: config.c GIT-CFLAGS
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DETC_GITCONFIG='"$(ETC_GITCONFIG_SQ)"' $<

1101
http.o: http.c GIT-CFLAGS
1102
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DGIT_USER_AGENT='"git/$(GIT_VERSION)"' $<
1103

1104
ifdef NO_EXPAT
D
Daniel Barkalow 已提交
1105
http-walker.o: http-walker.c http.h GIT-CFLAGS
1106
	$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DNO_EXPAT $<
1107 1108
endif

1109
git-%$X: %.o $(GITLIBS)
1110
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
1111

1112 1113
git-imap-send$X: imap-send.o $(LIB_FILE)

M
Mike Hommey 已提交
1114
http.o http-walker.o http-push.o transport.o: http.h
1115

1116
git-http-push$X: revision.o http.o http-push.o $(GITLIBS)
1117
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
1118 1119
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

1120
$(LIB_OBJS) $(BUILTIN_OBJS): $(LIB_H)
1121
$(patsubst git-%$X,%.o,$(PROGRAMS)): $(LIB_H) $(wildcard */*.h)
J
Junio C Hamano 已提交
1122
builtin-revert.o wt-status.o: wt-status.h
1123

P
Petr Baudis 已提交
1124
$(LIB_FILE): $(LIB_OBJS)
1125
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)
P
Petr Baudis 已提交
1126

J
Johannes Schindelin 已提交
1127 1128
XDIFF_OBJS=xdiff/xdiffi.o xdiff/xprepare.o xdiff/xutils.o xdiff/xemit.o \
	xdiff/xmerge.o
1129 1130
$(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
1131 1132

$(XDIFF_LIB): $(XDIFF_OBJS)
1133
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(XDIFF_OBJS)
1134 1135


P
Petr Baudis 已提交
1136 1137 1138
doc:
	$(MAKE) -C Documentation all

1139 1140 1141
info:
	$(MAKE) -C Documentation info

1142
TAGS:
1143
	$(RM) TAGS
1144
	$(FIND) . -name '*.[hcS]' -print | xargs etags -a
1145 1146

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

K
Kristof Provost 已提交
1150 1151 1152 1153
cscope:
	$(RM) cscope*
	$(FIND) . -name '*.[hcS]' -print | xargs cscope -b

1154
### Detect prefix changes
J
Junio C Hamano 已提交
1155
TRACK_CFLAGS = $(subst ','\'',$(ALL_CFLAGS)):\
1156 1157 1158 1159 1160 1161 1162 1163 1164
             $(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

1165 1166 1167
GIT-BUILD-OPTIONS: .FORCE-GIT-BUILD-OPTIONS
	@echo SHELL_PATH=\''$(SHELL_PATH_SQ)'\' >$@

1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181
### 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 已提交
1182 1183
### Testing rules

1184
TEST_PROGRAMS = test-chmtime$X test-genrandom$X test-date$X test-delta$X test-sha1$X test-match-trees$X test-absolute-path$X test-parse-options$X
1185 1186 1187

all:: $(TEST_PROGRAMS)

1188 1189 1190 1191
# GNU make supports exporting all variables by "export" without parameters.
# However, the environment gets quite big, and some programs have problems
# with that.

1192
export NO_SVN_TESTS
1193

1194
test: all
P
Petr Baudis 已提交
1195 1196
	$(MAKE) -C t/ all

1197
test-date$X: date.o ctype.o
P
Petr Baudis 已提交
1198

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

1201 1202
test-parse-options$X: parse-options.o

1203 1204
.PRECIOUS: $(patsubst test-%$X,test-%.o,$(TEST_PROGRAMS))

1205 1206
test-%$X: test-%.o $(GITLIBS)
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
1207

1208 1209 1210
check-sha1:: test-sha1$X
	./test-sha1.sh

1211
check: common-cmds.h
1212
	for i in *.c; do sparse $(ALL_CFLAGS) $(SPARSE_FLAGS) $$i || exit; done
P
Petr Baudis 已提交
1213

1214 1215
remove-dashes:
	./fixup-builtins $(BUILT_INS)
P
Petr Baudis 已提交
1216 1217 1218

### Installation rules

1219
install: all
1220 1221
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexecdir_SQ)'
1222
	$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexecdir_SQ)'
E
Eygene Ryabinkin 已提交
1223
	$(INSTALL) git$X '$(DESTDIR_SQ)$(bindir_SQ)'
1224
	$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
1225
	$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
E
Eygene Ryabinkin 已提交
1226
ifndef NO_TCLTK
J
Junio C Hamano 已提交
1227
	$(MAKE) -C gitk-git install
1228
	$(MAKE) -C git-gui install
E
Eygene Ryabinkin 已提交
1229
endif
1230 1231 1232 1233 1234 1235 1236
	if test 'z$(bindir_SQ)' != 'z$(gitexecdir_SQ)'; \
	then \
		ln -f '$(DESTDIR_SQ)$(bindir_SQ)/git$X' \
			'$(DESTDIR_SQ)$(gitexecdir_SQ)/git$X' || \
		cp '$(DESTDIR_SQ)$(bindir_SQ)/git$X' \
			'$(DESTDIR_SQ)$(gitexecdir_SQ)/git$X'; \
	fi
1237
	$(foreach p,$(BUILT_INS), $(RM) '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' && ln '$(DESTDIR_SQ)$(gitexecdir_SQ)/git$X' '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' ;)
1238
ifneq (,$X)
1239
	$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), $(RM) '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p';)
1240
endif
P
Petr Baudis 已提交
1241 1242 1243 1244

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

1245 1246 1247
install-info:
	$(MAKE) -C Documentation install-info

1248 1249
quick-install-doc:
	$(MAKE) -C Documentation quick-install
P
Petr Baudis 已提交
1250 1251 1252 1253 1254



### Maintainer's dist rules

1255
git.spec: git.spec.in
1256 1257
	sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@+
	mv $@+ $@
1258

J
Junio C Hamano 已提交
1259
GIT_TARNAME=git-$(GIT_VERSION)
1260
dist: git.spec git-archive$(X) configure
1261 1262
	./git-archive --format=tar \
		--prefix=$(GIT_TARNAME)/ HEAD^{tree} > $(GIT_TARNAME).tar
1263
	@mkdir -p $(GIT_TARNAME)
1264
	@cp git.spec configure $(GIT_TARNAME)
1265
	@echo $(GIT_VERSION) > $(GIT_TARNAME)/version
1266
	@$(MAKE) -C git-gui TARDIR=../$(GIT_TARNAME)/git-gui dist-version
1267
	$(TAR) rf $(GIT_TARNAME).tar \
1268
		$(GIT_TARNAME)/git.spec \
1269
		$(GIT_TARNAME)/configure \
1270
		$(GIT_TARNAME)/version \
1271
		$(GIT_TARNAME)/git-gui/version
1272
	@$(RM) -r $(GIT_TARNAME)
1273
	gzip -f -9 $(GIT_TARNAME).tar
1274 1275

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

1278 1279 1280
htmldocs = git-htmldocs-$(GIT_VERSION)
manpages = git-manpages-$(GIT_VERSION)
dist-doc:
1281
	$(RM) -r .doc-tmp-dir
1282 1283 1284 1285 1286
	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
	:
1287
	$(RM) -r .doc-tmp-dir
1288
	mkdir -p .doc-tmp-dir/man1 .doc-tmp-dir/man5 .doc-tmp-dir/man7
1289
	$(MAKE) -C Documentation DESTDIR=./ \
1290
		man1dir=../.doc-tmp-dir/man1 \
1291
		man5dir=../.doc-tmp-dir/man5 \
1292
		man7dir=../.doc-tmp-dir/man7 \
1293 1294 1295
		install
	cd .doc-tmp-dir && $(TAR) cf ../$(manpages).tar .
	gzip -n -9 -f $(manpages).tar
1296
	$(RM) -r .doc-tmp-dir
1297

P
Petr Baudis 已提交
1298
### Cleaning rules
1299

1300 1301 1302
distclean: clean
	$(RM) configure

1303
clean:
1304
	$(RM) *.o mozilla-sha1/*.o arm/*.o ppc/*.o compat/*.o xdiff/*.o \
1305
		$(LIB_FILE) $(XDIFF_LIB)
1306 1307
	$(RM) $(ALL_PROGRAMS) $(BUILT_INS) git$X
	$(RM) $(TEST_PROGRAMS)
K
Kristof Provost 已提交
1308
	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h TAGS tags cscope*
1309
	$(RM) -r autom4te.cache
1310
	$(RM) config.log config.mak.autogen config.mak.append config.status config.cache
1311 1312 1313 1314
	$(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
	$(RM) gitweb/gitweb.cgi
1315
	$(MAKE) -C Documentation/ clean
1316
	$(MAKE) -C perl clean
P
Petr Baudis 已提交
1317
	$(MAKE) -C templates/ clean
1318
	$(MAKE) -C t/ clean
E
Eygene Ryabinkin 已提交
1319
ifndef NO_TCLTK
J
Junio C Hamano 已提交
1320
	$(MAKE) -C gitk-git clean
E
Eygene Ryabinkin 已提交
1321 1322
	$(MAKE) -C git-gui clean
endif
1323
	$(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-GUI-VARS GIT-BUILD-OPTIONS
1324

J
Junio C Hamano 已提交
1325
.PHONY: all install clean strip
K
Kristof Provost 已提交
1326
.PHONY: .FORCE-GIT-VERSION-FILE TAGS tags cscope .FORCE-GIT-CFLAGS
1327
.PHONY: .FORCE-GIT-BUILD-OPTIONS
J
Junio C Hamano 已提交
1328

J
Junio C Hamano 已提交
1329 1330 1331
### Check documentation
#
check-docs::
1332
	@(for v in $(ALL_PROGRAMS) $(BUILT_INS) git gitk; \
J
Junio C Hamano 已提交
1333 1334 1335
	do \
		case "$$v" in \
		git-merge-octopus | git-merge-ours | git-merge-recursive | \
1336
		git-merge-resolve | git-merge-stupid | git-merge-subtree | \
1337
		git-fsck-objects | git-init-db | \
1338
		git-?*--?* ) continue ;; \
J
Junio C Hamano 已提交
1339 1340 1341
		esac ; \
		test -f "Documentation/$$v.txt" || \
		echo "no doc: $$v"; \
J
Junio C Hamano 已提交
1342
		sed -e '/^#/d' command-list.txt | \
1343
		grep -q "^$$v[ 	]" || \
J
Junio C Hamano 已提交
1344 1345 1346 1347
		case "$$v" in \
		git) ;; \
		*) echo "no link: $$v";; \
		esac ; \
1348 1349
	done; \
	( \
J
Junio C Hamano 已提交
1350
		sed -e '/^#/d' \
1351
		    -e 's/[ 	].*//' \
J
Junio C Hamano 已提交
1352
		    -e 's/^/listed /' command-list.txt; \
1353 1354 1355 1356 1357 1358 1359 1360
		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 | \
1361
		*,git-help | \
1362 1363 1364
		documented,gitattributes | \
		documented,gitignore | \
		documented,gitmodules | \
1365
		documented,gitcli | \
1366 1367 1368 1369 1370 1371 1372 1373
		documented,git-tools | \
		sentinel,not,matching,is,ok ) continue ;; \
		esac; \
		case " $(ALL_PROGRAMS) $(BUILT_INS) git gitk " in \
		*" $$cmd "*)	;; \
		*) echo "removed but $$how: $$cmd" ;; \
		esac; \
	done ) | sort
1374 1375 1376 1377 1378

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