Makefile 5.8 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 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
# 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 已提交
32
GIT_VERSION=0.99.2
33

34 35
COPTS?=-g -O2
CFLAGS+=$(COPTS) -Wall $(DEFINES)
36 37

prefix=$(HOME)
38
bindir=$(prefix)/bin
39
# dest=
40

41 42 43 44
CC?=gcc
AR?=ar
INSTALL?=install
RPMBUILD?=rpmbuild
45

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

P
Petr Baudis 已提交
50 51 52 53 54 55


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



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

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

L
Linus Torvalds 已提交
81
LIB_FILE=libgit.a
82
LIB_H=cache.h object.h blob.h tree.h commit.h tag.h delta.h epoch.h csum-file.h \
83
	pack.h pkt-line.h refs.h
P
Petr Baudis 已提交
84 85
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 已提交
86
	 refs.o csum-file.o pack-check.o pkt-line.o connect.o ident.o
L
Linus Torvalds 已提交
87

J
Junio C Hamano 已提交
88 89 90
LIB_H += rev-cache.h
LIB_OBJS += rev-cache.o

91 92 93
LIB_H += strbuf.h
LIB_OBJS += strbuf.o

94 95 96
LIB_H += quote.h
LIB_OBJS += quote.o 

97
LIB_H += diff.h count-delta.h
98 99 100
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
101

J
Junio C Hamano 已提交
102
LIB_OBJS += gitenv.o
J
Junio C Hamano 已提交
103
LIB_OBJS += server-info.o
J
Junio C Hamano 已提交
104

105 106
LIBS = $(LIB_FILE)
LIBS += -lz
107

P
Petr Baudis 已提交
108 109 110 111 112 113
ifndef NO_OPENSSL
	LIB_OBJS += epoch.o
else
	CFLAGS += '-DNO_OPENSSL'
	MOZILLA_SHA1=1
endif
114 115 116
ifdef MOZILLA_SHA1
  SHA1_HEADER="mozilla-sha1/sha1.h"
  LIB_OBJS += mozilla-sha1/sha1.o
117 118 119 120
else
ifdef PPC_SHA1
  SHA1_HEADER="ppc/sha1.h"
  LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o
121 122
else
  SHA1_HEADER=<openssl/sha.h>
123 124 125
ifeq ($(shell uname -s),Darwin)
  LIBS += -lcrypto -lssl
else
126
  LIBS += -lcrypto
127
endif
128
endif
129
endif
130 131

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

L
Linus Torvalds 已提交
133

134

P
Petr Baudis 已提交
135 136 137
### Build rules

all: $(PROG)
138

139

140 141 142 143 144 145 146 147
.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
148 149

git-http-pull: LIBS += -lcurl
150
git-rev-list: LIBS += -lssl
151

152 153
$(LIB_OBJS): $(LIB_H)
$(DIFF_OBJS): diffcore.h
154

P
Petr Baudis 已提交
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
$(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)
183
	$(INSTALL) $(PROG) $(SCRIPTS) $(dest)$(bindir)
P
Petr Baudis 已提交
184 185 186 187 188 189 190 191 192 193 194 195

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

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




### Maintainer's dist rules

196
git-core.spec: git-core.spec.in Makefile
197 198
	sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' < $< > $@

199 200
GIT_TARNAME=git-core-$(GIT_VERSION)
dist: git-core.spec git-tar-tree
C
Chris Wright 已提交
201
	./git-tar-tree HEAD $(GIT_TARNAME) > $(GIT_TARNAME).tar
202
	@mkdir -p $(GIT_TARNAME)
203 204
	@cp git-core.spec $(GIT_TARNAME)
	tar rf $(GIT_TARNAME).tar $(GIT_TARNAME)/git-core.spec
205
	@rm -rf $(GIT_TARNAME)
206
	gzip -f -9 $(GIT_TARNAME).tar
207 208

rpm: dist
209
	$(RPMBUILD) -ta git-core-$(GIT_VERSION).tar.gz
210

P
Petr Baudis 已提交
211

P
Petr Baudis 已提交
212 213
backup: clean
	cd .. ; tar czvf dircache.tar.gz dir-cache
214

215

P
Petr Baudis 已提交
216 217

### Cleaning rules
218

219
clean:
220
	rm -f *.o mozilla-sha1/*.o ppc/*.o $(PROG) $(LIB_FILE)
221
	rm -f git-core-*.tar.gz git-core.spec
222
	$(MAKE) -C tools/ clean
223
	$(MAKE) -C Documentation/ clean