Makefile 6.2 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
# dest=
43

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

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

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


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



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

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

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

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

L
Linus Torvalds 已提交
91
LIB_FILE=libgit.a
92
LIB_H=cache.h object.h blob.h tree.h commit.h tag.h delta.h epoch.h csum-file.h \
93
	pack.h pkt-line.h refs.h
P
Petr Baudis 已提交
94 95
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 \
P
Petr Baudis 已提交
96
	 refs.o csum-file.o pack-check.o pkt-line.o connect.o ident.o
L
Linus Torvalds 已提交
97

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

101 102 103
LIB_H += run-command.h
LIB_OBJS += run-command.o

104 105 106
LIB_H += strbuf.h
LIB_OBJS += strbuf.o

107 108 109
LIB_H += quote.h
LIB_OBJS += quote.o 

110
LIB_H += diff.h count-delta.h
111 112 113
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
114

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

118 119
LIBS = $(LIB_FILE)
LIBS += -lz
120

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

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

L
Linus Torvalds 已提交
148

149

P
Petr Baudis 已提交
150 151 152
### Build rules

all: $(PROG)
153

154

155 156 157 158 159 160 161 162
.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
163 164

git-http-pull: LIBS += -lcurl
165
git-rev-list: LIBS += $(OPENSSL_LIBSSL)
166

167 168
$(LIB_OBJS): $(LIB_H)
$(DIFF_OBJS): diffcore.h
169

P
Petr Baudis 已提交
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
$(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)
198
	$(INSTALL) $(PROG) $(SCRIPTS) $(dest)$(bindir)
P
Petr Baudis 已提交
199 200 201 202 203 204 205 206 207 208 209 210

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

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




### Maintainer's dist rules

211
git-core.spec: git-core.spec.in Makefile
212 213
	sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@

214 215
GIT_TARNAME=git-core-$(GIT_VERSION)
dist: git-core.spec git-tar-tree
C
Chris Wright 已提交
216
	./git-tar-tree HEAD $(GIT_TARNAME) > $(GIT_TARNAME).tar
217
	@mkdir -p $(GIT_TARNAME)
218 219
	@cp git-core.spec $(GIT_TARNAME)
	tar rf $(GIT_TARNAME).tar $(GIT_TARNAME)/git-core.spec
220
	@rm -rf $(GIT_TARNAME)
221
	gzip -f -9 $(GIT_TARNAME).tar
222 223

rpm: dist
224
	$(RPMBUILD) -ta git-core-$(GIT_VERSION).tar.gz
225

P
Petr Baudis 已提交
226

P
Petr Baudis 已提交
227 228
backup: clean
	cd .. ; tar czvf dircache.tar.gz dir-cache
229

230

P
Petr Baudis 已提交
231 232

### Cleaning rules
233

234
clean:
235
	rm -f *.o mozilla-sha1/*.o ppc/*.o $(PROG) $(LIB_FILE)
236
	rm -f git-core-*.tar.gz git-core.spec
237
	$(MAKE) -C tools/ clean
238
	$(MAKE) -C Documentation/ clean
239
	$(MAKE) -C t/ clean