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

4 5 6 7
# 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.
8
#
9 10
# Define NO_OPENSSL environment variable if you do not have OpenSSL.
# This also implies MOZILLA_SHA1.
11
#
12 13 14
# 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.
15
#
P
Patrick Mauritz 已提交
16 17 18
# Define CURLDIR=/foo/bar if your curl header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
19 20 21
# 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.
#
22 23
# Define NO_D_INO_IN_DIRENT if you don't have d_ino in your struct dirent.
#
24 25 26
# 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).
#
27 28 29
# 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).
30
# some C compilers supported these specifiers prior to C99 as an extension.
31
#
32 33
# Define NO_STRCASESTR if you don't have strcasestr.
#
34 35
# Define NO_STRLCPY if you don't have strlcpy.
#
J
Jason Riedy 已提交
36 37
# Define NO_SETENV if you don't have setenv in the C library.
#
38 39
# 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.
40
#
P
Pavel Roskin 已提交
41
# Define NO_SVN_TESTS if you want to skip time-consuming SVN interoperability
E
Eric Wong 已提交
42 43 44
# 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.
#
45 46 47 48 49 50 51 52 53 54 55 56
# 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.
#
57 58
# Define PPC_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine optimized for PowerPC.
59
#
60 61 62
# Define ARM_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine optimized for ARM.
#
63
# Define NEEDS_SSL_WITH_CRYPTO if you need -lcrypto with -lssl (Darwin).
64
#
65
# Define NEEDS_LIBICONV if linking with libc is not enough (Darwin).
66 67 68 69
#
# Define NEEDS_SOCKET if linking with libc is not enough (SunOS,
# Patrick Mauritz).
#
70 71
# Define NO_MMAP if you want to avoid mmap.
#
72 73
# Define WITH_OWN_SUBPROCESS_PY if you want to use with python 2.3.
#
74 75
# Define NO_IPV6 if you lack IPv6 support and getaddrinfo().
#
76 77 78
# Define NO_SOCKADDR_STORAGE if your platform does not have struct
# sockaddr_storage.
#
79 80
# Define NO_ICONV if your libc does not properly support iconv.
#
81 82 83
# Define NO_ACCURATE_DIFF if your diff program at least sometimes misses
# a missing newline at the end of the file.
#
P
Pavel Roskin 已提交
84
# Define NO_PYTHON if you want to lose all benefits of the recursive merge.
85
#
86 87 88 89 90 91 92 93 94 95 96 97 98
# Define COLLISION_CHECK below if you believe that SHA1's
# 1461501637330902918203684832716283019655932542976 hashes do not give you
# sufficient guarantee that no collisions between objects will ever happen.

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

# Define USE_STDEV below if you want git to care about the underlying device
# change being considered an inode change from the update-cache perspective.

99
GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
100
	@$(SHELL_PATH) ./GIT-VERSION-GEN
101
-include GIT-VERSION-FILE
102

103 104 105 106 107 108
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 已提交
109
# CFLAGS and LDFLAGS are for the users to override from the command line.
110

111
CFLAGS = -g -O2 -Wall
J
Junio C Hamano 已提交
112
LDFLAGS =
113
ALL_CFLAGS = $(CFLAGS)
J
Junio C Hamano 已提交
114
ALL_LDFLAGS = $(LDFLAGS)
J
Junio C Hamano 已提交
115
STRIP ?= strip
116

117 118
prefix = $(HOME)
bindir = $(prefix)/bin
119
gitexecdir = $(bindir)
120
template_dir = $(prefix)/share/git-core/templates/
121
GIT_PYTHON_DIR = $(prefix)/share/git-core/python
122
# DESTDIR=
123

124
# default configuration for gitweb
125
GITWEB_CONFIG = gitweb_config.perl
126
GITWEB_HOME_LINK_STR = projects
127 128
GITWEB_SITENAME =
GITWEB_PROJECTROOT = /pub/git
129
GITWEB_BASE_URL =
130 131 132
GITWEB_LIST =
GITWEB_HOMETEXT = indextext.html
GITWEB_CSS = gitweb.css
M
Martin Waitz 已提交
133
GITWEB_LOGO = git-logo.png
134
GITWEB_FAVICON = git-favicon.png
135

136 137
export prefix bindir gitexecdir template_dir GIT_PYTHON_DIR

138 139
CC = gcc
AR = ar
140
TAR = tar
141 142
INSTALL = install
RPMBUILD = rpmbuild
143

144 145
# sparse is architecture-neutral, which means that we need to tell it
# explicitly what architecture to check for. Fix this up for yours..
146
SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__
147

P
Petr Baudis 已提交
148 149 150 151


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

J
Junio C Hamano 已提交
152
SCRIPT_SH = \
153
	git-bisect.sh git-branch.sh git-checkout.sh \
P
Pavel Roskin 已提交
154
	git-cherry.sh git-clean.sh git-clone.sh git-commit.sh \
