John Keeping | 5f323c1 | 2013-03-06 21:22:06 +0000 | [diff] [blame] | 1 | # This Makefile is run in the "git" directory in order to re-use Git's |
| 2 | # build variables and operating system detection. Hence all files in |
| 3 | # CGit's directory must be prefixed with "../". |
| 4 | include Makefile |
| 5 | |
| 6 | CGIT_PREFIX = ../ |
| 7 | |
John Keeping | cfb77e9 | 2013-04-01 14:14:12 +0100 | [diff] [blame] | 8 | -include $(CGIT_PREFIX)cgit.conf |
| 9 | |
John Keeping | 5f323c1 | 2013-03-06 21:22:06 +0000 | [diff] [blame] | 10 | # The CGIT_* variables are inherited when this file is called from the |
| 11 | # main Makefile - they are defined there. |
| 12 | |
| 13 | $(CGIT_PREFIX)VERSION: force-version |
John Keeping | 7669f7f | 2013-03-06 21:22:09 +0000 | [diff] [blame] | 14 | @cd $(CGIT_PREFIX) && '$(SHELL_PATH_SQ)' ./gen-version.sh "$(CGIT_VERSION)" |
John Keeping | 5f323c1 | 2013-03-06 21:22:06 +0000 | [diff] [blame] | 15 | -include $(CGIT_PREFIX)VERSION |
| 16 | .PHONY: force-version |
| 17 | |
| 18 | # CGIT_CFLAGS is a separate variable so that we can track it separately |
| 19 | # and avoid rebuilding all of Git when these variables change. |
John Keeping | 5f323c1 | 2013-03-06 21:22:06 +0000 | [diff] [blame] | 20 | CGIT_CFLAGS += -DCGIT_CONFIG='"$(CGIT_CONFIG)"' |
| 21 | CGIT_CFLAGS += -DCGIT_SCRIPT_NAME='"$(CGIT_SCRIPT_NAME)"' |
| 22 | CGIT_CFLAGS += -DCGIT_CACHE_ROOT='"$(CACHE_ROOT)"' |
| 23 | |
| 24 | ifdef NO_C99_FORMAT |
| 25 | CFLAGS += -DNO_C99_FORMAT |
| 26 | endif |
| 27 | |
Jason A. Donenfeld | f43b228 | 2014-01-13 14:18:51 +0100 | [diff] [blame] | 28 | ifdef NO_LUA |
Jason A. Donenfeld | a9a7f68 | 2014-01-14 13:47:28 +0100 | [diff] [blame] | 29 | LUA_MESSAGE := linking without specified Lua support |
Jason A. Donenfeld | 3488d12 | 2014-01-14 01:50:31 +0100 | [diff] [blame] | 30 | CGIT_CFLAGS += -DNO_LUA |
Jason A. Donenfeld | f43b228 | 2014-01-13 14:18:51 +0100 | [diff] [blame] | 31 | else |
Natanael Copa | 44ccae4 | 2014-01-22 13:15:08 +0100 | [diff] [blame] | 32 | ifeq ($(LUA_PKGCONFIG),) |
| 33 | LUA_PKGCONFIG := $(shell for pc in luajit lua lua5.2 lua5.1; do \ |
Jason A. Donenfeld | 8acfa51 | 2014-02-20 20:06:29 +0100 | [diff] [blame] | 34 | pkg-config --exists $$pc 2>/dev/null && echo $$pc && break; \ |
Natanael Copa | 44ccae4 | 2014-01-22 13:15:08 +0100 | [diff] [blame] | 35 | done) |
| 36 | LUA_MODE := autodetected |
| 37 | else |
| 38 | LUA_MODE := specified |
| 39 | endif |
| 40 | ifneq ($(LUA_PKGCONFIG),) |
| 41 | LUA_MESSAGE := linking with $(LUA_MODE) $(LUA_PKGCONFIG) |
| 42 | LUA_LIBS := $(shell pkg-config --libs $(LUA_PKGCONFIG) 2>/dev/null) |
| 43 | LUA_CFLAGS := $(shell pkg-config --cflags $(LUA_PKGCONFIG) 2>/dev/null) |
Jason A. Donenfeld | 3488d12 | 2014-01-14 01:50:31 +0100 | [diff] [blame] | 44 | CGIT_LIBS += $(LUA_LIBS) |
| 45 | CGIT_CFLAGS += $(LUA_CFLAGS) |
| 46 | else |
Jason A. Donenfeld | a9a7f68 | 2014-01-14 13:47:28 +0100 | [diff] [blame] | 47 | LUA_MESSAGE := linking without autodetected Lua support |
Jason A. Donenfeld | 3488d12 | 2014-01-14 01:50:31 +0100 | [diff] [blame] | 48 | NO_LUA := YesPlease |
| 49 | CGIT_CFLAGS += -DNO_LUA |
Jason A. Donenfeld | f43b228 | 2014-01-13 14:18:51 +0100 | [diff] [blame] | 50 | endif |
| 51 | |
| 52 | endif |
| 53 | |
Jason A. Donenfeld | 3488d12 | 2014-01-14 01:50:31 +0100 | [diff] [blame] | 54 | # Add -ldl to linker flags on non-BSD systems. |
| 55 | ifeq ($(findstring BSD,$(uname_S)),) |
| 56 | CGIT_LIBS += -ldl |
| 57 | endif |
Jason A. Donenfeld | f43b228 | 2014-01-13 14:18:51 +0100 | [diff] [blame] | 58 | |
Sebastian Andrzej Siewior | d3581b5 | 2014-01-18 21:24:58 +0100 | [diff] [blame] | 59 | # glibc 2.1+ offers sendfile which the most common C library on Linux |
| 60 | ifeq ($(uname_S),Linux) |
| 61 | HAVE_LINUX_SENDFILE = YesPlease |
| 62 | endif |
| 63 | |
| 64 | ifdef HAVE_LINUX_SENDFILE |
| 65 | CGIT_CFLAGS += -DHAVE_LINUX_SENDFILE |
| 66 | endif |
Jason A. Donenfeld | f43b228 | 2014-01-13 14:18:51 +0100 | [diff] [blame] | 67 | |
John Keeping | 5f323c1 | 2013-03-06 21:22:06 +0000 | [diff] [blame] | 68 | CGIT_OBJ_NAMES += cgit.o |
| 69 | CGIT_OBJ_NAMES += cache.o |
| 70 | CGIT_OBJ_NAMES += cmd.o |
| 71 | CGIT_OBJ_NAMES += configfile.o |
Jason A. Donenfeld | 3eae406 | 2014-01-10 05:19:05 +0100 | [diff] [blame] | 72 | CGIT_OBJ_NAMES += filter.o |
John Keeping | 5f323c1 | 2013-03-06 21:22:06 +0000 | [diff] [blame] | 73 | CGIT_OBJ_NAMES += html.o |
| 74 | CGIT_OBJ_NAMES += parsing.o |
| 75 | CGIT_OBJ_NAMES += scan-tree.o |
| 76 | CGIT_OBJ_NAMES += shared.o |
| 77 | CGIT_OBJ_NAMES += ui-atom.o |
| 78 | CGIT_OBJ_NAMES += ui-blob.o |
| 79 | CGIT_OBJ_NAMES += ui-clone.o |
| 80 | CGIT_OBJ_NAMES += ui-commit.o |
| 81 | CGIT_OBJ_NAMES += ui-diff.o |
| 82 | CGIT_OBJ_NAMES += ui-log.o |
| 83 | CGIT_OBJ_NAMES += ui-patch.o |
| 84 | CGIT_OBJ_NAMES += ui-plain.o |
| 85 | CGIT_OBJ_NAMES += ui-refs.o |
| 86 | CGIT_OBJ_NAMES += ui-repolist.o |
| 87 | CGIT_OBJ_NAMES += ui-shared.o |
| 88 | CGIT_OBJ_NAMES += ui-snapshot.o |
| 89 | CGIT_OBJ_NAMES += ui-ssdiff.o |
| 90 | CGIT_OBJ_NAMES += ui-stats.o |
| 91 | CGIT_OBJ_NAMES += ui-summary.o |
| 92 | CGIT_OBJ_NAMES += ui-tag.o |
| 93 | CGIT_OBJ_NAMES += ui-tree.o |
John Keeping | 5f323c1 | 2013-03-06 21:22:06 +0000 | [diff] [blame] | 94 | |
| 95 | CGIT_OBJS := $(addprefix $(CGIT_PREFIX),$(CGIT_OBJ_NAMES)) |
| 96 | |
John Keeping | d6768a6 | 2013-03-06 21:22:08 +0000 | [diff] [blame] | 97 | # Only cgit.c reference CGIT_VERSION so we only rebuild its objects when the |
| 98 | # version changes. |
John Keeping | 5150b7c | 2015-03-08 16:32:15 +0000 | [diff] [blame] | 99 | CGIT_VERSION_OBJS := $(addprefix $(CGIT_PREFIX),cgit.o cgit.sp) |
John Keeping | d6768a6 | 2013-03-06 21:22:08 +0000 | [diff] [blame] | 100 | $(CGIT_VERSION_OBJS): $(CGIT_PREFIX)VERSION |
| 101 | $(CGIT_VERSION_OBJS): EXTRA_CPPFLAGS = \ |
| 102 | -DCGIT_VERSION='"$(CGIT_VERSION)"' |
| 103 | |
John Keeping | a5e4ad2 | 2013-04-04 18:32:24 +0100 | [diff] [blame] | 104 | # Git handles dependencies using ":=" so dependencies in CGIT_OBJ are not |
| 105 | # handled by that and we must handle them ourselves. |
| 106 | cgit_dep_files := $(foreach f,$(CGIT_OBJS),$(dir $f).depend/$(notdir $f).d) |
| 107 | cgit_dep_files_present := $(wildcard $(cgit_dep_files)) |
| 108 | ifneq ($(cgit_dep_files_present),) |
| 109 | include $(cgit_dep_files_present) |
| 110 | endif |
| 111 | |
John Keeping | 5f323c1 | 2013-03-06 21:22:06 +0000 | [diff] [blame] | 112 | ifeq ($(wildcard $(CGIT_PREFIX).depend),) |
| 113 | missing_dep_dirs += $(CGIT_PREFIX).depend |
| 114 | endif |
| 115 | |
| 116 | $(CGIT_PREFIX).depend: |
| 117 | @mkdir -p $@ |
| 118 | |
| 119 | $(CGIT_PREFIX)CGIT-CFLAGS: FORCE |
| 120 | @FLAGS='$(subst ','\'',$(CGIT_CFLAGS))'; \ |
| 121 | if test x"$$FLAGS" != x"`cat ../CGIT-CFLAGS 2>/dev/null`" ; then \ |
| 122 | echo 1>&2 " * new CGit build flags"; \ |
| 123 | echo "$$FLAGS" >$(CGIT_PREFIX)CGIT-CFLAGS; \ |
| 124 | fi |
| 125 | |
| 126 | $(CGIT_OBJS): %.o: %.c GIT-CFLAGS $(CGIT_PREFIX)CGIT-CFLAGS $(missing_dep_dirs) |
| 127 | $(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $(CGIT_CFLAGS) $< |
| 128 | |
| 129 | $(CGIT_PREFIX)cgit: $(CGIT_OBJS) GIT-LDFLAGS $(GITLIBS) |
Jason A. Donenfeld | a9a7f68 | 2014-01-14 13:47:28 +0100 | [diff] [blame] | 130 | @echo 1>&1 " * $(LUA_MESSAGE)" |
Jason A. Donenfeld | e83b51b | 2014-01-13 14:16:18 +0100 | [diff] [blame] | 131 | $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS) $(CGIT_LIBS) |
John Keeping | 5150b7c | 2015-03-08 16:32:15 +0000 | [diff] [blame] | 132 | |
| 133 | CGIT_SP_OBJS := $(patsubst %.o,%.sp,$(CGIT_OBJS)) |
| 134 | |
| 135 | $(CGIT_SP_OBJS): %.sp: %.c GIT-CFLAGS $(CGIT_PREFIX)CGIT-CFLAGS FORCE |
| 136 | $(QUIET_SP)cgcc -no-compile $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $(CGIT_CFLAGS) $(SPARSE_FLAGS) $< |
| 137 | |
| 138 | cgit-sparse: $(CGIT_SP_OBJS) |