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

S
Shawn O. Pearce 已提交
4
# Define V=1 to have a more verbose compile.
5
#
6 7 8 9 10
# Define SHELL_PATH to a POSIX shell if your /bin/sh is broken.
#
# Define SANE_TOOL_PATH to a colon-separated list of paths to prepend
# to PATH if your tools in /usr/bin are broken.
#
11 12 13
# Define SOCKLEN_T to a suitable type (such as 'size_t') if your
# system headers do not define a socklen_t type.
#
G
Gary V. Vaughan 已提交
14 15 16
# Define INLINE to a suitable substitute (such as '__inline' or '') if git
# fails to compile with errors about undefined inline functions or similar.
#
17 18 19 20
# Define SNPRINTF_RETURNS_BOGUS if your are on a system which snprintf()
# or vsnprintf() return -1 instead of number of characters which would
# have been written to the final string if enough space had been available.
#
21 22 23
# Define FREAD_READS_DIRECTORIES if your are on a system which succeeds
# when attempting to read from an fopen'ed directory.
#
24
# Define NO_OPENSSL environment variable if you do not have OpenSSL.
25
# This also implies BLK_SHA1.
26
#
M
Michał Kiedrowicz 已提交
27 28 29 30 31 32
# Define USE_LIBPCRE if you have and want to use libpcre. git-grep will be
# able to use Perl-compatible regular expressions.
#
# Define LIBPCREDIR=/foo/bar if your libpcre header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
33
# Define NO_CURL if you do not have libcurl installed.  git-http-fetch and
34
# git-http-push are not built, and you cannot use http:// and https://
35
# transports (neither smart nor dumb).
36
#
P
Patrick Mauritz 已提交
37 38 39
# Define CURLDIR=/foo/bar if your curl header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
40
# Define NO_EXPAT if you do not have expat installed.  git-http-push is
41
# not built, and you cannot push using http:// and https:// transports (dumb).
42
#
43 44 45
# Define EXPATDIR=/foo/bar if your expat header and library files are in
# /foo/bar/include and /foo/bar/lib directories.
#
46 47 48 49
# Define NO_GETTEXT if you don't want Git output to be translated.
# A translated Git requires GNU libintl or another gettext implementation,
# plus libintl-perl at runtime.
#
50 51 52
# Define USE_GETTEXT_SCHEME and set it to 'fallthrough', if you don't trust
# the installed gettext translation of the shell scripts output.
#
53 54 55 56 57 58 59 60 61 62 63 64
# Define HAVE_LIBCHARSET_H if you haven't set NO_GETTEXT and you can't
# trust the langinfo.h's nl_langinfo(CODESET) function to return the
# current character set. GNU and Solaris have a nl_langinfo(CODESET),
# FreeBSD can use either, but MinGW and some others need to use
# libcharset.h's locale_charset() instead.
#
# Define LIBC_CONTAINS_LIBINTL if your gettext implementation doesn't
# need -lintl when linking.
#
# Define NO_MSGFMT_EXTENDED_OPTIONS if your implementation of msgfmt
# doesn't support GNU extensions like --check and --statistics
#
65 66 67
# Define HAVE_PATHS_H if you have paths.h and want to use the default PATH
# it specifies.
#
68 69
# Define NO_D_INO_IN_DIRENT if you don't have d_ino in your struct dirent.
#
70
# Define NO_D_TYPE_IN_DIRENT if your platform defines DT_UNKNOWN but lacks
71
# d_type in struct dirent (Cygwin 1.5, fixed in Cygwin 1.7).
72
#
73 74
# Define NO_STRCASESTR if you don't have strcasestr.
#
R
René Scharfe 已提交
75 76
# Define NO_MEMMEM if you don't have memmem.
#
77 78
# Define NO_STRLCPY if you don't have strlcpy.
#
79 80
# Define NO_STRTOUMAX if you don't have both strtoimax and strtoumax in the
# C library. If your compiler also does not support long long or does not have
81 82
# strtoull, define NO_STRTOULL.
#
J
Jason Riedy 已提交
83 84
# Define NO_SETENV if you don't have setenv in the C library.
#
85 86
# Define NO_UNSETENV if you don't have unsetenv in the C library.
#
87 88
# Define NO_MKDTEMP if you don't have mkdtemp in the C library.
#
89 90
# Define NO_MKSTEMPS if you don't have mkstemps in the C library.
#
J
Jonathan Nieder 已提交
91 92
# Define NO_STRTOK_R if you don't have strtok_r in the C library.
#
93 94
# Define NO_FNMATCH if you don't have fnmatch in the C library.
#
95 96 97
# Define NO_FNMATCH_CASEFOLD if your fnmatch function doesn't have the
# FNM_CASEFOLD GNU extension.
#
98 99 100
# Define NO_GECOS_IN_PWENT if you don't have pw_gecos in struct passwd
# in the C library.
#
101 102
# Define NO_LIBGEN_H if you don't have libgen.h.
#
103 104
# Define NEEDS_LIBGEN if your libgen needs -lgen when linking
#
105 106
# Define NO_SYS_SELECT_H if you don't have sys/select.h.
#
107 108
# 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.
109
#
P
Pavel Roskin 已提交
110
# Define NO_SVN_TESTS if you want to skip time-consuming SVN interoperability
E
Eric Wong 已提交
111 112 113
# 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.
#
114 115 116 117 118 119 120 121 122 123 124 125
# 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.
#
126 127 128 129
# Define BLK_SHA1 environment variable if you want the C version
# of the SHA1 that assumes you can do unaligned 32-bit loads and
# have a fast htonl() function.
#
130 131
# Define PPC_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine optimized for PowerPC.
132
#
133 134 135
# Define NEEDS_CRYPTO_WITH_SSL if you need -lcrypto when using -lssl (Darwin).
#
# Define NEEDS_SSL_WITH_CRYPTO if you need -lssl when using -lcrypto (Darwin).
136
#
137 138 139 140
# Define NEEDS_SSL_WITH_CURL if you need -lssl with -lcurl (Minix).
#
# Define NEEDS_IDN_WITH_CURL if you need -lidn when using -lcurl (Minix).
#
141
# Define NEEDS_LIBICONV if linking with libc is not enough (Darwin).
142 143 144 145
#
# Define NEEDS_SOCKET if linking with libc is not enough (SunOS,
# Patrick Mauritz).
#
146 147 148 149
# Define NEEDS_RESOLV if linking with -lnsl and/or -lsocket is not enough.
# Notably on Solaris hstrerror resides in libresolv and on Solaris 7
# inet_ntop and inet_pton additionally reside there.
#
150 151
# Define NO_MMAP if you want to avoid mmap.
#
J
Junio C Hamano 已提交
152 153
# Define NO_PTHREADS if you do not have or do not want to use Pthreads.
#
154
# Define NO_PREAD if you have a problem with pread() system call (e.g.
155
# cygwin1.dll before v1.5.22).
156
#
157 158 159
# Define NO_FAST_WORKING_DIRECTORY if accessing objects in pack files is
# generally faster on your platform than accessing the working directory.
#
160 161 162
# Define NO_TRUSTABLE_FILEMODE if your filesystem may claim to support
# the executable mode bit, but doesn't really do so.
#
163 164
# Define NO_IPV6 if you lack IPv6 support and getaddrinfo().
#
165 166
# Define NO_UNIX_SOCKETS if your system does not offer unix sockets.
#
167 168 169
# Define NO_SOCKADDR_STORAGE if your platform does not have struct
# sockaddr_storage.
#
170 171
# Define NO_ICONV if your libc does not properly support iconv.
#
172 173 174
# Define OLD_ICONV if your library has an old iconv(), where the second
# (input buffer pointer) parameter is declared with type (const char **).
#
175 176
# Define NO_DEFLATE_BOUND if your zlib does not have deflateBound.
#
177 178 179
# Define NO_R_TO_GCC_LINKER if your gcc does not like "-R/path/lib"
# that tells runtime paths to dynamic libraries;
# "-Wl,-rpath=/path/lib" is used instead.
180
#
J
Junio C Hamano 已提交
181 182 183
# Define NO_NORETURN if using buggy versions of gcc 4.6+ and profile feedback,
# as the compiler can crash (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49299)
#
184 185 186 187 188
# 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).
189
#
190 191 192
# Define USE_ST_TIMESPEC if your "struct stat" uses "st_ctimespec" instead of
# "st_ctim"
#
193 194 195
# Define NO_NSEC if your "struct stat" does not have "st_ctim.tv_nsec"
# available.  This automatically turns USE_NSEC off.
#
196
# Define USE_STDEV below if you want git to care about the underlying device
197
# change being considered an inode change from the update-index perspective.
198
#
199 200 201
# Define NO_ST_BLOCKS_IN_STRUCT_STAT if your platform does not have st_blocks
# field that counts the on-disk footprint in 512-byte blocks.
#
J
Jeff King 已提交
202
# Define ASCIIDOC7 if you want to format documentation with AsciiDoc 7
203
#
204 205 206
# Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72
# (not v1.73 or v1.71).
#
J
Jeff King 已提交
207 208
# Define ASCIIDOC_ROFF if your DocBook XSL does not escape raw roff directives
# (versions 1.68.1 through v1.72).
209
#
T
Thomas Rast 已提交
210 211 212 213
# Define GNU_ROFF if your target system uses GNU groff.  This forces
# apostrophes to be ASCII so that cut&pasting examples to the shell
# will work.
#
214 215 216
# Define NO_PERL_MAKEMAKER if you cannot use Makefiles generated by perl's
# MakeMaker (e.g. using ActiveState under Cygwin).
#
217 218
# Define NO_PERL if you do not want Perl scripts or libraries at all.
#
219 220
# Define NO_PYTHON if you do not want Python scripts or libraries at all.
#
E
Eygene Ryabinkin 已提交
221 222
# Define NO_TCLTK if you do not want Tcl/Tk GUI.
#
223 224 225 226 227
# The TCL_PATH variable governs the location of the Tcl interpreter
# used to optimize git-gui for your system.  Only used if NO_TCLTK
# is not set.  Defaults to the bare 'tclsh'.
#
# The TCLTK_PATH variable governs the location of the Tcl/Tk interpreter.
228 229 230
# If not set it defaults to the bare 'wish'. If it is set to the empty
# string then NO_TCLTK will be forced (this is used by configure script).
#
231 232 233 234
# Define INTERNAL_QSORT to use Git's implementation of qsort(), which
# is a simplified version of the merge sort used in glibc. This is
# recommended if Git triggers O(n^2) behavior in your platform's qsort().
#
235 236 237
# Define UNRELIABLE_FSTAT if your system's fstat does not return the same
# information on a not yet closed file that lstat would return for the same
# file after it was closed.
238
#
239 240
# Define OBJECT_CREATION_USES_RENAMES if your operating systems has problems
# when hardlinking a file to another name and unlinking the original file right
241
# away (some NTFS drivers seem to zero the contents in that scenario).
242
#
243 244
# Define NO_CROSS_DIRECTORY_HARDLINKS if you plan to distribute the installed
# programs as a tar, where bin/ and libexec/ might be on different file systems.
245 246 247
#
# Define USE_NED_ALLOCATOR if you want to replace the platforms default
# memory allocators with the nedmalloc allocator written by Niall Douglas.
248 249
#
# Define NO_REGEX if you have no or inferior regex support in your C library.
250
#
J
Jeff King 已提交
251 252 253
# Define HAVE_DEV_TTY if your system can open /dev/tty to interact with the
# user.
#
254
# Define GETTEXT_POISON if you are debugging the choice of strings marked
255 256 257
# for translation.  In a GETTEXT_POISON build, you can turn all strings marked
# for translation into gibberish by setting the GIT_GETTEXT_POISON variable
# (to any value) in your environment.
258
#
259 260
# Define JSMIN to point to JavaScript minifier that functions as
# a filter to have gitweb.js minified.
J
Junio C Hamano 已提交
261
#
262 263 264
# Define CSSMIN to point to a CSS minifier in order to generate a minified
# version of gitweb.css
#
265 266 267 268
# Define DEFAULT_PAGER to a sensible pager command (defaults to "less") if
# you want to use something different.  The value will be interpreted by the
# shell at runtime when it is used.
#
269 270 271 272 273 274 275
# Define DEFAULT_EDITOR to a sensible editor command (defaults to "vi") if you
# want to use something different.  The value will be interpreted by the shell
# if necessary when it is used.  Examples:
#
#   DEFAULT_EDITOR='~/bin/vi',
#   DEFAULT_EDITOR='$GIT_FALLBACK_EDITOR',
#   DEFAULT_EDITOR='"C:\Program Files\Vim\gvim.exe" --nofork'
276
#
277 278 279 280 281 282
# Define COMPUTE_HEADER_DEPENDENCIES to "yes" if you want dependencies on
# header files to be automatically computed, to avoid rebuilding objects when
# an unrelated header file changes.  Define it to "no" to use the hard-coded
# dependency rules.  The default is "auto", which means to use computed header
# dependencies if your compiler is detected to support it.
#
283 284
# Define CHECK_HEADER_DEPENDENCIES to check for problems in the hard-coded
# dependency rules.
J
Junio C Hamano 已提交
285
#
286
# Define NATIVE_CRLF if your platform uses CRLF for line endings.
287

288
GIT-VERSION-FILE: FORCE
289
	@$(SHELL_PATH) ./GIT-VERSION-GEN
290
-include GIT-VERSION-FILE
291

292 293 294 295 296
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 已提交
297
uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not')
298

299 300 301 302 303 304
ifdef MSVC
	# avoid the MingW and Cygwin configuration sections
	uname_S := Windows
	uname_O := Windows
endif

J
Junio C Hamano 已提交
305
# CFLAGS and LDFLAGS are for the users to override from the command line.
306

307
CFLAGS = -g -O2 -Wall
J
Junio C Hamano 已提交
308
LDFLAGS =
309
ALL_CFLAGS = $(CPPFLAGS) $(CFLAGS)
J
Junio C Hamano 已提交
310
ALL_LDFLAGS = $(LDFLAGS)
J
Junio C Hamano 已提交
311
STRIP ?= strip
312

313 314 315
# Among the variables below, these:
#   gitexecdir
#   template_dir
316 317
#   mandir
#   infodir
318
#   htmldir
319
#   sysconfdir
320 321
# can be specified as a relative path some/where/else;
# this is interpreted as relative to $(prefix) and "git" at
322 323 324
# runtime figures out where they are based on the path to the executable.
# This can help installing the suite in a relocatable way.

325
prefix = $(HOME)
326 327 328 329 330
bindir_relative = bin
bindir = $(prefix)/$(bindir_relative)
mandir = share/man
infodir = share/info
gitexecdir = libexec/git-core
331
mergetoolsdir = $(gitexecdir)/mergetools
332
sharedir = $(prefix)/share
333
gitwebdir = $(sharedir)/gitweb
334
localedir = $(sharedir)/locale
335 336 337
template_dir = share/git-core/templates
htmldir = share/doc/git-doc
ETC_GITCONFIG = $(sysconfdir)/gitconfig
338
ETC_GITATTRIBUTES = $(sysconfdir)/gitattributes
339
lib = lib
340
# DESTDIR=
341
pathsep = :
342

343
export prefix bindir sharedir sysconfdir gitwebdir localedir
344

345
CC = cc
346
AR = ar
347
RM = rm -f
348
DIFF = diff
349
TAR = tar
350
FIND = find
351 352
INSTALL = install
RPMBUILD = rpmbuild
353
TCL_PATH = tclsh
354
TCLTK_PATH = wish
355
XGETTEXT = xgettext
356
MSGFMT = msgfmt
357
PTHREAD_LIBS = -lpthread
358
PTHREAD_CFLAGS =
359
GCOV = gcov
360

361 362
export TCL_PATH TCLTK_PATH

363
SPARSE_FLAGS =
364

P
Petr Baudis 已提交
365 366 367 368


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

369
# Those must not be GNU-specific; they are shared with perl/ which may
P
Petr Baudis 已提交
370 371
# be built by a different compiler. (Note that this is an artifact now
# but it still might be nice to keep that distinction.)
372
BASIC_CFLAGS = -I.
P
Petr Baudis 已提交
373
BASIC_LDFLAGS =
374

375 376 377 378 379
# Guard against environment variables
BUILTIN_OBJS =
BUILT_INS =
COMPAT_CFLAGS =
COMPAT_OBJS =
380 381 382 383 384
XDIFF_H =
XDIFF_OBJS =
VCSSVN_H =
VCSSVN_OBJS =
VCSSVN_TEST_OBJS =
385
EXTRA_CPPFLAGS =
386 387
LIB_H =
LIB_OBJS =
388
PROGRAM_OBJS =
389 390
PROGRAMS =
SCRIPT_PERL =
391
SCRIPT_PYTHON =
392
SCRIPT_SH =
393
SCRIPT_LIB =
394
TEST_PROGRAMS_NEED_X =
395

