mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-05 17:12:51 +00:00
add library includes, remove Makefile and readme update for waf
This commit is contained in:
parent
d910be2105
commit
c34a044f4e
215
Makefile
215
Makefile
@ -1,215 +0,0 @@
|
|||||||
all::
|
|
||||||
|
|
||||||
# Define NO_VISIBILITY if your compiler does not support symbol
|
|
||||||
# visibility in general (and the -fvisibility switch in particular).
|
|
||||||
#
|
|
||||||
# Define OPENSSL_SHA1 if you want use the SHA1 routines from the
|
|
||||||
# OpenSSL crypto library, rather than the built-in C versions.
|
|
||||||
#
|
|
||||||
# Define PPC_SHA1 if you want to use the bundled SHA1 routines that
|
|
||||||
# are optimized for PowerPC, rather than the built-in C versions.
|
|
||||||
#
|
|
||||||
|
|
||||||
DOXYGEN = doxygen
|
|
||||||
INSTALL = install
|
|
||||||
RANLIB = ranlib
|
|
||||||
AR = ar cr
|
|
||||||
|
|
||||||
prefix=/usr/local
|
|
||||||
libdir=$(prefix)/lib
|
|
||||||
|
|
||||||
uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo no')
|
|
||||||
|
|
||||||
ifdef MSVC
|
|
||||||
# avoid the MinGW and Cygwin configuration sections
|
|
||||||
uname_S := Windows
|
|
||||||
endif
|
|
||||||
|
|
||||||
CFLAGS = -g -O2 -Wall -Wextra
|
|
||||||
OS = unix
|
|
||||||
|
|
||||||
EXTRA_SRC =
|
|
||||||
EXTRA_OBJ =
|
|
||||||
EXTRA_CFLAGS = -fPIC
|
|
||||||
|
|
||||||
AR_OUT=
|
|
||||||
CC_OUT=-o # add a space
|
|
||||||
|
|
||||||
# Platform specific tweaks
|
|
||||||
|
|
||||||
ifeq ($(uname_S),Windows)
|
|
||||||
OS=win32
|
|
||||||
RANLIB = echo
|
|
||||||
CC = cl -nologo
|
|
||||||
AR = lib -nologo
|
|
||||||
CFLAGS = -TC -W4 -RTC1 -Zi -DWIN32 -D_DEBUG -D_LIB
|
|
||||||
AR_OUT=-out:
|
|
||||||
CC_OUT=-Fo
|
|
||||||
NO_VISIBILITY=YesPlease
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifneq (,$(findstring CYGWIN,$(uname_S)))
|
|
||||||
NO_VISIBILITY=YesPlease
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifneq (,$(findstring MINGW,$(uname_S)))
|
|
||||||
OS=win32
|
|
||||||
NO_VISIBILITY=YesPlease
|
|
||||||
SPARSE_FLAGS=-Wno-one-bit-signed-bitfield
|
|
||||||
endif
|
|
||||||
|
|
||||||
-include config.mak
|
|
||||||
|
|
||||||
SRC_C = $(wildcard src/*.c)
|
|
||||||
OS_SRC = $(wildcard src/$(OS)/*.c)
|
|
||||||
SRC_C += $(OS_SRC) $(EXTRA_SRC)
|
|
||||||
OBJS = $(patsubst %.c,%.o,$(SRC_C)) $(EXTRA_OBJ)
|
|
||||||
HDRS = $(wildcard src/*.h)
|
|
||||||
PUBLIC_HEADERS = $(wildcard src/git/*.h)
|
|
||||||
HDRS += $(PUBLIC_HEADERS)
|
|
||||||
|
|
||||||
GIT_LIB = libgit2.a
|
|
||||||
|
|
||||||
TEST_OBJ = $(patsubst %.c,%.o,\
|
|
||||||
$(wildcard tests/t[0-9][0-9][0-9][0-9]-*.c))
|
|
||||||
TEST_EXE = $(patsubst %.o,%.exe,$(TEST_OBJ))
|
|
||||||
TEST_RUN = $(patsubst %.exe,%.run,$(TEST_EXE))
|
|
||||||
TEST_VAL = $(patsubst %.exe,%.val,$(TEST_EXE))
|
|
||||||
|
|
||||||
ifdef PPC_SHA1
|
|
||||||
EXTRA_SRC += src/ppc/sha1.c
|
|
||||||
EXTRA_OBJ += src/ppc/sha1ppc.o
|
|
||||||
EXTRA_CFLAGS += -DPPC_SHA1
|
|
||||||
else
|
|
||||||
ifdef OPENSSL_SHA1
|
|
||||||
EXTRA_CFLAGS += -DOPENSSL_SHA1
|
|
||||||
else
|
|
||||||
EXTRA_SRC += src/block-sha1/sha1.c
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
BASIC_CFLAGS := -Isrc
|
|
||||||
ifndef NO_VISIBILITY
|
|
||||||
BASIC_CFLAGS += -fvisibility=hidden
|
|
||||||
endif
|
|
||||||
|
|
||||||
ALL_CFLAGS = $(CFLAGS) $(BASIC_CFLAGS) $(EXTRA_CFLAGS)
|
|
||||||
|
|
||||||
all:: $(GIT_LIB)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f $(GIT_LIB)
|
|
||||||
rm -f libgit2.pc
|
|
||||||
rm -f *.pdb
|
|
||||||
rm -f src/*.[oi] src/*/*.[oi]
|
|
||||||
rm -rf apidocs
|
|
||||||
rm -f *~ src/*~ src/*/*~
|
|
||||||
@$(MAKE) -C tests -s --no-print-directory clean
|
|
||||||
@$(MAKE) -s --no-print-directory cov-clean
|
|
||||||
|
|
||||||
test-clean:
|
|
||||||
@$(MAKE) -C tests -s --no-print-directory clean
|
|
||||||
|
|
||||||
apidocs:
|
|
||||||
$(DOXYGEN) api.doxygen
|
|
||||||
cp CONVENTIONS apidocs/
|
|
||||||
|
|
||||||
test: $(GIT_LIB)
|
|
||||||
@$(MAKE) -C tests --no-print-directory test
|
|
||||||
|
|
||||||
valgrind: $(GIT_LIB)
|
|
||||||
@$(MAKE) -C tests --no-print-directory valgrind
|
|
||||||
|
|
||||||
sparse:
|
|
||||||
cgcc -no-compile $(ALL_CFLAGS) $(SPARSE_FLAGS) $(SRC_C)
|
|
||||||
|
|
||||||
install-headers: $(PUBLIC_HEADERS)
|
|
||||||
@$(INSTALL) -d /tmp/gitinc/git
|
|
||||||
@for i in $^; do cat .HEADER $$i > /tmp/gitinc/$${i##src/}; done
|
|
||||||
|
|
||||||
install: $(GIT_LIB) $(PUBLIC_HEADERS) libgit2.pc
|
|
||||||
@$(INSTALL) -d $(DESTDIR)/$(prefix)/include/git
|
|
||||||
@for i in $(PUBLIC_HEADERS); do \
|
|
||||||
cat .HEADER $$i > $(DESTDIR)/$(prefix)/include/$${i##src/}; \
|
|
||||||
done
|
|
||||||
@$(INSTALL) -d $(DESTDIR)/$(libdir)
|
|
||||||
@$(INSTALL) $(GIT_LIB) $(DESTDIR)/$(libdir)/libgit2.a
|
|
||||||
@$(INSTALL) -d $(DESTDIR)/$(libdir)/pkgconfig
|
|
||||||
@$(INSTALL) libgit2.pc $(DESTDIR)/$(libdir)/pkgconfig/libgit2.pc
|
|
||||||
|
|
||||||
uninstall:
|
|
||||||
@rm -f $(DESTDIR)/$(libdir)/libgit2.a
|
|
||||||
@rm -f $(DESTDIR)/$(libdir)/pkgconfig/libgit2.pc
|
|
||||||
@for i in $(PUBLIC_HEADERS); do \
|
|
||||||
rm -f $(DESTDIR)/$(prefix)/include/$${i##src/}; \
|
|
||||||
done
|
|
||||||
@rmdir $(DESTDIR)/$(prefix)/include/git
|
|
||||||
|
|
||||||
.c.o:
|
|
||||||
$(CC) $(ALL_CFLAGS) -c $< $(CC_OUT)$@
|
|
||||||
|
|
||||||
.S.o:
|
|
||||||
$(CC) $(ALL_CFLAGS) -c $< $(CC_OUT)$@
|
|
||||||
|
|
||||||
%.i: %.c FORCE
|
|
||||||
$(CC) $(ALL_CFLAGS) -E $< >$*.i
|
|
||||||
|
|
||||||
$(OBJS): $(HDRS)
|
|
||||||
$(GIT_LIB): $(OBJS)
|
|
||||||
rm -f $(GIT_LIB)
|
|
||||||
$(AR) $(AR_OUT)$(GIT_LIB) $(OBJS)
|
|
||||||
$(RANLIB) $(GIT_LIB)
|
|
||||||
|
|
||||||
$(TEST_OBJ) $(TEST_EXE) $(TEST_RUN) $(TEST_VAL): $(GIT_LIB)
|
|
||||||
@$(MAKE) -C tests --no-print-directory \
|
|
||||||
OS=$(OS) $(@F)
|
|
||||||
|
|
||||||
libgit2.pc: libgit2.pc.in
|
|
||||||
sed -e 's#@prefix@#$(prefix)#' -e 's#@libdir@#$(libdir)#' $< > $@
|
|
||||||
|
|
||||||
.PHONY: all
|
|
||||||
.PHONY: clean
|
|
||||||
.PHONY: test $(TEST_VAL) $(TEST_RUN) $(TEST_EXE) $(TEST_OBJ)
|
|
||||||
.PHONY: apidocs
|
|
||||||
.PHONY: install-headers
|
|
||||||
.PHONY: install uninstall
|
|
||||||
.PHONY: sparse
|
|
||||||
.PHONY: FORCE
|
|
||||||
|
|
||||||
### Test suite coverage testing
|
|
||||||
#
|
|
||||||
.PHONY: coverage cov-clean cov-build cov-report
|
|
||||||
|
|
||||||
COV_GCDA = $(patsubst %.c,%.gcda,$(SRC_C))
|
|
||||||
COV_GCNO = $(patsubst %.c,%.gcno,$(SRC_C))
|
|
||||||
|
|
||||||
coverage:
|
|
||||||
@$(MAKE) -s --no-print-directory clean
|
|
||||||
@$(MAKE) --no-print-directory cov-build
|
|
||||||
@$(MAKE) --no-print-directory cov-report
|
|
||||||
|
|
||||||
cov-clean:
|
|
||||||
rm -f $(COV_GCDA) $(COV_GCNO) *.gcov untested
|
|
||||||
|
|
||||||
COV_CFLAGS = $(CFLAGS) -O0 -ftest-coverage -fprofile-arcs
|
|
||||||
|
|
||||||
cov-build:
|
|
||||||
$(MAKE) CFLAGS="$(COV_CFLAGS)" all
|
|
||||||
$(MAKE) TEST_COVERAGE=1 test
|
|
||||||
|
|
||||||
cov-report:
|
|
||||||
@echo "--- untested files:" | tee untested
|
|
||||||
@{ for f in $(SRC_C); do \
|
|
||||||
gcda=$$(dirname $$f)"/"$$(basename $$f .c)".gcda"; \
|
|
||||||
if test -f $$gcda; then \
|
|
||||||
gcov -b -p -o $$(dirname $$f) $$f >/dev/null; \
|
|
||||||
else \
|
|
||||||
echo $$f | tee -a untested; \
|
|
||||||
fi; \
|
|
||||||
done; }
|
|
||||||
@rm -f *.h.gcov
|
|
||||||
@echo "--- untested functions:" | tee -a untested
|
|
||||||
@grep '^function .* called 0' *.c.gcov \
|
|
||||||
| sed -e 's/\([^:]*\)\.gcov:function \([^ ]*\) called.*/\1: \2/' \
|
|
||||||
| sed -e 's|#|/|g' | tee -a untested
|
|
||||||
|
|
20
README.txt
20
README.txt
@ -5,6 +5,26 @@ libgit2 is a portable, pure C implementation of the Git core methods provided as
|
|||||||
re-entrant linkable library with a solid API, allowing you to write native
|
re-entrant linkable library with a solid API, allowing you to write native
|
||||||
speed custom Git applications in any language with bindings.
|
speed custom Git applications in any language with bindings.
|
||||||
|
|
||||||
|
Installing libgit2
|
||||||
|
==================================
|
||||||
|
|
||||||
|
Libgit2 uses the waf build system. To build it, first configure the build
|
||||||
|
system by running:
|
||||||
|
|
||||||
|
$ ./waf configure
|
||||||
|
|
||||||
|
Then build the library:
|
||||||
|
|
||||||
|
$ ./waf build
|
||||||
|
|
||||||
|
You can then test the library with:
|
||||||
|
|
||||||
|
$ ./waf test
|
||||||
|
|
||||||
|
And finally you can install it with (you may need to sudo):
|
||||||
|
|
||||||
|
$ ./waf install
|
||||||
|
|
||||||
|
|
||||||
Why Do We Need It
|
Why Do We Need It
|
||||||
==================================
|
==================================
|
||||||
|
Loading…
Reference in New Issue
Block a user