Advertisement
130s

Makefile_git_qnx

Jul 3rd, 2013
645
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 76.18 KB | None | 0 0
  1. # The default target of this Makefile is...
  2. all::
  3.  
  4. # Define V=1 to have a more verbose compile.
  5. #
  6. # Define SHELL_PATH to a POSIX shell if your /bin/sh is broken.
  7. #
  8. # Define SANE_TOOL_PATH to a colon-separated list of paths to prepend
  9. # to PATH if your tools in /usr/bin are broken.
  10. #
  11. # Define SOCKLEN_T to a suitable type (such as 'size_t') if your
  12. # system headers do not define a socklen_t type.
  13. #
  14. # Define INLINE to a suitable substitute (such as '__inline' or '') if git
  15. # fails to compile with errors about undefined inline functions or similar.
  16. #
  17. # Define SNPRINTF_RETURNS_BOGUS if your are on a system which snprintf()
  18. # or vsnprintf() return -1 instead of number of characters which would
  19. # have been written to the final string if enough space had been available.
  20. #
  21. # Define FREAD_READS_DIRECTORIES if your are on a system which succeeds
  22. # when attempting to read from an fopen'ed directory.
  23. #
  24. # Define NO_OPENSSL environment variable if you do not have OpenSSL.
  25. # This also implies BLK_SHA1.
  26. #
  27. # Define USE_LIBPCRE if you have and want to use libpcre. git-grep will be
  28. # able to use Perl-compatible regular expressions.
  29. #
  30. # Define LIBPCREDIR=/foo/bar if your libpcre header and library files are in
  31. # /foo/bar/include and /foo/bar/lib directories.
  32. #
  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. #
  37. # Define CURLDIR=/foo/bar if your curl header and library files are in
  38. # /foo/bar/include and /foo/bar/lib directories.
  39. #
  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. # Define EXPATDIR=/foo/bar if your expat header and library files are in
  44. # /foo/bar/include and /foo/bar/lib directories.
  45. #
  46. # Define EXPAT_NEEDS_XMLPARSE_H if you have an old version of expat (e.g.,
  47. # 1.1 or 1.2) that provides xmlparse.h instead of expat.h.
  48. #
  49. # Define NO_GETTEXT if you don't want Git output to be translated.
  50. # A translated Git requires GNU libintl or another gettext implementation,
  51. # plus libintl-perl at runtime.
  52. #
  53. # Define USE_GETTEXT_SCHEME and set it to 'fallthrough', if you don't trust
  54. # the installed gettext translation of the shell scripts output.
  55. #
  56. # Define HAVE_LIBCHARSET_H if you haven't set NO_GETTEXT and you can't
  57. # trust the langinfo.h's nl_langinfo(CODESET) function to return the
  58. # current character set. GNU and Solaris have a nl_langinfo(CODESET),
  59. # FreeBSD can use either, but MinGW and some others need to use
  60. # libcharset.h's locale_charset() instead.
  61. #
  62. # Define CHARSET_LIB to you need to link with library other than -liconv to
  63. # use locale_charset() function. On some platforms this needs to set to
  64. # -lcharset
  65. #
  66. # Define LIBC_CONTAINS_LIBINTL if your gettext implementation doesn't
  67. # need -lintl when linking.
  68. #
  69. # Define NO_MSGFMT_EXTENDED_OPTIONS if your implementation of msgfmt
  70. # doesn't support GNU extensions like --check and --statistics
  71. #
  72. # Define HAVE_PATHS_H if you have paths.h and want to use the default PATH
  73. # it specifies.
  74. #
  75. # Define NO_D_INO_IN_DIRENT if you don't have d_ino in your struct dirent.
  76. #
  77. # Define NO_D_TYPE_IN_DIRENT if your platform defines DT_UNKNOWN but lacks
  78. # d_type in struct dirent (Cygwin 1.5, fixed in Cygwin 1.7).
  79. #
  80. # Define HAVE_STRINGS_H if you have strings.h and need it for strcasecmp.
  81. #
  82. # Define NO_STRCASESTR if you don't have strcasestr.
  83. #
  84. # Define NO_MEMMEM if you don't have memmem.
  85. #
  86. # Define NO_GETPAGESIZE if you don't have getpagesize.
  87. #
  88. # Define NO_STRLCPY if you don't have strlcpy.
  89. #
  90. # Define NO_STRTOUMAX if you don't have both strtoimax and strtoumax in the
  91. # C library. If your compiler also does not support long long or does not have
  92. # strtoull, define NO_STRTOULL.
  93. #
  94. # Define NO_SETENV if you don't have setenv in the C library.
  95. #
  96. # Define NO_UNSETENV if you don't have unsetenv in the C library.
  97. #
  98. # Define NO_MKDTEMP if you don't have mkdtemp in the C library.
  99. #
  100. # Define MKDIR_WO_TRAILING_SLASH if your mkdir() can't deal with trailing slash.
  101. #
  102. # Define NO_MKSTEMPS if you don't have mkstemps in the C library.
  103. #
  104. # Define NO_FNMATCH if you don't have fnmatch in the C library.
  105. #
  106. # Define NO_FNMATCH_CASEFOLD if your fnmatch function doesn't have the
  107. # FNM_CASEFOLD GNU extension.
  108. #
  109. # Define USE_WILDMATCH if you want to use Git's wildmatch
  110. # implementation as fnmatch
  111. #
  112. # Define NO_GECOS_IN_PWENT if you don't have pw_gecos in struct passwd
  113. # in the C library.
  114. #
  115. # Define NO_LIBGEN_H if you don't have libgen.h.
  116. #
  117. # Define NEEDS_LIBGEN if your libgen needs -lgen when linking
  118. #
  119. # Define NO_SYS_SELECT_H if you don't have sys/select.h.
  120. #
  121. # Define NO_SYMLINK_HEAD if you never want .git/HEAD to be a symbolic link.
  122. # Enable it on Windows. By default, symrefs are still used.
  123. #
  124. # Define NO_SVN_TESTS if you want to skip time-consuming SVN interoperability
  125. # tests. These tests take up a significant amount of the total test time
  126. # but are not needed unless you plan to talk to SVN repos.
  127. #
  128. # Define NO_FINK if you are building on Darwin/Mac OS X, have Fink
  129. # installed in /sw, but don't want GIT to link against any libraries
  130. # installed there. If defined you may specify your own (or Fink's)
  131. # include directories and library directories by defining CFLAGS
  132. # and LDFLAGS appropriately.
  133. #
  134. # Define NO_DARWIN_PORTS if you are building on Darwin/Mac OS X,
  135. # have DarwinPorts installed in /opt/local, but don't want GIT to
  136. # link against any libraries installed there. If defined you may
  137. # specify your own (or DarwinPort's) include directories and
  138. # library directories by defining CFLAGS and LDFLAGS appropriately.
  139. #
  140. # Define BLK_SHA1 environment variable to make use of the bundled
  141. # optimized C SHA1 routine.
  142. #
  143. # Define PPC_SHA1 environment variable when running make to make use of
  144. # a bundled SHA1 routine optimized for PowerPC.
  145. #
  146. # Define NEEDS_CRYPTO_WITH_SSL if you need -lcrypto when using -lssl (Darwin).
  147. #
  148. # Define NEEDS_SSL_WITH_CRYPTO if you need -lssl when using -lcrypto (Darwin).
  149. #
  150. # Define NEEDS_SSL_WITH_CURL if you need -lssl with -lcurl (Minix).
  151. #
  152. # Define NEEDS_IDN_WITH_CURL if you need -lidn when using -lcurl (Minix).
  153. #
  154. # Define NEEDS_LIBICONV if linking with libc is not enough (Darwin).
  155. #
  156. # Define NEEDS_LIBINTL_BEFORE_LIBICONV if you need libintl before libiconv.
  157. #
  158. # Define NO_INTPTR_T if you don't have intptr_t nor uintptr_t.
  159. #
  160. # Define NO_UINTMAX_T if you don't have uintmax_t.
  161. #
  162. # Define NEEDS_SOCKET if linking with libc is not enough (SunOS,
  163. # Patrick Mauritz).
  164. #
  165. # Define NEEDS_RESOLV if linking with -lnsl and/or -lsocket is not enough.
  166. # Notably on Solaris hstrerror resides in libresolv and on Solaris 7
  167. # inet_ntop and inet_pton additionally reside there.
  168. #
  169. # Define NO_MMAP if you want to avoid mmap.
  170. #
  171. # Define NO_SYS_POLL_H if you don't have sys/poll.h.
  172. #
  173. # Define NO_POLL if you do not have or don't want to use poll().
  174. # This also implies NO_SYS_POLL_H.
  175. #
  176. # Define NEEDS_SYS_PARAM_H if you need to include sys/param.h to compile,
  177. # *PLEASE* REPORT to git@vger.kernel.org if your platform needs this;
  178. # we want to know more about the issue.
  179. #
  180. # Define NO_PTHREADS if you do not have or do not want to use Pthreads.
  181. #
  182. # Define NO_PREAD if you have a problem with pread() system call (e.g.
  183. # cygwin1.dll before v1.5.22).
  184. #
  185. # Define NO_SETITIMER if you don't have setitimer()
  186. #
  187. # Define NO_STRUCT_ITIMERVAL if you don't have struct itimerval
  188. # This also implies NO_SETITIMER
  189. #
  190. # Define NO_THREAD_SAFE_PREAD if your pread() implementation is not
  191. # thread-safe. (e.g. compat/pread.c or cygwin)
  192. #
  193. # Define NO_FAST_WORKING_DIRECTORY if accessing objects in pack files is
  194. # generally faster on your platform than accessing the working directory.
  195. #
  196. # Define NO_TRUSTABLE_FILEMODE if your filesystem may claim to support
  197. # the executable mode bit, but doesn't really do so.
  198. #
  199. # Define NO_IPV6 if you lack IPv6 support and getaddrinfo().
  200. #
  201. # Define NO_UNIX_SOCKETS if your system does not offer unix sockets.
  202. #
  203. # Define NO_SOCKADDR_STORAGE if your platform does not have struct
  204. # sockaddr_storage.
  205. #
  206. # Define NO_ICONV if your libc does not properly support iconv.
  207. #
  208. # Define OLD_ICONV if your library has an old iconv(), where the second
  209. # (input buffer pointer) parameter is declared with type (const char **).
  210. #
  211. # Define NO_DEFLATE_BOUND if your zlib does not have deflateBound.
  212. #
  213. # Define NO_R_TO_GCC_LINKER if your gcc does not like "-R/path/lib"
  214. # that tells runtime paths to dynamic libraries;
  215. # "-Wl,-rpath=/path/lib" is used instead.
  216. #
  217. # Define NO_NORETURN if using buggy versions of gcc 4.6+ and profile feedback,
  218. # as the compiler can crash (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49299)
  219. #
  220. # Define USE_NSEC below if you want git to care about sub-second file mtimes
  221. # and ctimes. Note that you need recent glibc (at least 2.2.4) for this, and
  222. # it will BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely
  223. # randomly break unless your underlying filesystem supports those sub-second
  224. # times (my ext3 doesn't).
  225. #
  226. # Define USE_ST_TIMESPEC if your "struct stat" uses "st_ctimespec" instead of
  227. # "st_ctim"
  228. #
  229. # Define NO_NSEC if your "struct stat" does not have "st_ctim.tv_nsec"
  230. # available. This automatically turns USE_NSEC off.
  231. #
  232. # Define USE_STDEV below if you want git to care about the underlying device
  233. # change being considered an inode change from the update-index perspective.
  234. #
  235. # Define NO_ST_BLOCKS_IN_STRUCT_STAT if your platform does not have st_blocks
  236. # field that counts the on-disk footprint in 512-byte blocks.
  237. #
  238. # Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72
  239. # (not v1.73 or v1.71).
  240. #
  241. # Define ASCIIDOC_ROFF if your DocBook XSL does not escape raw roff directives
  242. # (versions 1.68.1 through v1.72).
  243. #
  244. # Define GNU_ROFF if your target system uses GNU groff. This forces
  245. # apostrophes to be ASCII so that cut&pasting examples to the shell
  246. # will work.
  247. #
  248. # Define PERL_PATH to the path of your Perl binary (usually /usr/bin/perl).
  249. #
  250. # Define NO_PERL_MAKEMAKER if you cannot use Makefiles generated by perl's
  251. # MakeMaker (e.g. using ActiveState under Cygwin).
  252. #
  253. # Define NO_PERL if you do not want Perl scripts or libraries at all.
  254. #
  255. # Define PYTHON_PATH to the path of your Python binary (often /usr/bin/python
  256. # but /usr/bin/python2.7 on some platforms).
  257. #
  258. # Define NO_PYTHON if you do not want Python scripts or libraries at all.
  259. #
  260. # Define NO_TCLTK if you do not want Tcl/Tk GUI.
  261. #
  262. # The TCL_PATH variable governs the location of the Tcl interpreter
  263. # used to optimize git-gui for your system. Only used if NO_TCLTK
  264. # is not set. Defaults to the bare 'tclsh'.
  265. #
  266. # The TCLTK_PATH variable governs the location of the Tcl/Tk interpreter.
  267. # If not set it defaults to the bare 'wish'. If it is set to the empty
  268. # string then NO_TCLTK will be forced (this is used by configure script).
  269. #
  270. # Define INTERNAL_QSORT to use Git's implementation of qsort(), which
  271. # is a simplified version of the merge sort used in glibc. This is
  272. # recommended if Git triggers O(n^2) behavior in your platform's qsort().
  273. #
  274. # Define UNRELIABLE_FSTAT if your system's fstat does not return the same
  275. # information on a not yet closed file that lstat would return for the same
  276. # file after it was closed.
  277. #
  278. # Define OBJECT_CREATION_USES_RENAMES if your operating systems has problems
  279. # when hardlinking a file to another name and unlinking the original file right
  280. # away (some NTFS drivers seem to zero the contents in that scenario).
  281. #
  282. # Define NO_CROSS_DIRECTORY_HARDLINKS if you plan to distribute the installed
  283. # programs as a tar, where bin/ and libexec/ might be on different file systems.
  284. #
  285. # Define NO_INSTALL_HARDLINKS if you prefer to use either symbolic links or
  286. # copies to install built-in git commands e.g. git-cat-file.
  287. #
  288. # Define USE_NED_ALLOCATOR if you want to replace the platforms default
  289. # memory allocators with the nedmalloc allocator written by Niall Douglas.
  290. #
  291. # Define NO_REGEX if you have no or inferior regex support in your C library.
  292. #
  293. # Define CYGWIN_V15_WIN32API if you are using Cygwin v1.7.x but are not
  294. # using the current w32api packages. The recommended approach, however,
  295. # is to update your installation if compilation errors occur.
  296. #
  297. # Define HAVE_DEV_TTY if your system can open /dev/tty to interact with the
  298. # user.
  299. #
  300. # Define GETTEXT_POISON if you are debugging the choice of strings marked
  301. # for translation. In a GETTEXT_POISON build, you can turn all strings marked
  302. # for translation into gibberish by setting the GIT_GETTEXT_POISON variable
  303. # (to any value) in your environment.
  304. #
  305. # Define JSMIN to point to JavaScript minifier that functions as
  306. # a filter to have gitweb.js minified.
  307. #
  308. # Define CSSMIN to point to a CSS minifier in order to generate a minified
  309. # version of gitweb.css
  310. #
  311. # Define DEFAULT_PAGER to a sensible pager command (defaults to "less") if
  312. # you want to use something different. The value will be interpreted by the
  313. # shell at runtime when it is used.
  314. #
  315. # Define DEFAULT_EDITOR to a sensible editor command (defaults to "vi") if you
  316. # want to use something different. The value will be interpreted by the shell
  317. # if necessary when it is used. Examples:
  318. #
  319. # DEFAULT_EDITOR='~/bin/vi',
  320. # DEFAULT_EDITOR='$GIT_FALLBACK_EDITOR',
  321. # DEFAULT_EDITOR='"C:\Program Files\Vim\gvim.exe" --nofork'
  322. #
  323. # Define COMPUTE_HEADER_DEPENDENCIES to "yes" if you want dependencies on
  324. # header files to be automatically computed, to avoid rebuilding objects when
  325. # an unrelated header file changes. Define it to "no" to use the hard-coded
  326. # dependency rules. The default is "auto", which means to use computed header
  327. # dependencies if your compiler is detected to support it.
  328. #
  329. # Define CHECK_HEADER_DEPENDENCIES to check for problems in the hard-coded
  330. # dependency rules.
  331. #
  332. # Define NATIVE_CRLF if your platform uses CRLF for line endings.
  333. #
  334. # Define XDL_FAST_HASH to use an alternative line-hashing method in
  335. # the diff algorithm. It gives a nice speedup if your processor has
  336. # fast unaligned word loads. Does NOT work on big-endian systems!
  337. # Enabled by default on x86_64.
  338. #
  339. # Define GIT_USER_AGENT if you want to change how git identifies itself during
  340. # network interactions. The default is "git/$(GIT_VERSION)".
  341. #
  342. # Define DEFAULT_HELP_FORMAT to "man", "info" or "html"
  343. # (defaults to "man") if you want to have a different default when
  344. # "git help" is called without a parameter specifying the format.
  345.  
  346. GIT-VERSION-FILE: FORCE
  347. @$(SHELL_PATH) ./GIT-VERSION-GEN
  348. -include GIT-VERSION-FILE
  349.  
  350. # CFLAGS and LDFLAGS are for the users to override from the command line.
  351.  
  352. CFLAGS = -g -O2 -Wall
  353. LDFLAGS =
  354. ALL_CFLAGS = $(CPPFLAGS) $(CFLAGS)
  355. ALL_LDFLAGS = $(LDFLAGS)
  356. STRIP ?= strip
  357.  
  358. # Among the variables below, these:
  359. # gitexecdir
  360. # template_dir
  361. # sysconfdir
  362. # can be specified as a relative path some/where/else;
  363. # this is interpreted as relative to $(prefix) and "git" at
  364. # runtime figures out where they are based on the path to the executable.
  365. # Additionally, the following will be treated as relative by "git" if they
  366. # begin with "$(prefix)/":
  367. # mandir
  368. # infodir
  369. # htmldir
  370. # This can help installing the suite in a relocatable way.
  371.  
  372. prefix = $(HOME)
  373. bindir_relative = bin
  374. bindir = $(prefix)/$(bindir_relative)
  375. mandir = $(prefix)/share/man
  376. infodir = $(prefix)/share/info
  377. gitexecdir = libexec/git-core
  378. mergetoolsdir = $(gitexecdir)/mergetools
  379. sharedir = $(prefix)/share
  380. gitwebdir = $(sharedir)/gitweb
  381. localedir = $(sharedir)/locale
  382. template_dir = share/git-core/templates
  383. htmldir = $(prefix)/share/doc/git-doc
  384. ETC_GITCONFIG = $(sysconfdir)/gitconfig
  385. ETC_GITATTRIBUTES = $(sysconfdir)/gitattributes
  386. lib = lib
  387. # DESTDIR =
  388. pathsep = :
  389.  
  390. mandir_relative = $(patsubst $(prefix)/%,%,$(mandir))
  391. infodir_relative = $(patsubst $(prefix)/%,%,$(infodir))
  392. htmldir_relative = $(patsubst $(prefix)/%,%,$(htmldir))
  393.  
  394. export prefix bindir sharedir sysconfdir gitwebdir localedir
  395.  
  396. CC = cc
  397. AR = ar
  398. RM = rm -f
  399. DIFF = diff
  400. TAR = tar
  401. FIND = find
  402. INSTALL = install
  403. RPMBUILD = rpmbuild
  404. TCL_PATH = tclsh
  405. TCLTK_PATH = wish
  406. XGETTEXT = xgettext
  407. MSGFMT = msgfmt
  408. PTHREAD_LIBS = -lpthread
  409. PTHREAD_CFLAGS =
  410. GCOV = gcov
  411.  
  412. export TCL_PATH TCLTK_PATH
  413.  
  414. SPARSE_FLAGS =
  415.  
  416.  
  417.  
  418. ### --- END CONFIGURATION SECTION ---
  419.  
  420. # Those must not be GNU-specific; they are shared with perl/ which may
  421. # be built by a different compiler. (Note that this is an artifact now
  422. # but it still might be nice to keep that distinction.)
  423. BASIC_CFLAGS = -I.
  424. BASIC_LDFLAGS =
  425.  
  426. # Guard against environment variables
  427. BUILTIN_OBJS =
  428. BUILT_INS =
  429. COMPAT_CFLAGS =
  430. COMPAT_OBJS =
  431. XDIFF_OBJS =
  432. VCSSVN_OBJS =
  433. GENERATED_H =
  434. EXTRA_CPPFLAGS =
  435. LIB_H =
  436. LIB_OBJS =
  437. PROGRAM_OBJS =
  438. PROGRAMS =
  439. SCRIPT_PERL =
  440. SCRIPT_PYTHON =
  441. SCRIPT_SH =
  442. SCRIPT_LIB =
  443. TEST_PROGRAMS_NEED_X =
  444.  
  445. # Having this variable in your environment would break pipelines because
  446. # you cause "cd" to echo its destination to stdout. It can also take
  447. # scripts to unexpected places. If you like CDPATH, define it for your
  448. # interactive shell sessions without exporting it.
  449. unexport CDPATH
  450.  
  451. SCRIPT_SH += git-am.sh
  452. SCRIPT_SH += git-bisect.sh
  453. SCRIPT_SH += git-difftool--helper.sh
  454. SCRIPT_SH += git-filter-branch.sh
  455. SCRIPT_SH += git-lost-found.sh
  456. SCRIPT_SH += git-merge-octopus.sh
  457. SCRIPT_SH += git-merge-one-file.sh
  458. SCRIPT_SH += git-merge-resolve.sh
  459. SCRIPT_SH += git-mergetool.sh
  460. SCRIPT_SH += git-pull.sh
  461. SCRIPT_SH += git-quiltimport.sh
  462. SCRIPT_SH += git-rebase.sh
  463. SCRIPT_SH += git-repack.sh
  464. SCRIPT_SH += git-request-pull.sh
  465. SCRIPT_SH += git-stash.sh
  466. SCRIPT_SH += git-submodule.sh
  467. SCRIPT_SH += git-web--browse.sh
  468.  
  469. SCRIPT_LIB += git-mergetool--lib
  470. SCRIPT_LIB += git-parse-remote
  471. SCRIPT_LIB += git-rebase--am
  472. SCRIPT_LIB += git-rebase--interactive
  473. SCRIPT_LIB += git-rebase--merge
  474. SCRIPT_LIB += git-sh-setup
  475. SCRIPT_LIB += git-sh-i18n
  476.  
  477. SCRIPT_PERL += git-add--interactive.perl
  478. SCRIPT_PERL += git-difftool.perl
  479. SCRIPT_PERL += git-archimport.perl
  480. SCRIPT_PERL += git-cvsexportcommit.perl
  481. SCRIPT_PERL += git-cvsimport.perl
  482. SCRIPT_PERL += git-cvsserver.perl
  483. SCRIPT_PERL += git-relink.perl
  484. SCRIPT_PERL += git-send-email.perl
  485. SCRIPT_PERL += git-svn.perl
  486.  
  487. SCRIPT_PYTHON += git-remote-testpy.py
  488. SCRIPT_PYTHON += git-p4.py
  489.  
  490. # Generated files for scripts
  491. SCRIPT_SH_GEN = $(patsubst %.sh,%,$(SCRIPT_SH))
  492. SCRIPT_PERL_GEN = $(patsubst %.perl,%,$(SCRIPT_PERL))
  493. SCRIPT_PYTHON_GEN = $(patsubst %.py,%,$(SCRIPT_PYTHON))
  494.  
  495. # Individual rules to allow e.g.
  496. # "make -C ../.. SCRIPT_PERL=contrib/foo/bar.perl build-perl-script"
  497. # from subdirectories like contrib/*/
  498. .PHONY: build-perl-script build-sh-script build-python-script
  499. build-perl-script: $(SCRIPT_PERL_GEN)
  500. build-sh-script: $(SCRIPT_SH_GEN)
  501. build-python-script: $(SCRIPT_PYTHON_GEN)
  502.  
  503. .PHONY: install-perl-script install-sh-script install-python-script
  504. install-sh-script: $(SCRIPT_SH_GEN)
  505. $(INSTALL) $(SCRIPT_SH_GEN) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
  506. install-perl-script: $(SCRIPT_PERL_GEN)
  507. $(INSTALL) $(SCRIPT_PERL_GEN) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
  508. install-python-script: $(SCRIPT_PYTHON_GEN)
  509. $(INSTALL) $(SCRIPT_PYTHON_GEN) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
  510.  
  511. .PHONY: clean-perl-script clean-sh-script clean-python-script
  512. clean-sh-script:
  513. $(RM) $(SCRIPT_SH_GEN)
  514. clean-perl-script:
  515. $(RM) $(SCRIPT_PERL_GEN)
  516. clean-python-script:
  517. $(RM) $(SCRIPT_PYTHON_GEN)
  518.  
  519. SCRIPTS = $(SCRIPT_SH_GEN) \
  520. $(SCRIPT_PERL_GEN) \
  521. $(SCRIPT_PYTHON_GEN) \
  522. git-instaweb
  523.  
  524. ETAGS_TARGET = TAGS
  525.  
  526. # Empty...
  527. EXTRA_PROGRAMS =
  528.  
  529. # ... and all the rest that could be moved out of bindir to gitexecdir
  530. PROGRAMS += $(EXTRA_PROGRAMS)
  531.  
  532. PROGRAM_OBJS += credential-store.o
  533. PROGRAM_OBJS += daemon.o
  534. PROGRAM_OBJS += fast-import.o
  535. PROGRAM_OBJS += http-backend.o
  536. PROGRAM_OBJS += imap-send.o
  537. PROGRAM_OBJS += sh-i18n--envsubst.o
  538. PROGRAM_OBJS += shell.o
  539. PROGRAM_OBJS += show-index.o
  540. PROGRAM_OBJS += upload-pack.o
  541. PROGRAM_OBJS += remote-testsvn.o
  542.  
  543. # Binary suffix, set to .exe for Windows builds
  544. X =
  545.  
  546. PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS))
  547.  
  548. TEST_PROGRAMS_NEED_X += test-chmtime
  549. TEST_PROGRAMS_NEED_X += test-ctype
  550. TEST_PROGRAMS_NEED_X += test-date
  551. TEST_PROGRAMS_NEED_X += test-delta
  552. TEST_PROGRAMS_NEED_X += test-dump-cache-tree
  553. TEST_PROGRAMS_NEED_X += test-genrandom
  554. TEST_PROGRAMS_NEED_X += test-index-version
  555. TEST_PROGRAMS_NEED_X += test-line-buffer
  556. TEST_PROGRAMS_NEED_X += test-match-trees
  557. TEST_PROGRAMS_NEED_X += test-mergesort
  558. TEST_PROGRAMS_NEED_X += test-mktemp
  559. TEST_PROGRAMS_NEED_X += test-parse-options
  560. TEST_PROGRAMS_NEED_X += test-path-utils
  561. TEST_PROGRAMS_NEED_X += test-regex
  562. TEST_PROGRAMS_NEED_X += test-revision-walking
  563. TEST_PROGRAMS_NEED_X += test-run-command
  564. TEST_PROGRAMS_NEED_X += test-scrap-cache-tree
  565. TEST_PROGRAMS_NEED_X += test-sha1
  566. TEST_PROGRAMS_NEED_X += test-sigchain
  567. TEST_PROGRAMS_NEED_X += test-string-list
  568. TEST_PROGRAMS_NEED_X += test-subprocess
  569. TEST_PROGRAMS_NEED_X += test-svn-fe
  570. TEST_PROGRAMS_NEED_X += test-wildmatch
  571.  
  572. TEST_PROGRAMS = $(patsubst %,%$X,$(TEST_PROGRAMS_NEED_X))
  573.  
  574. # List built-in command $C whose implementation cmd_$C() is not in
  575. # builtin/$C.o but is linked in as part of some other command.
  576. BUILT_INS += $(patsubst builtin/%.o,git-%$X,$(BUILTIN_OBJS))
  577.  
  578. BUILT_INS += git-cherry$X
  579. BUILT_INS += git-cherry-pick$X
  580. BUILT_INS += git-format-patch$X
  581. BUILT_INS += git-fsck-objects$X
  582. BUILT_INS += git-get-tar-commit-id$X
  583. BUILT_INS += git-init$X
  584. BUILT_INS += git-merge-subtree$X
  585. BUILT_INS += git-peek-remote$X
  586. BUILT_INS += git-repo-config$X
  587. BUILT_INS += git-show$X
  588. BUILT_INS += git-stage$X
  589. BUILT_INS += git-status$X
  590. BUILT_INS += git-whatchanged$X
  591.  
  592. # what 'all' will build and 'install' will install in gitexecdir,
  593. # excluding programs for built-in commands
  594. ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
  595.  
  596. # what 'all' will build but not install in gitexecdir
  597. OTHER_PROGRAMS = git$X
  598.  
  599. # what test wrappers are needed and 'install' will install, in bindir
  600. BINDIR_PROGRAMS_NEED_X += git
  601. BINDIR_PROGRAMS_NEED_X += git-upload-pack
  602. BINDIR_PROGRAMS_NEED_X += git-receive-pack
  603. BINDIR_PROGRAMS_NEED_X += git-upload-archive
  604. BINDIR_PROGRAMS_NEED_X += git-shell
  605.  
  606. BINDIR_PROGRAMS_NO_X += git-cvsserver
  607.  
  608. # Set paths to tools early so that they can be used for version tests.
  609. ifndef SHELL_PATH
  610. SHELL_PATH = /bin/sh
  611. endif
  612. ifndef PERL_PATH
  613. PERL_PATH = /usr/bin/perl
  614. endif
  615. ifndef PYTHON_PATH
  616. PYTHON_PATH = /usr/bin/python
  617. endif
  618.  
  619. export PERL_PATH
  620. export PYTHON_PATH
  621.  
  622. LIB_FILE = libgit.a
  623. XDIFF_LIB = xdiff/lib.a
  624. VCSSVN_LIB = vcs-svn/lib.a
  625.  
  626. GENERATED_H += common-cmds.h
  627.  
  628. LIB_H += advice.h
  629. LIB_H += archive.h
  630. LIB_H += argv-array.h
  631. LIB_H += attr.h
  632. LIB_H += bisect.h
  633. LIB_H += blob.h
  634. LIB_H += branch.h
  635. LIB_H += builtin.h
  636. LIB_H += bulk-checkin.h
  637. LIB_H += bundle.h
  638. LIB_H += cache-tree.h
  639. LIB_H += cache.h
  640. LIB_H += color.h
  641. LIB_H += column.h
  642. LIB_H += commit.h
  643. LIB_H += compat/bswap.h
  644. LIB_H += compat/cygwin.h
  645. LIB_H += compat/mingw.h
  646. LIB_H += compat/obstack.h
  647. LIB_H += compat/poll/poll.h
  648. LIB_H += compat/precompose_utf8.h
  649. LIB_H += compat/terminal.h
  650. LIB_H += compat/win32/dirent.h
  651. LIB_H += compat/win32/pthread.h
  652. LIB_H += compat/win32/syslog.h
  653. LIB_H += connected.h
  654. LIB_H += convert.h
  655. LIB_H += credential.h
  656. LIB_H += csum-file.h
  657. LIB_H += decorate.h
  658. LIB_H += delta.h
  659. LIB_H += diff.h
  660. LIB_H += diffcore.h
  661. LIB_H += dir.h
  662. LIB_H += exec_cmd.h
  663. LIB_H += fetch-pack.h
  664. LIB_H += fmt-merge-msg.h
  665. LIB_H += fsck.h
  666. LIB_H += gettext.h
  667. LIB_H += git-compat-util.h
  668. LIB_H += gpg-interface.h
  669. LIB_H += graph.h
  670. LIB_H += grep.h
  671. LIB_H += hash.h
  672. LIB_H += help.h
  673. LIB_H += http.h
  674. LIB_H += kwset.h
  675. LIB_H += levenshtein.h
  676. LIB_H += list-objects.h
  677. LIB_H += ll-merge.h
  678. LIB_H += log-tree.h
  679. LIB_H += mailmap.h
  680. LIB_H += merge-blobs.h
  681. LIB_H += merge-recursive.h
  682. LIB_H += mergesort.h
  683. LIB_H += notes-cache.h
  684. LIB_H += notes-merge.h
  685. LIB_H += notes.h
  686. LIB_H += object.h
  687. LIB_H += pack-refs.h
  688. LIB_H += pack-revindex.h
  689. LIB_H += pack.h
  690. LIB_H += parse-options.h
  691. LIB_H += patch-ids.h
  692. LIB_H += pathspec.h
  693. LIB_H += pkt-line.h
  694. LIB_H += progress.h
  695. LIB_H += prompt.h
  696. LIB_H += quote.h
  697. LIB_H += reachable.h
  698. LIB_H += reflog-walk.h
  699. LIB_H += refs.h
  700. LIB_H += remote.h
  701. LIB_H += rerere.h
  702. LIB_H += resolve-undo.h
  703. LIB_H += revision.h
  704. LIB_H += run-command.h
  705. LIB_H += send-pack.h
  706. LIB_H += sequencer.h
  707. LIB_H += sha1-array.h
  708. LIB_H += sha1-lookup.h
  709. LIB_H += shortlog.h
  710. LIB_H += sideband.h
  711. LIB_H += sigchain.h
  712. LIB_H += strbuf.h
  713. LIB_H += streaming.h
  714. LIB_H += string-list.h
  715. LIB_H += submodule.h
  716. LIB_H += tag.h
  717. LIB_H += tar.h
  718. LIB_H += thread-utils.h
  719. LIB_H += transport.h
  720. LIB_H += tree-walk.h
  721. LIB_H += tree.h
  722. LIB_H += unpack-trees.h
  723. LIB_H += url.h
  724. LIB_H += userdiff.h
  725. LIB_H += utf8.h
  726. LIB_H += varint.h
  727. LIB_H += vcs-svn/fast_export.h
  728. LIB_H += vcs-svn/line_buffer.h
  729. LIB_H += vcs-svn/repo_tree.h
  730. LIB_H += vcs-svn/sliding_window.h
  731. LIB_H += vcs-svn/svndiff.h
  732. LIB_H += vcs-svn/svndump.h
  733. LIB_H += walker.h
  734. LIB_H += wildmatch.h
  735. LIB_H += wt-status.h
  736. LIB_H += xdiff-interface.h
  737. LIB_H += xdiff/xdiff.h
  738. LIB_H += xdiff/xdiffi.h
  739. LIB_H += xdiff/xemit.h
  740. LIB_H += xdiff/xinclude.h
  741. LIB_H += xdiff/xmacros.h
  742. LIB_H += xdiff/xprepare.h
  743. LIB_H += xdiff/xtypes.h
  744. LIB_H += xdiff/xutils.h
  745.  
  746. LIB_OBJS += abspath.o
  747. LIB_OBJS += advice.o
  748. LIB_OBJS += alias.o
  749. LIB_OBJS += alloc.o
  750. LIB_OBJS += archive.o
  751. LIB_OBJS += archive-tar.o
  752. LIB_OBJS += archive-zip.o
  753. LIB_OBJS += argv-array.o
  754. LIB_OBJS += attr.o
  755. LIB_OBJS += base85.o
  756. LIB_OBJS += bisect.o
  757. LIB_OBJS += blob.o
  758. LIB_OBJS += branch.o
  759. LIB_OBJS += bulk-checkin.o
  760. LIB_OBJS += bundle.o
  761. LIB_OBJS += cache-tree.o
  762. LIB_OBJS += color.o
  763. LIB_OBJS += column.o
  764. LIB_OBJS += combine-diff.o
  765. LIB_OBJS += commit.o
  766. LIB_OBJS += compat/obstack.o
  767. LIB_OBJS += compat/terminal.o
  768. LIB_OBJS += config.o
  769. LIB_OBJS += connect.o
  770. LIB_OBJS += connected.o
  771. LIB_OBJS += convert.o
  772. LIB_OBJS += copy.o
  773. LIB_OBJS += credential.o
  774. LIB_OBJS += csum-file.o
  775. LIB_OBJS += ctype.o
  776. LIB_OBJS += date.o
  777. LIB_OBJS += decorate.o
  778. LIB_OBJS += diffcore-break.o
  779. LIB_OBJS += diffcore-delta.o
  780. LIB_OBJS += diffcore-order.o
  781. LIB_OBJS += diffcore-pickaxe.o
  782. LIB_OBJS += diffcore-rename.o
  783. LIB_OBJS += diff-delta.o
  784. LIB_OBJS += diff-lib.o
  785. LIB_OBJS += diff-no-index.o
  786. LIB_OBJS += diff.o
  787. LIB_OBJS += dir.o
  788. LIB_OBJS += editor.o
  789. LIB_OBJS += entry.o
  790. LIB_OBJS += environment.o
  791. LIB_OBJS += exec_cmd.o
  792. LIB_OBJS += fetch-pack.o
  793. LIB_OBJS += fsck.o
  794. LIB_OBJS += gettext.o
  795. LIB_OBJS += gpg-interface.o
  796. LIB_OBJS += graph.o
  797. LIB_OBJS += grep.o
  798. LIB_OBJS += hash.o
  799. LIB_OBJS += help.o
  800. LIB_OBJS += hex.o
  801. LIB_OBJS += ident.o
  802. LIB_OBJS += kwset.o
  803. LIB_OBJS += levenshtein.o
  804. LIB_OBJS += list-objects.o
  805. LIB_OBJS += ll-merge.o
  806. LIB_OBJS += lockfile.o
  807. LIB_OBJS += log-tree.o
  808. LIB_OBJS += mailmap.o
  809. LIB_OBJS += match-trees.o
  810. LIB_OBJS += merge.o
  811. LIB_OBJS += merge-blobs.o
  812. LIB_OBJS += merge-recursive.o
  813. LIB_OBJS += mergesort.o
  814. LIB_OBJS += name-hash.o
  815. LIB_OBJS += notes.o
  816. LIB_OBJS += notes-cache.o
  817. LIB_OBJS += notes-merge.o
  818. LIB_OBJS += object.o
  819. LIB_OBJS += pack-check.o
  820. LIB_OBJS += pack-refs.o
  821. LIB_OBJS += pack-revindex.o
  822. LIB_OBJS += pack-write.o
  823. LIB_OBJS += pager.o
  824. LIB_OBJS += parse-options.o
  825. LIB_OBJS += parse-options-cb.o
  826. LIB_OBJS += patch-delta.o
  827. LIB_OBJS += patch-ids.o
  828. LIB_OBJS += path.o
  829. LIB_OBJS += pathspec.o
  830. LIB_OBJS += pkt-line.o
  831. LIB_OBJS += preload-index.o
  832. LIB_OBJS += pretty.o
  833. LIB_OBJS += progress.o
  834. LIB_OBJS += prompt.o
  835. LIB_OBJS += quote.o
  836. LIB_OBJS += reachable.o
  837. LIB_OBJS += read-cache.o
  838. LIB_OBJS += reflog-walk.o
  839. LIB_OBJS += refs.o
  840. LIB_OBJS += remote.o
  841. LIB_OBJS += replace_object.o
  842. LIB_OBJS += rerere.o
  843. LIB_OBJS += resolve-undo.o
  844. LIB_OBJS += revision.o
  845. LIB_OBJS += run-command.o
  846. LIB_OBJS += send-pack.o
  847. LIB_OBJS += sequencer.o
  848. LIB_OBJS += server-info.o
  849. LIB_OBJS += setup.o
  850. LIB_OBJS += sha1-array.o
  851. LIB_OBJS += sha1-lookup.o
  852. LIB_OBJS += sha1_file.o
  853. LIB_OBJS += sha1_name.o
  854. LIB_OBJS += shallow.o
  855. LIB_OBJS += sideband.o
  856. LIB_OBJS += sigchain.o
  857. LIB_OBJS += strbuf.o
  858. LIB_OBJS += streaming.o
  859. LIB_OBJS += string-list.o
  860. LIB_OBJS += submodule.o
  861. LIB_OBJS += symlinks.o
  862. LIB_OBJS += tag.o
  863. LIB_OBJS += trace.o
  864. LIB_OBJS += transport.o
  865. LIB_OBJS += transport-helper.o
  866. LIB_OBJS += tree-diff.o
  867. LIB_OBJS += tree.o
  868. LIB_OBJS += tree-walk.o
  869. LIB_OBJS += unpack-trees.o
  870. LIB_OBJS += url.o
  871. LIB_OBJS += usage.o
  872. LIB_OBJS += userdiff.o
  873. LIB_OBJS += utf8.o
  874. LIB_OBJS += varint.o
  875. LIB_OBJS += version.o
  876. LIB_OBJS += walker.o
  877. LIB_OBJS += wildmatch.o
  878. LIB_OBJS += wrapper.o
  879. LIB_OBJS += write_or_die.o
  880. LIB_OBJS += ws.o
  881. LIB_OBJS += wt-status.o
  882. LIB_OBJS += xdiff-interface.o
  883. LIB_OBJS += zlib.o
  884.  
  885. BUILTIN_OBJS += builtin/add.o
  886. BUILTIN_OBJS += builtin/annotate.o
  887. BUILTIN_OBJS += builtin/apply.o
  888. BUILTIN_OBJS += builtin/archive.o
  889. BUILTIN_OBJS += builtin/bisect--helper.o
  890. BUILTIN_OBJS += builtin/blame.o
  891. BUILTIN_OBJS += builtin/branch.o
  892. BUILTIN_OBJS += builtin/bundle.o
  893. BUILTIN_OBJS += builtin/cat-file.o
  894. BUILTIN_OBJS += builtin/check-attr.o
  895. BUILTIN_OBJS += builtin/check-ignore.o
  896. BUILTIN_OBJS += builtin/check-ref-format.o
  897. BUILTIN_OBJS += builtin/checkout-index.o
  898. BUILTIN_OBJS += builtin/checkout.o
  899. BUILTIN_OBJS += builtin/clean.o
  900. BUILTIN_OBJS += builtin/clone.o
  901. BUILTIN_OBJS += builtin/column.o
  902. BUILTIN_OBJS += builtin/commit-tree.o
  903. BUILTIN_OBJS += builtin/commit.o
  904. BUILTIN_OBJS += builtin/config.o
  905. BUILTIN_OBJS += builtin/count-objects.o
  906. BUILTIN_OBJS += builtin/credential.o
  907. BUILTIN_OBJS += builtin/describe.o
  908. BUILTIN_OBJS += builtin/diff-files.o
  909. BUILTIN_OBJS += builtin/diff-index.o
  910. BUILTIN_OBJS += builtin/diff-tree.o
  911. BUILTIN_OBJS += builtin/diff.o
  912. BUILTIN_OBJS += builtin/fast-export.o
  913. BUILTIN_OBJS += builtin/fetch-pack.o
  914. BUILTIN_OBJS += builtin/fetch.o
  915. BUILTIN_OBJS += builtin/fmt-merge-msg.o
  916. BUILTIN_OBJS += builtin/for-each-ref.o
  917. BUILTIN_OBJS += builtin/fsck.o
  918. BUILTIN_OBJS += builtin/gc.o
  919. BUILTIN_OBJS += builtin/grep.o
  920. BUILTIN_OBJS += builtin/hash-object.o
  921. BUILTIN_OBJS += builtin/help.o
  922. BUILTIN_OBJS += builtin/index-pack.o
  923. BUILTIN_OBJS += builtin/init-db.o
  924. BUILTIN_OBJS += builtin/log.o
  925. BUILTIN_OBJS += builtin/ls-files.o
  926. BUILTIN_OBJS += builtin/ls-remote.o
  927. BUILTIN_OBJS += builtin/ls-tree.o
  928. BUILTIN_OBJS += builtin/mailinfo.o
  929. BUILTIN_OBJS += builtin/mailsplit.o
  930. BUILTIN_OBJS += builtin/merge.o
  931. BUILTIN_OBJS += builtin/merge-base.o
  932. BUILTIN_OBJS += builtin/merge-file.o
  933. BUILTIN_OBJS += builtin/merge-index.o
  934. BUILTIN_OBJS += builtin/merge-ours.o
  935. BUILTIN_OBJS += builtin/merge-recursive.o
  936. BUILTIN_OBJS += builtin/merge-tree.o
  937. BUILTIN_OBJS += builtin/mktag.o
  938. BUILTIN_OBJS += builtin/mktree.o
  939. BUILTIN_OBJS += builtin/mv.o
  940. BUILTIN_OBJS += builtin/name-rev.o
  941. BUILTIN_OBJS += builtin/notes.o
  942. BUILTIN_OBJS += builtin/pack-objects.o
  943. BUILTIN_OBJS += builtin/pack-redundant.o
  944. BUILTIN_OBJS += builtin/pack-refs.o
  945. BUILTIN_OBJS += builtin/patch-id.o
  946. BUILTIN_OBJS += builtin/prune-packed.o
  947. BUILTIN_OBJS += builtin/prune.o
  948. BUILTIN_OBJS += builtin/push.o
  949. BUILTIN_OBJS += builtin/read-tree.o
  950. BUILTIN_OBJS += builtin/receive-pack.o
  951. BUILTIN_OBJS += builtin/reflog.o
  952. BUILTIN_OBJS += builtin/remote.o
  953. BUILTIN_OBJS += builtin/remote-ext.o
  954. BUILTIN_OBJS += builtin/remote-fd.o
  955. BUILTIN_OBJS += builtin/replace.o
  956. BUILTIN_OBJS += builtin/rerere.o
  957. BUILTIN_OBJS += builtin/reset.o
  958. BUILTIN_OBJS += builtin/rev-list.o
  959. BUILTIN_OBJS += builtin/rev-parse.o
  960. BUILTIN_OBJS += builtin/revert.o
  961. BUILTIN_OBJS += builtin/rm.o
  962. BUILTIN_OBJS += builtin/send-pack.o
  963. BUILTIN_OBJS += builtin/shortlog.o
  964. BUILTIN_OBJS += builtin/show-branch.o
  965. BUILTIN_OBJS += builtin/show-ref.o
  966. BUILTIN_OBJS += builtin/stripspace.o
  967. BUILTIN_OBJS += builtin/symbolic-ref.o
  968. BUILTIN_OBJS += builtin/tag.o
  969. BUILTIN_OBJS += builtin/tar-tree.o
  970. BUILTIN_OBJS += builtin/unpack-file.o
  971. BUILTIN_OBJS += builtin/unpack-objects.o
  972. BUILTIN_OBJS += builtin/update-index.o
  973. BUILTIN_OBJS += builtin/update-ref.o
  974. BUILTIN_OBJS += builtin/update-server-info.o
  975. BUILTIN_OBJS += builtin/upload-archive.o
  976. BUILTIN_OBJS += builtin/var.o
  977. BUILTIN_OBJS += builtin/verify-pack.o
  978. BUILTIN_OBJS += builtin/verify-tag.o
  979. BUILTIN_OBJS += builtin/write-tree.o
  980.  
  981. GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
  982. EXTLIBS =
  983.  
  984. GIT_USER_AGENT = git/$(GIT_VERSION)
  985.  
  986. include config.mak.uname
  987. -include config.mak.autogen
  988. -include config.mak
  989.  
  990. ifndef sysconfdir
  991. ifeq ($(prefix),/usr)
  992. sysconfdir = /etc
  993. else
  994. sysconfdir = etc
  995. endif
  996. endif
  997.  
  998. ifdef CHECK_HEADER_DEPENDENCIES
  999. COMPUTE_HEADER_DEPENDENCIES = no
  1000. USE_COMPUTED_HEADER_DEPENDENCIES =
  1001. endif
  1002.  
  1003. ifndef COMPUTE_HEADER_DEPENDENCIES
  1004. COMPUTE_HEADER_DEPENDENCIES = auto
  1005. endif
  1006.  
  1007. ifeq ($(COMPUTE_HEADER_DEPENDENCIES),auto)
  1008. dep_check = $(shell $(CC) $(ALL_CFLAGS) \
  1009. -c -MF /dev/null -MQ /dev/null -MMD -MP \
  1010. -x c /dev/null -o /dev/null 2>&1; \
  1011. echo $$?)
  1012. ifeq ($(dep_check),0)
  1013. override COMPUTE_HEADER_DEPENDENCIES = yes
  1014. else
  1015. override COMPUTE_HEADER_DEPENDENCIES = no
  1016. endif
  1017. endif
  1018.  
  1019. ifeq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
  1020. USE_COMPUTED_HEADER_DEPENDENCIES = YesPlease
  1021. else
  1022. ifneq ($(COMPUTE_HEADER_DEPENDENCIES),no)
  1023. $(error please set COMPUTE_HEADER_DEPENDENCIES to yes, no, or auto \
  1024. (not "$(COMPUTE_HEADER_DEPENDENCIES)"))
  1025. endif
  1026. endif
  1027.  
  1028. ifdef SANE_TOOL_PATH
  1029. SANE_TOOL_PATH_SQ = $(subst ','\'',$(SANE_TOOL_PATH))
  1030. BROKEN_PATH_FIX = 's|^\# @@BROKEN_PATH_FIX@@$$|git_broken_path_fix $(SANE_TOOL_PATH_SQ)|'
  1031. PATH := $(SANE_TOOL_PATH):${PATH}
  1032. else
  1033. BROKEN_PATH_FIX = '/^\# @@BROKEN_PATH_FIX@@$$/d'
  1034. endif
  1035.  
  1036. ifneq (,$(INLINE))
  1037. BASIC_CFLAGS += -Dinline=$(INLINE)
  1038. endif
  1039.  
  1040. ifneq (,$(SOCKLEN_T))
  1041. BASIC_CFLAGS += -Dsocklen_t=$(SOCKLEN_T)
  1042. endif
  1043.  
  1044. ifeq ($(uname_S),Darwin)
  1045. ifndef NO_FINK
  1046. ifeq ($(shell test -d /sw/lib && echo y),y)
  1047. BASIC_CFLAGS += -I/sw/include
  1048. BASIC_LDFLAGS += -L/sw/lib
  1049. endif
  1050. endif
  1051. ifndef NO_DARWIN_PORTS
  1052. ifeq ($(shell test -d /opt/local/lib && echo y),y)
  1053. BASIC_CFLAGS += -I/opt/local/include
  1054. BASIC_LDFLAGS += -L/opt/local/lib
  1055. endif
  1056. endif
  1057. PTHREAD_LIBS =
  1058. endif
  1059.  
  1060. ifndef CC_LD_DYNPATH
  1061. ifdef NO_R_TO_GCC_LINKER
  1062. # Some gcc does not accept and pass -R to the linker to specify
  1063. # the runtime dynamic library path.
  1064. CC_LD_DYNPATH = -Wl,-rpath,
  1065. else
  1066. CC_LD_DYNPATH = -R
  1067. endif
  1068. endif
  1069.  
  1070. ifdef NO_LIBGEN_H
  1071. COMPAT_CFLAGS += -DNO_LIBGEN_H
  1072. COMPAT_OBJS += compat/basename.o
  1073. endif
  1074.  
  1075. ifdef USE_LIBPCRE
  1076. BASIC_CFLAGS += -DUSE_LIBPCRE
  1077. ifdef LIBPCREDIR
  1078. BASIC_CFLAGS += -I$(LIBPCREDIR)/include
  1079. EXTLIBS += -L$(LIBPCREDIR)/$(lib) $(CC_LD_DYNPATH)$(LIBPCREDIR)/$(lib)
  1080. endif
  1081. EXTLIBS += -lpcre
  1082. endif
  1083.  
  1084. ifdef NO_CURL
  1085. BASIC_CFLAGS += -DNO_CURL
  1086. REMOTE_CURL_PRIMARY =
  1087. REMOTE_CURL_ALIASES =
  1088. REMOTE_CURL_NAMES =
  1089. else
  1090. ifdef CURLDIR
  1091. # Try "-Wl,-rpath=$(CURLDIR)/$(lib)" in such a case.
  1092. BASIC_CFLAGS += -I$(CURLDIR)/include
  1093. CURL_LIBCURL = -L$(CURLDIR)/$(lib) $(CC_LD_DYNPATH)$(CURLDIR)/$(lib) -lcurl
  1094. else
  1095. CURL_LIBCURL = -lcurl
  1096. endif
  1097. ifdef NEEDS_SSL_WITH_CURL
  1098. CURL_LIBCURL += -lssl
  1099. ifdef NEEDS_CRYPTO_WITH_SSL
  1100. CURL_LIBCURL += -lcrypto
  1101. endif
  1102. endif
  1103. ifdef NEEDS_IDN_WITH_CURL
  1104. CURL_LIBCURL += -lidn
  1105. endif
  1106.  
  1107. REMOTE_CURL_PRIMARY = git-remote-http$X
  1108. REMOTE_CURL_ALIASES = git-remote-https$X git-remote-ftp$X git-remote-ftps$X
  1109. REMOTE_CURL_NAMES = $(REMOTE_CURL_PRIMARY) $(REMOTE_CURL_ALIASES)
  1110. PROGRAM_OBJS += http-fetch.o
  1111. PROGRAMS += $(REMOTE_CURL_NAMES)
  1112. curl_check := $(shell (echo 070908; curl-config --vernum) 2>/dev/null | sort -r | sed -ne 2p)
  1113. ifeq "$(curl_check)" "070908"
  1114. ifndef NO_EXPAT
  1115. PROGRAM_OBJS += http-push.o
  1116. endif
  1117. endif
  1118. ifndef NO_EXPAT
  1119. ifdef EXPATDIR
  1120. BASIC_CFLAGS += -I$(EXPATDIR)/include
  1121. EXPAT_LIBEXPAT = -L$(EXPATDIR)/$(lib) $(CC_LD_DYNPATH)$(EXPATDIR)/$(lib) -lexpat
  1122. else
  1123. EXPAT_LIBEXPAT = -lexpat
  1124. endif
  1125. ifdef EXPAT_NEEDS_XMLPARSE_H
  1126. BASIC_CFLAGS += -DEXPAT_NEEDS_XMLPARSE_H
  1127. endif
  1128. endif
  1129. endif
  1130.  
  1131. ifdef ZLIB_PATH
  1132. BASIC_CFLAGS += -I$(ZLIB_PATH)/include
  1133. EXTLIBS += -L$(ZLIB_PATH)/$(lib) $(CC_LD_DYNPATH)$(ZLIB_PATH)/$(lib)
  1134. endif
  1135. EXTLIBS += -lz
  1136.  
  1137. ifndef NO_OPENSSL
  1138. OPENSSL_LIBSSL = -lssl
  1139. ifdef OPENSSLDIR
  1140. BASIC_CFLAGS += -I$(OPENSSLDIR)/include
  1141. OPENSSL_LINK = -L$(OPENSSLDIR)/$(lib) $(CC_LD_DYNPATH)$(OPENSSLDIR)/$(lib)
  1142. else
  1143. OPENSSL_LINK =
  1144. endif
  1145. ifdef NEEDS_CRYPTO_WITH_SSL
  1146. OPENSSL_LIBSSL += -lcrypto
  1147. endif
  1148. else
  1149. BASIC_CFLAGS += -DNO_OPENSSL
  1150. BLK_SHA1 = 1
  1151. OPENSSL_LIBSSL =
  1152. endif
  1153. ifdef NO_OPENSSL
  1154. LIB_4_CRYPTO =
  1155. else
  1156. ifdef NEEDS_SSL_WITH_CRYPTO
  1157. LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto -lssl
  1158. else
  1159. LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto
  1160. endif
  1161. endif
  1162. ifdef NEEDS_LIBICONV
  1163. ifdef ICONVDIR
  1164. BASIC_CFLAGS += -I$(ICONVDIR)/include
  1165. ICONV_LINK = -L$(ICONVDIR)/$(lib) $(CC_LD_DYNPATH)$(ICONVDIR)/$(lib)
  1166. else
  1167. ICONV_LINK =
  1168. endif
  1169. ifdef NEEDS_LIBINTL_BEFORE_LIBICONV
  1170. ICONV_LINK += -lintl
  1171. endif
  1172. EXTLIBS += $(ICONV_LINK) -liconv
  1173. endif
  1174. ifdef NEEDS_LIBGEN
  1175. EXTLIBS += -lgen
  1176. endif
  1177. ifndef NO_GETTEXT
  1178. ifndef LIBC_CONTAINS_LIBINTL
  1179. EXTLIBS += -lintl
  1180. endif
  1181. endif
  1182. ifdef NEEDS_SOCKET
  1183. EXTLIBS += -lsocket
  1184. endif
  1185. ifdef NEEDS_NSL
  1186. EXTLIBS += -lnsl
  1187. endif
  1188. ifdef NEEDS_RESOLV
  1189. EXTLIBS += -lresolv
  1190. endif
  1191. ifdef NO_D_TYPE_IN_DIRENT
  1192. BASIC_CFLAGS += -DNO_D_TYPE_IN_DIRENT
  1193. endif
  1194. ifdef NO_D_INO_IN_DIRENT
  1195. BASIC_CFLAGS += -DNO_D_INO_IN_DIRENT
  1196. endif
  1197. ifdef NO_GECOS_IN_PWENT
  1198. BASIC_CFLAGS += -DNO_GECOS_IN_PWENT
  1199. endif
  1200. ifdef NO_ST_BLOCKS_IN_STRUCT_STAT
  1201. BASIC_CFLAGS += -DNO_ST_BLOCKS_IN_STRUCT_STAT
  1202. endif
  1203. ifdef USE_NSEC
  1204. BASIC_CFLAGS += -DUSE_NSEC
  1205. endif
  1206. ifdef USE_ST_TIMESPEC
  1207. BASIC_CFLAGS += -DUSE_ST_TIMESPEC
  1208. endif
  1209. ifdef NO_NORETURN
  1210. BASIC_CFLAGS += -DNO_NORETURN
  1211. endif
  1212. ifdef NO_NSEC
  1213. BASIC_CFLAGS += -DNO_NSEC
  1214. endif
  1215. ifdef SNPRINTF_RETURNS_BOGUS
  1216. COMPAT_CFLAGS += -DSNPRINTF_RETURNS_BOGUS
  1217. COMPAT_OBJS += compat/snprintf.o
  1218. endif
  1219. ifdef FREAD_READS_DIRECTORIES
  1220. COMPAT_CFLAGS += -DFREAD_READS_DIRECTORIES
  1221. COMPAT_OBJS += compat/fopen.o
  1222. endif
  1223. ifdef NO_SYMLINK_HEAD
  1224. BASIC_CFLAGS += -DNO_SYMLINK_HEAD
  1225. endif
  1226. ifdef GETTEXT_POISON
  1227. BASIC_CFLAGS += -DGETTEXT_POISON
  1228. endif
  1229. ifdef NO_GETTEXT
  1230. BASIC_CFLAGS += -DNO_GETTEXT
  1231. USE_GETTEXT_SCHEME ?= fallthrough
  1232. endif
  1233. ifdef NO_POLL
  1234. NO_SYS_POLL_H = YesPlease
  1235. COMPAT_CFLAGS += -DNO_POLL -Icompat/poll
  1236. COMPAT_OBJS += compat/poll/poll.o
  1237. endif
  1238. ifdef NO_STRCASESTR
  1239. COMPAT_CFLAGS += -DNO_STRCASESTR
  1240. COMPAT_OBJS += compat/strcasestr.o
  1241. endif
  1242. ifdef NO_STRLCPY
  1243. COMPAT_CFLAGS += -DNO_STRLCPY
  1244. COMPAT_OBJS += compat/strlcpy.o
  1245. endif
  1246. ifdef NO_STRTOUMAX
  1247. COMPAT_CFLAGS += -DNO_STRTOUMAX
  1248. COMPAT_OBJS += compat/strtoumax.o compat/strtoimax.o
  1249. endif
  1250. ifdef NO_STRTOULL
  1251. COMPAT_CFLAGS += -DNO_STRTOULL
  1252. endif
  1253. ifdef NO_FNMATCH
  1254. COMPAT_CFLAGS += -Icompat/fnmatch
  1255. COMPAT_CFLAGS += -DNO_FNMATCH
  1256. COMPAT_OBJS += compat/fnmatch/fnmatch.o
  1257. else
  1258. ifdef NO_FNMATCH_CASEFOLD
  1259. COMPAT_CFLAGS += -Icompat/fnmatch
  1260. COMPAT_CFLAGS += -DNO_FNMATCH_CASEFOLD
  1261. COMPAT_OBJS += compat/fnmatch/fnmatch.o
  1262. endif
  1263. endif
  1264. ifdef USE_WILDMATCH
  1265. COMPAT_CFLAGS += -DUSE_WILDMATCH
  1266. endif
  1267. ifdef NO_SETENV
  1268. COMPAT_CFLAGS += -DNO_SETENV
  1269. COMPAT_OBJS += compat/setenv.o
  1270. endif
  1271. ifdef NO_MKDTEMP
  1272. COMPAT_CFLAGS += -DNO_MKDTEMP
  1273. COMPAT_OBJS += compat/mkdtemp.o
  1274. endif
  1275. ifdef MKDIR_WO_TRAILING_SLASH
  1276. COMPAT_CFLAGS += -DMKDIR_WO_TRAILING_SLASH
  1277. COMPAT_OBJS += compat/mkdir.o
  1278. endif
  1279. ifdef NO_MKSTEMPS
  1280. COMPAT_CFLAGS += -DNO_MKSTEMPS
  1281. endif
  1282. ifdef NO_UNSETENV
  1283. COMPAT_CFLAGS += -DNO_UNSETENV
  1284. COMPAT_OBJS += compat/unsetenv.o
  1285. endif
  1286. ifdef NO_SYS_SELECT_H
  1287. BASIC_CFLAGS += -DNO_SYS_SELECT_H
  1288. endif
  1289. ifdef NO_SYS_POLL_H
  1290. BASIC_CFLAGS += -DNO_SYS_POLL_H
  1291. endif
  1292. ifdef NEEDS_SYS_PARAM_H
  1293. BASIC_CFLAGS += -DNEEDS_SYS_PARAM_H
  1294. endif
  1295. ifdef NO_INTTYPES_H
  1296. BASIC_CFLAGS += -DNO_INTTYPES_H
  1297. endif
  1298. ifdef NO_INITGROUPS
  1299. BASIC_CFLAGS += -DNO_INITGROUPS
  1300. endif
  1301. ifdef NO_MMAP
  1302. COMPAT_CFLAGS += -DNO_MMAP
  1303. COMPAT_OBJS += compat/mmap.o
  1304. else
  1305. ifdef USE_WIN32_MMAP
  1306. COMPAT_CFLAGS += -DUSE_WIN32_MMAP
  1307. COMPAT_OBJS += compat/win32mmap.o
  1308. endif
  1309. endif
  1310. ifdef OBJECT_CREATION_USES_RENAMES
  1311. COMPAT_CFLAGS += -DOBJECT_CREATION_MODE=1
  1312. endif
  1313. ifdef NO_STRUCT_ITIMERVAL
  1314. COMPAT_CFLAGS += -DNO_STRUCT_ITIMERVAL
  1315. NO_SETITIMER = YesPlease
  1316. endif
  1317. ifdef NO_SETITIMER
  1318. COMPAT_CFLAGS += -DNO_SETITIMER
  1319. endif
  1320. ifdef NO_PREAD
  1321. COMPAT_CFLAGS += -DNO_PREAD
  1322. COMPAT_OBJS += compat/pread.o
  1323. NO_THREAD_SAFE_PREAD = YesPlease
  1324. endif
  1325. ifdef NO_THREAD_SAFE_PREAD
  1326. BASIC_CFLAGS += -DNO_THREAD_SAFE_PREAD
  1327. endif
  1328. ifdef NO_FAST_WORKING_DIRECTORY
  1329. BASIC_CFLAGS += -DNO_FAST_WORKING_DIRECTORY
  1330. endif
  1331. ifdef NO_TRUSTABLE_FILEMODE
  1332. BASIC_CFLAGS += -DNO_TRUSTABLE_FILEMODE
  1333. endif
  1334. ifdef NO_IPV6
  1335. BASIC_CFLAGS += -DNO_IPV6
  1336. endif
  1337. ifdef NO_INTPTR_T
  1338. COMPAT_CFLAGS += -DNO_INTPTR_T
  1339. endif
  1340. ifdef NO_UINTMAX_T
  1341. BASIC_CFLAGS += -Duintmax_t=uint32_t
  1342. endif
  1343. ifdef NO_SOCKADDR_STORAGE
  1344. ifdef NO_IPV6
  1345. BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in
  1346. else
  1347. BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in6
  1348. endif
  1349. endif
  1350. ifdef NO_INET_NTOP
  1351. LIB_OBJS += compat/inet_ntop.o
  1352. BASIC_CFLAGS += -DNO_INET_NTOP
  1353. endif
  1354. ifdef NO_INET_PTON
  1355. LIB_OBJS += compat/inet_pton.o
  1356. BASIC_CFLAGS += -DNO_INET_PTON
  1357. endif
  1358. ifndef NO_UNIX_SOCKETS
  1359. LIB_OBJS += unix-socket.o
  1360. LIB_H += unix-socket.h
  1361. PROGRAM_OBJS += credential-cache.o
  1362. PROGRAM_OBJS += credential-cache--daemon.o
  1363. endif
  1364.  
  1365. ifdef NO_ICONV
  1366. BASIC_CFLAGS += -DNO_ICONV
  1367. endif
  1368.  
  1369. ifdef OLD_ICONV
  1370. BASIC_CFLAGS += -DOLD_ICONV
  1371. endif
  1372.  
  1373. ifdef NO_DEFLATE_BOUND
  1374. BASIC_CFLAGS += -DNO_DEFLATE_BOUND
  1375. endif
  1376.  
  1377. ifdef NO_POSIX_GOODIES
  1378. BASIC_CFLAGS += -DNO_POSIX_GOODIES
  1379. endif
  1380.  
  1381. ifdef BLK_SHA1
  1382. SHA1_HEADER = "block-sha1/sha1.h"
  1383. LIB_OBJS += block-sha1/sha1.o
  1384. LIB_H += block-sha1/sha1.h
  1385. else
  1386. ifdef PPC_SHA1
  1387. SHA1_HEADER = "ppc/sha1.h"
  1388. LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
  1389. LIB_H += ppc/sha1.h
  1390. else
  1391. SHA1_HEADER = <openssl/sha.h>
  1392. EXTLIBS += $(LIB_4_CRYPTO)
  1393. endif
  1394. endif
  1395. ifdef NO_PERL_MAKEMAKER
  1396. export NO_PERL_MAKEMAKER
  1397. endif
  1398. ifdef NO_HSTRERROR
  1399. COMPAT_CFLAGS += -DNO_HSTRERROR
  1400. COMPAT_OBJS += compat/hstrerror.o
  1401. endif
  1402. ifdef NO_MEMMEM
  1403. COMPAT_CFLAGS += -DNO_MEMMEM
  1404. COMPAT_OBJS += compat/memmem.o
  1405. endif
  1406. ifdef NO_GETPAGESIZE
  1407. COMPAT_CFLAGS += -DNO_GETPAGESIZE
  1408. endif
  1409. ifdef INTERNAL_QSORT
  1410. COMPAT_CFLAGS += -DINTERNAL_QSORT
  1411. COMPAT_OBJS += compat/qsort.o
  1412. endif
  1413. ifdef RUNTIME_PREFIX
  1414. COMPAT_CFLAGS += -DRUNTIME_PREFIX
  1415. endif
  1416.  
  1417. ifdef NO_PTHREADS
  1418. BASIC_CFLAGS += -DNO_PTHREADS
  1419. else
  1420. BASIC_CFLAGS += $(PTHREAD_CFLAGS)
  1421. EXTLIBS += $(PTHREAD_LIBS)
  1422. LIB_OBJS += thread-utils.o
  1423. endif
  1424.  
  1425. ifdef HAVE_PATHS_H
  1426. BASIC_CFLAGS += -DHAVE_PATHS_H
  1427. endif
  1428.  
  1429. ifdef HAVE_LIBCHARSET_H
  1430. BASIC_CFLAGS += -DHAVE_LIBCHARSET_H
  1431. EXTLIBS += $(CHARSET_LIB)
  1432. endif
  1433.  
  1434. ifdef HAVE_STRINGS_H
  1435. BASIC_CFLAGS += -DHAVE_STRINGS_H
  1436. endif
  1437.  
  1438. ifdef HAVE_DEV_TTY
  1439. BASIC_CFLAGS += -DHAVE_DEV_TTY
  1440. endif
  1441.  
  1442. ifdef DIR_HAS_BSD_GROUP_SEMANTICS
  1443. COMPAT_CFLAGS += -DDIR_HAS_BSD_GROUP_SEMANTICS
  1444. endif
  1445. ifdef UNRELIABLE_FSTAT
  1446. BASIC_CFLAGS += -DUNRELIABLE_FSTAT
  1447. endif
  1448. ifdef NO_REGEX
  1449. COMPAT_CFLAGS += -Icompat/regex
  1450. COMPAT_OBJS += compat/regex/regex.o
  1451. endif
  1452. ifdef CYGWIN_V15_WIN32API
  1453. COMPAT_CFLAGS += -DCYGWIN_V15_WIN32API
  1454. endif
  1455.  
  1456. ifdef USE_NED_ALLOCATOR
  1457. COMPAT_CFLAGS += -Icompat/nedmalloc
  1458. COMPAT_OBJS += compat/nedmalloc/nedmalloc.o
  1459. endif
  1460.  
  1461. ifdef GIT_TEST_CMP_USE_COPIED_CONTEXT
  1462. export GIT_TEST_CMP_USE_COPIED_CONTEXT
  1463. endif
  1464.  
  1465. ifndef NO_MSGFMT_EXTENDED_OPTIONS
  1466. MSGFMT += --check --statistics
  1467. endif
  1468.  
  1469. ifneq (,$(XDL_FAST_HASH))
  1470. BASIC_CFLAGS += -DXDL_FAST_HASH
  1471. endif
  1472.  
  1473. ifeq ($(TCLTK_PATH),)
  1474. NO_TCLTK = NoThanks
  1475. endif
  1476.  
  1477. ifeq ($(PERL_PATH),)
  1478. NO_PERL = NoThanks
  1479. endif
  1480.  
  1481. ifeq ($(PYTHON_PATH),)
  1482. NO_PYTHON = NoThanks
  1483. endif
  1484.  
  1485. QUIET_SUBDIR0 = +$(MAKE) -C # space to separate -C and subdir
  1486. QUIET_SUBDIR1 =
  1487.  
  1488. ifneq ($(findstring $(MAKEFLAGS),w),w)
  1489. PRINT_DIR = --no-print-directory
  1490. else # "make -w"
  1491. NO_SUBDIR = :
  1492. endif
  1493.  
  1494. ifneq ($(findstring $(MAKEFLAGS),s),s)
  1495. ifndef V
  1496. QUIET_CC = @echo ' ' CC $@;
  1497. QUIET_AR = @echo ' ' AR $@;
  1498. QUIET_LINK = @echo ' ' LINK $@;
  1499. QUIET_BUILT_IN = @echo ' ' BUILTIN $@;
  1500. QUIET_GEN = @echo ' ' GEN $@;
  1501. QUIET_LNCP = @echo ' ' LN/CP $@;
  1502. QUIET_XGETTEXT = @echo ' ' XGETTEXT $@;
  1503. QUIET_MSGFMT = @echo ' ' MSGFMT $@;
  1504. QUIET_GCOV = @echo ' ' GCOV $@;
  1505. QUIET_SP = @echo ' ' SP $<;
  1506. QUIET_SUBDIR0 = +@subdir=
  1507. QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \
  1508. $(MAKE) $(PRINT_DIR) -C $$subdir
  1509. export V
  1510. export QUIET_GEN
  1511. export QUIET_BUILT_IN
  1512. endif
  1513. endif
  1514.  
  1515. ifdef NO_INSTALL_HARDLINKS
  1516. export NO_INSTALL_HARDLINKS
  1517. endif
  1518.  
  1519. ### profile feedback build
  1520. #
  1521.  
  1522. # Can adjust this to be a global directory if you want to do extended
  1523. # data gathering
  1524. PROFILE_DIR := $(CURDIR)
  1525.  
  1526. ifeq ("$(PROFILE)","GEN")
  1527. CFLAGS += -fprofile-generate=$(PROFILE_DIR) -DNO_NORETURN=1
  1528. EXTLIBS += -lgcov
  1529. export CCACHE_DISABLE = t
  1530. V = 1
  1531. else
  1532. ifneq ("$(PROFILE)","")
  1533. CFLAGS += -fprofile-use=$(PROFILE_DIR) -fprofile-correction -DNO_NORETURN=1
  1534. export CCACHE_DISABLE = t
  1535. V = 1
  1536. endif
  1537. endif
  1538.  
  1539. # Shell quote (do not use $(call) to accommodate ancient setups);
  1540.  
  1541. SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER))
  1542. ETC_GITCONFIG_SQ = $(subst ','\'',$(ETC_GITCONFIG))
  1543. ETC_GITATTRIBUTES_SQ = $(subst ','\'',$(ETC_GITATTRIBUTES))
  1544.  
  1545. DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
  1546. bindir_SQ = $(subst ','\'',$(bindir))
  1547. bindir_relative_SQ = $(subst ','\'',$(bindir_relative))
  1548. mandir_relative_SQ = $(subst ','\'',$(mandir_relative))
  1549. infodir_relative_SQ = $(subst ','\'',$(infodir_relative))
  1550. localedir_SQ = $(subst ','\'',$(localedir))
  1551. gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
  1552. template_dir_SQ = $(subst ','\'',$(template_dir))
  1553. htmldir_relative_SQ = $(subst ','\'',$(htmldir_relative))
  1554. prefix_SQ = $(subst ','\'',$(prefix))
  1555. gitwebdir_SQ = $(subst ','\'',$(gitwebdir))
  1556.  
  1557. SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
  1558. PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
  1559. PYTHON_PATH_SQ = $(subst ','\'',$(PYTHON_PATH))
  1560. TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH))
  1561. DIFF_SQ = $(subst ','\'',$(DIFF))
  1562.  
  1563. LIBS = $(GITLIBS) $(EXTLIBS)
  1564.  
  1565. BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' \
  1566. $(COMPAT_CFLAGS)
  1567. LIB_OBJS += $(COMPAT_OBJS)
  1568.  
  1569. # Quote for C
  1570.  
  1571. ifdef DEFAULT_EDITOR
  1572. DEFAULT_EDITOR_CQ = "$(subst ",\",$(subst \,\\,$(DEFAULT_EDITOR)))"
  1573. DEFAULT_EDITOR_CQ_SQ = $(subst ','\'',$(DEFAULT_EDITOR_CQ))
  1574.  
  1575. BASIC_CFLAGS += -DDEFAULT_EDITOR='$(DEFAULT_EDITOR_CQ_SQ)'
  1576. endif
  1577.  
  1578. ifdef DEFAULT_PAGER
  1579. DEFAULT_PAGER_CQ = "$(subst ",\",$(subst \,\\,$(DEFAULT_PAGER)))"
  1580. DEFAULT_PAGER_CQ_SQ = $(subst ','\'',$(DEFAULT_PAGER_CQ))
  1581.  
  1582. BASIC_CFLAGS += -DDEFAULT_PAGER='$(DEFAULT_PAGER_CQ_SQ)'
  1583. endif
  1584.  
  1585. ifdef SHELL_PATH
  1586. SHELL_PATH_CQ = "$(subst ",\",$(subst \,\\,$(SHELL_PATH)))"
  1587. SHELL_PATH_CQ_SQ = $(subst ','\'',$(SHELL_PATH_CQ))
  1588.  
  1589. BASIC_CFLAGS += -DSHELL_PATH='$(SHELL_PATH_CQ_SQ)'
  1590. endif
  1591.  
  1592. GIT_USER_AGENT_SQ = $(subst ','\'',$(GIT_USER_AGENT))
  1593. GIT_USER_AGENT_CQ = "$(subst ",\",$(subst \,\\,$(GIT_USER_AGENT)))"
  1594. GIT_USER_AGENT_CQ_SQ = $(subst ','\'',$(GIT_USER_AGENT_CQ))
  1595. GIT-USER-AGENT: FORCE
  1596. @if test x'$(GIT_USER_AGENT_SQ)' != x"`cat GIT-USER-AGENT 2>/dev/null`"; then \
  1597. echo '$(GIT_USER_AGENT_SQ)' >GIT-USER-AGENT; \
  1598. fi
  1599.  
  1600. ifdef DEFAULT_HELP_FORMAT
  1601. BASIC_CFLAGS += -DDEFAULT_HELP_FORMAT='"$(DEFAULT_HELP_FORMAT)"'
  1602. endif
  1603.  
  1604. ALL_CFLAGS += $(BASIC_CFLAGS)
  1605. ALL_LDFLAGS += $(BASIC_LDFLAGS)
  1606.  
  1607. export DIFF TAR INSTALL DESTDIR SHELL_PATH
  1608.  
  1609.  
  1610. ### Build rules
  1611.  
  1612. SHELL = $(SHELL_PATH)
  1613.  
  1614. all:: shell_compatibility_test
  1615.  
  1616. ifeq "$(PROFILE)" "BUILD"
  1617. ifeq ($(filter all,$(MAKECMDGOALS)),all)
  1618. all:: profile-clean
  1619. $(MAKE) PROFILE=GEN all
  1620. $(MAKE) PROFILE=GEN -j1 test
  1621. endif
  1622. endif
  1623.  
  1624. all:: $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) $(OTHER_PROGRAMS) GIT-BUILD-OPTIONS
  1625. ifneq (,$X)
  1626. $(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';)
  1627. endif
  1628.  
  1629. all::
  1630. ifndef NO_TCLTK
  1631. $(QUIET_SUBDIR0)git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all
  1632. $(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all
  1633. endif
  1634. ifndef NO_PERL
  1635. $(QUIET_SUBDIR0)perl $(QUIET_SUBDIR1) PERL_PATH='$(PERL_PATH_SQ)' prefix='$(prefix_SQ)' localedir='$(localedir_SQ)' all
  1636. endif
  1637. ifndef NO_PYTHON
  1638. $(QUIET_SUBDIR0)git_remote_helpers $(QUIET_SUBDIR1) PYTHON_PATH='$(PYTHON_PATH_SQ)' prefix='$(prefix_SQ)' all
  1639. endif
  1640. $(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1) SHELL_PATH='$(SHELL_PATH_SQ)' PERL_PATH='$(PERL_PATH_SQ)'
  1641.  
  1642. please_set_SHELL_PATH_to_a_more_modern_shell:
  1643. @$$(:)
  1644.  
  1645. shell_compatibility_test: please_set_SHELL_PATH_to_a_more_modern_shell
  1646.  
  1647. strip: $(PROGRAMS) git$X
  1648. $(STRIP) $(STRIP_OPTS) $(PROGRAMS) git$X
  1649.  
  1650. ### Target-specific flags and dependencies
  1651.  
  1652. # The generic compilation pattern rule and automatically
  1653. # computed header dependencies (falling back to a dependency on
  1654. # LIB_H) are enough to describe how most targets should be built,
  1655. # but some targets are special enough to need something a little
  1656. # different.
  1657. #
  1658. # - When a source file "foo.c" #includes a generated header file,
  1659. # we need to list that dependency for the "foo.o" target.
  1660. #
  1661. # We also list it from other targets that are built from foo.c
  1662. # like "foo.sp" and "foo.s", even though that is easy to forget
  1663. # to do because the generated header is already present around
  1664. # after a regular build attempt.
  1665. #
  1666. # - Some code depends on configuration kept in makefile
  1667. # variables. The target-specific variable EXTRA_CPPFLAGS can
  1668. # be used to convey that information to the C preprocessor
  1669. # using -D options.
  1670. #
  1671. # The "foo.o" target should have a corresponding dependency on
  1672. # a file that changes when the value of the makefile variable
  1673. # changes. For example, targets making use of the
  1674. # $(GIT_VERSION) variable depend on GIT-VERSION-FILE.
  1675. #
  1676. # Technically the ".sp" and ".s" targets do not need this
  1677. # dependency because they are force-built, but they get the
  1678. # same dependency for consistency. This way, you do not have to
  1679. # know how each target is implemented. And it means the
  1680. # dependencies here will not need to change if the force-build
  1681. # details change some day.
  1682.  
  1683. git.sp git.s git.o: GIT-PREFIX
  1684. git.sp git.s git.o: EXTRA_CPPFLAGS = \
  1685. '-DGIT_HTML_PATH="$(htmldir_relative_SQ)"' \
  1686. '-DGIT_MAN_PATH="$(mandir_relative_SQ)"' \
  1687. '-DGIT_INFO_PATH="$(infodir_relative_SQ)"'
  1688.  
  1689. git$X: git.o GIT-LDFLAGS $(BUILTIN_OBJS) $(GITLIBS)
  1690. $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ git.o \
  1691. $(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS)
  1692.  
  1693. help.sp help.s help.o: common-cmds.h
  1694.  
  1695. builtin/help.sp builtin/help.s builtin/help.o: common-cmds.h GIT-PREFIX
  1696. builtin/help.sp builtin/help.s builtin/help.o: EXTRA_CPPFLAGS = \
  1697. '-DGIT_HTML_PATH="$(htmldir_relative_SQ)"' \
  1698. '-DGIT_MAN_PATH="$(mandir_relative_SQ)"' \
  1699. '-DGIT_INFO_PATH="$(infodir_relative_SQ)"'
  1700.  
  1701. version.sp version.s version.o: GIT-VERSION-FILE GIT-USER-AGENT
  1702. version.sp version.s version.o: EXTRA_CPPFLAGS = \
  1703. '-DGIT_VERSION="$(GIT_VERSION)"' \
  1704. '-DGIT_USER_AGENT=$(GIT_USER_AGENT_CQ_SQ)'
  1705.  
  1706. $(BUILT_INS): git$X
  1707. $(QUIET_BUILT_IN)$(RM) $@ && \
  1708. ln git$X $@ 2>/dev/null || \
  1709. ln -s git$X $@ 2>/dev/null || \
  1710. cp git$X $@
  1711.  
  1712. common-cmds.h: ./generate-cmdlist.sh command-list.txt
  1713.  
  1714. common-cmds.h: $(wildcard Documentation/git-*.txt)
  1715. $(QUIET_GEN)./generate-cmdlist.sh > $@+ && mv $@+ $@
  1716.  
  1717. SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):$(GIT_VERSION):\
  1718. $(localedir_SQ):$(NO_CURL):$(USE_GETTEXT_SCHEME):$(SANE_TOOL_PATH_SQ):\
  1719. $(gitwebdir_SQ):$(PERL_PATH_SQ)
  1720. define cmd_munge_script
  1721. $(RM) $@ $@+ && \
  1722. sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
  1723. -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \
  1724. -e 's|@@DIFF@@|$(DIFF_SQ)|' \
  1725. -e 's|@@LOCALEDIR@@|$(localedir_SQ)|g' \
  1726. -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
  1727. -e 's/@@USE_GETTEXT_SCHEME@@/$(USE_GETTEXT_SCHEME)/g' \
  1728. -e $(BROKEN_PATH_FIX) \
  1729. -e 's|@@GITWEBDIR@@|$(gitwebdir_SQ)|g' \
  1730. -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
  1731. $@.sh >$@+
  1732. endef
  1733.  
  1734. GIT-SCRIPT-DEFINES: FORCE
  1735. @FLAGS='$(SCRIPT_DEFINES)'; \
  1736. if test x"$$FLAGS" != x"`cat $@ 2>/dev/null`" ; then \
  1737. echo >&2 " * new script parameters"; \
  1738. echo "$$FLAGS" >$@; \
  1739. fi
  1740.  
  1741.  
  1742. $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh GIT-SCRIPT-DEFINES
  1743. $(QUIET_GEN)$(cmd_munge_script) && \
  1744. chmod +x $@+ && \
  1745. mv $@+ $@
  1746.  
  1747. $(SCRIPT_LIB) : % : %.sh GIT-SCRIPT-DEFINES
  1748. $(QUIET_GEN)$(cmd_munge_script) && \
  1749. mv $@+ $@
  1750.  
  1751. ifndef NO_PERL
  1752. $(patsubst %.perl,%,$(SCRIPT_PERL)): perl/perl.mak
  1753.  
  1754. perl/perl.mak: perl/PM.stamp
  1755.  
  1756. perl/PM.stamp: FORCE
  1757. $(QUIET_GEN)$(FIND) perl -type f -name '*.pm' | sort >$@+ && \
  1758. { cmp $@+ $@ >/dev/null 2>/dev/null || mv $@+ $@; } && \
  1759. $(RM) $@+
  1760.  
  1761. perl/perl.mak: GIT-CFLAGS GIT-PREFIX perl/Makefile perl/Makefile.PL
  1762. $(QUIET_SUBDIR0)perl $(QUIET_SUBDIR1) PERL_PATH='$(PERL_PATH_SQ)' prefix='$(prefix_SQ)' $(@F)
  1763.  
  1764. $(patsubst %.perl,%,$(SCRIPT_PERL)): % : %.perl GIT-VERSION-FILE
  1765. $(QUIET_GEN)$(RM) $@ $@+ && \
  1766. INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C perl -s --no-print-directory instlibdir` && \
  1767. sed -e '1{' \
  1768. -e ' s|#!.*perl|#!$(PERL_PATH_SQ)|' \
  1769. -e ' h' \
  1770. -e ' s=.*=use lib (split(/$(pathsep)/, $$ENV{GITPERLLIB} || "'"$$INSTLIBDIR"'"));=' \
  1771. -e ' H' \
  1772. -e ' x' \
  1773. -e '}' \
  1774. -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
  1775. $@.perl >$@+ && \
  1776. chmod +x $@+ && \
  1777. mv $@+ $@
  1778.  
  1779.  
  1780. .PHONY: gitweb
  1781. gitweb:
  1782. $(QUIET_SUBDIR0)gitweb $(QUIET_SUBDIR1) all
  1783.  
  1784. git-instaweb: git-instaweb.sh gitweb GIT-SCRIPT-DEFINES
  1785. $(QUIET_GEN)$(cmd_munge_script) && \
  1786. chmod +x $@+ && \
  1787. mv $@+ $@
  1788. else # NO_PERL
  1789. $(patsubst %.perl,%,$(SCRIPT_PERL)) git-instaweb: % : unimplemented.sh
  1790. $(QUIET_GEN)$(RM) $@ $@+ && \
  1791. sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
  1792. -e 's|@@REASON@@|NO_PERL=$(NO_PERL)|g' \
  1793. unimplemented.sh >$@+ && \
  1794. chmod +x $@+ && \
  1795. mv $@+ $@
  1796. endif # NO_PERL
  1797.  
  1798. ifndef NO_PYTHON
  1799. $(patsubst %.py,%,$(SCRIPT_PYTHON)): GIT-CFLAGS GIT-PREFIX GIT-PYTHON-VARS
  1800. $(patsubst %.py,%,$(SCRIPT_PYTHON)): % : %.py
  1801. $(QUIET_GEN)$(RM) $@ $@+ && \
  1802. INSTLIBDIR=`MAKEFLAGS= $(MAKE) -C git_remote_helpers -s \
  1803. --no-print-directory prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' \
  1804. instlibdir` && \
  1805. sed -e '1s|#!.*python|#!$(PYTHON_PATH_SQ)|' \
  1806. -e 's|\(os\.getenv("GITPYTHONLIB"\)[^)]*)|\1,"@@INSTLIBDIR@@")|' \
  1807. -e 's|@@INSTLIBDIR@@|'"$$INSTLIBDIR"'|g' \
  1808. $@.py >$@+ && \
  1809. chmod +x $@+ && \
  1810. mv $@+ $@
  1811. else # NO_PYTHON
  1812. $(patsubst %.py,%,$(SCRIPT_PYTHON)): % : unimplemented.sh
  1813. $(QUIET_GEN)$(RM) $@ $@+ && \
  1814. sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
  1815. -e 's|@@REASON@@|NO_PYTHON=$(NO_PYTHON)|g' \
  1816. unimplemented.sh >$@+ && \
  1817. chmod +x $@+ && \
  1818. mv $@+ $@
  1819. endif # NO_PYTHON
  1820.  
  1821. CONFIGURE_RECIPE = $(RM) configure configure.ac+ && \
  1822. sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
  1823. configure.ac >configure.ac+ && \
  1824. autoconf -o configure configure.ac+ && \
  1825. $(RM) configure.ac+
  1826.  
  1827. configure: configure.ac GIT-VERSION-FILE
  1828. $(QUIET_GEN)$(CONFIGURE_RECIPE)
  1829.  
  1830. ifdef AUTOCONFIGURED
  1831. # We avoid depending on 'configure' here, because it gets rebuilt
  1832. # every time GIT-VERSION-FILE is modified, only to update the embedded
  1833. # version number string, which config.status does not care about. We
  1834. # do want to recheck when the platform/environment detection logic
  1835. # changes, hence this depends on configure.ac.
  1836. config.status: configure.ac
  1837. $(QUIET_GEN)$(CONFIGURE_RECIPE) && \
  1838. if test -f config.status; then \
  1839. ./config.status --recheck; \
  1840. else \
  1841. ./configure; \
  1842. fi
  1843. reconfigure config.mak.autogen: config.status
  1844. $(QUIET_GEN)./config.status
  1845. .PHONY: reconfigure # This is a convenience target.
  1846. endif
  1847.  
  1848. XDIFF_OBJS += xdiff/xdiffi.o
  1849. XDIFF_OBJS += xdiff/xprepare.o
  1850. XDIFF_OBJS += xdiff/xutils.o
  1851. XDIFF_OBJS += xdiff/xemit.o
  1852. XDIFF_OBJS += xdiff/xmerge.o
  1853. XDIFF_OBJS += xdiff/xpatience.o
  1854. XDIFF_OBJS += xdiff/xhistogram.o
  1855.  
  1856. VCSSVN_OBJS += vcs-svn/line_buffer.o
  1857. VCSSVN_OBJS += vcs-svn/sliding_window.o
  1858. VCSSVN_OBJS += vcs-svn/repo_tree.o
  1859. VCSSVN_OBJS += vcs-svn/fast_export.o
  1860. VCSSVN_OBJS += vcs-svn/svndiff.o
  1861. VCSSVN_OBJS += vcs-svn/svndump.o
  1862.  
  1863. TEST_OBJS := $(patsubst test-%$X,test-%.o,$(TEST_PROGRAMS))
  1864. OBJECTS := $(LIB_OBJS) $(BUILTIN_OBJS) $(PROGRAM_OBJS) $(TEST_OBJS) \
  1865. $(XDIFF_OBJS) \
  1866. $(VCSSVN_OBJS) \
  1867. git.o
  1868. ifndef NO_CURL
  1869. OBJECTS += http.o http-walker.o remote-curl.o
  1870. endif
  1871.  
  1872. dep_files := $(foreach f,$(OBJECTS),$(dir $f).depend/$(notdir $f).d)
  1873. dep_dirs := $(addsuffix .depend,$(sort $(dir $(OBJECTS))))
  1874.  
  1875. ifeq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
  1876. $(dep_dirs):
  1877. @mkdir -p $@
  1878.  
  1879. missing_dep_dirs := $(filter-out $(wildcard $(dep_dirs)),$(dep_dirs))
  1880. dep_file = $(dir $@).depend/$(notdir $@).d
  1881. dep_args = -MF $(dep_file) -MQ $@ -MMD -MP
  1882. ifdef CHECK_HEADER_DEPENDENCIES
  1883. $(error cannot compute header dependencies outside a normal build. \
  1884. Please unset CHECK_HEADER_DEPENDENCIES and try again)
  1885. endif
  1886. endif
  1887.  
  1888. ifneq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
  1889. ifndef CHECK_HEADER_DEPENDENCIES
  1890. dep_dirs =
  1891. missing_dep_dirs =
  1892. dep_args =
  1893. endif
  1894. endif
  1895.  
  1896. ifdef CHECK_HEADER_DEPENDENCIES
  1897. ifndef PRINT_HEADER_DEPENDENCIES
  1898. missing_deps = $(filter-out $(notdir $^), \
  1899. $(notdir $(shell $(MAKE) -s $@ \
  1900. CHECK_HEADER_DEPENDENCIES=YesPlease \
  1901. USE_COMPUTED_HEADER_DEPENDENCIES=YesPlease \
  1902. PRINT_HEADER_DEPENDENCIES=YesPlease)))
  1903. endif
  1904. endif
  1905.  
  1906. ASM_SRC := $(wildcard $(OBJECTS:o=S))
  1907. ASM_OBJ := $(ASM_SRC:S=o)
  1908. C_OBJ := $(filter-out $(ASM_OBJ),$(OBJECTS))
  1909.  
  1910. .SUFFIXES:
  1911.  
  1912. ifdef PRINT_HEADER_DEPENDENCIES
  1913. $(C_OBJ): %.o: %.c FORCE
  1914. echo $^
  1915. $(ASM_OBJ): %.o: %.S FORCE
  1916. echo $^
  1917.  
  1918. ifndef CHECK_HEADER_DEPENDENCIES
  1919. $(error cannot print header dependencies during a normal build. \
  1920. Please set CHECK_HEADER_DEPENDENCIES and try again)
  1921. endif
  1922. endif
  1923.  
  1924. ifndef PRINT_HEADER_DEPENDENCIES
  1925. ifdef CHECK_HEADER_DEPENDENCIES
  1926. $(C_OBJ): %.o: %.c $(dep_files) FORCE
  1927. @set -e; echo CHECK $@; \
  1928. missing_deps="$(missing_deps)"; \
  1929. if test "$$missing_deps"; \
  1930. then \
  1931. echo missing dependencies: $$missing_deps; \
  1932. false; \
  1933. fi
  1934. $(ASM_OBJ): %.o: %.S $(dep_files) FORCE
  1935. @set -e; echo CHECK $@; \
  1936. missing_deps="$(missing_deps)"; \
  1937. if test "$$missing_deps"; \
  1938. then \
  1939. echo missing dependencies: $$missing_deps; \
  1940. false; \
  1941. fi
  1942. endif
  1943. endif
  1944.  
  1945. ifndef CHECK_HEADER_DEPENDENCIES
  1946. $(C_OBJ): %.o: %.c GIT-CFLAGS $(missing_dep_dirs)
  1947. $(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
  1948. $(ASM_OBJ): %.o: %.S GIT-CFLAGS $(missing_dep_dirs)
  1949. $(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
  1950. endif
  1951.  
  1952. %.s: %.c GIT-CFLAGS FORCE
  1953. $(QUIET_CC)$(CC) -o $@ -S $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
  1954.  
  1955. ifdef USE_COMPUTED_HEADER_DEPENDENCIES
  1956. # Take advantage of gcc's on-the-fly dependency generation
  1957. # See <http://gcc.gnu.org/gcc-3.0/features.html>.
  1958. dep_files_present := $(wildcard $(dep_files))
  1959. ifneq ($(dep_files_present),)
  1960. include $(dep_files_present)
  1961. endif
  1962. else
  1963. # Dependencies on header files, for platforms that do not support
  1964. # the gcc -MMD option.
  1965. #
  1966. # Dependencies on automatically generated headers such as common-cmds.h
  1967. # should _not_ be included here, since they are necessary even when
  1968. # building an object for the first time.
  1969.  
  1970. $(OBJECTS): $(LIB_H)
  1971. endif
  1972.  
  1973. exec_cmd.sp exec_cmd.s exec_cmd.o: GIT-PREFIX
  1974. exec_cmd.sp exec_cmd.s exec_cmd.o: EXTRA_CPPFLAGS = \
  1975. '-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \
  1976. '-DBINDIR="$(bindir_relative_SQ)"' \
  1977. '-DPREFIX="$(prefix_SQ)"'
  1978.  
  1979. builtin/init-db.sp builtin/init-db.s builtin/init-db.o: GIT-PREFIX
  1980. builtin/init-db.sp builtin/init-db.s builtin/init-db.o: EXTRA_CPPFLAGS = \
  1981. -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir_SQ)"'
  1982.  
  1983. config.sp config.s config.o: GIT-PREFIX
  1984. config.sp config.s config.o: EXTRA_CPPFLAGS = \
  1985. -DETC_GITCONFIG='"$(ETC_GITCONFIG_SQ)"'
  1986.  
  1987. attr.sp attr.s attr.o: GIT-PREFIX
  1988. attr.sp attr.s attr.o: EXTRA_CPPFLAGS = \
  1989. -DETC_GITATTRIBUTES='"$(ETC_GITATTRIBUTES_SQ)"'
  1990.  
  1991. gettext.sp gettext.s gettext.o: GIT-PREFIX
  1992. gettext.sp gettext.s gettext.o: EXTRA_CPPFLAGS = \
  1993. -DGIT_LOCALE_PATH='"$(localedir_SQ)"'
  1994.  
  1995. ifdef NO_EXPAT
  1996. http-walker.sp http-walker.s http-walker.o: EXTRA_CPPFLAGS = -DNO_EXPAT
  1997. endif
  1998.  
  1999. ifdef NO_REGEX
  2000. compat/regex/regex.sp compat/regex/regex.o: EXTRA_CPPFLAGS = \
  2001. -DGAWK -DNO_MBSUPPORT
  2002. endif
  2003.  
  2004. ifdef USE_NED_ALLOCATOR
  2005. compat/nedmalloc/nedmalloc.sp compat/nedmalloc/nedmalloc.o: EXTRA_CPPFLAGS = \
  2006. -DNDEBUG -DOVERRIDE_STRDUP -DREPLACE_SYSTEM_ALLOCATOR
  2007. endif
  2008.  
  2009. git-%$X: %.o GIT-LDFLAGS $(GITLIBS)
  2010. $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS)
  2011.  
  2012. git-imap-send$X: imap-send.o GIT-LDFLAGS $(GITLIBS)
  2013. $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
  2014. $(LIBS) $(OPENSSL_LINK) $(OPENSSL_LIBSSL) $(LIB_4_CRYPTO)
  2015.  
  2016. git-http-fetch$X: revision.o http.o http-walker.o http-fetch.o GIT-LDFLAGS $(GITLIBS)
  2017. $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
  2018. $(LIBS) $(CURL_LIBCURL)
  2019. git-http-push$X: revision.o http.o http-push.o GIT-LDFLAGS $(GITLIBS)
  2020. $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
  2021. $(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)
  2022.  
  2023. git-remote-testsvn$X: remote-testsvn.o GIT-LDFLAGS $(GITLIBS) $(VCSSVN_LIB)
  2024. $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS) \
  2025. $(VCSSVN_LIB)
  2026.  
  2027. $(REMOTE_CURL_ALIASES): $(REMOTE_CURL_PRIMARY)
  2028. $(QUIET_LNCP)$(RM) $@ && \
  2029. ln $< $@ 2>/dev/null || \
  2030. ln -s $< $@ 2>/dev/null || \
  2031. cp $< $@
  2032.  
  2033. $(REMOTE_CURL_PRIMARY): remote-curl.o http.o http-walker.o GIT-LDFLAGS $(GITLIBS)
  2034. $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
  2035. $(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)
  2036.  
  2037. $(LIB_FILE): $(LIB_OBJS)
  2038. $(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS)
  2039.  
  2040. $(XDIFF_LIB): $(XDIFF_OBJS)
  2041. $(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(XDIFF_OBJS)
  2042.  
  2043. $(VCSSVN_LIB): $(VCSSVN_OBJS)
  2044. $(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(VCSSVN_OBJS)
  2045.  
  2046. export DEFAULT_EDITOR DEFAULT_PAGER
  2047.  
  2048. doc:
  2049. $(MAKE) -C Documentation all
  2050.  
  2051. man:
  2052. $(MAKE) -C Documentation man
  2053.  
  2054. html:
  2055. $(MAKE) -C Documentation html
  2056.  
  2057. info:
  2058. $(MAKE) -C Documentation info
  2059.  
  2060. pdf:
  2061. $(MAKE) -C Documentation pdf
  2062.  
  2063. XGETTEXT_FLAGS = \
  2064. --force-po \
  2065. --add-comments \
  2066. --msgid-bugs-address="Git Mailing List <git@vger.kernel.org>" \
  2067. --from-code=UTF-8
  2068. XGETTEXT_FLAGS_C = $(XGETTEXT_FLAGS) --language=C \
  2069. --keyword=_ --keyword=N_ --keyword="Q_:1,2"
  2070. XGETTEXT_FLAGS_SH = $(XGETTEXT_FLAGS) --language=Shell \
  2071. --keyword=gettextln --keyword=eval_gettextln
  2072. XGETTEXT_FLAGS_PERL = $(XGETTEXT_FLAGS) --keyword=__ --language=Perl
  2073. LOCALIZED_C := $(C_OBJ:o=c) $(LIB_H) $(GENERATED_H)
  2074. LOCALIZED_SH := $(SCRIPT_SH)
  2075. LOCALIZED_PERL := $(SCRIPT_PERL)
  2076.  
  2077. ifdef XGETTEXT_INCLUDE_TESTS
  2078. LOCALIZED_C += t/t0200/test.c
  2079. LOCALIZED_SH += t/t0200/test.sh
  2080. LOCALIZED_PERL += t/t0200/test.perl
  2081. endif
  2082.  
  2083. po/git.pot: $(LOCALIZED_C)
  2084. $(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ $(XGETTEXT_FLAGS_C) $(LOCALIZED_C)
  2085. $(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_SH) \
  2086. $(LOCALIZED_SH)
  2087. $(QUIET_XGETTEXT)$(XGETTEXT) -o$@+ --join-existing $(XGETTEXT_FLAGS_PERL) \
  2088. $(LOCALIZED_PERL)
  2089. mv $@+ $@
  2090.  
  2091. pot: po/git.pot
  2092.  
  2093. POFILES := $(wildcard po/*.po)
  2094. MOFILES := $(patsubst po/%.po,po/build/locale/%/LC_MESSAGES/git.mo,$(POFILES))
  2095.  
  2096. ifndef NO_GETTEXT
  2097. all:: $(MOFILES)
  2098. endif
  2099.  
  2100. po/build/locale/%/LC_MESSAGES/git.mo: po/%.po
  2101. $(QUIET_MSGFMT)mkdir -p $(dir $@) && $(MSGFMT) -o $@ $<
  2102.  
  2103. FIND_SOURCE_FILES = ( git ls-files '*.[hcS]' 2>/dev/null || \
  2104. $(FIND) . \( -name .git -type d -prune \) \
  2105. -o \( -name '*.[hcS]' -type f -print \) )
  2106.  
  2107. $(ETAGS_TARGET): FORCE
  2108. $(RM) $(ETAGS_TARGET)
  2109. $(FIND_SOURCE_FILES) | xargs etags -a -o $(ETAGS_TARGET)
  2110.  
  2111. tags: FORCE
  2112. $(RM) tags
  2113. $(FIND_SOURCE_FILES) | xargs ctags -a
  2114.  
  2115. cscope:
  2116. $(RM) cscope*
  2117. $(FIND_SOURCE_FILES) | xargs cscope -b
  2118.  
  2119. ### Detect prefix changes
  2120. TRACK_PREFIX = $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ):\
  2121. $(localedir_SQ)
  2122.  
  2123. GIT-PREFIX: FORCE
  2124. @FLAGS='$(TRACK_PREFIX)'; \
  2125. if test x"$$FLAGS" != x"`cat GIT-PREFIX 2>/dev/null`" ; then \
  2126. echo >&2 " * new prefix flags"; \
  2127. echo "$$FLAGS" >GIT-PREFIX; \
  2128. fi
  2129.  
  2130. TRACK_CFLAGS = $(CC):$(subst ','\'',$(ALL_CFLAGS)):$(USE_GETTEXT_SCHEME)
  2131.  
  2132. GIT-CFLAGS: FORCE
  2133. @FLAGS='$(TRACK_CFLAGS)'; \
  2134. if test x"$$FLAGS" != x"`cat GIT-CFLAGS 2>/dev/null`" ; then \
  2135. echo >&2 " * new build flags"; \
  2136. echo "$$FLAGS" >GIT-CFLAGS; \
  2137. fi
  2138.  
  2139. TRACK_LDFLAGS = $(subst ','\'',$(ALL_LDFLAGS))
  2140.  
  2141. GIT-LDFLAGS: FORCE
  2142. @FLAGS='$(TRACK_LDFLAGS)'; \
  2143. if test x"$$FLAGS" != x"`cat GIT-LDFLAGS 2>/dev/null`" ; then \
  2144. echo >&2 " * new link flags"; \
  2145. echo "$$FLAGS" >GIT-LDFLAGS; \
  2146. fi
  2147.  
  2148. # We need to apply sq twice, once to protect from the shell
  2149. # that runs GIT-BUILD-OPTIONS, and then again to protect it
  2150. # and the first level quoting from the shell that runs "echo".
  2151. GIT-BUILD-OPTIONS: FORCE
  2152. @echo SHELL_PATH=\''$(subst ','\'',$(SHELL_PATH_SQ))'\' >$@
  2153. @echo PERL_PATH=\''$(subst ','\'',$(PERL_PATH_SQ))'\' >>$@
  2154. @echo DIFF=\''$(subst ','\'',$(subst ','\'',$(DIFF)))'\' >>$@
  2155. @echo PYTHON_PATH=\''$(subst ','\'',$(PYTHON_PATH_SQ))'\' >>$@
  2156. @echo TAR=\''$(subst ','\'',$(subst ','\'',$(TAR)))'\' >>$@
  2157. @echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@
  2158. @echo USE_LIBPCRE=\''$(subst ','\'',$(subst ','\'',$(USE_LIBPCRE)))'\' >>$@
  2159. @echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@
  2160. @echo NO_PYTHON=\''$(subst ','\'',$(subst ','\'',$(NO_PYTHON)))'\' >>$@
  2161. @echo NO_UNIX_SOCKETS=\''$(subst ','\'',$(subst ','\'',$(NO_UNIX_SOCKETS)))'\' >>$@
  2162. ifdef GIT_TEST_OPTS
  2163. @echo GIT_TEST_OPTS=\''$(subst ','\'',$(subst ','\'',$(GIT_TEST_OPTS)))'\' >>$@
  2164. endif
  2165. ifdef GIT_TEST_CMP
  2166. @echo GIT_TEST_CMP=\''$(subst ','\'',$(subst ','\'',$(GIT_TEST_CMP)))'\' >>$@
  2167. endif
  2168. ifdef GIT_TEST_CMP_USE_COPIED_CONTEXT
  2169. @echo GIT_TEST_CMP_USE_COPIED_CONTEXT=YesPlease >>$@
  2170. endif
  2171. @echo NO_GETTEXT=\''$(subst ','\'',$(subst ','\'',$(NO_GETTEXT)))'\' >>$@
  2172. @echo GETTEXT_POISON=\''$(subst ','\'',$(subst ','\'',$(GETTEXT_POISON)))'\' >>$@
  2173. ifdef GIT_PERF_REPEAT_COUNT
  2174. @echo GIT_PERF_REPEAT_COUNT=\''$(subst ','\'',$(subst ','\'',$(GIT_PERF_REPEAT_COUNT)))'\' >>$@
  2175. endif
  2176. ifdef GIT_PERF_REPO
  2177. @echo GIT_PERF_REPO=\''$(subst ','\'',$(subst ','\'',$(GIT_PERF_REPO)))'\' >>$@
  2178. endif
  2179. ifdef GIT_PERF_LARGE_REPO
  2180. @echo GIT_PERF_LARGE_REPO=\''$(subst ','\'',$(subst ','\'',$(GIT_PERF_LARGE_REPO)))'\' >>$@
  2181. endif
  2182. ifdef GIT_PERF_MAKE_OPTS
  2183. @echo GIT_PERF_MAKE_OPTS=\''$(subst ','\'',$(subst ','\'',$(GIT_PERF_MAKE_OPTS)))'\' >>$@
  2184. endif
  2185.  
  2186. ### Detect Python interpreter path changes
  2187. ifndef NO_PYTHON
  2188. TRACK_PYTHON = $(subst ','\'',-DPYTHON_PATH='$(PYTHON_PATH_SQ)')
  2189.  
  2190. GIT-PYTHON-VARS: FORCE
  2191. @VARS='$(TRACK_PYTHON)'; \
  2192. if test x"$$VARS" != x"`cat $@ 2>/dev/null`" ; then \
  2193. echo >&2 " * new Python interpreter location"; \
  2194. echo "$$VARS" >$@; \
  2195. fi
  2196. endif
  2197.  
  2198. test_bindir_programs := $(patsubst %,bin-wrappers/%,$(BINDIR_PROGRAMS_NEED_X) $(BINDIR_PROGRAMS_NO_X) $(TEST_PROGRAMS_NEED_X))
  2199.  
  2200. all:: $(TEST_PROGRAMS) $(test_bindir_programs)
  2201.  
  2202. bin-wrappers/%: wrap-for-bin.sh
  2203. @mkdir -p bin-wrappers
  2204. $(QUIET_GEN)sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
  2205. -e 's|@@BUILD_DIR@@|$(shell pwd)|' \
  2206. -e 's|@@PROG@@|$(@F)|' < $< > $@ && \
  2207. chmod +x $@
  2208.  
  2209. # GNU make supports exporting all variables by "export" without parameters.
  2210. # However, the environment gets quite big, and some programs have problems
  2211. # with that.
  2212.  
  2213. export NO_SVN_TESTS
  2214. export TEST_NO_MALLOC_CHECK
  2215.  
  2216. ### Testing rules
  2217.  
  2218. test: all
  2219. $(MAKE) -C t/ all
  2220.  
  2221. perf: all
  2222. $(MAKE) -C t/perf/ all
  2223.  
  2224. .PHONY: test perf
  2225.  
  2226. test-ctype$X: ctype.o
  2227.  
  2228. test-date$X: date.o ctype.o
  2229.  
  2230. test-delta$X: diff-delta.o patch-delta.o
  2231.  
  2232. test-line-buffer$X: vcs-svn/lib.a
  2233.  
  2234. test-parse-options$X: parse-options.o parse-options-cb.o
  2235.  
  2236. test-svn-fe$X: vcs-svn/lib.a
  2237.  
  2238. .PRECIOUS: $(TEST_OBJS)
  2239.  
  2240. test-%$X: test-%.o GIT-LDFLAGS $(GITLIBS)
  2241. $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(filter %.a,$^) $(LIBS)
  2242.  
  2243. check-sha1:: test-sha1$X
  2244. ./test-sha1.sh
  2245.  
  2246. SP_OBJ = $(patsubst %.o,%.sp,$(C_OBJ))
  2247.  
  2248. $(SP_OBJ): %.sp: %.c GIT-CFLAGS FORCE
  2249. $(QUIET_SP)cgcc -no-compile $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) \
  2250. $(SPARSE_FLAGS) $<
  2251.  
  2252. .PHONY: sparse $(SP_OBJ)
  2253. sparse: $(SP_OBJ)
  2254.  
  2255. check: common-cmds.h
  2256. @if sparse; \
  2257. then \
  2258. echo 2>&1 "Use 'make sparse' instead"; \
  2259. $(MAKE) --no-print-directory sparse; \
  2260. else \
  2261. echo 2>&1 "Did you mean 'make test'?"; \
  2262. exit 1; \
  2263. fi
  2264.  
  2265. remove-dashes:
  2266. ./fixup-builtins $(BUILT_INS) $(PROGRAMS) $(SCRIPTS)
  2267.  
  2268. ### Installation rules
  2269.  
  2270. ifneq ($(filter /%,$(firstword $(template_dir))),)
  2271. template_instdir = $(template_dir)
  2272. else
  2273. template_instdir = $(prefix)/$(template_dir)
  2274. endif
  2275. export template_instdir
  2276.  
  2277. ifneq ($(filter /%,$(firstword $(gitexecdir))),)
  2278. gitexec_instdir = $(gitexecdir)
  2279. else
  2280. gitexec_instdir = $(prefix)/$(gitexecdir)
  2281. endif
  2282. gitexec_instdir_SQ = $(subst ','\'',$(gitexec_instdir))
  2283. export gitexec_instdir
  2284.  
  2285. ifneq ($(filter /%,$(firstword $(mergetoolsdir))),)
  2286. mergetools_instdir = $(mergetoolsdir)
  2287. else
  2288. mergetools_instdir = $(prefix)/$(mergetoolsdir)
  2289. endif
  2290. mergetools_instdir_SQ = $(subst ','\'',$(mergetools_instdir))
  2291.  
  2292. install_bindir_programs := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X)) $(BINDIR_PROGRAMS_NO_X)
  2293.  
  2294. install: all
  2295. $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
  2296. $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
  2297. $(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
  2298. $(INSTALL) -m 644 $(SCRIPT_LIB) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
  2299. $(INSTALL) $(install_bindir_programs) '$(DESTDIR_SQ)$(bindir_SQ)'
  2300. $(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
  2301. $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(mergetools_instdir_SQ)'
  2302. $(INSTALL) -m 644 mergetools/* '$(DESTDIR_SQ)$(mergetools_instdir_SQ)'
  2303. ifndef NO_GETTEXT
  2304. $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(localedir_SQ)'
  2305. (cd po/build/locale && $(TAR) cf - .) | \
  2306. (cd '$(DESTDIR_SQ)$(localedir_SQ)' && umask 022 && $(TAR) xof -)
  2307. endif
  2308. ifndef NO_PERL
  2309. $(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
  2310. $(MAKE) -C gitweb install
  2311. endif
  2312. ifndef NO_PYTHON
  2313. $(MAKE) -C git_remote_helpers prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
  2314. endif
  2315. ifndef NO_TCLTK
  2316. $(MAKE) -C gitk-git install
  2317. $(MAKE) -C git-gui gitexecdir='$(gitexec_instdir_SQ)' install
  2318. endif
  2319. ifneq (,$X)
  2320. $(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';)
  2321. endif
  2322.  
  2323. bindir=$$(cd '$(DESTDIR_SQ)$(bindir_SQ)' && pwd) && \
  2324. execdir=$$(cd '$(DESTDIR_SQ)$(gitexec_instdir_SQ)' && pwd) && \
  2325. { test "$$bindir/" = "$$execdir/" || \
  2326. for p in git$X $(filter $(install_bindir_programs),$(ALL_PROGRAMS)); do \
  2327. $(RM) "$$execdir/$$p" && \
  2328. test -z "$(NO_INSTALL_HARDLINKS)$(NO_CROSS_DIRECTORY_HARDLINKS)" && \
  2329. ln "$$bindir/$$p" "$$execdir/$$p" 2>/dev/null || \
  2330. cp "$$bindir/$$p" "$$execdir/$$p" || exit; \
  2331. done; \
  2332. } && \
  2333. for p in $(filter $(install_bindir_programs),$(BUILT_INS)); do \
  2334. $(RM) "$$bindir/$$p" && \
  2335. test -z "$(NO_INSTALL_HARDLINKS)" && \
  2336. ln "$$bindir/git$X" "$$bindir/$$p" 2>/dev/null || \
  2337. ln -s "git$X" "$$bindir/$$p" 2>/dev/null || \
  2338. cp "$$bindir/git$X" "$$bindir/$$p" || exit; \
  2339. done && \
  2340. for p in $(BUILT_INS); do \
  2341. $(RM) "$$execdir/$$p" && \
  2342. test -z "$(NO_INSTALL_HARDLINKS)" && \
  2343. ln "$$execdir/git$X" "$$execdir/$$p" 2>/dev/null || \
  2344. ln -s "git$X" "$$execdir/$$p" 2>/dev/null || \
  2345. cp "$$execdir/git$X" "$$execdir/$$p" || exit; \
  2346. done && \
  2347. remote_curl_aliases="$(REMOTE_CURL_ALIASES)" && \
  2348. for p in $$remote_curl_aliases; do \
  2349. $(RM) "$$execdir/$$p" && \
  2350. test -z "$(NO_INSTALL_HARDLINKS)" && \
  2351. ln "$$execdir/git-remote-http$X" "$$execdir/$$p" 2>/dev/null || \
  2352. ln -s "git-remote-http$X" "$$execdir/$$p" 2>/dev/null || \
  2353. cp "$$execdir/git-remote-http$X" "$$execdir/$$p" || exit; \
  2354. done && \
  2355. ./check_bindir "z$$bindir" "z$$execdir" "$$bindir/git-add$X"
  2356.  
  2357. install-gitweb:
  2358. $(MAKE) -C gitweb install
  2359.  
  2360. install-doc:
  2361. $(MAKE) -C Documentation install
  2362.  
  2363. install-man:
  2364. $(MAKE) -C Documentation install-man
  2365.  
  2366. install-html:
  2367. $(MAKE) -C Documentation install-html
  2368.  
  2369. install-info:
  2370. $(MAKE) -C Documentation install-info
  2371.  
  2372. install-pdf:
  2373. $(MAKE) -C Documentation install-pdf
  2374.  
  2375. quick-install-doc:
  2376. $(MAKE) -C Documentation quick-install
  2377.  
  2378. quick-install-man:
  2379. $(MAKE) -C Documentation quick-install-man
  2380.  
  2381. quick-install-html:
  2382. $(MAKE) -C Documentation quick-install-html
  2383.  
  2384.  
  2385.  
  2386. ### Maintainer's dist rules
  2387.  
  2388. git.spec: git.spec.in GIT-VERSION-FILE
  2389. sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@+
  2390. mv $@+ $@
  2391.  
  2392. GIT_TARNAME = git-$(GIT_VERSION)
  2393. dist: git.spec git-archive$(X) configure
  2394. ./git-archive --format=tar \
  2395. --prefix=$(GIT_TARNAME)/ HEAD^{tree} > $(GIT_TARNAME).tar
  2396. @mkdir -p $(GIT_TARNAME)
  2397. @cp git.spec configure $(GIT_TARNAME)
  2398. @echo $(GIT_VERSION) > $(GIT_TARNAME)/version
  2399. @$(MAKE) -C git-gui TARDIR=../$(GIT_TARNAME)/git-gui dist-version
  2400. $(TAR) rf $(GIT_TARNAME).tar \
  2401. $(GIT_TARNAME)/git.spec \
  2402. $(GIT_TARNAME)/configure \
  2403. $(GIT_TARNAME)/version \
  2404. $(GIT_TARNAME)/git-gui/version
  2405. @$(RM) -r $(GIT_TARNAME)
  2406. gzip -f -9 $(GIT_TARNAME).tar
  2407.  
  2408. rpm: dist
  2409. $(RPMBUILD) \
  2410. --define "_source_filedigest_algorithm md5" \
  2411. --define "_binary_filedigest_algorithm md5" \
  2412. -ta $(GIT_TARNAME).tar.gz
  2413.  
  2414. htmldocs = git-htmldocs-$(GIT_VERSION)
  2415. manpages = git-manpages-$(GIT_VERSION)
  2416. dist-doc:
  2417. $(RM) -r .doc-tmp-dir
  2418. mkdir .doc-tmp-dir
  2419. $(MAKE) -C Documentation WEBDOC_DEST=../.doc-tmp-dir install-webdoc
  2420. cd .doc-tmp-dir && $(TAR) cf ../$(htmldocs).tar .
  2421. gzip -n -9 -f $(htmldocs).tar
  2422. :
  2423. $(RM) -r .doc-tmp-dir
  2424. mkdir -p .doc-tmp-dir/man1 .doc-tmp-dir/man5 .doc-tmp-dir/man7
  2425. $(MAKE) -C Documentation DESTDIR=./ \
  2426. man1dir=../.doc-tmp-dir/man1 \
  2427. man5dir=../.doc-tmp-dir/man5 \
  2428. man7dir=../.doc-tmp-dir/man7 \
  2429. install
  2430. cd .doc-tmp-dir && $(TAR) cf ../$(manpages).tar .
  2431. gzip -n -9 -f $(manpages).tar
  2432. $(RM) -r .doc-tmp-dir
  2433.  
  2434. ### Cleaning rules
  2435.  
  2436. distclean: clean
  2437. $(RM) configure
  2438. $(RM) config.log config.status config.cache
  2439. $(RM) config.mak.autogen config.mak.append
  2440. $(RM) -r autom4te.cache
  2441.  
  2442. profile-clean:
  2443. $(RM) $(addsuffix *.gcda,$(addprefix $(PROFILE_DIR)/, $(object_dirs)))
  2444. $(RM) $(addsuffix *.gcno,$(addprefix $(PROFILE_DIR)/, $(object_dirs)))
  2445.  
  2446. clean: profile-clean
  2447. $(RM) *.o block-sha1/*.o ppc/*.o compat/*.o compat/*/*.o xdiff/*.o vcs-svn/*.o \
  2448. builtin/*.o $(LIB_FILE) $(XDIFF_LIB) $(VCSSVN_LIB)
  2449. $(RM) $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git$X
  2450. $(RM) $(TEST_PROGRAMS)
  2451. $(RM) -r bin-wrappers $(dep_dirs)
  2452. $(RM) -r po/build/
  2453. $(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h $(ETAGS_TARGET) tags cscope*
  2454. $(RM) -r $(GIT_TARNAME) .doc-tmp-dir
  2455. $(RM) $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz
  2456. $(RM) $(htmldocs).tar.gz $(manpages).tar.gz
  2457. $(MAKE) -C Documentation/ clean
  2458. ifndef NO_PERL
  2459. $(MAKE) -C gitweb clean
  2460. $(MAKE) -C perl clean
  2461. endif
  2462. ifndef NO_PYTHON
  2463. $(MAKE) -C git_remote_helpers clean
  2464. endif
  2465. $(MAKE) -C templates/ clean
  2466. $(MAKE) -C t/ clean
  2467. ifndef NO_TCLTK
  2468. $(MAKE) -C gitk-git clean
  2469. $(MAKE) -C git-gui clean
  2470. endif
  2471. $(RM) GIT-VERSION-FILE GIT-CFLAGS GIT-LDFLAGS GIT-BUILD-OPTIONS
  2472. $(RM) GIT-USER-AGENT GIT-PREFIX GIT-SCRIPT-DEFINES GIT-PYTHON-VARS
  2473.  
  2474. .PHONY: all install profile-clean clean strip
  2475. .PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
  2476. .PHONY: FORCE cscope
  2477.  
  2478. ### Check documentation
  2479. #
  2480. ALL_COMMANDS = $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS)
  2481. ALL_COMMANDS += git
  2482. ALL_COMMANDS += gitk
  2483. ALL_COMMANDS += gitweb
  2484. ALL_COMMANDS += git-gui git-citool
  2485. check-docs::
  2486. @(for v in $(ALL_COMMANDS); \
  2487. do \
  2488. case "$$v" in \
  2489. git-merge-octopus | git-merge-ours | git-merge-recursive | \
  2490. git-merge-resolve | git-merge-subtree | \
  2491. git-fsck-objects | git-init-db | \
  2492. git-remote-* | git-stage | \
  2493. git-?*--?* ) continue ;; \
  2494. esac ; \
  2495. test -f "Documentation/$$v.txt" || \
  2496. echo "no doc: $$v"; \
  2497. sed -e '/^#/d' command-list.txt | \
  2498. grep -q "^$$v[ ]" || \
  2499. case "$$v" in \
  2500. git) ;; \
  2501. *) echo "no link: $$v";; \
  2502. esac ; \
  2503. done; \
  2504. ( \
  2505. sed -e '/^#/d' \
  2506. -e 's/[ ].*//' \
  2507. -e 's/^/listed /' command-list.txt; \
  2508. $(MAKE) -C Documentation print-man1 | \
  2509. grep '\.txt$$' | \
  2510. sed -e 's|Documentation/|documented |' \
  2511. -e 's/\.txt//'; \
  2512. ) | while read how cmd; \
  2513. do \
  2514. case " $(ALL_COMMANDS) " in \
  2515. *" $$cmd "*) ;; \
  2516. *) echo "removed but $$how: $$cmd" ;; \
  2517. esac; \
  2518. done ) | sort
  2519.  
  2520. ### Make sure built-ins do not have dups and listed in git.c
  2521. #
  2522. check-builtins::
  2523. ./check-builtins.sh
  2524.  
  2525. ### Test suite coverage testing
  2526. #
  2527. .PHONY: coverage coverage-clean coverage-build coverage-report
  2528.  
  2529. coverage:
  2530. $(MAKE) coverage-build
  2531. $(MAKE) coverage-report
  2532.  
  2533. object_dirs := $(sort $(dir $(OBJECTS)))
  2534. coverage-clean:
  2535. $(RM) $(addsuffix *.gcov,$(object_dirs))
  2536. $(RM) $(addsuffix *.gcda,$(object_dirs))
  2537. $(RM) $(addsuffix *.gcno,$(object_dirs))
  2538. $(RM) coverage-untested-functions
  2539. $(RM) -r cover_db/
  2540. $(RM) -r cover_db_html/
  2541.  
  2542. COVERAGE_CFLAGS = $(CFLAGS) -O0 -ftest-coverage -fprofile-arcs
  2543. COVERAGE_LDFLAGS = $(CFLAGS) -O0 -lgcov
  2544. GCOVFLAGS = --preserve-paths --branch-probabilities --all-blocks
  2545.  
  2546. coverage-build: coverage-clean
  2547. $(MAKE) CFLAGS="$(COVERAGE_CFLAGS)" LDFLAGS="$(COVERAGE_LDFLAGS)" all
  2548. $(MAKE) CFLAGS="$(COVERAGE_CFLAGS)" LDFLAGS="$(COVERAGE_LDFLAGS)" \
  2549. -j1 test
  2550.  
  2551. coverage-report:
  2552. $(QUIET_GCOV)for dir in $(object_dirs); do \
  2553. $(GCOV) $(GCOVFLAGS) --object-directory=$$dir $$dir*.c || exit; \
  2554. done
  2555.  
  2556. coverage-untested-functions: coverage-report
  2557. grep '^function.*called 0 ' *.c.gcov \
  2558. | sed -e 's/\([^:]*\)\.gcov: *function \([^ ]*\) called.*/\1: \2/' \
  2559. > coverage-untested-functions
  2560.  
  2561. cover_db: coverage-report
  2562. gcov2perl -db cover_db *.gcov
  2563.  
  2564. cover_db_html: cover_db
  2565. cover -report html -outputdir cover_db_html cover_db
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement