Andrew Morgan | 2c9c053 | 2007-07-10 20:50:21 -0700 | [diff] [blame] | 1 | # |
| 2 | # defines |
| 3 | # |
| 4 | topdir=$(shell pwd)/.. |
| 5 | include ../Make.Rules |
| 6 | # |
| 7 | # Library version |
| 8 | # |
Andrew Morgan | 370a70f | 2007-07-17 21:50:12 -0700 | [diff] [blame] | 9 | LIBNAME=$(LIBTITLE).so |
| 10 | STALIBNAME=$(LIBTITLE).a |
Andrew Morgan | 2c9c053 | 2007-07-10 20:50:21 -0700 | [diff] [blame] | 11 | # |
| 12 | |
Andrew Morgan | cd45c57 | 2007-08-13 23:16:50 -0700 | [diff] [blame] | 13 | FILES=cap_alloc cap_proc cap_extint cap_flag cap_text cap_file |
Andrew Morgan | 2c9c053 | 2007-07-10 20:50:21 -0700 | [diff] [blame] | 14 | |
| 15 | INCLS=libcap.h cap_names.h $(INCS) |
| 16 | OBJS=$(addsuffix .o, $(FILES)) |
| 17 | MAJLIBNAME=$(LIBNAME).$(VERSION) |
| 18 | MINLIBNAME=$(MAJLIBNAME).$(MINOR) |
Andrew G. Morgan | e57378c | 2008-02-05 00:00:20 -0800 | [diff] [blame] | 19 | GPERF_OUTPUT = _caps_output.gperf |
Andrew G. Morgan | 953e7f1 | 2008-06-02 22:02:01 -0700 | [diff] [blame^] | 20 | LDFLAGS += -lattr |
Andrew Morgan | 2c9c053 | 2007-07-10 20:50:21 -0700 | [diff] [blame] | 21 | |
Andrew Morgan | 370a70f | 2007-07-17 21:50:12 -0700 | [diff] [blame] | 22 | all: $(MINLIBNAME) $(STALIBNAME) |
Andrew Morgan | 2c9c053 | 2007-07-10 20:50:21 -0700 | [diff] [blame] | 23 | |
Andrew G. Morgan | e57378c | 2008-02-05 00:00:20 -0800 | [diff] [blame] | 24 | ifeq ($(shell gperf --version > /dev/null 2>&1 && echo yes),yes) |
| 25 | USE_GPERF_OUTPUT = $(GPERF_OUTPUT) |
| 26 | INCLUDE_GPERF_OUTPUT = -include $(GPERF_OUTPUT) |
| 27 | endif |
| 28 | |
Andrew Morgan | 2c9c053 | 2007-07-10 20:50:21 -0700 | [diff] [blame] | 29 | _makenames: _makenames.c cap_names.sed |
Andrew G. Morgan | 953e7f1 | 2008-06-02 22:02:01 -0700 | [diff] [blame^] | 30 | $(BUILD_CC) $(BUILD_CFLAGS) $< -o $@ |
Andrew Morgan | 2c9c053 | 2007-07-10 20:50:21 -0700 | [diff] [blame] | 31 | |
| 32 | cap_names.h: _makenames |
| 33 | ./_makenames > cap_names.h |
| 34 | |
Andrew G. Morgan | e57378c | 2008-02-05 00:00:20 -0800 | [diff] [blame] | 35 | $(GPERF_OUTPUT): cap_names.sed |
| 36 | sed -e 's/[\{\"]//g' -e 's/\}.*//' -e '1istruct __cap_token_s { const char *name; int index; };\n%{\nconst struct __cap_token_s *__cap_lookup_name(const char *, unsigned int);\n%}\n%%' $< | gperf --ignore-case --language=ANSI-C --readonly --null-strings --global-table --hash-function-name=__cap_hash_name --lookup-function-name="__cap_lookup_name" -c -t -m20 | indent -kr > $@ |
| 37 | |
Andrew Morgan | 4ede698 | 2007-07-19 22:55:00 -0700 | [diff] [blame] | 38 | cap_names.sed: Makefile $(KERNEL_HEADERS)/linux/capability.h |
Andrew Morgan | 2c9c053 | 2007-07-10 20:50:21 -0700 | [diff] [blame] | 39 | @echo "=> making cap_names.c from <linux/capability.h>" |
Andrew G. Morgan | e57378c | 2008-02-05 00:00:20 -0800 | [diff] [blame] | 40 | @sed -ne '/^#define[ \t]CAP[_A-Z]\+[ \t]\+[0-9]\+/{s/^#define \([^ \t]*\)[ \t]*\([^ \t]*\)/\{\"\1\",\2\},/;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;p;}' < $(KERNEL_HEADERS)/linux/capability.h | fgrep -v 0x > $@ |
Andrew Morgan | 2c9c053 | 2007-07-10 20:50:21 -0700 | [diff] [blame] | 41 | |
Andrew Morgan | 370a70f | 2007-07-17 21:50:12 -0700 | [diff] [blame] | 42 | $(STALIBNAME): $(OBJS) |
Andrew G. Morgan | 953e7f1 | 2008-06-02 22:02:01 -0700 | [diff] [blame^] | 43 | $(AR) rcs $@ $^ |
| 44 | $(RANLIB) $@ |
Andrew Morgan | 370a70f | 2007-07-17 21:50:12 -0700 | [diff] [blame] | 45 | |
Andrew Morgan | 2c9c053 | 2007-07-10 20:50:21 -0700 | [diff] [blame] | 46 | $(MINLIBNAME): $(OBJS) |
Andrew G. Morgan | 953e7f1 | 2008-06-02 22:02:01 -0700 | [diff] [blame^] | 47 | $(LD) $(CFLAGS) $(LDFLAGS) -Wl,-soname,$(MAJLIBNAME) -o $@ $^ |
Andrew Morgan | 2c9c053 | 2007-07-10 20:50:21 -0700 | [diff] [blame] | 48 | ln -sf $(MINLIBNAME) $(MAJLIBNAME) |
| 49 | ln -sf $(MAJLIBNAME) $(LIBNAME) |
| 50 | |
| 51 | %.o: %.c $(INCLS) |
| 52 | $(CC) $(CFLAGS) -c $< -o $@ |
| 53 | |
Christian Wiese | 5e85b37 | 2008-02-22 23:05:45 -0800 | [diff] [blame] | 54 | cap_text.o: cap_text.c $(USE_GPERF_OUTPUT) $(INCLS) |
Andrew G. Morgan | e57378c | 2008-02-05 00:00:20 -0800 | [diff] [blame] | 55 | $(CC) $(CFLAGS) $(INCLUDE_GPERF_OUTPUT) -c $< -o $@ |
| 56 | |
Andrew Morgan | 2c9c053 | 2007-07-10 20:50:21 -0700 | [diff] [blame] | 57 | install: all |
| 58 | mkdir -p -m 0755 $(INCDIR)/sys |
| 59 | install -m 0644 include/sys/capability.h $(INCDIR)/sys |
| 60 | mkdir -p -m 0755 $(LIBDIR) |
Hao Xu | 8e9b94b | 2008-05-29 07:18:21 -0700 | [diff] [blame] | 61 | install -m 0644 $(STALIBNAME) $(LIBDIR)/$(STALIBNAME) |
Andrew Morgan | 2c9c053 | 2007-07-10 20:50:21 -0700 | [diff] [blame] | 62 | install -m 0644 $(MINLIBNAME) $(LIBDIR)/$(MINLIBNAME) |
| 63 | ln -sf $(MINLIBNAME) $(LIBDIR)/$(MAJLIBNAME) |
| 64 | ln -sf $(MAJLIBNAME) $(LIBDIR)/$(LIBNAME) |
Mike Frysinger | a9d2340 | 2008-02-16 16:52:34 -0500 | [diff] [blame] | 65 | ifeq ($(FAKEROOT),) |
Andrew Morgan | 2c9c053 | 2007-07-10 20:50:21 -0700 | [diff] [blame] | 66 | -/sbin/ldconfig |
Mike Frysinger | a9d2340 | 2008-02-16 16:52:34 -0500 | [diff] [blame] | 67 | endif |
Andrew Morgan | 2c9c053 | 2007-07-10 20:50:21 -0700 | [diff] [blame] | 68 | |
| 69 | clean: |
| 70 | $(LOCALCLEAN) |
Andrew Morgan | 370a70f | 2007-07-17 21:50:12 -0700 | [diff] [blame] | 71 | rm -f $(OBJS) $(LIBNAME)* $(STALIBNAME) |
Andrew G. Morgan | e57378c | 2008-02-05 00:00:20 -0800 | [diff] [blame] | 72 | rm -f cap_names.h cap_names.sed _makenames $(GPERF_OUTPUT) |
Andrew Morgan | 2c9c053 | 2007-07-10 20:50:21 -0700 | [diff] [blame] | 73 | cd include/sys && $(LOCALCLEAN) |