1 2topdir=$(shell pwd)/.. 3include $(topdir)/Make.Rules 4# 5# Programs: all of the examples that we will compile 6# 7PROGS=getpcaps getcap setcap 8 9BUILD=$(PROGS) 10 11all: $(BUILD) capsh 12 13ifeq ($(DYNAMIC),yes) 14LDPATH = LD_LIBRARY_PATH=../libcap 15DEPS = ../libcap/libcap.so 16else 17ifeq ($(LIBCSTATIC),yes) 18LDFLAGS = --static 19DEPS = ../libcap/libcap.a 20else 21# For this build variant override the LDFLAGS to link statically from 22# libraries within the build tree. If you never want this, use make 23# DYNAMIC=yes . Note, we can't reliably link statically against glibc 24# becasuse of https://sourceware.org/bugzilla/show_bug.cgi?id=12491 . 25LDFLAGS = -Wl,-Bstatic 26LDFLAGS_SUFFIX = -Wl,-Bdynamic 27DEPS = ../libcap/libcap.a 28endif 29endif 30 31../libcap/libcap.a: 32 $(MAKE) -C ../libcap libcap.a 33 34../libcap/libcap.so: 35 $(MAKE) -C ../libcap libcap.so 36 37$(BUILD): %: %.o $(DEPS) 38 $(CC) $(CFLAGS) $(LDFLAGS) $< $(LIBCAPLIB) $(LDFLAGS_SUFFIX) -o $@ 39 40%.o: %.c $(INCS) 41 $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ 42 43install: all 44 mkdir -p -m 0755 $(FAKEROOT)$(SBINDIR) 45 for p in $(PROGS) capsh ; do \ 46 install -m 0755 $$p $(FAKEROOT)$(SBINDIR) ; \ 47 done 48ifeq ($(RAISE_SETFCAP),yes) 49 $(FAKEROOT)$(SBINDIR)/setcap cap_setfcap=i $(FAKEROOT)$(SBINDIR)/setcap 50endif 51 52test: 53 @echo "no program tests without privilege, try 'make sudotest'" 54 55capshdoc.c.cf: capshdoc.c ./mkcapshdoc.sh 56 ./mkcapshdoc.sh > $@ 57 diff -u capshdoc.c $@ || (rm $@ ; exit 1) 58 59capsh: capsh.c capshdoc.c.cf capshdoc.h $(DEPS) 60 $(CC) $(CFLAGS) $(CPPFLAGS) $(CAPSH_SHELL) $(LDFLAGS) $< capshdoc.c $(LIBCAPLIB) $(LDFLAGS_SUFFIX) -o $@ 61 62# Statically linked with minimal linkage flags to enable running in a 63# chroot and in other in-tree testing contexts. 64tcapsh-static: capsh.c capshdoc.c.cf capshdoc.h $(DEPS) 65 $(CC) $(CFLAGS) $(CPPFLAGS) $(CAPSH_SHELL) -o $@ $< capshdoc.c $(LIBCAPLIB) --static 66 67uns_test: ../tests/uns_test.c 68 $(MAKE) -C ../tests uns_test 69 cp ../tests/uns_test . 70 71sudotest: tcapsh-static uns_test capsh setcap getcap getpcaps tcapsh-static 72 $(SUDO) $(LDPATH) ./quicktest.sh 73 74clean: 75 $(LOCALCLEAN) 76 rm -f *.o $(BUILD) privileged ping hack.sh compare-cap uns_test 77 rm -f capsh tcapsh* capshdoc.*.cf 78