J
Junio C Hamano 已提交
155
	git-fetch.sh \
J
Junio C Hamano 已提交
156
	git-ls-remote.sh \
J
Junio C Hamano 已提交
157
	git-merge-one-file.sh git-parse-remote.sh \
L
Linus Torvalds 已提交
158
	git-pull.sh git-rebase.sh \
J
Junio C Hamano 已提交
159
	git-repack.sh git-request-pull.sh git-reset.sh \
L
Linus Torvalds 已提交
160
	git-resolve.sh git-revert.sh git-sh-setup.sh \
161
	git-tag.sh git-verify-tag.sh \
162
	git-applymbox.sh git-applypatch.sh git-am.sh \
163
	git-merge.sh git-merge-stupid.sh git-merge-octopus.sh \
164
	git-merge-resolve.sh git-merge-ours.sh \
E
Eric W. Biederman 已提交
165
	git-lost-found.sh git-quiltimport.sh
J
Junio C Hamano 已提交
166 167 168

SCRIPT_PERL = \
	git-archimport.perl git-cvsimport.perl git-relink.perl \
169
	git-shortlog.perl git-rerere.perl \
J
Junio C Hamano 已提交
170
	git-annotate.perl git-cvsserver.perl \
J
Johannes Schindelin 已提交
171
	git-svnimport.perl git-cvsexportcommit.perl \
E
Eric Wong 已提交
172
	git-send-email.perl git-svn.perl
173

174
SCRIPT_PYTHON = \
175
	git-merge-recursive.py
176

177 178 179
SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
	  $(patsubst %.perl,%,$(SCRIPT_PERL)) \
	  $(patsubst %.py,%,$(SCRIPT_PYTHON)) \
180
	  git-cherry-pick git-status git-instaweb
181

182
# The ones that do not have to link with lcrypto, lz nor xdiff.
183
SIMPLE_PROGRAMS = \
L
Lukas Sandström 已提交
184
	git-daemon$X
185

J
Junio C Hamano 已提交
186
# ... and all the rest that could be moved out of bindir to gitexecdir
J
Junio C Hamano 已提交
187
PROGRAMS = \
188
	git-convert-objects$X git-fetch-pack$X git-fsck-objects$X \
T
Timo Hirvonen 已提交
189
	git-hash-object$X git-index-pack$X git-local-fetch$X \
L
Lukas Sandström 已提交
190
	git-merge-base$X \
191
	git-merge-index$X git-mktag$X git-mktree$X git-patch-id$X \
192
	git-peek-remote$X git-receive-pack$X \
P
Peter Eriksen 已提交
193
	git-send-pack$X git-shell$X \
194
	git-show-index$X git-ssh-fetch$X \
P
Peter Eriksen 已提交
195
	git-ssh-upload$X git-unpack-file$X \
196
	git-update-server-info$X \
L
Lukas Sandström 已提交
197
	git-upload-pack$X git-verify-pack$X \
198
	git-pack-redundant$X git-var$X \
199
	git-describe$X git-merge-tree$X git-blame$X git-imap-send$X \
200
	git-merge-recur$X \
201 202 203 204
	$(EXTRA_PROGRAMS)

# Empty...
EXTRA_PROGRAMS =
205

206
BUILT_INS = \
J
Junio C Hamano 已提交
207 208 209
	git-format-patch$X git-show$X git-whatchanged$X \
	git-get-tar-commit-id$X \
	$(patsubst builtin-%.o,git-%$X,$(BUILTIN_OBJS))
J
Junio C Hamano 已提交
210

J
Junio C Hamano 已提交
211
# what 'all' will build and 'install' will install, in gitexecdir
J
Junio C Hamano 已提交
212
ALL_PROGRAMS = $(PROGRAMS) $(SIMPLE_PROGRAMS) $(SCRIPTS)
213

214
# Backward compatibility -- to be removed after 1.0
215
PROGRAMS += git-ssh-pull$X git-ssh-push$X
216

217 218 219 220 221 222 223 224 225 226 227
# 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
ifndef PYTHON_PATH
	PYTHON_PATH = /usr/bin/python
endif

228 229 230
PYMODULES = \
	gitMergeCommon.py

L
Linus Torvalds 已提交
231
LIB_FILE=libgit.a
232
XDIFF_LIB=xdiff/lib.a
J
Junio C Hamano 已提交
233

J
Junio C Hamano 已提交
234
LIB_H = \
235
	blob.h cache.h commit.h csum-file.h delta.h \
236
	diff.h object.h pack.h pkt-line.h quote.h refs.h \
J
Junio C Hamano 已提交
237
	run-command.h strbuf.h tag.h tree.h git-compat-util.h revision.h \
J
Junio C Hamano 已提交
238
	tree-walk.h log-tree.h dir.h path-list.h unpack-trees.h builtin.h
239

J
Junio C Hamano 已提交
240
DIFF_OBJS = \
J
Junio C Hamano 已提交
241
	diff.o diff-lib.o diffcore-break.o diffcore-order.o \
