Makefile 24.7 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

135 136
export prefix bindir gitexecdir template_dir GIT_PYTHON_DIR

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

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

P
Petr Baudis 已提交
147 148 149 150


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

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

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

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

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

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

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

# Empty...
EXTRA_PROGRAMS =
203

204
BUILT_INS = \
J
Junio C Hamano 已提交
205 206 207
	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 已提交
208

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

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

215 216 217 218 219 220 221 222 223 224 225
# 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

226 227 228
PYMODULES = \
	gitMergeCommon.py

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

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

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

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

254
BUILTIN_OBJS = \
J
Junio C Hamano 已提交
255 256 257
	builtin-add.o \
	builtin-apply.o \
	builtin-cat-file.o \
258
	builtin-checkout-index.o \
J
Junio C Hamano 已提交
259 260 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
	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 已提交
294
	builtin-verify-pack.o \
J
Junio C Hamano 已提交
295
	builtin-write-tree.o
296

297 298
GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
LIBS = $(GITLIBS) -lz
299

300 301 302
#
# Platform specific tweaks
#
303 304 305 306 307

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

308 309 310
ifeq ($(uname_S),Linux)
	NO_STRLCPY = YesPlease
endif
G
Gerrit Pape 已提交
311 312 313
ifeq ($(uname_S),GNU/kFreeBSD)
	NO_STRLCPY = YesPlease
endif
314
ifeq ($(uname_S),Darwin)
315 316
	NEEDS_SSL_WITH_CRYPTO = YesPlease
	NEEDS_LIBICONV = YesPlease
317
	NO_STRLCPY = YesPlease
318 319 320 321 322
	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 已提交
323
	endif
324 325 326 327 328
	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 已提交
329
	endif
330
endif
331
ifeq ($(uname_S),SunOS)
332
	NEEDS_SOCKET = YesPlease
333
	NEEDS_NSL = YesPlease
334 335
	SHELL_PATH = /bin/bash
	NO_STRCASESTR = YesPlease
J
Jason Riedy 已提交
336
	ifeq ($(uname_R),5.8)
337
		NEEDS_LIBICONV = YesPlease
J
Jason Riedy 已提交
338
		NO_UNSETENV = YesPlease
J
Jason Riedy 已提交
339
		NO_SETENV = YesPlease
340
		NO_C99_FORMAT = YesPlease
J
Jason Riedy 已提交
341
	endif
342 343 344
	ifeq ($(uname_R),5.9)
		NO_UNSETENV = YesPlease
		NO_SETENV = YesPlease
345
		NO_C99_FORMAT = YesPlease
346
	endif
347 348
	INSTALL = ginstall
	TAR = gtar
349
	ALL_CFLAGS += -D__EXTENSIONS__
350
endif
351
ifeq ($(uname_O),Cygwin)
352
	NO_D_TYPE_IN_DIRENT = YesPlease
353
	NO_D_INO_IN_DIRENT = YesPlease
H
hpa 已提交
354
	NO_STRCASESTR = YesPlease
355
	NO_SYMLINK_HEAD = YesPlease
H
hpa 已提交
356
	NEEDS_LIBICONV = YesPlease
J
Junio C Hamano 已提交
357
	NO_C99_FORMAT = YesPlease
358 359 360 361
	# 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
362
	NO_IPV6 = YesPlease
P
Peter Anvin 已提交
363
	X = .exe
364
endif
A
Alecs King 已提交
365 366 367 368 369
ifeq ($(uname_S),FreeBSD)
	NEEDS_LIBICONV = YesPlease
	ALL_CFLAGS += -I/usr/local/include
	ALL_LDFLAGS += -L/usr/local/lib
endif
370
ifeq ($(uname_S),OpenBSD)
371
	NO_STRCASESTR = YesPlease
H
Han Boetes 已提交
372
	NEEDS_LIBICONV = YesPlease
J
Junio C Hamano 已提交
373 374 375 376
	ALL_CFLAGS += -I/usr/local/include
	ALL_LDFLAGS += -L/usr/local/lib
endif
ifeq ($(uname_S),NetBSD)
377 378 379
	ifeq ($(shell expr "$(uname_R)" : '[01]\.'),2)
		NEEDS_LIBICONV = YesPlease
	endif
J
Junio C Hamano 已提交
380 381
	ALL_CFLAGS += -I/usr/pkg/include
	ALL_LDFLAGS += -L/usr/pkg/lib -Wl,-rpath,/usr/pkg/lib
