Makefile 6.5 KB
Newer Older
1 2 3 4
# Define MOZILLA_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine coming from Mozilla. It is GPL'd and should be fast
# on non-x86 architectures (e.g. PowerPC), while the OpenSSL version (default
# choice) has very fast version optimized for i586.
5
#
6 7
# Define NO_OPENSSL environment variable if you do not have OpenSSL. You will
# miss out git-rev-list --merge-order. This also implies MOZILLA_SHA1.
8
#
9 10 11
# Define NO_CURL if you do not have curl installed.  git-http-pull is not
# built, and you cannot use http:// and https:// transports.
#
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
# Define PPC_SHA1 environment variable when running make to make use of
# a bundled SHA1 routine optimized for PowerPC.


# Define COLLISION_CHECK below if you believe that SHA1's
# 1461501637330902918203684832716283019655932542976 hashes do not give you
# sufficient guarantee that no collisions between objects will ever happen.

# DEFINES += -DCOLLISION_CHECK

# Define USE_NSEC below if you want git to care about sub-second file mtimes
# and ctimes. Note that you need recent glibc (at least 2.2.4) for this, and
# it will BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely
# randomly break unless your underlying filesystem supports those sub-second
# times (my ext3 doesn't).

# DEFINES += -DUSE_NSEC

# Define USE_STDEV below if you want git to care about the underlying device
# change being considered an inode change from the update-cache perspective.

# DEFINES += -DUSE_STDEV

J
Junio C Hamano 已提交
35
GIT_VERSION=0.99.3
36

37 38
COPTS?=-g -O2
CFLAGS+=$(COPTS) -Wall $(DEFINES)
39 40

prefix=$(HOME)
41
bindir=$(prefix)/bin
42
template_dir=$(prefix)/share/git-core/templates/
43
# dest=
44

45 46 47 48
CC?=gcc
AR?=ar
INSTALL?=install
RPMBUILD?=rpmbuild
49

50 51
# sparse is architecture-neutral, which means that we need to tell it
# explicitly what architecture to check for. Fix this up for yours..
52
SPARSE_FLAGS?=-D__BIG_ENDIAN__ -D__powerpc__
53

P
Petr Baudis 已提交
54 55 56 57 58 59


### --- END CONFIGURATION SECTION ---



60
SCRIPTS=git git-apply-patch-script git-merge-one-file-script git-prune-script \
N
Nicolas Pitre 已提交
61
	git-pull-script git-tag-script git-resolve-script git-whatchanged \
62
	git-fetch-script git-status-script git-commit-script \
L
Linus Torvalds 已提交
63
	git-log-script git-shortlog git-cvsimport-script git-diff-script \
L
Linus Torvalds 已提交
64
	git-reset-script git-add-script git-checkout-script git-clone-script \
65
	gitk git-cherry git-rebase-script git-relink-script git-repack-script \
L
Linus Torvalds 已提交
66
	git-format-patch-script git-sh-setup-script git-push-script \
67
	git-branch-script git-parse-remote git-verify-tag-script \
68
	git-ls-remote-script git-clone-dumb-http git-rename-script \
69
	git-request-pull-script git-bisect-script
70

71
SCRIPTS += git-count-objects-script
72
SCRIPTS += git-send-email-script
73

74 75
PROG=   git-update-cache git-diff-files git-init-db git-write-tree \
	git-read-tree git-commit-tree git-cat-file git-fsck-cache \
76
	git-checkout-cache git-diff-tree git-rev-tree git-ls-files \
J
Junio C Hamano 已提交
77
	git-ls-tree git-merge-base git-merge-cache \
78
	git-unpack-file git-export git-diff-cache git-convert-cache \
79
	git-ssh-push git-ssh-pull git-rev-list git-mktag \
80
	git-diff-helper git-tar-tree git-local-pull git-hash-object \
81
	git-get-tar-commit-id git-apply git-stripspace \
82 83
	git-diff-stages git-rev-parse git-patch-id git-pack-objects \
	git-unpack-objects git-verify-pack git-receive-pack git-send-pack \
84
	git-prune-packed git-fetch-pack git-upload-pack git-clone-pack \
J
Junio C Hamano 已提交
85
	git-show-index git-daemon git-var git-peek-remote \
86
	git-update-server-info git-show-rev-cache git-build-rev-cache
87

88 89 90 91
ifndef NO_CURL
PROG+= git-http-pull
endif

L
Linus Torvalds 已提交
92
LIB_FILE=libgit.a
93
LIB_H=cache.h object.h blob.h tree.h commit.h tag.h delta.h epoch.h csum-file.h \
94
	pack.h pkt-line.h refs.h
P
Petr Baudis 已提交
95 96
LIB_OBJS=read-cache.o sha1_file.o usage.o object.o commit.o tree.o blob.o \
	 tag.o date.o index.o diff-delta.o patch-delta.o entry.o path.o \
97 98
	 refs.o csum-file.o pack-check.o pkt-line.o connect.o ident.o \
	 sha1_name.o
L
Linus Torvalds 已提交
99

J
Junio C Hamano 已提交
100 101 102
LIB_H += rev-cache.h
LIB_OBJS += rev-cache.o

103 104 105
LIB_H += run-command.h
LIB_OBJS += run-command.o

106 107 108
LIB_H += strbuf.h
LIB_OBJS += strbuf.o

109 110 111
LIB_H += quote.h
LIB_OBJS += quote.o 