242
	diffcore-pickaxe.o diffcore-rename.o tree-diff.o combine-diff.o \
243
	diffcore-delta.o log-tree.o
244

J
Junio C Hamano 已提交
245
LIB_OBJS = \
246
	blob.o commit.o connect.o csum-file.o cache-tree.o base85.o \
247
	date.o diff-delta.o entry.o exec_cmd.o ident.o lockfile.o \
J
Junio C Hamano 已提交
248
	object.o pack-check.o patch-delta.o path.o pkt-line.o \
249
	quote.o read-cache.o refs.o run-command.o dir.o object-refs.o \
J
Junio C Hamano 已提交
250
	server-info.o setup.o sha1_file.o sha1_name.o strbuf.o \
251
	tag.o tree.o usage.o config.o environment.o ctype.o copy.o \
252
	fetch-clone.o revision.o pager.o tree-walk.o xdiff-interface.o \
253
	write_or_die.o trace.o \
J
Junio C Hamano 已提交
254
	alloc.o merge-file.o path-list.o help.o unpack-trees.o $(DIFF_OBJS)
J
Junio C Hamano 已提交
255

256
BUILTIN_OBJS = \
J
Junio C Hamano 已提交
257 258 259
	builtin-add.o \
	builtin-apply.o \
	builtin-cat-file.o \
260
	builtin-checkout-index.o \
J
Junio C Hamano 已提交
261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295
	builtin-check-ref-format.o \
	builtin-commit-tree.o \
	builtin-count-objects.o \
	builtin-diff.o \
	builtin-diff-files.o \
	builtin-diff-index.o \
	builtin-diff-stages.o \
	builtin-diff-tree.o \
	builtin-fmt-merge-msg.o \
	builtin-grep.o \
	builtin-init-db.o \
	builtin-log.o \
	builtin-ls-files.o \
	builtin-ls-tree.o \
	builtin-mailinfo.o \
	builtin-mailsplit.o \
	builtin-mv.o \
	builtin-name-rev.o \
	builtin-pack-objects.o \
	builtin-prune.o \
	builtin-prune-packed.o \
	builtin-push.o \
	builtin-read-tree.o \
	builtin-repo-config.o \
	builtin-rev-list.o \
	builtin-rev-parse.o \
	builtin-rm.o \
	builtin-show-branch.o \
	builtin-stripspace.o \
	builtin-symbolic-ref.o \
	builtin-tar-tree.o \
	builtin-unpack-objects.o \
	builtin-update-index.o \
	builtin-update-ref.o \
	builtin-upload-tar.o \
R
Rene Scharfe 已提交
296
	builtin-verify-pack.o \
R
Rene Scharfe 已提交
297 298
	builtin-write-tree.o \
	builtin-zip-tree.o
299

300 301
GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
LIBS = $(GITLIBS) -lz
302

303 304 305
#
# Platform specific tweaks
#
306 307 308 309 310

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

311 312 313
ifeq ($(uname_S),Linux)
	NO_STRLCPY = YesPlease
endif
G
Gerrit Pape 已提交
314 315 316
ifeq ($(uname_S),GNU/kFreeBSD)
	NO_STRLCPY = YesPlease
endif
317
ifeq ($(uname_S),Darwin)
318 319
	NEEDS_SSL_WITH_CRYPTO = YesPlease
	NEEDS_LIBICONV = YesPlease
320
	NO_STRLCPY = YesPlease
321 322 323 324 325
	ifndef NO_FINK
		ifeq ($(shell test -d /sw/lib && echo y),y)
			ALL_CFLAGS += -I/sw/include
			ALL_LDFLAGS += -L/sw/lib
		endif
S
Shawn Pearce 已提交
326
	endif
327 328 329 330 331
	ifndef NO_DARWIN_PORTS
		ifeq ($(shell test -d /opt/local/lib && echo y),y)
			ALL_CFLAGS += -I/opt/local/include
			ALL_LDFLAGS += -L/opt/local/lib
		endif
S
Shawn Pearce 已提交
332
	endif
333
endif
334
ifeq ($(uname_S),SunOS)
335
	NEEDS_SOCKET = YesPlease
336
	NEEDS_NSL = YesPlease
337 338
	SHELL_PATH = /bin/bash
	NO_STRCASESTR = YesPlease
J
Jason Riedy 已提交
339
	ifeq ($(uname_R),5.8)
340
		NEEDS_LIBICONV = YesPlease
J
Jason Riedy 已提交
341
		NO_UNSETENV = YesPlease
J
Jason Riedy 已提交
342
		NO_SETENV = YesPlease
343
		NO_C99_FORMAT = YesPlease
J
Jason Riedy 已提交
344
	endif
345 346 347
	ifeq ($(uname_R),5.9)
		NO_UNSETENV = YesPlease
		NO_SETENV = YesPlease
348
		NO_C99_FORMAT = YesPlease
349
	endif
350 351
	INSTALL = ginstall
	TAR = gtar
352
	ALL_CFLAGS += -D__EXTENSIONS__
353
endif
354
ifeq ($(uname_O),Cygwin)
355
	NO_D_TYPE_IN_DIRENT = YesPlease
356
	NO_D_INO_IN_DIRENT = YesPlease
H
hpa 已提交
357
	NO_STRCASESTR = YesPlease
358
	NO_SYMLINK_HEAD = YesPlease
H
hpa 已提交
359
	NEEDS_LIBICONV = YesPlease
J
Junio C Hamano 已提交
360
	NO_C99_FORMAT = YesPlease
361 362 363 364
	# There are conflicting reports about this.
	# On some boxes NO_MMAP is needed, and not so elsewhere.
	# Try uncommenting this if you see things break -- YMMV.
	# NO_MMAP = YesPlease
365
	NO_IPV6 = YesPlease
P
Peter Anvin 已提交
366
	X = .exe
367
endif
A
Alecs King 已提交
368 369 370 371 372
ifeq ($(uname_S),FreeBSD)
	NEEDS_LIBICONV = YesPlease
	ALL_CFLAGS += -I/usr/local/include
	ALL_LDFLAGS += -L/usr/local/lib
endif
373
ifeq ($(uname_S),OpenBSD)
374
	NO_STRCASESTR = YesPlease
H
Han Boetes 已提交
375
	NEEDS_LIBICONV = YesPlease
J
Junio C Hamano 已提交
376 377 378 379
	ALL_CFLAGS += -I/usr/local/include
	ALL_LDFLAGS += -L/usr/local/lib
endif
ifeq ($(uname_S),NetBSD)
380 381 382
	ifeq ($(shell expr "$(uname_R)" : '[01]\.'),2)
		NEEDS_LIBICONV = YesPlease
	endif
J
Junio C Hamano 已提交
383 384
	ALL_CFLAGS += -I/usr/pkg/include
	ALL_LDFLAGS += -L/usr/pkg/lib -Wl,-rpath,/usr/pkg/lib
H
Han Boetes 已提交
385
endif
386 387
ifeq ($(uname_S),AIX)
	NO_STRCASESTR=YesPlease
388
	NO_STRLCPY = YesPlease
389 390
	NEEDS_LIBICONV=YesPlease
endif
J
Johannes Schindelin 已提交
391 392 393 394
ifeq ($(uname_S),IRIX64)
	NO_IPV6=YesPlease
	NO_SETENV=YesPlease
	NO_STRCASESTR=YesPlease
395
	NO_STRLCPY = YesPlease
J
Johannes Schindelin 已提交
396 397 398 399 400 401
	NO_SOCKADDR_STORAGE=YesPlease
	SHELL_PATH=/usr/gnu/bin/bash
	ALL_CFLAGS += -DPATH_MAX=1024
	# for now, build 32-bit version
	ALL_LDFLAGS += -L/usr/lib32
endif
402 403 404
ifneq (,$(findstring arm,$(uname_M)))
	ARM_SHA1 = YesPlease
endif
405

406
-include config.mak.autogen
407
-include config.mak
408

409 410 411
ifdef WITH_OWN_SUBPROCESS_PY
	PYMODULES += compat/subprocess.py
else
J
Johannes Schindelin 已提交
412 413 414 415
	ifeq ($(NO_PYTHON),)
		ifneq ($(shell $(PYTHON_PATH) -c 'import subprocess;print"OK"' 2>/dev/null),OK)
			PYMODULES += compat/subprocess.py
		endif
416 417 418
	endif
endif

419 420
ifndef NO_CURL
	ifdef CURLDIR
J
Junio C Hamano 已提交
421
		# This is still problematic -- gcc does not always want -R.
422
		ALL_CFLAGS += -I$(CURLDIR)/include
423 424 425 426
		CURL_LIBCURL = -L$(CURLDIR)/lib -R$(CURLDIR)/lib -lcurl
	else
		CURL_LIBCURL = -lcurl
	endif
427
	PROGRAMS += git-http-fetch$X
428 429 430 431 432
	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
433
	endif
434 435 436
	ifndef NO_EXPAT
		EXPAT_LIBEXPAT = -lexpat
	endif
437 438
endif

P
Petr Baudis 已提交
439
ifndef NO_OPENSSL
J
Junio C Hamano 已提交
440
	OPENSSL_LIBSSL = -lssl
J
Junio C Hamano 已提交
441 442
	ifdef OPENSSLDIR
		# Again this may be problematic -- gcc does not always want -R.
443
		ALL_CFLAGS += -I$(OPENSSLDIR)/include
J
Junio C Hamano 已提交
444 445 446 447
		OPENSSL_LINK = -L$(OPENSSLDIR)/lib -R$(OPENSSLDIR)/lib
	else
		OPENSSL_LINK =
	endif