H
Han Boetes 已提交
382
endif
383 384
ifeq ($(uname_S),AIX)
	NO_STRCASESTR=YesPlease
385
	NO_STRLCPY = YesPlease
386 387
	NEEDS_LIBICONV=YesPlease
endif
J
Johannes Schindelin 已提交
388 389 390 391
ifeq ($(uname_S),IRIX64)
	NO_IPV6=YesPlease
	NO_SETENV=YesPlease
	NO_STRCASESTR=YesPlease
392
	NO_STRLCPY = YesPlease
J
Johannes Schindelin 已提交
393 394 395 396 397 398
	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
399 400 401
ifneq (,$(findstring arm,$(uname_M)))
	ARM_SHA1 = YesPlease
endif
402

403
-include config.mak.autogen
404
-include config.mak
405

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

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

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

519 520 521 522
ifdef NO_ICONV
	ALL_CFLAGS += -DNO_ICONV
endif

523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539
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
540 541 542
ifdef NO_ACCURATE_DIFF
	ALL_CFLAGS += -DNO_ACCURATE_DIFF
endif
543

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

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

DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
bindir_SQ = $(subst ','\'',$(bindir))
gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
template_dir_SQ = $(subst ','\'',$(template_dir))
552
prefix_SQ = $(subst ','\'',$(prefix))
553 554 555 556 557 558 559

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 已提交
560
LIB_OBJS += $(COMPAT_OBJS)
T
Tom Prince 已提交
561
export prefix TAR INSTALL DESTDIR SHELL_PATH template_dir
P
Petr Baudis 已提交
562 563
### Build rules

564
all: $(ALL_PROGRAMS) $(BUILT_INS) git$X gitk gitweb/gitweb.cgi
565

566 567
all:
	$(MAKE) -C templates
568

J
Junio C Hamano 已提交
569 570 571
strip: $(PROGRAMS) git$X
	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X

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

J
Junio C Hamano 已提交
577
help.o: common-cmds.h
578

J
Junio C Hamano 已提交
579 580 581
$(BUILT_INS): git$X
	rm -f $@ && ln git$X $@

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

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

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

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

614
git-cherry-pick: git-revert
615 616
	cp $< $@+
	mv $@+ $@
617

J
Junio C Hamano 已提交
618
git-status: git-commit
619 620
	cp $< $@+
	mv $@+ $@
J
Junio C Hamano 已提交
621

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

640 641 642 643 644 645
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' \
646
	    -e '/@@GITWEB_CGI@@/r gitweb/gitweb.cgi' \
647
	    -e '/@@GITWEB_CGI@@/d' \
648
	    -e '/@@GITWEB_CSS@@/r gitweb/gitweb.css' \
649
	    -e '/@@GITWEB_CSS@@/d' \
650
	    $@.sh > $@+
651 652 653
	chmod +x $@+
	mv $@+ $@

654 655 656 657 658 659 660
configure: configure.ac
	rm -f $@ $<+
	sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
	    $< > $<+
	autoconf -o $@ $<+
	rm -f $<+

661 662 663 664 665 666
# These can record GIT_VERSION
git$X git.spec \
	$(patsubst %.sh,%,$(SCRIPT_SH)) \
	$(patsubst %.perl,%,$(SCRIPT_PERL)) \
	$(patsubst %.py,%,$(SCRIPT_PYTHON)) \
	: GIT-VERSION-FILE
667

668
%.o: %.c GIT-CFLAGS
669 670 671
	$(CC) -o $*.o -c $(ALL_CFLAGS) $<
%.o: %.S
	$(CC) -o $*.o -c $(ALL_CFLAGS) $<
672

673
exec_cmd.o: exec_cmd.c GIT-CFLAGS
674
	$(CC) -o $*.o -c $(ALL_CFLAGS) '-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' $<
675 676
builtin-init-db.o: builtin-init-db.c GIT-CFLAGS
	$(CC) -o $*.o -c $(ALL_CFLAGS) -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"' $<
677

678
http.o: http.c GIT-CFLAGS
679 680
	$(CC) -o $*.o -c $(ALL_CFLAGS) -DGIT_USER_AGENT='"git/$(GIT_VERSION)"' $<

681
ifdef NO_EXPAT
682
http-fetch.o: http-fetch.c http.h GIT-CFLAGS
683 684 685
	$(CC) -o $*.o -c $(ALL_CFLAGS) -DNO_EXPAT $<
endif

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