112
LIB_H += diff.h count-delta.h
113 114 115
DIFF_OBJS = diff.o diffcore-rename.o diffcore-pickaxe.o diffcore-pathspec.o \
	diffcore-break.o diffcore-order.o
LIB_OBJS += $(DIFF_OBJS) count-delta.o
116

J
Junio C Hamano 已提交
117
LIB_OBJS += gitenv.o
J
Junio C Hamano 已提交
118
LIB_OBJS += server-info.o
J
Junio C Hamano 已提交
119

120 121
LIBS = $(LIB_FILE)
LIBS += -lz
122

P
Petr Baudis 已提交
123 124
ifndef NO_OPENSSL
	LIB_OBJS += epoch.o
125
	OPENSSL_LIBSSL=-lssl
P
Petr Baudis 已提交
126 127 128
else
	CFLAGS += '-DNO_OPENSSL'
	MOZILLA_SHA1=1
129
	OPENSSL_LIBSSL=
P
Petr Baudis 已提交
130
endif
131 132 133
ifdef MOZILLA_SHA1
  SHA1_HEADER="mozilla-sha1/sha1.h"
  LIB_OBJS += mozilla-sha1/sha1.o
134 135 136 137
else
ifdef PPC_SHA1
  SHA1_HEADER="ppc/sha1.h"
  LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
138 139
else
  SHA1_HEADER=<openssl/sha.h>
140 141 142
ifeq ($(shell uname -s),Darwin)
  LIBS += -lcrypto -lssl
else
143
  LIBS += -lcrypto
144
endif
145
endif
146
endif
147 148

CFLAGS += '-DSHA1_HEADER=$(SHA1_HEADER)'
149

L
Linus Torvalds 已提交
150

151

P
Petr Baudis 已提交
152 153 154
### Build rules

all: $(PROG)
155

156 157
all:
	$(MAKE) -C templates
158

159 160 161 162 163 164 165 166
.PRECIOUS: %.o
git-%: %.o $(LIB_FILE)
	$(CC) $(CFLAGS) -o $@ $(filter %.o,$^) $(LIBS)

git-http-pull: pull.o
git-local-pull: pull.o
git-ssh-pull: rsh.o pull.o
git-ssh-push: rsh.o
167 168

git-http-pull: LIBS += -lcurl
169
git-rev-list: LIBS += $(OPENSSL_LIBSSL)
170

171 172 173
init-db.o: init-db.c
	$(CC) -c $(CFLAGS) -DDEFAULT_GIT_TEMPLATE_DIR='"$(template_dir)"' $*.c

174
$(LIB_OBJS): $(LIB_H)
J
Junio C Hamano 已提交
175
$(patsubst git-%,%.o,$(PROG)): $(LIB_H)
176
$(DIFF_OBJS): diffcore.h
177

P
Petr Baudis 已提交
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
$(LIB_FILE): $(LIB_OBJS)
	$(AR) rcs $@ $(LIB_OBJS)

doc:
	$(MAKE) -C Documentation all



### Testing rules

test: all
	$(MAKE) -C t/ all

test-date: test-date.c date.o
	$(CC) $(CFLAGS) -o $@ test-date.c date.o

test-delta: test-delta.c diff-delta.o patch-delta.o
	$(CC) $(CFLAGS) -o $@ $^

check:
	for i in *.c; do sparse $(CFLAGS) $(SPARSE_FLAGS) $$i; done



### Installation rules

install: $(PROG) $(SCRIPTS)
	$(INSTALL) -m755 -d $(dest)$(bindir)
206
	$(INSTALL) $(PROG) $(SCRIPTS) $(dest)$(bindir)
J
Junio C Hamano 已提交
207
	$(MAKE) -C templates install
P
Petr Baudis 已提交
208 209 210 211 212 213 214 215 216 217 218 219

install-tools:
	$(MAKE) -C tools install

install-doc:
	$(MAKE) -C Documentation install




### Maintainer's dist rules

220
git-core.spec: git-core.spec.in Makefile
221 222
	sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@

223 224
GIT_TARNAME=git-core-$(GIT_VERSION)
dist: git-core.spec git-tar-tree
C
Chris Wright 已提交
225
	./git-tar-tree HEAD $(GIT_TARNAME) > $(GIT_TARNAME).tar
226
	@mkdir -p $(GIT_TARNAME)
227 228
	@cp git-core.spec $(GIT_TARNAME)
	tar rf $(GIT_TARNAME).tar $(GIT_TARNAME)/git-core.spec
229
	@rm -rf $(GIT_TARNAME)
230
	gzip -f -9 $(GIT_TARNAME).tar
231 232

rpm: dist
233
	$(RPMBUILD) -ta git-core-$(GIT_VERSION).tar.gz
234

P
Petr Baudis 已提交
235

P
Petr Baudis 已提交
236 237
backup: clean
	cd .. ; tar czvf dircache.tar.gz dir-cache
238

239

P
Petr Baudis 已提交
240 241

### Cleaning rules
242

243
clean:
244
	rm -f *.o mozilla-sha1/*.o ppc/*.o $(PROG) $(LIB_FILE)
245
	rm -f git-core-*.tar.gz git-core.spec
246
	$(MAKE) -C tools/ clean
247
	$(MAKE) -C Documentation/ clean
J
Junio C Hamano 已提交
248
	$(MAKE) -C templates/ clean
249
	$(MAKE) -C t/ clean