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

4 5
# Define NO_OPENSSL environment variable if you do not have OpenSSL.
# This also implies MOZILLA_SHA1.
6
#
7 8 9
# 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.
10
#
P
Patrick Mauritz 已提交
11 12 13
# Define CURLDIR=/foo/bar if your curl header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
14 15 16
# 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.
#
17 18
# Define NO_D_INO_IN_DIRENT if you don't have d_ino in your struct dirent.
#
19 20 21
# 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).
#
22 23 24
# 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).
25
# some C compilers supported these specifiers prior to C99 as an extension.
26
#
27 28
# Define NO_STRCASESTR if you don't have strcasestr.
#
29 30
# Define NO_STRLCPY if you don't have strlcpy.
#
J
Jason Riedy 已提交
31 32
# Define NO_SETENV if you don't have setenv in the C library.
#
33 34
# 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.
35
#
P
Pavel Roskin 已提交
36
# Define NO_SVN_TESTS if you want to skip time-consuming SVN interoperability
E
Eric Wong 已提交
37 38 39
# 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.
#
40 41 42 43 44 45 46 47 48 49 50 51
# 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.
#
52 53
# Define PPC_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine optimized for PowerPC.
54
#
55 56 57
# Define ARM_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine optimized for ARM.
#
58 59 60 61 62
# 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.
#
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
# 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.
89
#
90 91 92 93 94
# 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).
95
#
96 97 98
# 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 129 130 131
GITWEB_SITENAME =
GITWEB_PROJECTROOT = /pub/git
GITWEB_LIST =
GITWEB_HOMETEXT = indextext.html
GITWEB_CSS = gitweb.css
M
Martin Waitz 已提交
132
GITWEB_LOGO = git-logo.png
133

134 135
export prefix bindir gitexecdir template_dir GIT_PYTHON_DIR

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

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

P
Petr Baudis 已提交
146 147 148 149


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

150
# Those must not be GNU-specific; they are shared with perl/ which may
P
Petr Baudis 已提交
151 152 153 154
# 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 =
155

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

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

178
SCRIPT_PYTHON = \
179
	git-merge-recursive.py
180

181 182 183
SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
	  $(patsubst %.perl,%,$(SCRIPT_PERL)) \
	  $(patsubst %.py,%,$(SCRIPT_PYTHON)) \
184
	  git-cherry-pick git-status git-instaweb
185

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

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

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

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

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

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

227 228 229
PYMODULES = \
	gitMergeCommon.py

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

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

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

J
Junio C Hamano 已提交
244
LIB_OBJS = \
245
	blob.o commit.o connect.o csum-file.o cache-tree.o base85.o \
246
	date.o diff-delta.o entry.o exec_cmd.o ident.o lockfile.o \
J
Junio C Hamano 已提交
247
	object.o pack-check.o patch-delta.o path.o pkt-line.o \
248
	quote.o read-cache.o refs.o run-command.o dir.o object-refs.o \
J
Junio C Hamano 已提交
249
	server-info.o setup.o sha1_file.o sha1_name.o strbuf.o \
250
	tag.o tree.o usage.o config.o environment.o ctype.o copy.o \
251
	fetch-clone.o revision.o pager.o tree-walk.o xdiff-interface.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
GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
298
EXTLIBS = -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
	ifndef NO_FINK
		ifeq ($(shell test -d /sw/lib && echo y),y)
320 321
			BASIC_CFLAGS += -I/sw/include
			BASIC_LDFLAGS += -L/sw/lib
322
		endif
S
Shawn Pearce 已提交
323
	endif
324 325
	ifndef NO_DARWIN_PORTS
		ifeq ($(shell test -d /opt/local/lib && echo y),y)
326 327
			BASIC_CFLAGS += -I/opt/local/include
			BASIC_LDFLAGS += -L/opt/local/lib
328
		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 340
		NO_SETENV = YesPlease
	endif
341 342 343 344
	ifeq ($(uname_R),5.9)
		NO_UNSETENV = YesPlease
		NO_SETENV = YesPlease
	endif