J
Jonathan Nieder 已提交
396 397 398 399 400 401
# Having this variable in your environment would break pipelines because
# you cause "cd" to echo its destination to stdout.  It can also take
# scripts to unexpected places.  If you like CDPATH, define it for your
# interactive shell sessions without exporting it.
unexport CDPATH

402 403
SCRIPT_SH += git-am.sh
SCRIPT_SH += git-bisect.sh
404
SCRIPT_SH += git-difftool--helper.sh
405 406 407 408 409 410 411 412 413 414 415 416 417 418 419
SCRIPT_SH += git-filter-branch.sh
SCRIPT_SH += git-lost-found.sh
SCRIPT_SH += git-merge-octopus.sh
SCRIPT_SH += git-merge-one-file.sh
SCRIPT_SH += git-merge-resolve.sh
SCRIPT_SH += git-mergetool.sh
SCRIPT_SH += git-pull.sh
SCRIPT_SH += git-quiltimport.sh
SCRIPT_SH += git-rebase.sh
SCRIPT_SH += git-repack.sh
SCRIPT_SH += git-request-pull.sh
SCRIPT_SH += git-stash.sh
SCRIPT_SH += git-submodule.sh
SCRIPT_SH += git-web--browse.sh

420 421
SCRIPT_LIB += git-mergetool--lib
SCRIPT_LIB += git-parse-remote
422 423 424
SCRIPT_LIB += git-rebase--am
SCRIPT_LIB += git-rebase--interactive
SCRIPT_LIB += git-rebase--merge
425
SCRIPT_LIB += git-sh-setup
426
SCRIPT_LIB += git-sh-i18n
427

428
SCRIPT_PERL += git-add--interactive.perl
429
SCRIPT_PERL += git-difftool.perl
430 431 432 433 434 435 436
SCRIPT_PERL += git-archimport.perl
SCRIPT_PERL += git-cvsexportcommit.perl
SCRIPT_PERL += git-cvsimport.perl
SCRIPT_PERL += git-cvsserver.perl
SCRIPT_PERL += git-relink.perl
SCRIPT_PERL += git-send-email.perl
SCRIPT_PERL += git-svn.perl
437

438 439
SCRIPT_PYTHON += git-remote-testgit.py

440 441
SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
	  $(patsubst %.perl,%,$(SCRIPT_PERL)) \
442
	  $(patsubst %.py,%,$(SCRIPT_PYTHON)) \
443
	  git-instaweb
444

445 446
ETAGS_TARGET = TAGS

447 448
# Empty...
EXTRA_PROGRAMS =
449

450 451
# ... and all the rest that could be moved out of bindir to gitexecdir
PROGRAMS += $(EXTRA_PROGRAMS)
452

453
PROGRAM_OBJS += daemon.o
454 455 456 457 458 459
PROGRAM_OBJS += fast-import.o
PROGRAM_OBJS += imap-send.o
PROGRAM_OBJS += shell.o
PROGRAM_OBJS += show-index.o
PROGRAM_OBJS += upload-pack.o
PROGRAM_OBJS += http-backend.o
460
PROGRAM_OBJS += sh-i18n--envsubst.o
J
Jeff King 已提交
461
PROGRAM_OBJS += credential-store.o
462

463 464 465
# Binary suffix, set to .exe for Windows builds
X =

466
PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS))
467

468
TEST_PROGRAMS_NEED_X += test-chmtime
J
Jeff King 已提交
469
TEST_PROGRAMS_NEED_X += test-credential
470 471 472 473
TEST_PROGRAMS_NEED_X += test-ctype
TEST_PROGRAMS_NEED_X += test-date
TEST_PROGRAMS_NEED_X += test-delta
TEST_PROGRAMS_NEED_X += test-dump-cache-tree
T
Thomas Rast 已提交
474
TEST_PROGRAMS_NEED_X += test-scrap-cache-tree
475
TEST_PROGRAMS_NEED_X += test-genrandom
J
Jeff King 已提交
476
TEST_PROGRAMS_NEED_X += test-index-version
D
David Barr 已提交
477
TEST_PROGRAMS_NEED_X += test-line-buffer
478
TEST_PROGRAMS_NEED_X += test-match-trees
J
Jeff King 已提交
479
TEST_PROGRAMS_NEED_X += test-mktemp
480 481 482 483 484
TEST_PROGRAMS_NEED_X += test-parse-options
TEST_PROGRAMS_NEED_X += test-path-utils
TEST_PROGRAMS_NEED_X += test-run-command
TEST_PROGRAMS_NEED_X += test-sha1
TEST_PROGRAMS_NEED_X += test-sigchain
485
TEST_PROGRAMS_NEED_X += test-subprocess
D
David Barr 已提交
486
TEST_PROGRAMS_NEED_X += test-svn-fe
487

J
Junio C Hamano 已提交
488
TEST_PROGRAMS = $(patsubst %,%$X,$(TEST_PROGRAMS_NEED_X))
489

J
Junio C Hamano 已提交
490
# List built-in command $C whose implementation cmd_$C() is not in
491 492
# builtin/$C.o but is linked in as part of some other command.
BUILT_INS += $(patsubst builtin/%.o,git-%$X,$(BUILTIN_OBJS))
493 494

BUILT_INS += git-cherry$X
495
BUILT_INS += git-cherry-pick$X
496 497 498 499 500 501 502 503
BUILT_INS += git-format-patch$X
BUILT_INS += git-fsck-objects$X
BUILT_INS += git-get-tar-commit-id$X
BUILT_INS += git-init$X
BUILT_INS += git-merge-subtree$X
BUILT_INS += git-peek-remote$X
BUILT_INS += git-repo-config$X
BUILT_INS += git-show$X
J
Junio C Hamano 已提交
504
BUILT_INS += git-stage$X
505 506
BUILT_INS += git-status$X
BUILT_INS += git-whatchanged$X
J
Junio C Hamano 已提交
507

508 509
# what 'all' will build and 'install' will install in gitexecdir,
# excluding programs for built-in commands
J
Junio C Hamano 已提交
510
ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
511

E
Eygene Ryabinkin 已提交
512
# what 'all' will build but not install in gitexecdir
513
OTHER_PROGRAMS = git$X
E
Eygene Ryabinkin 已提交
514

515 516 517 518 519 520 521 522 523
# what test wrappers are needed and 'install' will install, in bindir
BINDIR_PROGRAMS_NEED_X += git
BINDIR_PROGRAMS_NEED_X += git-upload-pack
BINDIR_PROGRAMS_NEED_X += git-receive-pack
BINDIR_PROGRAMS_NEED_X += git-upload-archive
BINDIR_PROGRAMS_NEED_X += git-shell

BINDIR_PROGRAMS_NO_X += git-cvsserver

524 525 526 527 528 529 530
# 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
531 532 533
ifndef PYTHON_PATH
	PYTHON_PATH = /usr/bin/python
endif
534

L
Luben Tuikov 已提交
535
export PERL_PATH
536
export PYTHON_PATH
L
Luben Tuikov 已提交
537

L
Linus Torvalds 已提交
538
LIB_FILE=libgit.a
539
XDIFF_LIB=xdiff/lib.a
J
Jonathan Nieder 已提交
540
VCSSVN_LIB=vcs-svn/lib.a
J
Junio C Hamano 已提交
541

542
LIB_H += advice.h
543
LIB_H += archive.h
544
LIB_H += argv-array.h
545 546 547
LIB_H += attr.h
LIB_H += blob.h
LIB_H += builtin.h
548
LIB_H += bulk-checkin.h
549 550
LIB_H += cache.h
LIB_H += cache-tree.h
551
LIB_H += color.h
552
LIB_H += commit.h
553
LIB_H += compat/bswap.h
554
LIB_H += compat/cygwin.h
555
LIB_H += compat/mingw.h
556
LIB_H += compat/obstack.h
J
Jeff King 已提交
557
LIB_H += compat/terminal.h
558
LIB_H += compat/win32/pthread.h
M
Mike Pape 已提交
559
LIB_H += compat/win32/syslog.h
560
LIB_H += compat/win32/poll.h
E
Erik Faye-Lund 已提交
561
LIB_H += compat/win32/dirent.h
562
LIB_H += connected.h
563
LIB_H += convert.h
J
Jeff King 已提交
564
LIB_H += credential.h
565 566 567 568 569 570
LIB_H += csum-file.h
LIB_H += decorate.h
LIB_H += delta.h
LIB_H += diffcore.h
LIB_H += diff.h
LIB_H += dir.h
571
LIB_H += exec_cmd.h
572
LIB_H += fmt-merge-msg.h
573
LIB_H += fsck.h
574
LIB_H += gettext.h
575
LIB_H += git-compat-util.h
576
LIB_H += gpg-interface.h
A
Adam Simpkins 已提交
577
LIB_H += graph.h
578 579
LIB_H += grep.h
LIB_H += hash.h
580
LIB_H += help.h
F
Fredrik Kuivinen 已提交
581
LIB_H += kwset.h
582
LIB_H += levenshtein.h
583 584 585 586
LIB_H += list-objects.h
LIB_H += ll-merge.h
LIB_H += log-tree.h
LIB_H += mailmap.h
587
LIB_H += merge-file.h
588
LIB_H += merge-recursive.h
J
Johannes Schindelin 已提交
589
LIB_H += notes.h
J
Jeff King 已提交
590
LIB_H += notes-cache.h
591
LIB_H += notes-merge.h
592 593
LIB_H += object.h
LIB_H += pack.h
594
LIB_H += pack-refs.h
595 596 597 598 599
LIB_H += pack-revindex.h
LIB_H += parse-options.h
LIB_H += patch-ids.h
LIB_H += pkt-line.h
LIB_H += progress.h
600
LIB_H += prompt.h
601 602 603 604
LIB_H += quote.h
LIB_H += reflog-walk.h
LIB_H += refs.h
LIB_H += remote.h
605
LIB_H += rerere.h
606
LIB_H += resolve-undo.h
607 608
LIB_H += revision.h
LIB_H += run-command.h
609
LIB_H += sequencer.h
610
LIB_H += sha1-array.h
611
LIB_H += sha1-lookup.h
612
LIB_H += sideband.h
613
LIB_H += sigchain.h
614
LIB_H += strbuf.h
615
LIB_H += streaming.h
616
LIB_H += string-list.h
617
LIB_H += submodule.h
618 619 620 621 622
LIB_H += tag.h
LIB_H += transport.h
LIB_H += tree.h
LIB_H += tree-walk.h
LIB_H += unpack-trees.h
623
LIB_H += userdiff.h
624
LIB_H += utf8.h
625 626
LIB_H += xdiff-interface.h
LIB_H += xdiff/xdiff.h
627

628
LIB_OBJS += abspath.o
629
LIB_OBJS += advice.o
630 631 632 633 634
LIB_OBJS += alias.o
LIB_OBJS += alloc.o
LIB_OBJS += archive.o
LIB_OBJS += archive-tar.o
LIB_OBJS += archive-zip.o
635
LIB_OBJS += argv-array.o
636 637
LIB_OBJS += attr.o
LIB_OBJS += base85.o
638
LIB_OBJS += bisect.o
639 640
LIB_OBJS += blob.o
LIB_OBJS += branch.o
641
LIB_OBJS += bulk-checkin.o
642 643 644 645 646
LIB_OBJS += bundle.o
LIB_OBJS += cache-tree.o
LIB_OBJS += color.o
LIB_OBJS += combine-diff.o
LIB_OBJS += commit.o
647
LIB_OBJS += compat/obstack.o
J
Jeff King 已提交
648
LIB_OBJS += compat/terminal.o
649 650
LIB_OBJS += config.o
LIB_OBJS += connect.o
651
LIB_OBJS += connected.o
652 653
LIB_OBJS += convert.o
LIB_OBJS += copy.o
J
Jeff King 已提交
654
LIB_OBJS += credential.o
655 656 657 658 659 660 661 662 663 664 665
LIB_OBJS += csum-file.o
LIB_OBJS += ctype.o
LIB_OBJS += date.o
LIB_OBJS += decorate.o
LIB_OBJS += diffcore-break.o
LIB_OBJS += diffcore-delta.o
LIB_OBJS += diffcore-order.o
LIB_OBJS += diffcore-pickaxe.o
LIB_OBJS += diffcore-rename.o
LIB_OBJS += diff-delta.o
LIB_OBJS += diff-lib.o
666
LIB_OBJS += diff-no-index.o
667 668
LIB_OBJS += diff.o
LIB_OBJS += dir.o
669
LIB_OBJS += editor.o
670 671 672 673
LIB_OBJS += entry.o
LIB_OBJS += environment.o
LIB_OBJS += exec_cmd.o
LIB_OBJS += fsck.o
674
LIB_OBJS += gpg-interface.o
675
LIB_OBJS += gettext.o
A
Adam Simpkins 已提交
676
LIB_OBJS += graph.o
677 678 679
LIB_OBJS += grep.o
LIB_OBJS += hash.o
LIB_OBJS += help.o
L
Linus Torvalds 已提交
680
LIB_OBJS += hex.o
681
LIB_OBJS += ident.o
F
Fredrik Kuivinen 已提交
682
LIB_OBJS += kwset.o
683
LIB_OBJS += levenshtein.o
684 685 686 687 688 689 690
LIB_OBJS += list-objects.o
LIB_OBJS += ll-merge.o
LIB_OBJS += lockfile.o
LIB_OBJS += log-tree.o
LIB_OBJS += mailmap.o
LIB_OBJS += match-trees.o
LIB_OBJS += merge-file.o
691
LIB_OBJS += merge-recursive.o
692
LIB_OBJS += name-hash.o
J
Johannes Schindelin 已提交
693
LIB_OBJS += notes.o
J
Jeff King 已提交
694
LIB_OBJS += notes-cache.o
695
LIB_OBJS += notes-merge.o
696 697
LIB_OBJS += object.o
LIB_OBJS += pack-check.o
698
LIB_OBJS += pack-refs.o
699 700 701 702
LIB_OBJS += pack-revindex.o
LIB_OBJS += pack-write.o
LIB_OBJS += pager.o
LIB_OBJS += parse-options.o
703
LIB_OBJS += parse-options-cb.o
704 705 706 707
LIB_OBJS += patch-delta.o
LIB_OBJS += patch-ids.o
LIB_OBJS += path.o
LIB_OBJS += pkt-line.o
708
LIB_OBJS += preload-index.o
709 710
LIB_OBJS += pretty.o
LIB_OBJS += progress.o
711
LIB_OBJS += prompt.o
712 713 714 715 716 717
LIB_OBJS += quote.o
LIB_OBJS += reachable.o
LIB_OBJS += read-cache.o
LIB_OBJS += reflog-walk.o
LIB_OBJS += refs.o
LIB_OBJS += remote.o
718
LIB_OBJS += replace_object.o
719
LIB_OBJS += rerere.o
720
LIB_OBJS += resolve-undo.o
721 722 723 724
LIB_OBJS += revision.o
LIB_OBJS += run-command.o
LIB_OBJS += server-info.o
LIB_OBJS += setup.o
725
LIB_OBJS += sequencer.o
726
LIB_OBJS += sha1-array.o
727
LIB_OBJS += sha1-lookup.o
728
LIB_OBJS += sha1_file.o
729 730 731
LIB_OBJS += sha1_name.o
LIB_OBJS += shallow.o
LIB_OBJS += sideband.o
732
LIB_OBJS += sigchain.o
733
LIB_OBJS += strbuf.o
734
LIB_OBJS += streaming.o
735
LIB_OBJS += string-list.o
736
LIB_OBJS += submodule.o
737 738 739 740
LIB_OBJS += symlinks.o
LIB_OBJS += tag.o
LIB_OBJS += trace.o
LIB_OBJS += transport.o
741
LIB_OBJS += transport-helper.o
742 743 744 745
LIB_OBJS += tree-diff.o
LIB_OBJS += tree.o
LIB_OBJS += tree-walk.o
LIB_OBJS += unpack-trees.o
J
Jeff King 已提交
746
LIB_OBJS += url.o
747
LIB_OBJS += usage.o
748
LIB_OBJS += userdiff.o
749 750
LIB_OBJS += utf8.o
LIB_OBJS += walker.o
751
LIB_OBJS += wrapper.o
752 753 754 755
LIB_OBJS += write_or_die.o
LIB_OBJS += ws.o
LIB_OBJS += wt-status.o
LIB_OBJS += xdiff-interface.o
756
LIB_OBJS += zlib.o
757