P
Petr Baudis 已提交
448
else
449
	ALL_CFLAGS += -DNO_OPENSSL
J
Junio C Hamano 已提交
450 451
	MOZILLA_SHA1 = 1
	OPENSSL_LIBSSL =
P
Petr Baudis 已提交
452
endif
453
ifdef NEEDS_SSL_WITH_CRYPTO
J
Junio C Hamano 已提交
454
	LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto -lssl
455
else
J
Junio C Hamano 已提交
456
	LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto
457 458
endif
ifdef NEEDS_LIBICONV
J
Junio C Hamano 已提交
459 460
	ifdef ICONVDIR
		# Again this may be problematic -- gcc does not always want -R.
461
		ALL_CFLAGS += -I$(ICONVDIR)/include
J
Junio C Hamano 已提交
462 463 464 465
		ICONV_LINK = -L$(ICONVDIR)/lib -R$(ICONVDIR)/lib
	else
		ICONV_LINK =
	endif
L
Lukas Sandström 已提交
466
	LIBS += $(ICONV_LINK) -liconv
467
endif
468 469 470 471
ifdef NEEDS_SOCKET
	LIBS += -lsocket
	SIMPLE_LIB += -lsocket
endif
472 473 474 475
ifdef NEEDS_NSL
	LIBS += -lnsl
	SIMPLE_LIB += -lnsl
endif
476 477 478
ifdef NO_D_TYPE_IN_DIRENT
	ALL_CFLAGS += -DNO_D_TYPE_IN_DIRENT
endif
479 480 481
ifdef NO_D_INO_IN_DIRENT
	ALL_CFLAGS += -DNO_D_INO_IN_DIRENT
endif
482 483 484
ifdef NO_C99_FORMAT
	ALL_CFLAGS += -DNO_C99_FORMAT
endif
485 486 487
ifdef NO_SYMLINK_HEAD
	ALL_CFLAGS += -DNO_SYMLINK_HEAD
endif
488
ifdef NO_STRCASESTR
489
	COMPAT_CFLAGS += -DNO_STRCASESTR
J
Jason Riedy 已提交
490 491
	COMPAT_OBJS += compat/strcasestr.o
endif
492 493 494 495
ifdef NO_STRLCPY
	COMPAT_CFLAGS += -DNO_STRLCPY
	COMPAT_OBJS += compat/strlcpy.o
endif
J
Jason Riedy 已提交
496
ifdef NO_SETENV
497
	COMPAT_CFLAGS += -DNO_SETENV
J
Jason Riedy 已提交
498
	COMPAT_OBJS += compat/setenv.o
499
endif
J
Johannes Schindelin 已提交
500
ifdef NO_UNSETENV
J
Jason Riedy 已提交
501 502 503
	COMPAT_CFLAGS += -DNO_UNSETENV
	COMPAT_OBJS += compat/unsetenv.o
endif
504
ifdef NO_MMAP
505
	COMPAT_CFLAGS += -DNO_MMAP
J
Jason Riedy 已提交
506
	COMPAT_OBJS += compat/mmap.o
507
endif
508
ifdef NO_IPV6
509 510 511 512 513 514 515 516
	ALL_CFLAGS += -DNO_IPV6
endif
ifdef NO_SOCKADDR_STORAGE
ifdef NO_IPV6
	ALL_CFLAGS += -Dsockaddr_storage=sockaddr_in
else
	ALL_CFLAGS += -Dsockaddr_storage=sockaddr_in6
endif
517
endif
518 519 520
ifdef NO_INET_NTOP
	LIB_OBJS += compat/inet_ntop.o
endif
521

522 523 524 525
ifdef NO_ICONV
	ALL_CFLAGS += -DNO_ICONV
endif

526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542
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>
	LIBS += $(LIB_4_CRYPTO)
endif
endif
endif
543 544 545
ifdef NO_ACCURATE_DIFF
	ALL_CFLAGS += -DNO_ACCURATE_DIFF
endif
546

P
Pavel Roskin 已提交
547
# Shell quote (do not use $(call) to accommodate ancient setups);
548 549 550 551 552 553 554

SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER))

DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
bindir_SQ = $(subst ','\'',$(bindir))
gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
template_dir_SQ = $(subst ','\'',$(template_dir))
555
prefix_SQ = $(subst ','\'',$(prefix))
556 557 558 559 560 561 562

SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
PYTHON_PATH_SQ = $(subst ','\'',$(PYTHON_PATH))
GIT_PYTHON_DIR_SQ = $(subst ','\'',$(GIT_PYTHON_DIR))

ALL_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' $(COMPAT_CFLAGS)
J
Jason Riedy 已提交
563
LIB_OBJS += $(COMPAT_OBJS)
T
Tom Prince 已提交
564
export prefix TAR INSTALL DESTDIR SHELL_PATH template_dir
P
Petr Baudis 已提交
565 566
### Build rules