345 346
	INSTALL = ginstall
	TAR = gtar
347
	BASIC_CFLAGS += -D__EXTENSIONS__
348
endif
349
ifeq ($(uname_O),Cygwin)
350
	NO_D_TYPE_IN_DIRENT = YesPlease
351
	NO_D_INO_IN_DIRENT = YesPlease
H
hpa 已提交
352
	NO_STRCASESTR = YesPlease
353
	NO_SYMLINK_HEAD = YesPlease
H
hpa 已提交
354
	NEEDS_LIBICONV = YesPlease
J
Junio C Hamano 已提交
355
	NO_C99_FORMAT = YesPlease
356 357 358 359
	# 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
360
	NO_IPV6 = YesPlease
P
Peter Anvin 已提交
361
	X = .exe
362
endif
A
Alecs King 已提交
363 364
ifeq ($(uname_S),FreeBSD)
	NEEDS_LIBICONV = YesPlease
365 366
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
A
Alecs King 已提交
367
endif
368
ifeq ($(uname_S),OpenBSD)
369
	NO_STRCASESTR = YesPlease
H
Han Boetes 已提交
370
	NEEDS_LIBICONV = YesPlease
371 372
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
J
Junio C Hamano 已提交
373 374
endif
ifeq ($(uname_S),NetBSD)
375 376 377
	ifeq ($(shell expr "$(uname_R)" : '[01]\.'),2)
		NEEDS_LIBICONV = YesPlease
	endif
378 379 380
	BASIC_CFLAGS += -I/usr/pkg/include
	BASIC_LDFLAGS += -L/usr/pkg/lib
	ALL_LDFLAGS += -Wl,-rpath,/usr/pkg/lib
H
Han Boetes 已提交
381
endif
382 383
ifeq ($(uname_S),AIX)
	NO_STRCASESTR=YesPlease
384
	NO_STRLCPY = YesPlease
385 386
	NEEDS_LIBICONV=YesPlease
endif
J
Johannes Schindelin 已提交
387 388 389 390
ifeq ($(uname_S),IRIX64)
	NO_IPV6=YesPlease
	NO_SETENV=YesPlease
	NO_STRCASESTR=YesPlease
391
	NO_STRLCPY = YesPlease
J
Johannes Schindelin 已提交
392 393
	NO_SOCKADDR_STORAGE=YesPlease
	SHELL_PATH=/usr/gnu/bin/bash
394
	BASIC_CFLAGS += -DPATH_MAX=1024
J
Johannes Schindelin 已提交
395
	# for now, build 32-bit version
396
	BASIC_LDFLAGS += -L/usr/lib32
J
Johannes Schindelin 已提交
397
endif
398 399 400
ifneq (,$(findstring arm,$(uname_M)))
	ARM_SHA1 = YesPlease
endif
401

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

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

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

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

518
ifdef NO_ICONV
519
	BASIC_CFLAGS += -DNO_ICONV
520 521
endif

522 523 524 525 526 527 528 529 530 531 532 533 534
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>
535
	EXTLIBS += $(LIB_4_CRYPTO)
536 537 538
endif
endif
endif
539
ifdef NO_ACCURATE_DIFF
540
	BASIC_CFLAGS += -DNO_ACCURATE_DIFF
541
endif
542

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

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

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

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

558 559
LIBS = $(GITLIBS) $(EXTLIBS)

560
BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' $(COMPAT_CFLAGS)
J
Jason Riedy 已提交
561
LIB_OBJS += $(COMPAT_OBJS)
562 563 564 565

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

T
Tom Prince 已提交
566
export prefix TAR INSTALL DESTDIR SHELL_PATH template_dir
567 568


P
Petr Baudis 已提交
569 570
### Build rules

571
all: $(ALL_PROGRAMS) $(BUILT_INS) git$X gitk gitweb/gitweb.cgi
572

P
Petr Baudis 已提交
573 574
all: perl/Makefile
	$(MAKE) -C perl