758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810
BUILTIN_OBJS += builtin/add.o
BUILTIN_OBJS += builtin/annotate.o
BUILTIN_OBJS += builtin/apply.o
BUILTIN_OBJS += builtin/archive.o
BUILTIN_OBJS += builtin/bisect--helper.o
BUILTIN_OBJS += builtin/blame.o
BUILTIN_OBJS += builtin/branch.o
BUILTIN_OBJS += builtin/bundle.o
BUILTIN_OBJS += builtin/cat-file.o
BUILTIN_OBJS += builtin/check-attr.o
BUILTIN_OBJS += builtin/check-ref-format.o
BUILTIN_OBJS += builtin/checkout-index.o
BUILTIN_OBJS += builtin/checkout.o
BUILTIN_OBJS += builtin/clean.o
BUILTIN_OBJS += builtin/clone.o
BUILTIN_OBJS += builtin/commit-tree.o
BUILTIN_OBJS += builtin/commit.o
BUILTIN_OBJS += builtin/config.o
BUILTIN_OBJS += builtin/count-objects.o
BUILTIN_OBJS += builtin/describe.o
BUILTIN_OBJS += builtin/diff-files.o
BUILTIN_OBJS += builtin/diff-index.o
BUILTIN_OBJS += builtin/diff-tree.o
BUILTIN_OBJS += builtin/diff.o
BUILTIN_OBJS += builtin/fast-export.o
BUILTIN_OBJS += builtin/fetch-pack.o
BUILTIN_OBJS += builtin/fetch.o
BUILTIN_OBJS += builtin/fmt-merge-msg.o
BUILTIN_OBJS += builtin/for-each-ref.o
BUILTIN_OBJS += builtin/fsck.o
BUILTIN_OBJS += builtin/gc.o
BUILTIN_OBJS += builtin/grep.o
BUILTIN_OBJS += builtin/hash-object.o
BUILTIN_OBJS += builtin/help.o
BUILTIN_OBJS += builtin/index-pack.o
BUILTIN_OBJS += builtin/init-db.o
BUILTIN_OBJS += builtin/log.o
BUILTIN_OBJS += builtin/ls-files.o
BUILTIN_OBJS += builtin/ls-remote.o
BUILTIN_OBJS += builtin/ls-tree.o
BUILTIN_OBJS += builtin/mailinfo.o
BUILTIN_OBJS += builtin/mailsplit.o
BUILTIN_OBJS += builtin/merge.o
BUILTIN_OBJS += builtin/merge-base.o
BUILTIN_OBJS += builtin/merge-file.o
BUILTIN_OBJS += builtin/merge-index.o
BUILTIN_OBJS += builtin/merge-ours.o
BUILTIN_OBJS += builtin/merge-recursive.o
BUILTIN_OBJS += builtin/merge-tree.o
BUILTIN_OBJS += builtin/mktag.o
BUILTIN_OBJS += builtin/mktree.o
BUILTIN_OBJS += builtin/mv.o
BUILTIN_OBJS += builtin/name-rev.o
J
Junio C Hamano 已提交
811
BUILTIN_OBJS += builtin/notes.o
812 813 814 815 816 817 818 819 820 821 822
BUILTIN_OBJS += builtin/pack-objects.o
BUILTIN_OBJS += builtin/pack-redundant.o
BUILTIN_OBJS += builtin/pack-refs.o
BUILTIN_OBJS += builtin/patch-id.o
BUILTIN_OBJS += builtin/prune-packed.o
BUILTIN_OBJS += builtin/prune.o
BUILTIN_OBJS += builtin/push.o
BUILTIN_OBJS += builtin/read-tree.o
BUILTIN_OBJS += builtin/receive-pack.o
BUILTIN_OBJS += builtin/reflog.o
BUILTIN_OBJS += builtin/remote.o
I
Ilari Liusvaara 已提交
823
BUILTIN_OBJS += builtin/remote-ext.o
I
Ilari Liusvaara 已提交
824
BUILTIN_OBJS += builtin/remote-fd.o
825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849
BUILTIN_OBJS += builtin/replace.o
BUILTIN_OBJS += builtin/rerere.o
BUILTIN_OBJS += builtin/reset.o
BUILTIN_OBJS += builtin/rev-list.o
BUILTIN_OBJS += builtin/rev-parse.o
BUILTIN_OBJS += builtin/revert.o
BUILTIN_OBJS += builtin/rm.o
BUILTIN_OBJS += builtin/send-pack.o
BUILTIN_OBJS += builtin/shortlog.o
BUILTIN_OBJS += builtin/show-branch.o
BUILTIN_OBJS += builtin/show-ref.o
BUILTIN_OBJS += builtin/stripspace.o
BUILTIN_OBJS += builtin/symbolic-ref.o
BUILTIN_OBJS += builtin/tag.o
BUILTIN_OBJS += builtin/tar-tree.o
BUILTIN_OBJS += builtin/unpack-file.o
BUILTIN_OBJS += builtin/unpack-objects.o
BUILTIN_OBJS += builtin/update-index.o
BUILTIN_OBJS += builtin/update-ref.o
BUILTIN_OBJS += builtin/update-server-info.o
BUILTIN_OBJS += builtin/upload-archive.o
BUILTIN_OBJS += builtin/var.o
BUILTIN_OBJS += builtin/verify-pack.o
BUILTIN_OBJS += builtin/verify-tag.o
BUILTIN_OBJS += builtin/write-tree.o
850

851
GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
852
EXTLIBS =
853

854 855 856
#
# Platform specific tweaks
#
857 858 859 860 861

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

862 863 864 865 866 867 868
ifeq ($(uname_S),OSF1)
	# Need this for u_short definitions et al
	BASIC_CFLAGS += -D_OSF_SOURCE
	SOCKLEN_T = int
	NO_STRTOULL = YesPlease
	NO_NSEC = YesPlease
endif
869 870
ifeq ($(uname_S),Linux)
	NO_STRLCPY = YesPlease
871
	NO_MKSTEMPS = YesPlease
872
	HAVE_PATHS_H = YesPlease
873
	LIBC_CONTAINS_LIBINTL = YesPlease
J
Jeff King 已提交
874
	HAVE_DEV_TTY = YesPlease
875
endif
G
Gerrit Pape 已提交
876 877
ifeq ($(uname_S),GNU/kFreeBSD)
	NO_STRLCPY = YesPlease
878
	NO_MKSTEMPS = YesPlease
879
	HAVE_PATHS_H = YesPlease
880
	DIR_HAS_BSD_GROUP_SEMANTICS = YesPlease
881
	LIBC_CONTAINS_LIBINTL = YesPlease
G
Gerrit Pape 已提交
882
endif
B
Boyd Lynn Gerber 已提交
883 884 885 886 887 888 889 890 891
ifeq ($(uname_S),UnixWare)
	CC = cc
	NEEDS_SOCKET = YesPlease
	NEEDS_NSL = YesPlease
	NEEDS_SSL_WITH_CRYPTO = YesPlease
	NEEDS_LIBICONV = YesPlease
	SHELL_PATH = /usr/local/bin/bash
	NO_IPV6 = YesPlease
	NO_HSTRERROR = YesPlease
892
	NO_MKSTEMPS = YesPlease
B
Boyd Lynn Gerber 已提交
893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915
	BASIC_CFLAGS += -Kthread
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
	INSTALL = ginstall
	TAR = gtar
	NO_STRCASESTR = YesPlease
	NO_MEMMEM = YesPlease
endif
ifeq ($(uname_S),SCO_SV)
	ifeq ($(uname_R),3.2)
		CFLAGS = -O2
	endif
	ifeq ($(uname_R),5)
		CC = cc
		BASIC_CFLAGS += -Kthread
	endif
	NEEDS_SOCKET = YesPlease
	NEEDS_NSL = YesPlease
	NEEDS_SSL_WITH_CRYPTO = YesPlease
	NEEDS_LIBICONV = YesPlease
	SHELL_PATH = /usr/bin/bash
	NO_IPV6 = YesPlease
	NO_HSTRERROR = YesPlease
916
	NO_MKSTEMPS = YesPlease
B
Boyd Lynn Gerber 已提交
917 918 919 920 921 922 923
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
	NO_STRCASESTR = YesPlease
	NO_MEMMEM = YesPlease
	INSTALL = ginstall
	TAR = gtar
endif
924
ifeq ($(uname_S),Darwin)
925
	NEEDS_CRYPTO_WITH_SSL = YesPlease
926 927
	NEEDS_SSL_WITH_CRYPTO = YesPlease
	NEEDS_LIBICONV = YesPlease
928
	ifeq ($(shell expr "$(uname_R)" : '[15678]\.'),2)
929 930
		OLD_ICONV = UnfortunatelyYes
	endif
931 932 933
	ifeq ($(shell expr "$(uname_R)" : '[15]\.'),2)
		NO_STRLCPY = YesPlease
	endif
934
	NO_MEMMEM = YesPlease
935
	USE_ST_TIMESPEC = YesPlease
J
Jeff King 已提交
936
	HAVE_DEV_TTY = YesPlease
937
endif
938
ifeq ($(uname_S),SunOS)
939
	NEEDS_SOCKET = YesPlease
940
	NEEDS_NSL = YesPlease
941
	SHELL_PATH = /bin/bash
942
	SANE_TOOL_PATH = /usr/xpg6/bin:/usr/xpg4/bin
943
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
944
	NO_MEMMEM = YesPlease
945
	NO_MKDTEMP = YesPlease
946
	NO_MKSTEMPS = YesPlease
947
	NO_REGEX = YesPlease
948
	NO_FNMATCH_CASEFOLD = YesPlease
949
	NO_MSGFMT_EXTENDED_OPTIONS = YesPlease
950 951 952 953 954 955 956 957 958 959 960
	ifeq ($(uname_R),5.6)
		SOCKLEN_T = int
		NO_HSTRERROR = YesPlease
		NO_IPV6 = YesPlease
		NO_SOCKADDR_STORAGE = YesPlease
		NO_UNSETENV = YesPlease
		NO_SETENV = YesPlease
		NO_STRLCPY = YesPlease
		NO_STRTOUMAX = YesPlease
		GIT_TEST_CMP = cmp
	endif
961 962 963 964 965 966 967 968
	ifeq ($(uname_R),5.7)
		NEEDS_RESOLV = YesPlease
		NO_IPV6 = YesPlease
		NO_SOCKADDR_STORAGE = YesPlease
		NO_UNSETENV = YesPlease
		NO_SETENV = YesPlease
		NO_STRLCPY = YesPlease
		NO_STRTOUMAX = YesPlease
969
		GIT_TEST_CMP = cmp
970
	endif
J
Jason Riedy 已提交
971
	ifeq ($(uname_R),5.8)
J
Jason Riedy 已提交
972
		NO_UNSETENV = YesPlease
J
Jason Riedy 已提交
973
		NO_SETENV = YesPlease
974
		NO_STRTOUMAX = YesPlease
975
		GIT_TEST_CMP = cmp
J
Jason Riedy 已提交
976
	endif
977 978 979
	ifeq ($(uname_R),5.9)
		NO_UNSETENV = YesPlease
		NO_SETENV = YesPlease
980
		NO_STRTOUMAX = YesPlease
981
		GIT_TEST_CMP = cmp
982
	endif
983
	INSTALL = /usr/ucb/install
984
	TAR = gtar
985
	BASIC_CFLAGS += -D__EXTENSIONS__ -D__sun__ -DHAVE_ALLOCA_H
986
endif
987
ifeq ($(uname_O),Cygwin)
988
	ifeq ($(shell expr "$(uname_R)" : '1\.[1-6]\.'),4)
989 990 991 992 993 994 995 996 997
		NO_D_TYPE_IN_DIRENT = YesPlease
		NO_D_INO_IN_DIRENT = YesPlease
		NO_STRCASESTR = YesPlease
		NO_MEMMEM = YesPlease
		NO_MKSTEMPS = YesPlease
		NO_SYMLINK_HEAD = YesPlease
		NO_IPV6 = YesPlease
		OLD_ICONV = UnfortunatelyYes
	endif
H
hpa 已提交
998
	NEEDS_LIBICONV = YesPlease
999
	NO_FAST_WORKING_DIRECTORY = UnfortunatelyYes
1000
	NO_TRUSTABLE_FILEMODE = UnfortunatelyYes
1001
	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
1002 1003
	# There are conflicting reports about this.
	# On some boxes NO_MMAP is needed, and not so elsewhere.
J
Junio C Hamano 已提交
1004 1005
	# Try commenting this out if you suspect MMAP is more efficient
	NO_MMAP = YesPlease
P
Peter Anvin 已提交
1006
	X = .exe
1007 1008
	COMPAT_OBJS += compat/cygwin.o
	UNRELIABLE_FSTAT = UnfortunatelyYes
1009
	SPARSE_FLAGS = -isystem /usr/include/w32api -Wno-one-bit-signed-bitfield
1010
endif
A
Alecs King 已提交
1011 1012
ifeq ($(uname_S),FreeBSD)
	NEEDS_LIBICONV = YesPlease
1013
	OLD_ICONV = YesPlease
1014
	NO_MEMMEM = YesPlease
1015 1016
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
1017
	DIR_HAS_BSD_GROUP_SEMANTICS = YesPlease
1018
	USE_ST_TIMESPEC = YesPlease
1019
	ifeq ($(shell expr "$(uname_R)" : '4\.'),2)
1020
		PTHREAD_LIBS = -pthread
1021 1022 1023
		NO_UINTMAX_T = YesPlease
		NO_STRTOUMAX = YesPlease
	endif
1024
	PYTHON_PATH = /usr/local/bin/python
1025
	HAVE_PATHS_H = YesPlease
A
Alecs King 已提交
1026
endif
1027
ifeq ($(uname_S),OpenBSD)
1028
	NO_STRCASESTR = YesPlease
R
René Scharfe 已提交
1029
	NO_MEMMEM = YesPlease
T
Tony Kemp 已提交
1030
	USE_ST_TIMESPEC = YesPlease
H
Han Boetes 已提交
1031
	NEEDS_LIBICONV = YesPlease
1032 1033
	BASIC_CFLAGS += -I/usr/local/include
	BASIC_LDFLAGS += -L/usr/local/lib
1034
	HAVE_PATHS_H = YesPlease
J
Junio C Hamano 已提交
1035 1036
endif
ifeq ($(uname_S),NetBSD)
1037 1038 1039
	ifeq ($(shell expr "$(uname_R)" : '[01]\.'),2)
		NEEDS_LIBICONV = YesPlease
	endif
1040
	BASIC_CFLAGS += -I/usr/pkg/include
1041
	BASIC_LDFLAGS += -L/usr/pkg/lib $(CC_LD_DYNPATH)/usr/pkg/lib
P
Patrick Welche 已提交
1042
	USE_ST_TIMESPEC = YesPlease
1043
	NO_MKSTEMPS = YesPlease
1044
	HAVE_PATHS_H = YesPlease
H
Han Boetes 已提交
1045
endif
1046
ifeq ($(uname_S),AIX)
1047
	DEFAULT_PAGER = more
1048
	NO_STRCASESTR=YesPlease
R
René Scharfe 已提交
1049
	NO_MEMMEM = YesPlease
1050
	NO_MKDTEMP = YesPlease
1051
	NO_MKSTEMPS = YesPlease
1052
	NO_STRLCPY = YesPlease
1053
	NO_NSEC = YesPlease
1054 1055
	FREAD_READS_DIRECTORIES = UnfortunatelyYes
	INTERNAL_QSORT = UnfortunatelyYes
1056
	NEEDS_LIBICONV=YesPlease
1057
	BASIC_CFLAGS += -D_LARGE_FILES
1058
	ifeq ($(shell expr "$(uname_V)" : '[1234]'),1)
J
Junio C Hamano 已提交
1059
		NO_PTHREADS = YesPlease
1060 1061
	else
		PTHREAD_LIBS = -lpthread
J
Junio C Hamano 已提交
1062
	endif
1063 1064
	ifeq ($(shell expr "$(uname_V).$(uname_R)" : '5\.1'),3)
		INLINE=''
J
Junio C Hamano 已提交
1065
	endif
1066
	GIT_TEST_CMP = cmp
1067
endif
T
Thomas Schwinge 已提交
1068 1069 1070
ifeq ($(uname_S),GNU)
	# GNU/Hurd
	NO_STRLCPY=YesPlease
1071
	NO_MKSTEMPS = YesPlease
1072
	HAVE_PATHS_H = YesPlease
1073
	LIBC_CONTAINS_LIBINTL = YesPlease