567
all: $(ALL_PROGRAMS) $(BUILT_INS) git$X gitk gitweb/gitweb.cgi
568

569 570
all:
	$(MAKE) -C templates
571

J
Junio C Hamano 已提交
572 573 574
strip: $(PROGRAMS) git$X
	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X

575
git$X: git.c common-cmds.h $(BUILTIN_OBJS) $(GITLIBS) GIT-CFLAGS
576
	$(CC) -DGIT_VERSION='"$(GIT_VERSION)"' \
577
		$(ALL_CFLAGS) -o $@ $(filter %.c,$^) \
578
		$(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)
579

J
Junio C Hamano 已提交
580
help.o: common-cmds.h
581

J
Junio C Hamano 已提交
582 583 584
$(BUILT_INS): git$X
	rm -f $@ && ln git$X $@

F
Fredrik Kuivinen 已提交
585
common-cmds.h: Documentation/git-*.txt
586 587
	./generate-cmdlist.sh > $@+
	mv $@+ $@
F
Fredrik Kuivinen 已提交
588

589
$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
590
	rm -f $@ $@+
591
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
M
Michal Rokos 已提交
592
	    -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
593
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
594
	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
595
	    -e 's/@@NO_PYTHON@@/$(NO_PYTHON)/g' \
596 597 598
	    $@.sh >$@+
	chmod +x $@+
	mv $@+ $@
599 600

$(patsubst %.perl,%,$(SCRIPT_PERL)) : % : %.perl
601
	rm -f $@ $@+
602
	sed -e '1s|#!.*perl|#!$(PERL_PATH_SQ)|' \
603
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
604 605 606
	    $@.perl >$@+
	chmod +x $@+
	mv $@+ $@
607

608
$(patsubst %.py,%,$(SCRIPT_PYTHON)) : % : %.py GIT-CFLAGS
609
	rm -f $@ $@+
610 611
	sed -e '1s|#!.*python|#!$(PYTHON_PATH_SQ)|' \
	    -e 's|@@GIT_PYTHON_PATH@@|$(GIT_PYTHON_DIR_SQ)|g' \
612
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
613 614 615
	    $@.py >$@+
	chmod +x $@+
	mv $@+ $@
616

617
git-cherry-pick: git-revert
618 619
	cp $< $@+
	mv $@+ $@
620

J
Junio C Hamano 已提交
621
git-status: git-commit
622 623
	cp $< $@+
	mv $@+ $@
J
Junio C Hamano 已提交
624

625 626 627
gitweb/gitweb.cgi: gitweb/gitweb.perl
	rm -f $@ $@+
	sed -e '1s|#!.*perl|#!$(PERL_PATH_SQ)|' \
628 629 630
	    -e 's|++GIT_VERSION++|$(GIT_VERSION)|g' \
	    -e 's|++GIT_BINDIR++|$(bindir)|g' \
	    -e 's|++GITWEB_CONFIG++|$(GITWEB_CONFIG)|g' \
631
	    -e 's|++GITWEB_HOME_LINK_STR++|$(GITWEB_HOME_LINK_STR)|g' \
632 633
	    -e 's|++GITWEB_SITENAME++|$(GITWEB_SITENAME)|g' \
	    -e 's|++GITWEB_PROJECTROOT++|$(GITWEB_PROJECTROOT)|g' \
634
	    -e 's|++GITWEB_BASE_URL++|$(GITWEB_BASE_URL)|g' \
635 636 637 638
	    -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' \
639
	    -e 's|++GITWEB_FAVICON++|$(GITWEB_FAVICON)|g' \
640 641 642 643
	    $< >$@+
	chmod +x $@+
	mv $@+ $@

644 645 646 647 648 649
git-instaweb: git-instaweb.sh gitweb/gitweb.cgi gitweb/gitweb.css
	rm -f $@ $@+
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
	    -e 's/@@NO_PYTHON@@/$(NO_PYTHON)/g' \
650
	    -e '/@@GITWEB_CGI@@/r gitweb/gitweb.cgi' \
651
	    -e '/@@GITWEB_CGI@@/d' \
652
	    -e '/@@GITWEB_CSS@@/r gitweb/gitweb.css' \
653
	    -e '/@@GITWEB_CSS@@/d' \
654
	    $@.sh > $@+
655 656 657
	chmod +x $@+
	mv $@+ $@

658 659 660 661 662 663 664
configure: configure.ac
	rm -f $@ $<+
	sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
	    $< > $<+
	autoconf -o $@ $<+
	rm -f $<+

665 666 667 668 669 670
# These can record GIT_VERSION
git$X git.spec \
	$(patsubst %.sh,%,$(SCRIPT_SH)) \
	$(patsubst %.perl,%,$(SCRIPT_PERL)) \
	$(patsubst %.py,%,$(SCRIPT_PYTHON)) \
	: GIT-VERSION-FILE
671