575
	$(MAKE) -C templates
576

J
Junio C Hamano 已提交
577 578 579
strip: $(PROGRAMS) git$X
	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X

580
git$X: git.c common-cmds.h $(BUILTIN_OBJS) $(GITLIBS) GIT-CFLAGS
581
	$(CC) -DGIT_VERSION='"$(GIT_VERSION)"' \
582
		$(ALL_CFLAGS) -o $@ $(filter %.c,$^) \
583
		$(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)
584

J
Junio C Hamano 已提交
585
help.o: common-cmds.h
586

J
Junio C Hamano 已提交
587 588 589
$(BUILT_INS): git$X
	rm -f $@ && ln git$X $@

F
Fredrik Kuivinen 已提交
590
common-cmds.h: Documentation/git-*.txt
591 592
	./generate-cmdlist.sh > $@+
	mv $@+ $@
F
Fredrik Kuivinen 已提交
593

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

605 606
$(patsubst %.perl,%,$(SCRIPT_PERL)): perl/Makefile
$(patsubst %.perl,%,$(SCRIPT_PERL)): % : %.perl
607
	rm -f $@ $@+
608
	INSTLIBDIR=`$(MAKE) -C perl -s --no-print-directory instlibdir` && \
609 610 611 612 613 614 615
	sed -e '1{' \
	    -e '	s|#!.*perl|#!$(PERL_PATH_SQ)|' \
	    -e '	h' \
	    -e '	s=.*=use lib (split(/:/, $$ENV{GITPERLLIB} || "@@INSTLIBDIR@@"));=' \
	    -e '	H' \
	    -e '	x' \
	    -e '}' \
616
	    -e 's|@@INSTLIBDIR@@|'"$$INSTLIBDIR"'|g' \
617
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
618 619 620
	    $@.perl >$@+
	chmod +x $@+
	mv $@+ $@
621

622
$(patsubst %.py,%,$(SCRIPT_PYTHON)) : % : %.py GIT-CFLAGS
623
	rm -f $@ $@+
624 625
	sed -e '1s|#!.*python|#!$(PYTHON_PATH_SQ)|' \
	    -e 's|@@GIT_PYTHON_PATH@@|$(GIT_PYTHON_DIR_SQ)|g' \
626
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
627 628 629
	    $@.py >$@+
	chmod +x $@+
	mv $@+ $@
630

631
git-cherry-pick: git-revert
632 633
	cp $< $@+
	mv $@+ $@
634

J
Junio C Hamano 已提交
635
git-status: git-commit
636 637
	cp $< $@+
	mv $@+ $@
J
Junio C Hamano 已提交
638

639 640 641
gitweb/gitweb.cgi: gitweb/gitweb.perl
	rm -f $@ $@+
	sed -e '1s|#!.*perl|#!$(PERL_PATH_SQ)|' \
642 643 644
	    -e 's|++GIT_VERSION++|$(GIT_VERSION)|g' \
	    -e 's|++GIT_BINDIR++|$(bindir)|g' \
	    -e 's|++GITWEB_CONFIG++|$(GITWEB_CONFIG)|g' \
645
	    -e 's|++GITWEB_HOME_LINK_STR++|$(GITWEB_HOME_LINK_STR)|g' \
646 647 648 649 650 651
	    -e 's|++GITWEB_SITENAME++|$(GITWEB_SITENAME)|g' \
	    -e 's|++GITWEB_PROJECTROOT++|$(GITWEB_PROJECTROOT)|g' \
	    -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' \
652 653 654 655
	    $< >$@+
	chmod +x $@+
	mv $@+ $@

656 657 658 659 660 661
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' \
662
	    -e '/@@GITWEB_CGI@@/r gitweb/gitweb.cgi' \
663
	    -e '/@@GITWEB_CGI@@/d' \
664
	    -e '/@@GITWEB_CSS@@/r gitweb/gitweb.css' \
665
	    -e '/@@GITWEB_CSS@@/d' \
666
	    $@.sh > $@+