T
Thomas Schwinge 已提交
1074
endif
1075 1076 1077 1078 1079 1080 1081
ifeq ($(uname_S),IRIX)
	NO_SETENV = YesPlease
	NO_UNSETENV = YesPlease
	NO_STRCASESTR = YesPlease
	NO_MEMMEM = YesPlease
	NO_MKSTEMPS = YesPlease
	NO_MKDTEMP = YesPlease
1082 1083 1084 1085 1086 1087
	# When compiled with the MIPSpro 7.4.4m compiler, and without pthreads
	# (i.e. NO_PTHREADS is set), and _with_ MMAP (i.e. NO_MMAP is not set),
	# git dies with a segmentation fault when trying to access the first
	# entry of a reflog.  The conservative choice is made to always set
	# NO_MMAP.  If you suspect that your compiler is not affected by this
	# issue, comment out the NO_MMAP statement.
1088
	NO_MMAP = YesPlease
1089
	NO_REGEX = YesPlease
1090
	NO_FNMATCH_CASEFOLD = YesPlease
1091 1092 1093 1094
	SNPRINTF_RETURNS_BOGUS = YesPlease
	SHELL_PATH = /usr/gnu/bin/bash
	NEEDS_LIBGEN = YesPlease
endif
J
Johannes Schindelin 已提交
1095 1096
ifeq ($(uname_S),IRIX64)
	NO_SETENV=YesPlease
B
Brandon Casey 已提交
1097
	NO_UNSETENV = YesPlease
J
Johannes Schindelin 已提交
1098
	NO_STRCASESTR=YesPlease
R
René Scharfe 已提交
1099
	NO_MEMMEM = YesPlease
1100
	NO_MKSTEMPS = YesPlease
B
Brandon Casey 已提交
1101
	NO_MKDTEMP = YesPlease
1102 1103 1104 1105 1106 1107
	# When compiled with the MIPSpro 7.4.4m compiler, and without pthreads
	# (i.e. NO_PTHREADS is set), and _with_ MMAP (i.e. NO_MMAP is not set),
	# git dies with a segmentation fault when trying to access the first
	# entry of a reflog.  The conservative choice is made to always set
	# NO_MMAP.  If you suspect that your compiler is not affected by this
	# issue, comment out the NO_MMAP statement.
B
Brandon Casey 已提交
1108
	NO_MMAP = YesPlease
1109
	NO_REGEX = YesPlease
1110
	NO_FNMATCH_CASEFOLD = YesPlease
B
Brandon Casey 已提交
1111
	SNPRINTF_RETURNS_BOGUS = YesPlease
J
Johannes Schindelin 已提交
1112
	SHELL_PATH=/usr/gnu/bin/bash
B
Brandon Casey 已提交
1113
	NEEDS_LIBGEN = YesPlease
J
Johannes Schindelin 已提交
1114
endif
1115
ifeq ($(uname_S),HP-UX)
1116
	INLINE = __inline
1117 1118 1119 1120
	NO_IPV6=YesPlease
	NO_SETENV=YesPlease
	NO_STRCASESTR=YesPlease
	NO_MEMMEM = YesPlease
1121
	NO_MKSTEMPS = YesPlease
1122 1123 1124 1125 1126
	NO_STRLCPY = YesPlease
	NO_MKDTEMP = YesPlease
	NO_UNSETENV = YesPlease
	NO_HSTRERROR = YesPlease
	NO_SYS_SELECT_H = YesPlease
1127
	NO_FNMATCH_CASEFOLD = YesPlease
1128
	SNPRINTF_RETURNS_BOGUS = YesPlease
1129 1130 1131 1132
	NO_NSEC = YesPlease
	ifeq ($(uname_R),B.11.00)
		NO_INET_NTOP = YesPlease
		NO_INET_PTON = YesPlease
1133 1134 1135 1136 1137 1138 1139 1140
	endif
	ifeq ($(uname_R),B.10.20)
		# Override HP-UX 11.x setting:
		INLINE =
		SOCKLEN_T = size_t
		NO_PREAD = YesPlease
		NO_INET_NTOP = YesPlease
		NO_INET_PTON = YesPlease
1141
	endif
1142
	GIT_TEST_CMP = cmp
1143
endif
1144
ifeq ($(uname_S),Windows)
1145
	GIT_VERSION := $(GIT_VERSION).MSVC
M
Marius Storm-Olsen 已提交
1146 1147
	pathsep = ;
	NO_PREAD = YesPlease
1148
	NEEDS_CRYPTO_WITH_SSL = YesPlease
M
Marius Storm-Olsen 已提交
1149
	NO_LIBGEN_H = YesPlease
1150
	NO_SYS_POLL_H = YesPlease
M
Marius Storm-Olsen 已提交
1151 1152
	NO_SYMLINK_HEAD = YesPlease
	NO_IPV6 = YesPlease
1153
	NO_UNIX_SOCKETS = YesPlease
M
Marius Storm-Olsen 已提交
1154 1155 1156 1157
	NO_SETENV = YesPlease
	NO_UNSETENV = YesPlease
	NO_STRCASESTR = YesPlease
	NO_STRLCPY = YesPlease
J
Jonathan Nieder 已提交
1158
	NO_STRTOK_R = YesPlease
1159
	NO_FNMATCH = YesPlease
M
Marius Storm-Olsen 已提交
1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178
	NO_MEMMEM = YesPlease
	# NEEDS_LIBICONV = YesPlease
	NO_ICONV = YesPlease
	NO_STRTOUMAX = YesPlease
	NO_STRTOULL = YesPlease
	NO_MKDTEMP = YesPlease
	NO_MKSTEMPS = YesPlease
	SNPRINTF_RETURNS_BOGUS = YesPlease
	NO_SVN_TESTS = YesPlease
	NO_PERL_MAKEMAKER = YesPlease
	RUNTIME_PREFIX = YesPlease
	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
	NO_NSEC = YesPlease
	USE_WIN32_MMAP = YesPlease
	# USE_NED_ALLOCATOR = YesPlease
	UNRELIABLE_FSTAT = UnfortunatelyYes
	OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
	NO_REGEX = YesPlease
	NO_CURL = YesPlease
E
Erik Faye-Lund 已提交
1179
	NO_PYTHON = YesPlease
J
Johannes Sixt 已提交
1180
	BLK_SHA1 = YesPlease
1181
	NO_POSIX_GOODIES = UnfortunatelyYes
1182
	NATIVE_CRLF = YesPlease
M
Marius Storm-Olsen 已提交
1183 1184 1185 1186

	CC = compat/vcbuild/scripts/clink.pl
	AR = compat/vcbuild/scripts/lib.pl
	CFLAGS =
R
Ramsay Jones 已提交
1187
	BASIC_CFLAGS = -nologo -I. -I../zlib -Icompat/vcbuild -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE
J
Junio C Hamano 已提交
1188
	COMPAT_OBJS = compat/msvc.o compat/winansi.o \
E
Erik Faye-Lund 已提交
1189
		compat/win32/pthread.o compat/win32/syslog.o \
1190
		compat/win32/poll.o compat/win32/dirent.o
1191
	COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DNOGDI -DHAVE_STRING_H -DHAVE_ALLOCA_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
M
Marius Storm-Olsen 已提交
1192
	BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -SUBSYSTEM:CONSOLE -NODEFAULTLIB:MSVCRT.lib
1193
	EXTLIBS = user32.lib advapi32.lib shell32.lib wininet.lib ws2_32.lib
1194
	PTHREAD_LIBS =
M
Marius Storm-Olsen 已提交
1195 1196 1197 1198 1199 1200 1201 1202 1203
	lib =
ifndef DEBUG
	BASIC_CFLAGS += -GL -Os -MT
	BASIC_LDFLAGS += -LTCG
	AR += -LTCG
else
	BASIC_CFLAGS += -Zi -MTd
endif
	X = .exe
1204
endif
1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215
ifeq ($(uname_S),Interix)
	NO_INITGROUPS = YesPlease
	NO_IPV6 = YesPlease
	NO_MEMMEM = YesPlease
	NO_MKDTEMP = YesPlease
	NO_STRTOUMAX = YesPlease
	NO_NSEC = YesPlease
	NO_MKSTEMPS = YesPlease
	ifeq ($(uname_R),3.5)
		NO_INET_NTOP = YesPlease
		NO_INET_PTON = YesPlease
1216 1217
		NO_SOCKADDR_STORAGE = YesPlease
		NO_FNMATCH_CASEFOLD = YesPlease
1218 1219 1220 1221
	endif
	ifeq ($(uname_R),5.2)
		NO_INET_NTOP = YesPlease
		NO_INET_PTON = YesPlease
1222 1223
		NO_SOCKADDR_STORAGE = YesPlease
		NO_FNMATCH_CASEFOLD = YesPlease
1224 1225
	endif
endif
1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239
ifeq ($(uname_S),Minix)
	NO_IPV6 = YesPlease
	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
	NO_NSEC = YesPlease
	NEEDS_LIBGEN =
	NEEDS_CRYPTO_WITH_SSL = YesPlease
	NEEDS_IDN_WITH_CURL = YesPlease
	NEEDS_SSL_WITH_CURL = YesPlease
	NEEDS_RESOLV =
	NO_HSTRERROR = YesPlease
	NO_MMAP = YesPlease
	NO_CURL =
	NO_EXPAT =
endif
J
Johannes Sixt 已提交
1240
ifneq (,$(findstring MINGW,$(uname_S)))
1241
	pathsep = ;
J
Johannes Sixt 已提交
1242
	NO_PREAD = YesPlease
E
Erik Faye-Lund 已提交
1243
	NEEDS_CRYPTO_WITH_SSL = YesPlease
1244
	NO_LIBGEN_H = YesPlease
1245
	NO_SYS_POLL_H = YesPlease
J
Johannes Sixt 已提交
1246
	NO_SYMLINK_HEAD = YesPlease
1247
	NO_UNIX_SOCKETS = YesPlease
J
Johannes Sixt 已提交
1248 1249 1250 1251
	NO_SETENV = YesPlease
	NO_UNSETENV = YesPlease
	NO_STRCASESTR = YesPlease
	NO_STRLCPY = YesPlease
J
Jonathan Nieder 已提交
1252
	NO_STRTOK_R = YesPlease
1253
	NO_FNMATCH = YesPlease
J
Johannes Sixt 已提交
1254 1255 1256 1257 1258
	NO_MEMMEM = YesPlease
	NEEDS_LIBICONV = YesPlease
	OLD_ICONV = YesPlease
	NO_STRTOUMAX = YesPlease
	NO_MKDTEMP = YesPlease
1259
	NO_MKSTEMPS = YesPlease
J
Johannes Sixt 已提交
1260 1261
	NO_SVN_TESTS = YesPlease
	NO_PERL_MAKEMAKER = YesPlease
1262
	RUNTIME_PREFIX = YesPlease
1263
	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
1264
	NO_NSEC = YesPlease
J
Janos Laube 已提交
1265
	USE_WIN32_MMAP = YesPlease
1266
	USE_NED_ALLOCATOR = YesPlease
1267
	UNRELIABLE_FSTAT = UnfortunatelyYes
1268
	OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
1269
	NO_REGEX = YesPlease
E
Erik Faye-Lund 已提交
1270
	NO_PYTHON = YesPlease
J
Johannes Sixt 已提交
1271
	BLK_SHA1 = YesPlease
1272
	ETAGS_TARGET = ETAGS
1273 1274 1275
	NO_INET_PTON = YesPlease
	NO_INET_NTOP = YesPlease
	NO_POSIX_GOODIES = UnfortunatelyYes
1276
	COMPAT_CFLAGS += -D__USE_MINGW_ACCESS -DNOGDI -Icompat -Icompat/win32
1277
	COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
J
Junio C Hamano 已提交
1278
	COMPAT_OBJS += compat/mingw.o compat/winansi.o \
1279
		compat/win32/pthread.o compat/win32/syslog.o \
1280
		compat/win32/poll.o compat/win32/dirent.o
J
Johannes Sixt 已提交
1281
	EXTLIBS += -lws2_32
1282
	PTHREAD_LIBS =
J
Johannes Sixt 已提交
1283
	X = .exe
1284
	SPARSE_FLAGS = -Wno-one-bit-signed-bitfield
1285 1286 1287 1288 1289 1290 1291
ifneq (,$(wildcard ../THIS_IS_MSYSGIT))
	htmldir=doc/git/html/
	prefix =
	INSTALL = /bin/install
	EXTLIBS += /mingw/lib/libz.a
	NO_R_TO_GCC_LINKER = YesPlease
	INTERNAL_QSORT = YesPlease
1292
	HAVE_LIBCHARSET_H = YesPlease
1293 1294 1295
else
	NO_CURL = YesPlease
endif
J
Johannes Sixt 已提交
1296
endif
1297

1298
-include config.mak.autogen
1299
-include config.mak
1300

1301 1302 1303 1304 1305 1306 1307 1308
ifndef sysconfdir
ifeq ($(prefix),/usr)
sysconfdir = /etc
else
sysconfdir = etc
endif
endif

1309
ifdef CHECK_HEADER_DEPENDENCIES
1310
COMPUTE_HEADER_DEPENDENCIES = no
1311
USE_COMPUTED_HEADER_DEPENDENCIES =
1312 1313
endif

1314
ifndef COMPUTE_HEADER_DEPENDENCIES
1315 1316 1317 1318
COMPUTE_HEADER_DEPENDENCIES = auto
endif

ifeq ($(COMPUTE_HEADER_DEPENDENCIES),auto)
1319 1320 1321
dep_check = $(shell $(CC) $(ALL_CFLAGS) \
	-c -MF /dev/null -MMD -MP -x c /dev/null -o /dev/null 2>&1; \
	echo $$?)
1322
ifeq ($(dep_check),0)
1323 1324 1325
override COMPUTE_HEADER_DEPENDENCIES = yes
else
override COMPUTE_HEADER_DEPENDENCIES = no
1326
endif
1327 1328
endif

1329
ifeq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
1330
USE_COMPUTED_HEADER_DEPENDENCIES = YesPlease
1331 1332 1333 1334 1335
else
ifneq ($(COMPUTE_HEADER_DEPENDENCIES),no)
$(error please set COMPUTE_HEADER_DEPENDENCIES to yes, no, or auto \
(not "$(COMPUTE_HEADER_DEPENDENCIES)"))
endif
1336 1337
endif

1338
ifdef SANE_TOOL_PATH
1339 1340
SANE_TOOL_PATH_SQ = $(subst ','\'',$(SANE_TOOL_PATH))
BROKEN_PATH_FIX = 's|^\# @@BROKEN_PATH_FIX@@$$|git_broken_path_fix $(SANE_TOOL_PATH_SQ)|'
1341 1342
PATH := $(SANE_TOOL_PATH):${PATH}
else
1343
BROKEN_PATH_FIX = '/^\# @@BROKEN_PATH_FIX@@$$/d'
1344 1345
endif

G
Gary V. Vaughan 已提交
1346 1347 1348 1349
ifneq (,$(INLINE))
	BASIC_CFLAGS += -Dinline=$(INLINE)
endif

1350 1351 1352 1353
ifneq (,$(SOCKLEN_T))
	BASIC_CFLAGS += -Dsocklen_t=$(SOCKLEN_T)
endif

1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366
ifeq ($(uname_S),Darwin)
	ifndef NO_FINK
		ifeq ($(shell test -d /sw/lib && echo y),y)
			BASIC_CFLAGS += -I/sw/include
			BASIC_LDFLAGS += -L/sw/lib
		endif
	endif
	ifndef NO_DARWIN_PORTS
		ifeq ($(shell test -d /opt/local/lib && echo y),y)
			BASIC_CFLAGS += -I/opt/local/include
			BASIC_LDFLAGS += -L/opt/local/lib
		endif
	endif
1367
	PTHREAD_LIBS =
1368 1369
endif

1370 1371 1372 1373 1374 1375 1376 1377
ifndef CC_LD_DYNPATH
	ifdef NO_R_TO_GCC_LINKER
		# Some gcc does not accept and pass -R to the linker to specify
		# the runtime dynamic library path.
		CC_LD_DYNPATH = -Wl,-rpath,
	else
		CC_LD_DYNPATH = -R
	endif
1378 1379
endif

1380 1381 1382 1383 1384
ifdef NO_LIBGEN_H
	COMPAT_CFLAGS += -DNO_LIBGEN_H
	COMPAT_OBJS += compat/basename.o
endif

M
Michał Kiedrowicz 已提交
1385 1386 1387 1388 1389 1390 1391 1392 1393
ifdef USE_LIBPCRE
	BASIC_CFLAGS += -DUSE_LIBPCRE
	ifdef LIBPCREDIR
		BASIC_CFLAGS += -I$(LIBPCREDIR)/include
		EXTLIBS += -L$(LIBPCREDIR)/$(lib) $(CC_LD_DYNPATH)$(LIBPCREDIR)/$(lib)
	endif
	EXTLIBS += -lpcre