672
%.o: %.c GIT-CFLAGS
673 674 675
	$(CC) -o $*.o -c $(ALL_CFLAGS) $<
%.o: %.S
	$(CC) -o $*.o -c $(ALL_CFLAGS) $<
676

677
exec_cmd.o: exec_cmd.c GIT-CFLAGS
678
	$(CC) -o $*.o -c $(ALL_CFLAGS) '-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' $<
679 680
builtin-init-db.o: builtin-init-db.c GIT-CFLAGS
	$(CC) -o $*.o -c $(ALL_CFLAGS) -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"' $<
681

682
http.o: http.c GIT-CFLAGS
683 684
	$(CC) -o $*.o -c $(ALL_CFLAGS) -DGIT_USER_AGENT='"git/$(GIT_VERSION)"' $<

685
ifdef NO_EXPAT
686
http-fetch.o: http-fetch.c http.h GIT-CFLAGS
687 688 689
	$(CC) -o $*.o -c $(ALL_CFLAGS) -DNO_EXPAT $<
endif

690
git-%$X: %.o $(GITLIBS)
J
Junio C Hamano 已提交
691
	$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
692

693
$(SIMPLE_PROGRAMS) : $(LIB_FILE)
694
$(SIMPLE_PROGRAMS) : git-%$X : %.o
J
Junio C Hamano 已提交
695 696
	$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIB_FILE) $(SIMPLE_LIB)
697

698 699
ssh-pull.o: ssh-fetch.c
ssh-push.o: ssh-upload.c
700 701 702 703 704
git-local-fetch$X: fetch.o
git-ssh-fetch$X: rsh.o fetch.o
git-ssh-upload$X: rsh.o
git-ssh-pull$X: rsh.o fetch.o
git-ssh-push$X: rsh.o
705

706 707
git-imap-send$X: imap-send.o $(LIB_FILE)

J
Junio C Hamano 已提交
708
http.o http-fetch.o http-push.o: http.h
709
git-http-fetch$X: fetch.o http.o http-fetch.o $(GITLIBS)
710
	$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
711
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)
712

713
git-http-push$X: revision.o http.o http-push.o $(GITLIBS)
714 715 716
	$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

717
merge-recursive.o path-list.o: path-list.h
718
git-merge-recur$X: merge-recursive.o path-list.o $(GITLIBS)
719 720 721
	$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIBS)