667 668 669
	chmod +x $@+
	mv $@+ $@

670 671 672 673 674 675 676
configure: configure.ac
	rm -f $@ $<+
	sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
	    $< > $<+
	autoconf -o $@ $<+
	rm -f $<+

677 678 679 680 681 682
# These can record GIT_VERSION
git$X git.spec \
	$(patsubst %.sh,%,$(SCRIPT_SH)) \
	$(patsubst %.perl,%,$(SCRIPT_PERL)) \
	$(patsubst %.py,%,$(SCRIPT_PYTHON)) \
	: GIT-VERSION-FILE
683

684
%.o: %.c GIT-CFLAGS
685 686 687
	$(CC) -o $*.o -c $(ALL_CFLAGS) $<
%.o: %.S
	$(CC) -o $*.o -c $(ALL_CFLAGS) $<
688

689
exec_cmd.o: exec_cmd.c GIT-CFLAGS
690
	$(CC) -o $*.o -c $(ALL_CFLAGS) '-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' $<
691 692
builtin-init-db.o: builtin-init-db.c GIT-CFLAGS
	$(CC) -o $*.o -c $(ALL_CFLAGS) -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"' $<
693

694
http.o: http.c GIT-CFLAGS
695 696
	$(CC) -o $*.o -c $(ALL_CFLAGS) -DGIT_USER_AGENT='"git/$(GIT_VERSION)"' $<

697
ifdef NO_EXPAT
698
http-fetch.o: http-fetch.c http.h GIT-CFLAGS
699 700 701
	$(CC) -o $*.o -c $(ALL_CFLAGS) -DNO_EXPAT $<
endif

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

705
$(SIMPLE_PROGRAMS) : $(LIB_FILE)
706
$(SIMPLE_PROGRAMS) : git-%$X : %.o
J
Junio C Hamano 已提交
707 708
	$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIB_FILE) $(SIMPLE_LIB)
709

710 711
ssh-pull.o: ssh-fetch.c
ssh-push.o: ssh-upload.c
712 713 714 715 716
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
717

718 719
git-imap-send$X: imap-send.o $(LIB_FILE)

J
Junio C Hamano 已提交
720
http.o http-fetch.o http-push.o: http.h
721
git-http-fetch$X: fetch.o http.o http-fetch.o $(GITLIBS)
722
	$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
723
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)
724

725
git-http-push$X: revision.o http.o http-push.o $(GITLIBS)
726 727 728
	$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

729
$(LIB_OBJS) $(BUILTIN_OBJS): $(LIB_H)
730
$(patsubst git-%$X,%.o,$(PROGRAMS)): $(LIB_H) $(wildcard */*.h)
731
$(DIFF_OBJS): diffcore.h
732

P
Petr Baudis 已提交
733
$(LIB_FILE): $(LIB_OBJS)
734
	rm -f $@ && $(AR) rcs $@ $(LIB_OBJS)
P
Petr Baudis 已提交
735

736 737 738
XDIFF_OBJS=xdiff/xdiffi.o xdiff/xprepare.o xdiff/xutils.o xdiff/xemit.o

$(XDIFF_LIB): $(XDIFF_OBJS)
739
	rm -f $@ && $(AR) rcs $@ $(XDIFF_OBJS)
740 741


742
perl/Makefile: perl/Git.pm perl/Makefile.PL GIT-CFLAGS
P
Petr Baudis 已提交
743
	(cd perl && $(PERL_PATH) Makefile.PL \
P
Petr Baudis 已提交
744
		PREFIX='$(prefix_SQ)')
P
Petr Baudis 已提交
745

P
Petr Baudis 已提交
746 747 748
doc:
	$(MAKE) -C Documentation all

749 750 751 752 753 754 755
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 已提交
756

757
### Detect prefix changes
758
TRACK_CFLAGS = $(subst ','\'',$(ALL_CFLAGS)):$(GIT_PYTHON_DIR_SQ):\
759 760 761 762 763 764 765 766 767
             $(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 已提交
768 769
### Testing rules

770 771 772 773 774
# 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
775
export NO_SVN_TESTS
776

P
Petr Baudis 已提交
777 778 779
test: all
	$(MAKE) -C t/ all

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

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

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

789 790 791 792 793 794
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 已提交
795
check:
796
	for i in *.c; do sparse $(ALL_CFLAGS) $(SPARSE_FLAGS) $$i || exit; done
P
Petr Baudis 已提交
797 798 799 800 801



### Installation rules

802
install: all
803 804 805 806
	$(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)'
807
	$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
P
Petr Baudis 已提交
808
	$(MAKE) -C perl install
809 810
	$(INSTALL) -d -m755 '$(DESTDIR_SQ)$(GIT_PYTHON_DIR_SQ)'
	$(INSTALL) $(PYMODULES) '$(DESTDIR_SQ)$(GIT_PYTHON_DIR_SQ)'
811 812 813 814 815 816 817 818
	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 已提交
819 820 821 822 823 824 825 826 827

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




### Maintainer's dist rules

828
git.spec: git.spec.in
829 830
	sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@+
	mv $@+ $@
831

J
Junio C Hamano 已提交
832 833
GIT_TARNAME=git-$(GIT_VERSION)
dist: git.spec git-tar-tree
834
	./git-tar-tree HEAD^{tree} $(GIT_TARNAME) > $(GIT_TARNAME).tar
835
	@mkdir -p $(GIT_TARNAME)
J
Junio C Hamano 已提交
836
	@cp git.spec $(GIT_TARNAME)
837 838 839
	@echo $(GIT_VERSION) > $(GIT_TARNAME)/version
	$(TAR) rf $(GIT_TARNAME).tar \
		$(GIT_TARNAME)/git.spec $(GIT_TARNAME)/version
840
	@rm -rf $(GIT_TARNAME)
841
	gzip -f -9 $(GIT_TARNAME).tar
842 843

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

846 847 848 849 850 851 852 853 854 855 856
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
857
	$(MAKE) -C Documentation DESTDIR=./ \
858 859
		man1dir=../.doc-tmp-dir/man1 \
		man7dir=../.doc-tmp-dir/man7 \
860 861 862 863 864
		install
	cd .doc-tmp-dir && $(TAR) cf ../$(manpages).tar .
	gzip -n -9 -f $(manpages).tar
	rm -fr .doc-tmp-dir

P
Petr Baudis 已提交
865
### Cleaning rules
866

867
clean:
868 869
	rm -f *.o mozilla-sha1/*.o arm/*.o ppc/*.o compat/*.o xdiff/*.o \
		$(LIB_FILE) $(XDIFF_LIB)
A
A Large Angry SCM 已提交
870
	rm -f $(ALL_PROGRAMS) $(BUILT_INS) git$X
871
	rm -f *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h TAGS tags
872
	rm -rf autom4te.cache
873
	rm -f configure config.log config.mak.autogen config.mak.append config.status config.cache
874
	rm -rf $(GIT_TARNAME) .doc-tmp-dir
875
	rm -f $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz
876
	rm -f $(htmldocs).tar.gz $(manpages).tar.gz
877
	rm -f gitweb/gitweb.cgi
878
	$(MAKE) -C Documentation/ clean
879
	[ ! -f perl/Makefile ] || $(MAKE) -C perl/ clean || $(MAKE) -C perl/ clean
J
Junio C Hamano 已提交
880
	rm -f perl/ppport.h perl/Makefile.old
P
Petr Baudis 已提交
881
	$(MAKE) -C templates/ clean
882
	$(MAKE) -C t/ clean
883
	rm -f GIT-VERSION-FILE GIT-CFLAGS
884

J
Junio C Hamano 已提交
885
.PHONY: all install clean strip
886
.PHONY: .FORCE-GIT-VERSION-FILE TAGS tags .FORCE-GIT-CFLAGS
J
Junio C Hamano 已提交
887

J
Junio C Hamano 已提交
888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905
### 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