endif

D
Daniel Barkalow 已提交
1394 1395
ifdef NO_CURL
	BASIC_CFLAGS += -DNO_CURL
1396 1397 1398
	REMOTE_CURL_PRIMARY =
	REMOTE_CURL_ALIASES =
	REMOTE_CURL_NAMES =
D
Daniel Barkalow 已提交
1399
else
1400
	ifdef CURLDIR
1401
		# Try "-Wl,-rpath=$(CURLDIR)/$(lib)" in such a case.
1402
		BASIC_CFLAGS += -I$(CURLDIR)/include
1403
		CURL_LIBCURL = -L$(CURLDIR)/$(lib) $(CC_LD_DYNPATH)$(CURLDIR)/$(lib) -lcurl
1404 1405 1406
	else
		CURL_LIBCURL = -lcurl
	endif
1407 1408 1409 1410 1411 1412 1413 1414 1415 1416
	ifdef NEEDS_SSL_WITH_CURL
		CURL_LIBCURL +=	-lssl
		ifdef NEEDS_CRYPTO_WITH_SSL
			CURL_LIBCURL += -lcrypto
		endif
	endif
	ifdef NEEDS_IDN_WITH_CURL
		CURL_LIBCURL += -lidn
	endif

1417 1418 1419
	REMOTE_CURL_PRIMARY = git-remote-http$X
	REMOTE_CURL_ALIASES = git-remote-https$X git-remote-ftp$X git-remote-ftps$X
	REMOTE_CURL_NAMES = $(REMOTE_CURL_PRIMARY) $(REMOTE_CURL_ALIASES)
1420 1421
	PROGRAM_OBJS += http-fetch.o
	PROGRAMS += $(REMOTE_CURL_NAMES)
1422 1423 1424
	curl_check := $(shell (echo 070908; curl-config --vernum) | sort -r | sed -ne 2p)
	ifeq "$(curl_check)" "070908"
		ifndef NO_EXPAT
1425
			PROGRAM_OBJS += http-push.o
1426
		endif
1427
	endif
1428
	ifndef NO_EXPAT
1429 1430 1431 1432 1433 1434
		ifdef EXPATDIR
			BASIC_CFLAGS += -I$(EXPATDIR)/include
			EXPAT_LIBEXPAT = -L$(EXPATDIR)/$(lib) $(CC_LD_DYNPATH)$(EXPATDIR)/$(lib) -lexpat
		else
			EXPAT_LIBEXPAT = -lexpat
		endif
1435
	endif
1436 1437
endif

1438 1439
ifdef ZLIB_PATH
	BASIC_CFLAGS += -I$(ZLIB_PATH)/include
1440
	EXTLIBS += -L$(ZLIB_PATH)/$(lib) $(CC_LD_DYNPATH)$(ZLIB_PATH)/$(lib)
1441 1442 1443
endif
EXTLIBS += -lz

P
Petr Baudis 已提交
1444
ifndef NO_OPENSSL
J
Junio C Hamano 已提交
1445
	OPENSSL_LIBSSL = -lssl
J
Junio C Hamano 已提交
1446
	ifdef OPENSSLDIR
1447
		BASIC_CFLAGS += -I$(OPENSSLDIR)/include
1448
		OPENSSL_LINK = -L$(OPENSSLDIR)/$(lib) $(CC_LD_DYNPATH)$(OPENSSLDIR)/$(lib)
J
Junio C Hamano 已提交
1449 1450 1451
	else
		OPENSSL_LINK =
	endif
1452
	ifdef NEEDS_CRYPTO_WITH_SSL
1453
		OPENSSL_LIBSSL += -lcrypto
1454
	endif
P
Petr Baudis 已提交
1455
else
1456
	BASIC_CFLAGS += -DNO_OPENSSL
1457
	BLK_SHA1 = 1
J
Junio C Hamano 已提交
1458
	OPENSSL_LIBSSL =
P
Petr Baudis 已提交
1459
endif
1460 1461 1462
ifdef NO_OPENSSL
	LIB_4_CRYPTO =
else
1463
ifdef NEEDS_SSL_WITH_CRYPTO
J
Junio C Hamano 已提交
1464
	LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto -lssl
1465
else
J
Junio C Hamano 已提交
1466
	LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto
1467
endif
1468
endif
1469
ifdef NEEDS_LIBICONV
J
Junio C Hamano 已提交
1470
	ifdef ICONVDIR
1471
		BASIC_CFLAGS += -I$(ICONVDIR)/include
1472
		ICONV_LINK = -L$(ICONVDIR)/$(lib) $(CC_LD_DYNPATH)$(ICONVDIR)/$(lib)
J
Junio C Hamano 已提交
1473 1474 1475
	else
		ICONV_LINK =
	endif
1476
	EXTLIBS += $(ICONV_LINK) -liconv
1477
endif
1478 1479 1480
ifdef NEEDS_LIBGEN
	EXTLIBS += -lgen
endif
1481 1482 1483 1484 1485
ifndef NO_GETTEXT
ifndef LIBC_CONTAINS_LIBINTL
	EXTLIBS += -lintl
endif
endif
1486
ifdef NEEDS_SOCKET
1487
	EXTLIBS += -lsocket
1488
endif
1489
ifdef NEEDS_NSL
1490
	EXTLIBS += -lnsl
1491
endif
1492 1493 1494
ifdef NEEDS_RESOLV
	EXTLIBS += -lresolv
endif
1495
ifdef NO_D_TYPE_IN_DIRENT
1496
	BASIC_CFLAGS += -DNO_D_TYPE_IN_DIRENT
1497
endif
1498
ifdef NO_D_INO_IN_DIRENT
1499
	BASIC_CFLAGS += -DNO_D_INO_IN_DIRENT
1500
endif
1501 1502 1503
ifdef NO_ST_BLOCKS_IN_STRUCT_STAT
	BASIC_CFLAGS += -DNO_ST_BLOCKS_IN_STRUCT_STAT
endif
1504 1505 1506
ifdef USE_NSEC
	BASIC_CFLAGS += -DUSE_NSEC
endif
1507 1508 1509
ifdef USE_ST_TIMESPEC
	BASIC_CFLAGS += -DUSE_ST_TIMESPEC
endif
J
Junio C Hamano 已提交
1510 1511 1512
ifdef NO_NORETURN
	BASIC_CFLAGS += -DNO_NORETURN
endif
1513 1514 1515
ifdef NO_NSEC
	BASIC_CFLAGS += -DNO_NSEC
endif
1516 1517 1518 1519
ifdef SNPRINTF_RETURNS_BOGUS
	COMPAT_CFLAGS += -DSNPRINTF_RETURNS_BOGUS
	COMPAT_OBJS += compat/snprintf.o
endif
1520 1521 1522 1523
ifdef FREAD_READS_DIRECTORIES
	COMPAT_CFLAGS += -DFREAD_READS_DIRECTORIES
	COMPAT_OBJS += compat/fopen.o
endif
1524
ifdef NO_SYMLINK_HEAD
1525
	BASIC_CFLAGS += -DNO_SYMLINK_HEAD
1526
endif
1527 1528 1529
ifdef GETTEXT_POISON
	BASIC_CFLAGS += -DGETTEXT_POISON
endif
1530 1531
ifdef NO_GETTEXT
	BASIC_CFLAGS += -DNO_GETTEXT
1532
	USE_GETTEXT_SCHEME ?= fallthrough
1533
endif
1534
ifdef NO_STRCASESTR
1535
	COMPAT_CFLAGS += -DNO_STRCASESTR
J
Jason Riedy 已提交
1536 1537
	COMPAT_OBJS += compat/strcasestr.o
endif
1538 1539 1540 1541
ifdef NO_STRLCPY
	COMPAT_CFLAGS += -DNO_STRLCPY
	COMPAT_OBJS += compat/strlcpy.o
endif
1542 1543
ifdef NO_STRTOUMAX
	COMPAT_CFLAGS += -DNO_STRTOUMAX
1544
	COMPAT_OBJS += compat/strtoumax.o compat/strtoimax.o
1545 1546 1547 1548
endif
ifdef NO_STRTOULL
	COMPAT_CFLAGS += -DNO_STRTOULL
endif
J
Jonathan Nieder 已提交
1549 1550 1551 1552
ifdef NO_STRTOK_R
	COMPAT_CFLAGS += -DNO_STRTOK_R
	COMPAT_OBJS += compat/strtok_r.o
endif
1553 1554 1555 1556
ifdef NO_FNMATCH
	COMPAT_CFLAGS += -Icompat/fnmatch
	COMPAT_CFLAGS += -DNO_FNMATCH
	COMPAT_OBJS += compat/fnmatch/fnmatch.o
1557 1558 1559 1560 1561 1562
else
ifdef NO_FNMATCH_CASEFOLD
	COMPAT_CFLAGS += -Icompat/fnmatch
	COMPAT_CFLAGS += -DNO_FNMATCH_CASEFOLD
	COMPAT_OBJS += compat/fnmatch/fnmatch.o
endif
1563
endif
J
Jason Riedy 已提交
1564
ifdef NO_SETENV
1565
	COMPAT_CFLAGS += -DNO_SETENV
J
Jason Riedy 已提交
1566
	COMPAT_OBJS += compat/setenv.o
1567
endif
1568 1569 1570 1571
ifdef NO_MKDTEMP
	COMPAT_CFLAGS += -DNO_MKDTEMP
	COMPAT_OBJS += compat/mkdtemp.o
endif
1572 1573 1574
ifdef NO_MKSTEMPS
	COMPAT_CFLAGS += -DNO_MKSTEMPS
endif
J
Johannes Schindelin 已提交
1575
ifdef NO_UNSETENV
J
Jason Riedy 已提交
1576 1577 1578
	COMPAT_CFLAGS += -DNO_UNSETENV
	COMPAT_OBJS += compat/unsetenv.o
endif
1579 1580 1581
ifdef NO_SYS_SELECT_H
	BASIC_CFLAGS += -DNO_SYS_SELECT_H
endif
1582 1583 1584 1585 1586 1587 1588 1589 1590
ifdef NO_SYS_POLL_H
	BASIC_CFLAGS += -DNO_SYS_POLL_H
endif
ifdef NO_INTTYPES_H
	BASIC_CFLAGS += -DNO_INTTYPES_H
endif
ifdef NO_INITGROUPS
	BASIC_CFLAGS += -DNO_INITGROUPS
endif
1591
ifdef NO_MMAP
1592
	COMPAT_CFLAGS += -DNO_MMAP
J
Jason Riedy 已提交
1593
	COMPAT_OBJS += compat/mmap.o
J
Janos Laube 已提交
1594 1595 1596 1597 1598
else
	ifdef USE_WIN32_MMAP
		COMPAT_CFLAGS += -DUSE_WIN32_MMAP
		COMPAT_OBJS += compat/win32mmap.o
	endif
1599
endif
1600 1601
ifdef OBJECT_CREATION_USES_RENAMES
	COMPAT_CFLAGS += -DOBJECT_CREATION_MODE=1
1602
endif
1603 1604 1605 1606
ifdef NO_PREAD
	COMPAT_CFLAGS += -DNO_PREAD
	COMPAT_OBJS += compat/pread.o
endif
1607 1608 1609
ifdef NO_FAST_WORKING_DIRECTORY
	BASIC_CFLAGS += -DNO_FAST_WORKING_DIRECTORY
endif
1610 1611 1612
ifdef NO_TRUSTABLE_FILEMODE
	BASIC_CFLAGS += -DNO_TRUSTABLE_FILEMODE
endif
1613
ifdef NO_IPV6
1614
	BASIC_CFLAGS += -DNO_IPV6
1615
endif
1616 1617 1618
ifdef NO_UINTMAX_T
	BASIC_CFLAGS += -Duintmax_t=uint32_t
endif
1619 1620
ifdef NO_SOCKADDR_STORAGE
ifdef NO_IPV6
1621
	BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in
1622
else
1623
	BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in6
1624
endif
1625
endif
1626 1627
ifdef NO_INET_NTOP
	LIB_OBJS += compat/inet_ntop.o
1628
	BASIC_CFLAGS += -DNO_INET_NTOP
1629
endif
1630 1631
ifdef NO_INET_PTON
	LIB_OBJS += compat/inet_pton.o
1632
	BASIC_CFLAGS += -DNO_INET_PTON
1633
endif
1634 1635 1636 1637 1638 1639
ifndef NO_UNIX_SOCKETS
	LIB_OBJS += unix-socket.o
	LIB_H += unix-socket.h
	PROGRAM_OBJS += credential-cache.o
	PROGRAM_OBJS += credential-cache--daemon.o
endif
1640

1641
ifdef NO_ICONV
1642
	BASIC_CFLAGS += -DNO_ICONV
1643 1644
endif

1645 1646 1647 1648
ifdef OLD_ICONV
	BASIC_CFLAGS += -DOLD_ICONV
endif

1649 1650 1651 1652
ifdef NO_DEFLATE_BOUND
	BASIC_CFLAGS += -DNO_DEFLATE_BOUND
endif

1653 1654 1655 1656
ifdef NO_POSIX_GOODIES
	BASIC_CFLAGS += -DNO_POSIX_GOODIES
endif

1657 1658 1659
ifdef BLK_SHA1
	SHA1_HEADER = "block-sha1/sha1.h"
	LIB_OBJS += block-sha1/sha1.o
1660
	LIB_H += block-sha1/sha1.h
1661
else
1662 1663 1664
ifdef PPC_SHA1
	SHA1_HEADER = "ppc/sha1.h"
	LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
1665
	LIB_H += ppc/sha1.h
1666 1667
else
	SHA1_HEADER = <openssl/sha.h>
1668
	EXTLIBS += $(LIB_4_CRYPTO)
1669 1670
endif
endif
1671 1672 1673
ifdef NO_PERL_MAKEMAKER
	export NO_PERL_MAKEMAKER
endif
1674 1675 1676 1677
ifdef NO_HSTRERROR
	COMPAT_CFLAGS += -DNO_HSTRERROR
	COMPAT_OBJS += compat/hstrerror.o
endif
R
René Scharfe 已提交
1678 1679 1680 1681
ifdef NO_MEMMEM
	COMPAT_CFLAGS += -DNO_MEMMEM
	COMPAT_OBJS += compat/memmem.o
endif
1682 1683 1684 1685
ifdef INTERNAL_QSORT
	COMPAT_CFLAGS += -DINTERNAL_QSORT
	COMPAT_OBJS += compat/qsort.o
endif
1686 1687 1688
ifdef RUNTIME_PREFIX
	COMPAT_CFLAGS += -DRUNTIME_PREFIX
endif
1689

J
Junio C Hamano 已提交
1690 1691 1692
ifdef NO_PTHREADS
	BASIC_CFLAGS += -DNO_PTHREADS
else
1693
	BASIC_CFLAGS += $(PTHREAD_CFLAGS)
J
Junio C Hamano 已提交
1694
	EXTLIBS += $(PTHREAD_LIBS)
1695
	LIB_OBJS += thread-utils.o
N
Nicolas Pitre 已提交
1696
endif
1697

1698 1699 1700 1701
ifdef HAVE_PATHS_H
	BASIC_CFLAGS += -DHAVE_PATHS_H
endif

1702 1703 1704 1705
ifdef HAVE_LIBCHARSET_H
	BASIC_CFLAGS += -DHAVE_LIBCHARSET_H
endif

J
Jeff King 已提交
1706 1707 1708 1709
ifdef HAVE_DEV_TTY
	BASIC_CFLAGS += -DHAVE_DEV_TTY
endif

1710 1711 1712
ifdef DIR_HAS_BSD_GROUP_SEMANTICS
	COMPAT_CFLAGS += -DDIR_HAS_BSD_GROUP_SEMANTICS
endif
1713 1714 1715
ifdef UNRELIABLE_FSTAT
	BASIC_CFLAGS += -DUNRELIABLE_FSTAT
endif
1716 1717 1718 1719
ifdef NO_REGEX
	COMPAT_CFLAGS += -Icompat/regex
	COMPAT_OBJS += compat/regex/regex.o
endif
N
Nicolas Pitre 已提交
1720

1721
ifdef USE_NED_ALLOCATOR
1722
       COMPAT_CFLAGS += -Icompat/nedmalloc
1723 1724 1725
       COMPAT_OBJS += compat/nedmalloc/nedmalloc.o
endif

1726 1727 1728 1729
ifdef GIT_TEST_CMP_USE_COPIED_CONTEXT
	export GIT_TEST_CMP_USE_COPIED_CONTEXT
endif