722
$(LIB_OBJS) $(BUILTIN_OBJS): $(LIB_H)
723
$(patsubst git-%$X,%.o,$(PROGRAMS)): $(LIB_H) $(wildcard */*.h)
724
$(DIFF_OBJS): diffcore.h
725

P
Petr Baudis 已提交
726
$(LIB_FILE): $(LIB_OBJS)
727
	rm -f $@ && $(AR) rcs $@ $(LIB_OBJS)
P
Petr Baudis 已提交
728

729 730 731
XDIFF_OBJS=xdiff/xdiffi.o xdiff/xprepare.o xdiff/xutils.o xdiff/xemit.o

$(XDIFF_LIB): $(XDIFF_OBJS)
732
	rm -f $@ && $(AR) rcs $@ $(XDIFF_OBJS)
733 734


P
Petr Baudis 已提交
735 736 737
doc:
	$(MAKE) -C Documentation all

738 739 740 741 742 743 744
TAGS:
	rm -f TAGS
	find . -name '*.[hcS]' -print | xargs etags -a

tags:
	rm -f tags
	find . -name '*.[hcS]' -print | xargs ctags -a
P
Petr Baudis 已提交
745

746
### Detect prefix changes
747
TRACK_CFLAGS = $(subst ','\'',$(ALL_CFLAGS)):$(GIT_PYTHON_DIR_SQ):\
748 749 750 751 752 753 754 755 756
             $(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

P
Petr Baudis 已提交
757 758
### Testing rules

759 760 761 762 763
# GNU make supports exporting all variables by "export" without parameters.
# However, the environment gets quite big, and some programs have problems
# with that.

export NO_PYTHON
764
export NO_SVN_TESTS
765

P
Petr Baudis 已提交
766 767 768
test: all
	$(MAKE) -C t/ all

J
Junio C Hamano 已提交
769
test-date$X: test-date.c date.o ctype.o
J
Junio C Hamano 已提交
770
	$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) test-date.c date.o ctype.o
P
Petr Baudis 已提交
771

772
test-delta$X: test-delta.c diff-delta.o patch-delta.o
773
	$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $^
P
Petr Baudis 已提交
774

J
Junio C Hamano 已提交
775 776 777
test-dump-cache-tree$X: dump-cache-tree.o $(GITLIBS)
	$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)

778 779 780 781 782 783
test-sha1$X: test-sha1.o $(GITLIBS)
	$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)

check-sha1:: test-sha1$X
	./test-sha1.sh

P
Petr Baudis 已提交
784
check:
785
	for i in *.c; do sparse $(ALL_CFLAGS) $(SPARSE_FLAGS) $$i || exit; done
P
Petr Baudis 已提交
786 787 788 789 790



### Installation rules

791
install: all
792 793 794 795
	$(INSTALL) -d -m755 '$(DESTDIR_SQ)$(bindir_SQ)'
	$(INSTALL) -d -m755 '$(DESTDIR_SQ)$(gitexecdir_SQ)'
	$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexecdir_SQ)'
	$(INSTALL) git$X gitk '$(DESTDIR_SQ)$(bindir_SQ)'
796
	$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
797 798
	$(INSTALL) -d -m755 '$(DESTDIR_SQ)$(GIT_PYTHON_DIR_SQ)'
	$(INSTALL) $(PYMODULES) '$(DESTDIR_SQ)$(GIT_PYTHON_DIR_SQ)'
799 800 801 802 803 804 805 806
	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
	$(foreach p,$(BUILT_INS), rm -f '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' && ln '$(DESTDIR_SQ)$(gitexecdir_SQ)/git$X' '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' ;)
P
Petr Baudis 已提交
807 808 809 810 811 812 813 814 815

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




### Maintainer's dist rules

816
git.spec: git.spec.in
817 818
	sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@+
	mv $@+ $@
819

J
Junio C Hamano 已提交
820 821
GIT_TARNAME=git-$(GIT_VERSION)
dist: git.spec git-tar-tree
822
	./git-tar-tree HEAD^{tree} $(GIT_TARNAME) > $(GIT_TARNAME).tar
823
	@mkdir -p $(GIT_TARNAME)
J
Junio C Hamano 已提交
824
	@cp git.spec $(GIT_TARNAME)
825 826 827
	@echo $(GIT_VERSION) > $(GIT_TARNAME)/version
	$(TAR) rf $(GIT_TARNAME).tar \
		$(GIT_TARNAME)/git.spec $(GIT_TARNAME)/version
828
	@rm -rf $(GIT_TARNAME)
829
	gzip -f -9 $(GIT_TARNAME).tar
830 831

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

834 835 836 837 838 839 840 841 842 843 844
htmldocs = git-htmldocs-$(GIT_VERSION)
manpages = git-manpages-$(GIT_VERSION)
dist-doc:
	rm -fr .doc-tmp-dir
	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
	:
	rm -fr .doc-tmp-dir
	mkdir .doc-tmp-dir .doc-tmp-dir/man1 .doc-tmp-dir/man7
845
	$(MAKE) -C Documentation DESTDIR=./ \
846 847
		man1dir=../.doc-tmp-dir/man1 \
		man7dir=../.doc-tmp-dir/man7 \
848 849 850 851 852
		install
	cd .doc-tmp-dir && $(TAR) cf ../$(manpages).tar .
	gzip -n -9 -f $(manpages).tar
	rm -fr .doc-tmp-dir

P
Petr Baudis 已提交
853
### Cleaning rules
854

855
clean:
856 857
	rm -f *.o mozilla-sha1/*.o arm/*.o ppc/*.o compat/*.o xdiff/*.o \
		$(LIB_FILE) $(XDIFF_LIB)
A
A Large Angry SCM 已提交
858
	rm -f $(ALL_PROGRAMS) $(BUILT_INS) git$X
859
	rm -f *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h TAGS tags
860
	rm -rf autom4te.cache
861
	rm -f configure config.log config.mak.autogen config.mak.append config.status config.cache
862
	rm -rf $(GIT_TARNAME) .doc-tmp-dir
863
	rm -f $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz
864
	rm -f $(htmldocs).tar.gz $(manpages).tar.gz
865
	rm -f gitweb/gitweb.cgi
866
	$(MAKE) -C Documentation/ clean
867
	$(MAKE) -C templates clean
868
	$(MAKE) -C t/ clean
869
	rm -f GIT-VERSION-FILE GIT-CFLAGS
870

J
Junio C Hamano 已提交
871
.PHONY: all install clean strip
872
.PHONY: .FORCE-GIT-VERSION-FILE TAGS tags .FORCE-GIT-CFLAGS
J
Junio C Hamano 已提交
873

J
Junio C Hamano 已提交
874 875 876 877 878 879 880
### Check documentation
#
check-docs::
	@for v in $(ALL_PROGRAMS) $(BUILT_INS) git$X gitk; \
	do \
		case "$$v" in \
		git-merge-octopus | git-merge-ours | git-merge-recursive | \
881
		git-merge-resolve | git-merge-stupid | git-merge-recur | \
J
Junio C Hamano 已提交
882 883 884 885 886 887 888 889 890 891
		git-ssh-pull | git-ssh-push ) continue ;; \
		esac ; \
		test -f "Documentation/$$v.txt" || \
		echo "no doc: $$v"; \
		grep -q "^gitlink:$$v\[[0-9]\]::" Documentation/git.txt || \
		case "$$v" in \
		git) ;; \
		*) echo "no link: $$v";; \
		esac ; \
	done | sort