Makefile 6.4 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 175
$(LIB_OBJS): $(LIB_H)
$(DIFF_OBJS): diffcore.h
176

P
Petr Baudis 已提交
177 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
$(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)
205
	$(INSTALL) $(PROG) $(SCRIPTS) $(dest)$(bindir)
J
Junio C Hamano 已提交
206
	$(MAKE) -C templates install
P
Petr Baudis 已提交
207 208 209 210 211 212 213 214 215 216 217 218

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

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




### Maintainer's dist rules

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

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

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

P
Petr Baudis 已提交
234

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

238

P
Petr Baudis 已提交
239 240

### Cleaning rules
241

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