1730 1731 1732 1733
ifndef NO_MSGFMT_EXTENDED_OPTIONS
	MSGFMT += --check --statistics
endif

1734 1735 1736 1737
ifeq ($(TCLTK_PATH),)
NO_TCLTK=NoThanks
endif

1738 1739 1740 1741
ifeq ($(PERL_PATH),)
NO_PERL=NoThanks
endif

1742 1743 1744 1745
ifeq ($(PYTHON_PATH),)
NO_PYTHON=NoThanks
endif

1746
QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
1747 1748
QUIET_SUBDIR1  =

1749 1750 1751 1752 1753 1754
ifneq ($(findstring $(MAKEFLAGS),w),w)
PRINT_DIR = --no-print-directory
else # "make -w"
NO_SUBDIR = :
endif

1755
ifneq ($(findstring $(MAKEFLAGS),s),s)
S
Shawn O. Pearce 已提交
1756
ifndef V
A
Alex Riesen 已提交
1757
	QUIET_CC       = @echo '   ' CC $@;
1758 1759 1760 1761
	QUIET_AR       = @echo '   ' AR $@;
	QUIET_LINK     = @echo '   ' LINK $@;
	QUIET_BUILT_IN = @echo '   ' BUILTIN $@;
	QUIET_GEN      = @echo '   ' GEN $@;
1762
	QUIET_LNCP     = @echo '   ' LN/CP $@;
1763
	QUIET_XGETTEXT = @echo '   ' XGETTEXT $@;
1764
	QUIET_MSGFMT   = @echo '   ' MSGFMT $@;
1765
	QUIET_GCOV     = @echo '   ' GCOV $@;
1766
	QUIET_SP       = @echo '   ' SP $<;
1767
	QUIET_SUBDIR0  = +@subdir=
1768 1769
	QUIET_SUBDIR1  = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
			 $(MAKE) $(PRINT_DIR) -C $$subdir
S
Shawn O. Pearce 已提交
1770
	export V
A
Alex Riesen 已提交
1771
	export QUIET_GEN
1772 1773
	export QUIET_BUILT_IN
endif
1774
endif
1775

J
Jeff King 已提交
1776 1777
ifdef ASCIIDOC7
	export ASCIIDOC7
1778 1779
endif

1780 1781 1782 1783 1784 1785 1786
### profile feedback build
#

# Can adjust this to be a global directory if you want to do extended
# data gathering
PROFILE_DIR := $(CURDIR)

1787
ifeq ("$(PROFILE)","GEN")
1788 1789 1790 1791
	CFLAGS += -fprofile-generate=$(PROFILE_DIR) -DNO_NORETURN=1
	EXTLIBS += -lgcov
	export CCACHE_DISABLE=t
	V=1
1792 1793
else
ifneq ("$(PROFILE)","")
1794 1795 1796 1797
	CFLAGS += -fprofile-use=$(PROFILE_DIR) -fprofile-correction -DNO_NORETURN=1
	export CCACHE_DISABLE=t
	V=1
endif
1798
endif
1799

P
Pavel Roskin 已提交
1800
# Shell quote (do not use $(call) to accommodate ancient setups);
1801 1802

SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER))
1803
ETC_GITCONFIG_SQ = $(subst ','\'',$(ETC_GITCONFIG))
1804
ETC_GITATTRIBUTES_SQ = $(subst ','\'',$(ETC_GITATTRIBUTES))
1805 1806 1807

DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
bindir_SQ = $(subst ','\'',$(bindir))
1808
bindir_relative_SQ = $(subst ','\'',$(bindir_relative))
1809
mandir_SQ = $(subst ','\'',$(mandir))
1810
infodir_SQ = $(subst ','\'',$(infodir))
1811
localedir_SQ = $(subst ','\'',$(localedir))
1812 1813
gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
template_dir_SQ = $(subst ','\'',$(template_dir))
1814
htmldir_SQ = $(subst ','\'',$(htmldir))
1815
prefix_SQ = $(subst ','\'',$(prefix))
1816
gitwebdir_SQ = $(subst ','\'',$(gitwebdir))
1817 1818 1819

SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
1820
PYTHON_PATH_SQ = $(subst ','\'',$(PYTHON_PATH))
1821
TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH))
1822
DIFF_SQ = $(subst ','\'',$(DIFF))
1823

1824 1825
LIBS = $(GITLIBS) $(EXTLIBS)

1826
BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' \
1827
	$(COMPAT_CFLAGS)
J
Jason Riedy 已提交
1828
LIB_OBJS += $(COMPAT_OBJS)
1829

1830 1831 1832 1833 1834 1835 1836 1837 1838
# Quote for C

ifdef DEFAULT_EDITOR
DEFAULT_EDITOR_CQ = "$(subst ",\",$(subst \,\\,$(DEFAULT_EDITOR)))"
DEFAULT_EDITOR_CQ_SQ = $(subst ','\'',$(DEFAULT_EDITOR_CQ))

BASIC_CFLAGS += -DDEFAULT_EDITOR='$(DEFAULT_EDITOR_CQ_SQ)'
endif

1839 1840 1841 1842 1843 1844 1845
ifdef DEFAULT_PAGER
DEFAULT_PAGER_CQ = "$(subst ",\",$(subst \,\\,$(DEFAULT_PAGER)))"
DEFAULT_PAGER_CQ_SQ = $(subst ','\'',$(DEFAULT_PAGER_CQ))

BASIC_CFLAGS += -DDEFAULT_PAGER='$(DEFAULT_PAGER_CQ_SQ)'
endif

1846 1847 1848
ALL_CFLAGS += $(BASIC_CFLAGS)
ALL_LDFLAGS += $(BASIC_LDFLAGS)

1849
export DIFF TAR INSTALL DESTDIR SHELL_PATH
1850 1851


P
Petr Baudis 已提交
1852 1853
### Build rules

1854 1855
SHELL = $(SHELL_PATH)

1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866
all:: shell_compatibility_test

ifeq "$(PROFILE)" "BUILD"
ifeq ($(filter all,$(MAKECMDGOALS)),all)
all:: profile-clean
	$(MAKE) PROFILE=GEN all
	$(MAKE) PROFILE=GEN -j1 test
endif
endif

all:: $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) $(OTHER_PROGRAMS) GIT-BUILD-OPTIONS
1867
ifneq (,$X)
1868
	$(QUIET_BUILT_IN)$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), test -d '$p' -o '$p' -ef '$p$X' || $(RM) '$p';)
1869
endif
1870

1871
all::
E
Eygene Ryabinkin 已提交
1872
ifndef NO_TCLTK
1873
	$(QUIET_SUBDIR0)git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all
J
Junio C Hamano 已提交
1874
	$(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all
E
Eygene Ryabinkin 已提交
1875
endif
1876
ifndef NO_PERL
1877
	$(QUIET_SUBDIR0)perl $(QUIET_SUBDIR1) PERL_PATH='$(PERL_PATH_SQ)' prefix='$(prefix_SQ)' localedir='$(localedir_SQ)' all
1878 1879 1880
endif
ifndef NO_PYTHON
	$(QUIET_SUBDIR0)git_remote_helpers $(QUIET_SUBDIR1) PYTHON_PATH='$(PYTHON_PATH_SQ)' prefix='$(prefix_SQ)' all
1881
endif
1882
	$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1) SHELL_PATH='$(SHELL_PATH_SQ)' PERL_PATH='$(PERL_PATH_SQ)'
1883

1884 1885 1886 1887 1888
please_set_SHELL_PATH_to_a_more_modern_shell:
	@$$(:)

shell_compatibility_test: please_set_SHELL_PATH_to_a_more_modern_shell

