| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | Makefile | 124 | ||||
| -rw-r--r-- | cgit.mk | 74 |
3 files changed, 119 insertions, 80 deletions
@@ -1,7 +1,6 @@ # Files I don't care to see in git-status/commit cgit cgit.conf -CGIT-CFLAGS VERSION cgitrc.5 cgitrc.5.fo @@ -23,6 +23,13 @@ DOC_MAN5 = $(patsubst %.txt,%,$(MAN5_TXT)) DOC_HTML = $(patsubst %.txt,%.html,$(MAN_TXT)) DOC_PDF = $(patsubst %.txt,%.pdf,$(MAN_TXT)) +# Define NO_STRCASESTR if you don't have strcasestr. +# +# Define NO_OPENSSL to disable linking with OpenSSL and use bundled SHA1 +# implementation (slower). +# +# Define NEEDS_LIBICONV if linking with libc is not enough (eg. Darwin). +# # Define NO_C99_FORMAT if your formatted IO functions (printf/scanf et.al.) # do not support the 'size specifiers' introduced by C99, namely ll, hh, # j, z, t. (representing long long int, char, intmax_t, size_t, ptrdiff_t). @@ -32,12 +39,22 @@ DOC_PDF = $(patsubst %.txt,%.pdf,$(MAN_TXT)) #-include config.mak # +# Platform specific tweaks +# + +VERSION: force-version + @./gen-version.sh "$(CGIT_VERSION)" +-include VERSION + +uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not') +uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not') +uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not') + +# # Let the user override the above settings. # -include cgit.conf -export CGIT_SCRIPT_NAME CGIT_SCRIPT_PATH CGIT_DATA_PATH CGIT_CONFIG CACHE_ROOT - # # Define a way to invoke make in subdirs quietly, shamelessly ripped # from git.git @@ -52,6 +69,8 @@ NO_SUBDIR = : endif ifndef V + QUIET_CC = @echo ' ' CC $@; + QUIET_LINK = @echo ' ' LINK $@; QUIET_SUBDIR0 = +@subdir= QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \ $(MAKE) $(PRINT_DIR) -C $$subdir @@ -59,12 +78,107 @@ ifndef V export V endif +LDFLAGS ?= +CFLAGS ?= -g -Wall +CFLAGS += -Igit +CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER)' +CFLAGS += -DCGIT_VERSION='"$(CGIT_VERSION)"' +CFLAGS += -DCGIT_CONFIG='"$(CGIT_CONFIG)"' +CFLAGS += -DCGIT_SCRIPT_NAME='"$(CGIT_SCRIPT_NAME)"' +CFLAGS += -DCGIT_CACHE_ROOT='"$(CACHE_ROOT)"' + +ifeq ($(uname_O),Cygwin) + NO_STRCASESTR = YesPlease + NEEDS_LIBICONV = YesPlease +endif + +ifeq ($(uname_S),$(filter $(uname_S),FreeBSD OpenBSD)) + # Apparantly libiconv is installed in /usr/local on BSD + LDFLAGS += -L/usr/local/lib + CFLAGS += -I/usr/local/include + NEEDS_LIBICONV = yes +endif + +GIT_OPTIONS = prefix=/usr NO_GETTEXT=1 +OBJECTS = + +ifdef NO_ICONV + CFLAGS += -DNO_ICONV +endif +ifdef NO_STRCASESTR + CFLAGS += -DNO_STRCASESTR +endif +ifdef NO_C99_FORMAT + CFLAGS += -DNO_C99_FORMAT +endif +ifdef NO_OPENSSL + CFLAGS += -DNO_OPENSSL + GIT_OPTIONS += NO_OPENSSL=1 +else + LDLIBS += -lcrypto +endif + +ifdef NEEDS_LIBICONV + LDLIBS += -liconv +endif + +LDLIBS += git/libgit.a git/xdiff/lib.a -lz -lpthread + +OBJECTS += cgit.o +OBJECTS += cache.o +OBJECTS += cmd.o +OBJECTS += configfile.o +OBJECTS += html.o +OBJECTS += parsing.o +OBJECTS += scan-tree.o +OBJECTS += shared.o +OBJECTS += ui-atom.o +OBJECTS += ui-blob.o +OBJECTS += ui-clone.o +OBJECTS += ui-commit.o +OBJECTS += ui-diff.o +OBJECTS += ui-log.o +OBJECTS += ui-patch.o +OBJECTS += ui-plain.o +OBJECTS += ui-refs.o +OBJECTS += ui-repolist.o +OBJECTS += ui-shared.o +OBJECTS += ui-snapshot.o +OBJECTS += ui-ssdiff.o +OBJECTS += ui-stats.o +OBJECTS += ui-summary.o +OBJECTS += ui-tag.o +OBJECTS += ui-tree.o +OBJECTS += vector.o + +dep_files := $(foreach f,$(OBJECTS),$(dir $f).deps/$(notdir $f).d) +dep_dirs := $(addsuffix .deps,$(sort $(dir $OBJECTS))) + +$(dep_dirs): + @mkdir -p $@ + +missing_dep_dirs := $(filter-out $(wildcard $(dep_dirs)),$(dep_dirs)) +dep_file = $(dir $@).deps/$(notdir $@).d +dep_args = -MF $(dep_file) -MMD -MP + .SUFFIXES: +$(OBJECTS): %.o: %.c $(missing_dep_dirs) + $(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(CFLAGS) $< + +dep_files_present := $(wildcard $(dep_files)) +ifneq ($(dep_files_present),) +include $(dep_files_present) +endif + all:: cgit -cgit: - $(QUIET_SUBDIR0)git $(QUIET_SUBDIR1) -f ../cgit.mk ../cgit NO_CURL=1 +cgit: VERSION $(OBJECTS) libgit + $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) $(LDLIBS) + +libgit: + $(QUIET_SUBDIR0)git $(QUIET_SUBDIR1) NO_CURL=1 $(GIT_OPTIONS) libgit.a + $(QUIET_SUBDIR0)git $(QUIET_SUBDIR1) NO_CURL=1 $(GIT_OPTIONS) xdiff/lib.a test: all $(QUIET_SUBDIR0)tests $(QUIET_SUBDIR1) all @@ -145,7 +259,7 @@ get-git: tags: $(QUIET_TAGS)find . -name '*.[ch]' | xargs ctags -.PHONY: all cgit get-git +.PHONY: all cgit get-git libgit force-version .PHONY: clean clean-doc cleanall .PHONY: doc doc-html doc-man doc-pdf .PHONY: install install-doc install-html install-man install-pdf diff --git a/cgit.mk b/cgit.mk deleted file mode 100644 index 4869c55..0000000 --- a/cgit.mk +++ /dev/null @@ -1,74 +0,0 @@ -# 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 = ../ - -# 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) && ./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_VERSION='"$(CGIT_VERSION)"' -CGIT_CFLAGS += -DCGIT_CONFIG='"$(CGIT_CONFIG)"' -CGIT_CFLAGS += -DCGIT_SCRIPT_NAME='"$(CGIT_SCRIPT_NAME)"' -CGIT_CFLAGS += -DCGIT_CACHE_ROOT='"$(CACHE_ROOT)"' - -ifdef NO_C99_FORMAT - CFLAGS += -DNO_C99_FORMAT -endif - -CGIT_OBJ_NAMES += cgit.o -CGIT_OBJ_NAMES += cache.o -CGIT_OBJ_NAMES += cmd.o -CGIT_OBJ_NAMES += configfile.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-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_OBJ_NAMES += vector.o - -CGIT_OBJS := $(addprefix $(CGIT_PREFIX),$(CGIT_OBJ_NAMES)) - -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) - $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS) |