aboutsummaryrefslogtreecommitdiff
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Makefile124
-rw-r--r--cgit.mk74
3 files changed, 119 insertions, 80 deletions
diff --git a/.gitignore b/.gitignore
index 8011b39..487728b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
diff --git a/Makefile b/Makefile
index 8c00190..1127961 100644
--- a/Makefile
+++ b/Makefile
@@ -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)