J
Junio C Hamano 已提交
1889 1890 1891
strip: $(PROGRAMS) git$X
	$(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X

1892
git.o: common-cmds.h
1893
git.sp git.s git.o: EXTRA_CPPFLAGS = -DGIT_VERSION='"$(GIT_VERSION)"' \
1894 1895 1896
	'-DGIT_HTML_PATH="$(htmldir_SQ)"' \
	'-DGIT_MAN_PATH="$(mandir_SQ)"' \
	'-DGIT_INFO_PATH="$(infodir_SQ)"'
1897

1898
git$X: git.o GIT-LDFLAGS $(BUILTIN_OBJS) $(GITLIBS)
1899
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ git.o \
1900
		$(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)
1901

1902
help.sp help.o: common-cmds.h
1903

1904 1905
builtin/help.sp builtin/help.o: common-cmds.h
builtin/help.sp builtin/help.s builtin/help.o: EXTRA_CPPFLAGS = \
1906 1907 1908
	'-DGIT_HTML_PATH="$(htmldir_SQ)"' \
	'-DGIT_MAN_PATH="$(mandir_SQ)"' \
	'-DGIT_INFO_PATH="$(infodir_SQ)"'
1909

J
Junio C Hamano 已提交
1910
$(BUILT_INS): git$X
1911 1912 1913 1914
	$(QUIET_BUILT_IN)$(RM) $@ && \
	ln git$X $@ 2>/dev/null || \
	ln -s git$X $@ 2>/dev/null || \
	cp git$X $@
J
Junio C Hamano 已提交
1915

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

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

1921 1922 1923 1924
define cmd_munge_script
$(RM) $@ $@+ && \
sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
    -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \
1925
    -e 's|@@DIFF@@|$(DIFF_SQ)|' \
1926
    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1927
    -e 's|@@LOCALEDIR@@|$(localedir_SQ)|g' \
1928
    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
1929
    -e 's/@@USE_GETTEXT_SCHEME@@/$(USE_GETTEXT_SCHEME)/g' \
1930 1931 1932 1933
    -e $(BROKEN_PATH_FIX) \
    $@.sh >$@+
endef

1934
$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
1935
	$(QUIET_GEN)$(cmd_munge_script) && \
1936
	chmod +x $@+ && \
1937
	mv $@+ $@
1938

1939 1940 1941 1942
$(SCRIPT_LIB) : % : %.sh
	$(QUIET_GEN)$(cmd_munge_script) && \
	mv $@+ $@

1943
ifndef NO_PERL
1944 1945
$(patsubst %.perl,%,$(SCRIPT_PERL)): perl/perl.mak

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

1949
$(patsubst %.perl,%,$(SCRIPT_PERL)): % : %.perl
1950
	$(QUIET_GEN)$(RM) $@ $@+ && \
1951
	INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C perl -s --no-print-directory instlibdir` && \
1952 1953 1954
	sed -e '1{' \
	    -e '	s|#!.*perl|#!$(PERL_PATH_SQ)|' \
	    -e '	h' \
1955
	    -e '	s=.*=use lib (split(/$(pathsep)/, $$ENV{GITPERLLIB} || "'"$$INSTLIBDIR"'"));=' \
1956 1957 1958
	    -e '	H' \
	    -e '	x' \
	    -e '}' \
1959
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
1960 1961
	    $@.perl >$@+ && \
	chmod +x $@+ && \
1962
	mv $@+ $@
1963

1964 1965 1966 1967 1968

.PHONY: gitweb
gitweb:
	$(QUIET_SUBDIR0)gitweb $(QUIET_SUBDIR1) all

1969
git-instaweb: git-instaweb.sh gitweb
1970
	$(QUIET_GEN)$(RM) $@ $@+ && \
1971 1972 1973
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
	    -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
	    -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
1974
	    -e 's|@@GITWEBDIR@@|$(gitwebdir_SQ)|g' \
1975
	    -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
1976 1977
	    $@.sh > $@+ && \
	chmod +x $@+ && \
1978
	mv $@+ $@
1979 1980 1981 1982 1983 1984 1985 1986 1987
else # NO_PERL
$(patsubst %.perl,%,$(SCRIPT_PERL)) git-instaweb: % : unimplemented.sh
	$(QUIET_GEN)$(RM) $@ $@+ && \
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
	    -e 's|@@REASON@@|NO_PERL=$(NO_PERL)|g' \
	    unimplemented.sh >$@+ && \
	chmod +x $@+ && \
	mv $@+ $@
endif # NO_PERL
1988

1989 1990 1991 1992 1993 1994 1995
ifndef NO_PYTHON
$(patsubst %.py,%,$(SCRIPT_PYTHON)): GIT-CFLAGS
$(patsubst %.py,%,$(SCRIPT_PYTHON)): % : %.py
	$(QUIET_GEN)$(RM) $@ $@+ && \
	INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C git_remote_helpers -s \
		--no-print-directory prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' \
		instlibdir` && \
1996 1997
	sed -e '1s|#!.*python|#!$(PYTHON_PATH_SQ)|' \
	    -e 's|\(os\.getenv("GITPYTHONLIB"\)[^)]*)|\1,"@@INSTLIBDIR@@")|' \
1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011
	    -e 's|@@INSTLIBDIR@@|'"$$INSTLIBDIR"'|g' \
	    $@.py >$@+ && \
	chmod +x $@+ && \
	mv $@+ $@
else # NO_PYTHON
$(patsubst %.py,%,$(SCRIPT_PYTHON)): % : unimplemented.sh
	$(QUIET_GEN)$(RM) $@ $@+ && \
	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
	    -e 's|@@REASON@@|NO_PYTHON=$(NO_PYTHON)|g' \
	    unimplemented.sh >$@+ && \
	chmod +x $@+ && \
	mv $@+ $@
endif # NO_PYTHON

2012
configure: configure.ac
2013
	$(QUIET_GEN)$(RM) $@ $<+ && \
2014
	sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
2015 2016
	    $< > $<+ && \
	autoconf -o $@ $<+ && \
2017
	$(RM) $<+
2018

2019
# These can record GIT_VERSION
2020
git.o git.spec \
2021 2022 2023
	$(patsubst %.sh,%,$(SCRIPT_SH)) \
	$(patsubst %.perl,%,$(SCRIPT_PERL)) \
	: GIT-VERSION-FILE
2024

2025
TEST_OBJS := $(patsubst test-%$X,test-%.o,$(TEST_PROGRAMS))
2026
GIT_OBJS := $(LIB_OBJS) $(BUILTIN_OBJS) $(PROGRAM_OBJS) $(TEST_OBJS) \
2027 2028 2029 2030
	git.o
ifndef NO_CURL
	GIT_OBJS += http.o http-walker.o remote-curl.o
endif
2031 2032 2033 2034 2035 2036 2037

XDIFF_OBJS += xdiff/xdiffi.o
XDIFF_OBJS += xdiff/xprepare.o
XDIFF_OBJS += xdiff/xutils.o
XDIFF_OBJS += xdiff/xemit.o
XDIFF_OBJS += xdiff/xmerge.o
XDIFF_OBJS += xdiff/xpatience.o
2038
XDIFF_OBJS += xdiff/xhistogram.o
2039 2040

VCSSVN_OBJS += vcs-svn/line_buffer.o
2041
VCSSVN_OBJS += vcs-svn/sliding_window.o
2042 2043
VCSSVN_OBJS += vcs-svn/repo_tree.o
VCSSVN_OBJS += vcs-svn/fast_export.o
2044
VCSSVN_OBJS += vcs-svn/svndiff.o
2045 2046 2047 2048
VCSSVN_OBJS += vcs-svn/svndump.o

VCSSVN_TEST_OBJS += test-line-buffer.o

J
Jonathan Nieder 已提交
2049
OBJECTS := $(GIT_OBJS) $(XDIFF_OBJS) $(VCSSVN_OBJS)
2050

2051
dep_files := $(foreach f,$(OBJECTS),$(dir $f).depend/$(notdir $f).d)
2052
dep_dirs := $(addsuffix .depend,$(sort $(dir $(OBJECTS))))
2053

2054
ifeq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
2055
$(dep_dirs):
2056
	@mkdir -p $@
2057 2058

missing_dep_dirs := $(filter-out $(wildcard $(dep_dirs)),$(dep_dirs))
2059
dep_file = $(dir $@).depend/$(notdir $@).d
2060 2061 2062 2063 2064 2065 2066
dep_args = -MF $(dep_file) -MMD -MP
ifdef CHECK_HEADER_DEPENDENCIES
$(error cannot compute header dependencies outside a normal build. \
Please unset CHECK_HEADER_DEPENDENCIES and try again)
endif
endif

2067
ifneq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
2068
ifndef CHECK_HEADER_DEPENDENCIES
2069 2070
dep_dirs =
missing_dep_dirs =
2071 2072
dep_args =
endif
2073 2074
endif

2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088
ifdef CHECK_HEADER_DEPENDENCIES
ifndef PRINT_HEADER_DEPENDENCIES
missing_deps = $(filter-out $(notdir $^), \
	$(notdir $(shell $(MAKE) -s $@ \
		CHECK_HEADER_DEPENDENCIES=YesPlease \
		USE_COMPUTED_HEADER_DEPENDENCIES=YesPlease \
		PRINT_HEADER_DEPENDENCIES=YesPlease)))
endif
endif

ASM_SRC := $(wildcard $(OBJECTS:o=S))
ASM_OBJ := $(ASM_SRC:S=o)
C_OBJ := $(filter-out $(ASM_OBJ),$(OBJECTS))

2089 2090
.SUFFIXES:

2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124
ifdef PRINT_HEADER_DEPENDENCIES
$(C_OBJ): %.o: %.c FORCE
	echo $^
$(ASM_OBJ): %.o: %.S FORCE
	echo $^

ifndef CHECK_HEADER_DEPENDENCIES
$(error cannot print header dependencies during a normal build. \
Please set CHECK_HEADER_DEPENDENCIES and try again)
endif
endif

ifndef PRINT_HEADER_DEPENDENCIES
ifdef CHECK_HEADER_DEPENDENCIES
$(C_OBJ): %.o: %.c $(dep_files) FORCE
	@set -e; echo CHECK $@; \
	missing_deps="$(missing_deps)"; \
	if test "$$missing_deps"; \
	then \
		echo missing dependencies: $$missing_deps; \
		false; \
	fi
$(ASM_OBJ): %.o: %.S $(dep_files) FORCE
	@set -e; echo CHECK $@; \
	missing_deps="$(missing_deps)"; \
	if test "$$missing_deps"; \
	then \
		echo missing dependencies: $$missing_deps; \
		false; \
	fi
endif
endif

ifndef CHECK_HEADER_DEPENDENCIES
2125
$(C_OBJ): %.o: %.c GIT-CFLAGS $(missing_dep_dirs)
2126
	$(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
2127
$(ASM_OBJ): %.o: %.S GIT-CFLAGS $(missing_dep_dirs)
2128
	$(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
2129
endif
2130

2131
%.s: %.c GIT-CFLAGS FORCE
2132
	$(QUIET_CC)$(CC) -S $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
2133 2134

ifdef USE_COMPUTED_HEADER_DEPENDENCIES
2135 2136
# Take advantage of gcc's on-the-fly dependency generation
# See <http://gcc.gnu.org/gcc-3.0/features.html>.
2137 2138 2139
dep_files_present := $(wildcard $(dep_files))
ifneq ($(dep_files_present),)
include $(dep_files_present)
2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150
endif
else
# Dependencies on header files, for platforms that do not support
# the gcc -MMD option.
#
# Dependencies on automatically generated headers such as common-cmds.h
# should _not_ be included here, since they are necessary even when
# building an object for the first time.
#
# XXX. Please check occasionally that these include all dependencies
# gcc detects!
2151

2152
$(GIT_OBJS): $(LIB_H)
2153 2154 2155 2156
builtin/branch.o builtin/checkout.o builtin/clone.o builtin/reset.o branch.o transport.o: branch.h
builtin/bundle.o bundle.o transport.o: bundle.h
builtin/bisect--helper.o builtin/rev-list.o bisect.o: bisect.h
builtin/clone.o builtin/fetch-pack.o transport.o: fetch-pack.h
2157
builtin/grep.o builtin/pack-objects.o transport-helper.o thread-utils.o: thread-utils.h
2158 2159 2160 2161 2162
builtin/send-pack.o transport.o: send-pack.h
builtin/log.o builtin/shortlog.o: shortlog.h
builtin/prune.o builtin/reflog.o reachable.o: reachable.h
builtin/commit.o builtin/revert.o wt-status.o: wt-status.h
builtin/tar-tree.o archive-tar.o: tar.h
2163
connect.o transport.o url.o http-backend.o: url.h
2164
http-fetch.o http-walker.o remote-curl.o transport.o walker.o: walker.h
2165
http.o http-walker.o http-push.o http-fetch.o remote-curl.o: http.h url.h
2166

2167 2168 2169 2170 2171 2172 2173 2174 2175 2176
XDIFF_H += xdiff/xinclude.h
XDIFF_H += xdiff/xmacros.h
XDIFF_H += xdiff/xdiff.h
XDIFF_H += xdiff/xtypes.h
XDIFF_H += xdiff/xutils.h
XDIFF_H += xdiff/xprepare.h
XDIFF_H += xdiff/xdiffi.h
XDIFF_H += xdiff/xemit.h

xdiff-interface.o $(XDIFF_OBJS): $(XDIFF_H)
J
Jonathan Nieder 已提交
2177

2178
VCSSVN_H += vcs-svn/line_buffer.h
2179
VCSSVN_H += vcs-svn/sliding_window.h
2180 2181
VCSSVN_H += vcs-svn/repo_tree.h
VCSSVN_H += vcs-svn/fast_export.h
2182
VCSSVN_H += vcs-svn/svndiff.h
2183
VCSSVN_H += vcs-svn/svndump.h
2184

2185
$(VCSSVN_OBJS) $(VCSSVN_TEST_OBJS): $(LIB_H) $(VCSSVN_H)
2186
endif
2187

2188
exec_cmd.sp exec_cmd.s exec_cmd.o: EXTRA_CPPFLAGS = \
2189 2190 2191
	'-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
	'-DBINDIR="$(bindir_relative_SQ)"' \
	'-DPREFIX="$(prefix_SQ)"'
2192

2193
builtin/init-db.sp builtin/init-db.s builtin/init-db.o: EXTRA_CPPFLAGS = \
2194
	-DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"'
2195

2196 2197
config.sp config.s config.o: EXTRA_CPPFLAGS = \
	-DETC_GITCONFIG='"$(ETC_GITCONFIG_SQ)"'
2198

2199 2200
attr.sp attr.s attr.o: EXTRA_CPPFLAGS = \
	-DETC_GITATTRIBUTES='"$(ETC_GITATTRIBUTES_SQ)"'
2201

2202 2203 2204
gettext.sp gettext.s gettext.o: EXTRA_CPPFLAGS = \
	-DGIT_LOCALE_PATH='"$(localedir_SQ)"'

2205 2206
http.sp http.s http.o: EXTRA_CPPFLAGS = \
	-DGIT_HTTP_USER_AGENT='"git/$(GIT_VERSION)"'
2207

2208
ifdef NO_EXPAT
2209
http-walker.sp http-walker.s http-walker.o: EXTRA_CPPFLAGS = -DNO_EXPAT
2210 2211
endif

2212
ifdef NO_REGEX
2213 2214
compat/regex/regex.sp compat/regex/regex.o: EXTRA_CPPFLAGS = \
	-DGAWK -DNO_MBSUPPORT
2215 2216
endif

2217
ifdef USE_NED_ALLOCATOR
2218
compat/nedmalloc/nedmalloc.sp compat/nedmalloc/nedmalloc.o: EXTRA_CPPFLAGS = \
2219 2220 2221
	-DNDEBUG -DOVERRIDE_STRDUP -DREPLACE_SYSTEM_ALLOCATOR
endif

2222
git-%$X: %.o GIT-LDFLAGS $(GITLIBS)
2223
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
2224

2225
git-imap-send$X: imap-send.o GIT-LDFLAGS $(GITLIBS)
R
Robert Shearman 已提交
2226
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2227
		$(LIBS) $(OPENSSL_LINK) $(OPENSSL_LIBSSL) $(LIB_4_CRYPTO)
2228

2229
git-http-fetch$X: revision.o http.o http-walker.o http-fetch.o GIT-LDFLAGS $(GITLIBS)
L
Linus Torvalds 已提交
2230
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2231
		$(LIBS) $(CURL_LIBCURL)
2232
git-http-push$X: revision.o http.o http-push.o GIT-LDFLAGS $(GITLIBS)
2233
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
2234 2235
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

2236 2237 2238 2239 2240 2241
$(REMOTE_CURL_ALIASES): $(REMOTE_CURL_PRIMARY)
	$(QUIET_LNCP)$(RM) $@ && \
	ln $< $@ 2>/dev/null || \
	ln -s $< $@ 2>/dev/null || \
	cp $< $@

2242
$(REMOTE_CURL_PRIMARY): remote-curl.o http.o http-walker.o GIT-LDFLAGS $(GITLIBS)
2243 2244 2245
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
		$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)

P
Petr Baudis 已提交
2246
$(LIB_FILE): $(LIB_OBJS)
2247
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)
P
Petr Baudis 已提交
2248

2249
$(XDIFF_LIB): $(XDIFF_OBJS)
2250
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(XDIFF_OBJS)
2251

J
Jonathan Nieder 已提交
2252 2253
$(VCSSVN_LIB): $(VCSSVN_OBJS)
	$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(VCSSVN_OBJS)
2254

P
Petr Baudis 已提交
2255 2256 2257
doc:
	$(MAKE) -C Documentation all

2258 2259 2260 2261 2262 2263
man:
	$(MAKE) -C Documentation man

html:
	$(MAKE) -C Documentation html

2264 2265 2266
info:
	$(MAKE) -C Documentation info

2267 2268 2269
pdf:
	$(MAKE) -C Documentation pdf

2270 2271 2272 2273 2274
XGETTEXT_FLAGS = \
	--force-po \
	--add-comments \
	--msgid-bugs-address="Git Mailing List <git@vger.kernel.org>" \
	--from-code=UTF-8
2275 2276
XGETTEXT_FLAGS_C = $(XGETTEXT_FLAGS) --language=C \
	--keyword=_ --keyword=N_ --keyword="Q_:1,2"
2277
XGETTEXT_FLAGS_SH = $(XGETTEXT_FLAGS) --language=Shell
2278
XGETTEXT_FLAGS_PERL = $(XGETTEXT_FLAGS) --keyword=__ --language=Perl
2279
LOCALIZED_C := $(C_OBJ:o=c)
2280
LOCALIZED_SH := $(SCRIPT_SH)
2281 2282 2283 2284 2285 2286 2287
LOCALIZED_PERL := $(SCRIPT_PERL)

ifdef XGETTEXT_INCLUDE_TESTS
LOCALIZED_C += t/t0200/test.c
LOCALIZED_SH += t/t0200/test.sh
LOCALIZED_PERL += t/t0200/test.perl
endif
2288 2289

po/git.pot: $(LOCALIZED_C)
2290 2291 2292
	$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ $(XGETTEXT_FLAGS_C) $(LOCALIZED_C)
	$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_SH) \
		$(LOCALIZED_SH)
2293 2294
	$(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_PERL) \
		$(LOCALIZED_PERL)
2295 2296 2297 2298
	mv $@+ $@

pot: po/git.pot