689
$(SIMPLE_PROGRAMS) : $(LIB_FILE)
690
$(SIMPLE_PROGRAMS) : git-%$X : %.o
J
Junio C Hamano 已提交
691 692
	$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIB_FILE) $(SIMPLE_LIB)
693

694 695
ssh-pull.o: ssh-fetch.c
ssh-push.o: ssh-upload.c
696 697 698 699 700
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
701

702 703
git-imap-send$X: imap-send.o $(LIB_FILE)

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

709
git-http-push$X: revision.o http.o http-push.o $(GITLIBS)
710 711 712
	$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

713
$(LIB_OBJS) $(BUILTIN_OBJS): $(LIB_H)
714
$(patsubst git-%$X,%.o,$(PROGRAMS)): $(LIB_H) $(wildcard */*.h)
715
$(DIFF_OBJS): diffcore.h
716

P
Petr Baudis 已提交
717
$(LIB_FILE): $(LIB_OBJS)
718
	rm -f $@ && $(AR) rcs $@ $(LIB_OBJS)
P
Petr Baudis 已提交
719

720 721 722
XDIFF_OBJS=xdiff/xdiffi.o xdiff/xprepare.o xdiff/xutils.o xdiff/xemit.o

$(XDIFF_LIB): $(XDIFF_OBJS)
723
	rm -f $@ && $(AR) rcs $@ $(XDIFF_OBJS)
724 725


P
Petr Baudis 已提交
726 727 728
doc:
	$(MAKE) -C Documentation all

729 730 731 732 733 734 735
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 已提交
736

737
### Detect prefix changes
738
TRACK_CFLAGS = $(subst ','\'',$(ALL_CFLAGS)):$(GIT_PYTHON_DIR_SQ):\
739 740 741 742 743 744 745 746 747
             $(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 已提交
748 749
### Testing rules

750 751 752 753 754
# 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
755
export NO_SVN_TESTS
756

P
Petr Baudis 已提交
757 758 759
test: all
	$(MAKE) -C t/ all

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

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

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

769 770 771 772 773 774
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 已提交
775
check:
776
	for i in *.c; do sparse $(ALL_CFLAGS) $(SPARSE_FLAGS) $$i || exit; done
P
Petr Baudis 已提交
777 778 779 780 781



### Installation rules

782
install: all
783 784 785 786
	$(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)'
787
	$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
788 789
	$(INSTALL) -d -m755 '$(DESTDIR_SQ)$(GIT_PYTHON_DIR_SQ)'
	$(INSTALL) $(PYMODULES) '$(DESTDIR_SQ)$(GIT_PYTHON_DIR_SQ)'
790 791 792 793 794 795 796 797
	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 已提交
798 799 800 801 802 803 804 805 806

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




### Maintainer's dist rules

807
git.spec: git.spec.in
808 809
	sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@+
	mv $@+ $@
810

J
Junio C Hamano 已提交
811 812
GIT_TARNAME=git-$(GIT_VERSION)
dist: git.spec git-tar-tree
813
	./git-tar-tree HEAD^{tree} $(GIT_TARNAME) > $(GIT_TARNAME).tar
814
	@mkdir -p $(GIT_TARNAME)
J
Junio C Hamano 已提交
815
	@cp git.spec $(GIT_TARNAME)
816 817 818
	@echo $(GIT_VERSION) > $(GIT_TARNAME)/version
	$(TAR) rf $(GIT_TARNAME).tar \
		$(GIT_TARNAME)/git.spec $(GIT_TARNAME)/version
819
	@rm -rf $(GIT_TARNAME)
820
	gzip -f -9 $(GIT_TARNAME).tar
821 822

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

825 826 827 828 829 830 831 832 833 834 835
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
836
	$(MAKE) -C Documentation DESTDIR=./ \
837 838
		man1dir=../.doc-tmp-dir/man1 \
		man7dir=../.doc-tmp-dir/man7 \
839 840 841 842 843
		install
	cd .doc-tmp-dir && $(TAR) cf ../$(manpages).tar .
	gzip -n -9 -f $(manpages).tar
	rm -fr .doc-tmp-dir

P
Petr Baudis 已提交
844
### Cleaning rules
845

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

J
Junio C Hamano 已提交
862
.PHONY: all install clean strip
863
.PHONY: .FORCE-GIT-VERSION-FILE TAGS tags .FORCE-GIT-CFLAGS
J
Junio C Hamano 已提交
864

J
Junio C Hamano 已提交
865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882
### 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 | \
		git-merge-resolve | git-merge-stupid | \
		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