| # This Makefile is run in the "git" directory in order to re-use Git's |
| # build variables and operating system detection. Hence all files in |
| # CGit's directory must be prefixed with "../". |
| include Makefile |
| |
| CGIT_PREFIX = ../ |
| |
| -include $(CGIT_PREFIX)cgit.conf |
| |
| # The CGIT_* variables are inherited when this file is called from the |
| # main Makefile - they are defined there. |
| |
| $(CGIT_PREFIX)VERSION: force-version |
| @cd $(CGIT_PREFIX) && '$(SHELL_PATH_SQ)' ./gen-version.sh "$(CGIT_VERSION)" |
| -include $(CGIT_PREFIX)VERSION |
| .PHONY: force-version |
| |
| # CGIT_CFLAGS is a separate variable so that we can track it separately |
| # and avoid rebuilding all of Git when these variables change. |
| CGIT_CFLAGS += -DCGIT_CONFIG='"$(CGIT_CONFIG)"' |
| CGIT_CFLAGS += -DCGIT_SCRIPT_NAME='"$(CGIT_SCRIPT_NAME)"' |
| CGIT_CFLAGS += -DCGIT_CACHE_ROOT='"$(CACHE_ROOT)"' |
| |
| PKG_CONFIG ?= pkg-config |
| |
| ifdef NO_C99_FORMAT |
| CFLAGS += -DNO_C99_FORMAT |
| endif |
| |
| ifdef NO_LUA |
| LUA_MESSAGE := linking without specified Lua support |
| CGIT_CFLAGS += -DNO_LUA |
| else |
| ifeq ($(LUA_PKGCONFIG),) |
| LUA_PKGCONFIG := $(shell for pc in luajit lua lua5.2 lua5.1; do \ |
| $(PKG_CONFIG) --exists $$pc 2>/dev/null && echo $$pc && break; \ |
| done) |
| LUA_MODE := autodetected |
| else |
| LUA_MODE := specified |
| endif |
| ifneq ($(LUA_PKGCONFIG),) |
| LUA_MESSAGE := linking with $(LUA_MODE) $(LUA_PKGCONFIG) |
| LUA_LIBS := $(shell $(PKG_CONFIG) --libs $(LUA_PKGCONFIG) 2>/dev/null) |
| LUA_CFLAGS := $(shell $(PKG_CONFIG) --cflags $(LUA_PKGCONFIG) 2>/dev/null) |
| CGIT_LIBS += $(LUA_LIBS) |
| CGIT_CFLAGS += $(LUA_CFLAGS) |
| else |
| LUA_MESSAGE := linking without autodetected Lua support |
| NO_LUA := YesPlease |
| CGIT_CFLAGS += -DNO_LUA |
| endif |
| |
| endif |
| |
| # Add -ldl to linker flags on systems that commonly use GNU libc. |
| ifneq (,$(filter $(uname_S),Linux GNU GNU/kFreeBSD)) |
| CGIT_LIBS += -ldl |
| endif |
| |
| # glibc 2.1+ offers sendfile which the most common C library on Linux |
| ifeq ($(uname_S),Linux) |
| HAVE_LINUX_SENDFILE = YesPlease |
| endif |
| |
| ifdef HAVE_LINUX_SENDFILE |
| CGIT_CFLAGS += -DHAVE_LINUX_SENDFILE |
| endif |
| |
| CGIT_OBJ_NAMES += cgit.o |
| CGIT_OBJ_NAMES += cache.o |
| CGIT_OBJ_NAMES += cmd.o |
| CGIT_OBJ_NAMES += configfile.o |
| CGIT_OBJ_NAMES += filter.o |
| CGIT_OBJ_NAMES += html.o |
| CGIT_OBJ_NAMES += parsing.o |
| CGIT_OBJ_NAMES += scan-tree.o |
| CGIT_OBJ_NAMES += shared.o |
| CGIT_OBJ_NAMES += ui-atom.o |
| CGIT_OBJ_NAMES += ui-blame.o |
| CGIT_OBJ_NAMES += ui-blob.o |
| CGIT_OBJ_NAMES += ui-clone.o |
| CGIT_OBJ_NAMES += ui-commit.o |
| CGIT_OBJ_NAMES += ui-diff.o |
| CGIT_OBJ_NAMES += ui-log.o |
| CGIT_OBJ_NAMES += ui-patch.o |
| CGIT_OBJ_NAMES += ui-plain.o |
| CGIT_OBJ_NAMES += ui-refs.o |
| CGIT_OBJ_NAMES += ui-repolist.o |
| CGIT_OBJ_NAMES += ui-shared.o |
| CGIT_OBJ_NAMES += ui-snapshot.o |
| CGIT_OBJ_NAMES += ui-ssdiff.o |
| CGIT_OBJ_NAMES += ui-stats.o |
| CGIT_OBJ_NAMES += ui-summary.o |
| CGIT_OBJ_NAMES += ui-tag.o |
| CGIT_OBJ_NAMES += ui-tree.o |
| |
| CGIT_OBJS := $(addprefix $(CGIT_PREFIX),$(CGIT_OBJ_NAMES)) |
| |
| # Only cgit.c reference CGIT_VERSION so we only rebuild its objects when the |
| # version changes. |
| CGIT_VERSION_OBJS := $(addprefix $(CGIT_PREFIX),cgit.o cgit.sp) |
| $(CGIT_VERSION_OBJS): $(CGIT_PREFIX)VERSION |
| $(CGIT_VERSION_OBJS): EXTRA_CPPFLAGS = \ |
| -DCGIT_VERSION='"$(CGIT_VERSION)"' |
| |
| # Git handles dependencies using ":=" so dependencies in CGIT_OBJ are not |
| # handled by that and we must handle them ourselves. |
| cgit_dep_files := $(foreach f,$(CGIT_OBJS),$(dir $f).depend/$(notdir $f).d) |
| cgit_dep_files_present := $(wildcard $(cgit_dep_files)) |
| ifneq ($(cgit_dep_files_present),) |
| include $(cgit_dep_files_present) |
| endif |
| |
| ifeq ($(wildcard $(CGIT_PREFIX).depend),) |
| missing_dep_dirs += $(CGIT_PREFIX).depend |
| endif |
| |
| $(CGIT_PREFIX).depend: |
| @mkdir -p $@ |
| |
| $(CGIT_PREFIX)CGIT-CFLAGS: FORCE |
| @FLAGS='$(subst ','\'',$(CGIT_CFLAGS))'; \ |
| if test x"$$FLAGS" != x"`cat ../CGIT-CFLAGS 2>/dev/null`" ; then \ |
| echo 1>&2 " * new CGit build flags"; \ |
| echo "$$FLAGS" >$(CGIT_PREFIX)CGIT-CFLAGS; \ |
| fi |
| |
| $(CGIT_OBJS): %.o: %.c GIT-CFLAGS $(CGIT_PREFIX)CGIT-CFLAGS $(missing_dep_dirs) |
| $(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $(CGIT_CFLAGS) $< |
| |
| $(CGIT_PREFIX)cgit: $(CGIT_OBJS) GIT-LDFLAGS $(GITLIBS) |
| @echo 1>&1 " * $(LUA_MESSAGE)" |
| $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS) $(CGIT_LIBS) |
| |
| CGIT_SP_OBJS := $(patsubst %.o,%.sp,$(CGIT_OBJS)) |
| |
| $(CGIT_SP_OBJS): %.sp: %.c GIT-CFLAGS $(CGIT_PREFIX)CGIT-CFLAGS FORCE |
| $(QUIET_SP)cgcc -no-compile $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $(CGIT_CFLAGS) $(SPARSE_FLAGS) $< |
| |
| cgit-sparse: $(CGIT_SP_OBJS) |