2299 2300 2301 2302 2303 2304 2305 2306 2307 2308
POFILES := $(wildcard po/*.po)
MOFILES := $(patsubst po/%.po,po/build/locale/%/LC_MESSAGES/git.mo,$(POFILES))

ifndef NO_GETTEXT
all:: $(MOFILES)
endif

po/build/locale/%/LC_MESSAGES/git.mo: po/%.po
	$(QUIET_MSGFMT)mkdir -p $(dir $@) && $(MSGFMT) -o $@ $<

2309 2310 2311 2312
FIND_SOURCE_FILES = ( git ls-files '*.[hcS]' 2>/dev/null || \
			$(FIND) . \( -name .git -type d -prune \) \
				-o \( -name '*.[hcS]' -type f -print \) )

2313 2314
$(ETAGS_TARGET): FORCE
	$(RM) $(ETAGS_TARGET)
2315
	$(FIND_SOURCE_FILES) | xargs etags -a -o $(ETAGS_TARGET)
2316

2317
tags: FORCE
2318
	$(RM) tags
2319
	$(FIND_SOURCE_FILES) | xargs ctags -a
P
Petr Baudis 已提交
2320

K
Kristof Provost 已提交
2321 2322
cscope:
	$(RM) cscope*
2323
	$(FIND_SOURCE_FILES) | xargs cscope -b
K
Kristof Provost 已提交
2324

2325
### Detect prefix changes
2326
TRACK_CFLAGS = $(CC):$(subst ','\'',$(ALL_CFLAGS)):\
2327
             $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ):\
2328
             $(localedir_SQ):$(USE_GETTEXT_SCHEME)
2329

2330
GIT-CFLAGS: FORCE
2331 2332 2333 2334 2335 2336
	@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

2337 2338 2339 2340 2341 2342 2343 2344 2345
TRACK_LDFLAGS = $(subst ','\'',$(ALL_LDFLAGS))

GIT-LDFLAGS: FORCE
	@FLAGS='$(TRACK_LDFLAGS)'; \
	    if test x"$$FLAGS" != x"`cat GIT-LDFLAGS 2>/dev/null`" ; then \
		echo 1>&2 "    * new link flags"; \
		echo "$$FLAGS" >GIT-LDFLAGS; \
            fi

J
Junio C Hamano 已提交
2346 2347 2348
# We need to apply sq twice, once to protect from the shell
# that runs GIT-BUILD-OPTIONS, and then again to protect it
# and the first level quoting from the shell that runs "echo".
2349
GIT-BUILD-OPTIONS: FORCE
J
Junio C Hamano 已提交
2350
	@echo SHELL_PATH=\''$(subst ','\'',$(SHELL_PATH_SQ))'\' >$@
2351
	@echo PERL_PATH=\''$(subst ','\'',$(PERL_PATH_SQ))'\' >>$@
2352
	@echo DIFF=\''$(subst ','\'',$(subst ','\'',$(DIFF)))'\' >>$@
2353
	@echo PYTHON_PATH=\''$(subst ','\'',$(PYTHON_PATH_SQ))'\' >>$@
J
Junio C Hamano 已提交
2354
	@echo TAR=\''$(subst ','\'',$(subst ','\'',$(TAR)))'\' >>$@
J
Jeff King 已提交
2355
	@echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@
2356
	@echo USE_LIBPCRE=\''$(subst ','\'',$(subst ','\'',$(USE_LIBPCRE)))'\' >>$@
2357
	@echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@
J
Jeff King 已提交
2358
	@echo NO_PYTHON=\''$(subst ','\'',$(subst ','\'',$(NO_PYTHON)))'\' >>$@
2359 2360 2361 2362 2363 2364
ifdef GIT_TEST_CMP
	@echo GIT_TEST_CMP=\''$(subst ','\'',$(subst ','\'',$(GIT_TEST_CMP)))'\' >>$@
endif
ifdef GIT_TEST_CMP_USE_COPIED_CONTEXT
	@echo GIT_TEST_CMP_USE_COPIED_CONTEXT=YesPlease >>$@
endif
2365
	@echo NO_GETTEXT=\''$(subst ','\'',$(subst ','\'',$(NO_GETTEXT)))'\' >>$@
2366
	@echo GETTEXT_POISON=\''$(subst ','\'',$(subst ','\'',$(GETTEXT_POISON)))'\' >>$@
2367
	@echo NO_UNIX_SOCKETS=\''$(subst ','\'',$(subst ','\'',$(NO_UNIX_SOCKETS)))'\' >>$@
2368

2369 2370 2371 2372
### Detect Tck/Tk interpreter path changes
ifndef NO_TCLTK
TRACK_VARS = $(subst ','\'',-DTCLTK_PATH='$(TCLTK_PATH_SQ)')

2373
GIT-GUI-VARS: FORCE
2374 2375 2376 2377 2378 2379 2380
	@VARS='$(TRACK_VARS)'; \
	    if test x"$$VARS" != x"`cat $@ 2>/dev/null`" ; then \
		echo 1>&2 "    * new Tcl/Tk interpreter location"; \
		echo "$$VARS" >$@; \
            fi
endif

2381 2382 2383 2384 2385 2386 2387 2388 2389 2390
test_bindir_programs := $(patsubst %,bin-wrappers/%,$(BINDIR_PROGRAMS_NEED_X) $(BINDIR_PROGRAMS_NO_X) $(TEST_PROGRAMS_NEED_X))

all:: $(TEST_PROGRAMS) $(test_bindir_programs)

bin-wrappers/%: wrap-for-bin.sh
	@mkdir -p bin-wrappers
	$(QUIET_GEN)sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
	     -e 's|@@BUILD_DIR@@|$(shell pwd)|' \
	     -e 's|@@PROG@@|$(@F)|' < $< > $@ && \
	chmod +x $@
2391

2392 2393 2394 2395
# GNU make supports exporting all variables by "export" without parameters.
# However, the environment gets quite big, and some programs have problems
# with that.

2396
export NO_SVN_TESTS
2397

2398 2399
### Testing rules

2400
test: all
P
Petr Baudis 已提交
2401 2402
	$(MAKE) -C t/ all

R
René Scharfe 已提交
2403 2404
test-ctype$X: ctype.o

2405
test-date$X: date.o ctype.o
P
Petr Baudis 已提交
2406

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

D
David Barr 已提交
2409 2410
test-line-buffer$X: vcs-svn/lib.a

2411
test-parse-options$X: parse-options.o parse-options-cb.o
2412

D
David Barr 已提交
2413 2414
test-svn-fe$X: vcs-svn/lib.a

2415
.PRECIOUS: $(TEST_OBJS)
2416

2417
test-%$X: test-%.o GIT-LDFLAGS $(GITLIBS)
D
David Barr 已提交
2418
	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(filter %.a,$^) $(LIBS)
2419

2420 2421 2422
check-sha1:: test-sha1$X
	./test-sha1.sh

2423 2424 2425 2426 2427 2428 2429 2430 2431
SP_OBJ = $(patsubst %.o,%.sp,$(C_OBJ))

$(SP_OBJ): %.sp: %.c GIT-CFLAGS FORCE
	$(QUIET_SP)cgcc -no-compile $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) \
		$(SPARSE_FLAGS) $<

.PHONY: sparse $(SP_OBJ)
sparse: $(SP_OBJ)

2432
check: common-cmds.h
2433
	@if sparse; \
2434
	then \
2435 2436
		echo 2>&1 "Use 'make sparse' instead"; \
		$(MAKE) --no-print-directory sparse; \
2437 2438 2439 2440
	else \
		echo 2>&1 "Did you mean 'make test'?"; \
		exit 1; \
	fi
P
Petr Baudis 已提交
2441

2442
remove-dashes:
2443
	./fixup-builtins $(BUILT_INS) $(PROGRAMS) $(SCRIPTS)
P
Petr Baudis 已提交
2444 2445 2446

### Installation rules

2447
ifneq ($(filter /%,$(firstword $(template_dir))),)
2448
template_instdir = $(template_dir)
2449 2450
else
template_instdir = $(prefix)/$(template_dir)
2451 2452 2453
endif
export template_instdir

2454
ifneq ($(filter /%,$(firstword $(gitexecdir))),)
2455
gitexec_instdir = $(gitexecdir)
2456 2457
else
gitexec_instdir = $(prefix)/$(gitexecdir)
2458 2459 2460 2461
endif
gitexec_instdir_SQ = $(subst ','\'',$(gitexec_instdir))
export gitexec_instdir

2462 2463 2464 2465 2466 2467 2468
ifneq ($(filter /%,$(firstword $(mergetoolsdir))),)
mergetools_instdir = $(mergetoolsdir)
else
mergetools_instdir = $(prefix)/$(mergetoolsdir)
endif
mergetools_instdir_SQ = $(subst ','\'',$(mergetools_instdir))

2469 2470
install_bindir_programs := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X)) $(BINDIR_PROGRAMS_NO_X)

2471
install: all
2472
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
2473 2474
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
	$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
2475
	$(INSTALL) -m 644 $(SCRIPT_LIB) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
2476
	$(INSTALL) $(install_bindir_programs) '$(DESTDIR_SQ)$(bindir_SQ)'
2477
	$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
2478
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(mergetools_instdir_SQ)'
2479
	$(INSTALL) -m 644 mergetools/* '$(DESTDIR_SQ)$(mergetools_instdir_SQ)'
2480 2481 2482 2483 2484
ifndef NO_GETTEXT
	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(localedir_SQ)'
	(cd po/build/locale && $(TAR) cf - .) | \
	(cd '$(DESTDIR_SQ)$(localedir_SQ)' && umask 022 && $(TAR) xof -)
endif
2485
ifndef NO_PERL
2486
	$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
J
Junio C Hamano 已提交
2487
	$(MAKE) -C gitweb install
2488
endif
2489 2490 2491
ifndef NO_PYTHON
	$(MAKE) -C git_remote_helpers prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
endif
E
Eygene Ryabinkin 已提交
2492
ifndef NO_TCLTK
J
Junio C Hamano 已提交
2493
	$(MAKE) -C gitk-git install
2494
	$(MAKE) -C git-gui gitexecdir='$(gitexec_instdir_SQ)' install
E
Eygene Ryabinkin 已提交
2495
endif
2496
ifneq (,$X)
2497
	$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), test '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p' -ef '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p$X' || $(RM) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)/$p';)
2498
endif
2499

2500
	bindir=$$(cd '$(DESTDIR_SQ)$(bindir_SQ)' && pwd) && \
2501
	execdir=$$(cd '$(DESTDIR_SQ)$(gitexec_instdir_SQ)' && pwd) && \
2502
	{ test "$$bindir/" = "$$execdir/" || \
2503 2504
	  for p in git$X $(filter $(install_bindir_programs),$(ALL_PROGRAMS)); do \
		$(RM) "$$execdir/$$p" && \
2505
		test -z "$(NO_CROSS_DIRECTORY_HARDLINKS)" && \
2506 2507 2508 2509
		ln "$$bindir/$$p" "$$execdir/$$p" 2>/dev/null || \
		cp "$$bindir/$$p" "$$execdir/$$p" || exit; \
	  done; \
	} && \
2510 2511 2512 2513 2514 2515
	for p in $(filter $(install_bindir_programs),$(BUILT_INS)); do \
		$(RM) "$$bindir/$$p" && \
		ln "$$bindir/git$X" "$$bindir/$$p" 2>/dev/null || \
		ln -s "git$X" "$$bindir/$$p" 2>/dev/null || \
		cp "$$bindir/git$X" "$$bindir/$$p" || exit; \
	done && \
2516
	for p in $(BUILT_INS); do \
2517
		$(RM) "$$execdir/$$p" && \
J
Jeff King 已提交
2518 2519 2520
		ln "$$execdir/git$X" "$$execdir/$$p" 2>/dev/null || \
		ln -s "git$X" "$$execdir/$$p" 2>/dev/null || \
		cp "$$execdir/git$X" "$$execdir/$$p" || exit; \
2521
	done && \
2522 2523
	remote_curl_aliases="$(REMOTE_CURL_ALIASES)" && \
	for p in $$remote_curl_aliases; do \
2524 2525 2526 2527
		$(RM) "$$execdir/$$p" && \
		ln "$$execdir/git-remote-http$X" "$$execdir/$$p" 2>/dev/null || \
		ln -s "git-remote-http$X" "$$execdir/$$p" 2>/dev/null || \
		cp "$$execdir/git-remote-http$X" "$$execdir/$$p" || exit; \
2528
	done && \
2529
	./check_bindir "z$$bindir" "z$$execdir" "$$bindir/git-add$X"
P
Petr Baudis 已提交
2530

2531 2532 2533
install-gitweb:
	$(MAKE) -C gitweb install

P
Petr Baudis 已提交
2534 2535 2536
install-doc:
	$(MAKE) -C Documentation install

2537 2538 2539
install-man:
	$(MAKE) -C Documentation install-man

2540 2541 2542
install-html:
	$(MAKE) -C Documentation install-html

2543 2544 2545
install-info:
	$(MAKE) -C Documentation install-info

2546 2547 2548
install-pdf:
	$(MAKE) -C Documentation install-pdf

2549 2550
quick-install-doc:
	$(MAKE) -C Documentation quick-install
P
Petr Baudis 已提交
2551

2552 2553 2554
quick-install-man:
	$(MAKE) -C Documentation quick-install-man

2555 2556 2557
quick-install-html:
	$(MAKE) -C Documentation quick-install-html

P
Petr Baudis 已提交
2558 2559 2560 2561


### Maintainer's dist rules

2562
git.spec: git.spec.in
2563 2564
	sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@+
	mv $@+ $@
2565

J
Junio C Hamano 已提交
2566
GIT_TARNAME=git-$(GIT_VERSION)
2567
dist: git.spec git-archive$(X) configure
2568 2569
	./git-archive --format=tar \
		--prefix=$(GIT_TARNAME)/ HEAD^{tree} > $(GIT_TARNAME).tar
2570
	@mkdir -p $(GIT_TARNAME)
2571
	@cp git.spec configure $(GIT_TARNAME)
2572
	@echo $(GIT_VERSION) > $(GIT_TARNAME)/version
2573
	@$(MAKE) -C git-gui TARDIR=../$(GIT_TARNAME)/git-gui dist-version
2574
	$(TAR) rf $(GIT_TARNAME).tar \
2575
		$(GIT_TARNAME)/git.spec \
2576
		$(GIT_TARNAME)/configure \
2577
		$(GIT_TARNAME)/version \
2578
		$(GIT_TARNAME)/git-gui/version
2579
	@$(RM) -r $(GIT_TARNAME)
2580
	gzip -f -9 $(GIT_TARNAME).tar
2581 2582

rpm: dist
2583 2584 2585 2586
	$(RPMBUILD) \
		--define "_source_filedigest_algorithm md5" \
		--define "_binary_filedigest_algorithm md5" \
		-ta $(GIT_TARNAME).tar.gz
2587

2588 2589 2590
htmldocs = git-htmldocs-$(GIT_VERSION)
manpages = git-manpages-$(GIT_VERSION)
dist-doc:
2591
	$(RM) -r .doc-tmp-dir
2592 2593 2594 2595 2596
	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
	:
2597
	$(RM) -r .doc-tmp-dir
2598
	mkdir -p .doc-tmp-dir/man1 .doc-tmp-dir/man5 .doc-tmp-dir/man7
2599
	$(MAKE) -C Documentation DESTDIR=./ \
2600
		man1dir=../.doc-tmp-dir/man1 \
2601
		man5dir=../.doc-tmp-dir/man5 \
2602
		man7dir=../.doc-tmp-dir/man7 \
2603 2604 2605
		install
	cd .doc-tmp-dir && $(TAR) cf ../$(manpages).tar .
	gzip -n -9 -f $(manpages).tar
2606
	$(RM) -r .doc-tmp-dir
2607

P
Petr Baudis 已提交
2608
### Cleaning rules
2609

2610 2611
distclean: clean
	$(RM) configure
2612
	$(RM) po/git.pot
2613

2614 2615 2616 2617 2618
profile-clean:
	$(RM) $(addsuffix *.gcda,$(addprefix $(PROFILE_DIR)/, $(object_dirs)))
	$(RM) $(addsuffix *.gcno,$(addprefix $(PROFILE_DIR)/, $(object_dirs)))

clean: profile-clean
2619 2620
	$(RM) *.o block-sha1/*.o ppc/*.o compat/*.o compat/*/*.o xdiff/*.o vcs-svn/*.o \
		builtin/*.o $(LIB_FILE) $(XDIFF_LIB) $(VCSSVN_LIB)
2621
	$(RM) $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git$X
2622
	$(RM) $(TEST_PROGRAMS)
2623
	$(RM) -r bin-wrappers
2624
	$(RM) -r $(dep_dirs)
2625
	$(RM) -r po/build/
2626
	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h $(ETAGS_TARGET) tags cscope*
2627
	$(RM) -r autom4te.cache
2628
	$(RM) config.log config.mak.autogen config.mak.append config.status config.cache
2629 2630 2631
	$(RM) -r $(GIT_TARNAME) .doc-tmp-dir
	$(RM) $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz
	$(RM) $(htmldocs).tar.gz $(manpages).tar.gz
2632
	$(MAKE) -C Documentation/ clean
2633
ifndef NO_PERL
2634
	$(MAKE) -C gitweb clean
2635
	$(MAKE) -C perl clean
2636 2637 2638
endif
ifndef NO_PYTHON
	$(MAKE) -C git_remote_helpers clean
2639
endif
P
Petr Baudis 已提交
2640
	$(MAKE) -C templates/ clean
2641
	$(MAKE) -C t/ clean
E
Eygene Ryabinkin 已提交
2642
ifndef NO_TCLTK
J
Junio C Hamano 已提交
2643
	$(MAKE) -C gitk-git clean
E
Eygene Ryabinkin 已提交
2644 2645
	$(MAKE) -C git-gui clean
endif
2646
	$(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-LDFLAGS GIT-GUI-VARS GIT-BUILD-OPTIONS
2647

2648
.PHONY: all install profile-clean clean strip
2649
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
2650
.PHONY: FORCE cscope
J
Junio C Hamano 已提交
2651

J
Junio C Hamano 已提交
2652 2653 2654
### Check documentation
#
check-docs::
2655
	@(for v in $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git gitk; \
J
Junio C Hamano 已提交
2656 2657 2658
	do \
		case "$$v" in \
		git-merge-octopus | git-merge-ours | git-merge-recursive | \
M
Miklos Vajna 已提交
2659
		git-merge-resolve | git-merge-subtree | \
2660
		git-fsck-objects | git-init-db | \
2661
		git-remote-* | git-stage | \
2662
		git-?*--?* ) continue ;; \
J
Junio C Hamano 已提交
2663 2664 2665
		esac ; \
		test -f "Documentation/$$v.txt" || \
		echo "no doc: $$v"; \
J
Junio C Hamano 已提交
2666
		sed -e '/^#/d' command-list.txt | \
2667
		grep -q "^$$v[ 	]" || \
J
Junio C Hamano 已提交
2668 2669 2670 2671
		case "$$v" in \
		git) ;; \
		*) echo "no link: $$v";; \
		esac ; \
2672 2673
	done; \
	( \
J
Junio C Hamano 已提交
2674
		sed -e '/^#/d' \
2675
		    -e 's/[ 	].*//' \
J
Junio C Hamano 已提交
2676
		    -e 's/^/listed /' command-list.txt; \
2677 2678 2679 2680 2681 2682 2683 2684
		ls -1 Documentation/git*txt | \
		sed -e 's|Documentation/|documented |' \
		    -e 's/\.txt//'; \
	) | while read how cmd; \
	do \
		case "$$how,$$cmd" in \
		*,git-citool | \
		*,git-gui | \
2685
		*,git-help | \
2686 2687 2688
		documented,gitattributes | \
		documented,gitignore | \
		documented,gitmodules | \
2689
		documented,gitcli | \
2690
		documented,git-tools | \
2691 2692 2693 2694 2695 2696
		documented,gitcore-tutorial | \
		documented,gitcvs-migration | \
		documented,gitdiffcore | \
		documented,gitglossary | \
		documented,githooks | \
		documented,gitrepository-layout | \
2697
		documented,gitrevisions | \
2698 2699
		documented,gittutorial | \
		documented,gittutorial-2 | \
2700
		documented,git-bisect-lk2009 | \
2701
		documented,git-remote-helpers | \
2702
		documented,gitworkflows | \
2703 2704
		sentinel,not,matching,is,ok ) continue ;; \
		esac; \
2705
		case " $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git gitk " in \
2706 2707 2708 2709
		*" $$cmd "*)	;; \
		*) echo "removed but $$how: $$cmd" ;; \
		esac; \
	done ) | sort
2710 2711 2712 2713 2714

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

2716 2717 2718 2719 2720 2721 2722 2723
### Test suite coverage testing
#
.PHONY: coverage coverage-clean coverage-build coverage-report

coverage:
	$(MAKE) coverage-build
	$(MAKE) coverage-report

2724
object_dirs := $(sort $(dir $(OBJECTS)))
2725
coverage-clean:
2726 2727 2728 2729
	$(RM) $(addsuffix *.gcov,$(object_dirs))
	$(RM) $(addsuffix *.gcda,$(object_dirs))
	$(RM) $(addsuffix *.gcno,$(object_dirs))
	$(RM) coverage-untested-functions
2730
	$(RM) -r cover_db/
2731
	$(RM) -r cover_db_html/
2732 2733 2734

COVERAGE_CFLAGS = $(CFLAGS) -O0 -ftest-coverage -fprofile-arcs
COVERAGE_LDFLAGS = $(CFLAGS)  -O0 -lgcov
2735
GCOVFLAGS = --preserve-paths --branch-probabilities --all-blocks
2736 2737 2738 2739 2740 2741 2742

coverage-build: coverage-clean
	$(MAKE) CFLAGS="$(COVERAGE_CFLAGS)" LDFLAGS="$(COVERAGE_LDFLAGS)" all
	$(MAKE) CFLAGS="$(COVERAGE_CFLAGS)" LDFLAGS="$(COVERAGE_LDFLAGS)" \
		-j1 test

coverage-report:
2743
	$(QUIET_GCOV)for dir in $(object_dirs); do \
2744
		$(GCOV) $(GCOVFLAGS) --object-directory=$$dir $$dir*.c || exit; \
2745
	done
2746 2747

coverage-untested-functions: coverage-report
2748 2749
	grep '^function.*called 0 ' *.c.gcov \
		| sed -e 's/\([^:]*\)\.gcov: *function \([^ ]*\) called.*/\1: \2/' \
2750
		> coverage-untested-functions
2751 2752 2753

cover_db: coverage-report
	gcov2perl -db cover_db *.gcov
2754 2755 2756

cover_db_html: cover_db
	cover -report html -outputdir cover_db_html cover_db
A
Andi Kleen 已提交
2757