blob: 2d95e691710e97f95802817818bdd21ddc515641 [file] [log] [blame]
Andrew Morgan2c9c0532007-07-10 20:50:21 -07001#
2# defines
3#
4topdir=$(shell pwd)/..
5include ../Make.Rules
6#
7# Library version
8#
Andrew Morgan370a70f2007-07-17 21:50:12 -07009LIBNAME=$(LIBTITLE).so
10STALIBNAME=$(LIBTITLE).a
Andrew Morgan2c9c0532007-07-10 20:50:21 -070011#
12
Andrew Morgancd45c572007-08-13 23:16:50 -070013FILES=cap_alloc cap_proc cap_extint cap_flag cap_text cap_file
Andrew Morgan2c9c0532007-07-10 20:50:21 -070014
15INCLS=libcap.h cap_names.h $(INCS)
16OBJS=$(addsuffix .o, $(FILES))
17MAJLIBNAME=$(LIBNAME).$(VERSION)
18MINLIBNAME=$(MAJLIBNAME).$(MINOR)
Andrew G. Morgane57378c2008-02-05 00:00:20 -080019GPERF_OUTPUT = _caps_output.gperf
Andrew G. Morgan953e7f12008-06-02 22:02:01 -070020LDFLAGS += -lattr
Andrew Morgan2c9c0532007-07-10 20:50:21 -070021
Andrew Morgan370a70f2007-07-17 21:50:12 -070022all: $(MINLIBNAME) $(STALIBNAME)
Andrew Morgan2c9c0532007-07-10 20:50:21 -070023
Andrew G. Morgane57378c2008-02-05 00:00:20 -080024ifeq ($(shell gperf --version > /dev/null 2>&1 && echo yes),yes)
25USE_GPERF_OUTPUT = $(GPERF_OUTPUT)
26INCLUDE_GPERF_OUTPUT = -include $(GPERF_OUTPUT)
27endif
28
Andrew Morgan2c9c0532007-07-10 20:50:21 -070029_makenames: _makenames.c cap_names.sed
Andrew G. Morgan953e7f12008-06-02 22:02:01 -070030 $(BUILD_CC) $(BUILD_CFLAGS) $< -o $@
Andrew Morgan2c9c0532007-07-10 20:50:21 -070031
32cap_names.h: _makenames
33 ./_makenames > cap_names.h
34
Andrew G. Morgane57378c2008-02-05 00:00:20 -080035$(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 Morgan4ede6982007-07-19 22:55:00 -070038cap_names.sed: Makefile $(KERNEL_HEADERS)/linux/capability.h
Andrew Morgan2c9c0532007-07-10 20:50:21 -070039 @echo "=> making cap_names.c from <linux/capability.h>"
Andrew G. Morgan8bdd0ef2008-09-10 19:50:50 -070040 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 Morgan2c9c0532007-07-10 20:50:21 -070041
Andrew Morgan370a70f2007-07-17 21:50:12 -070042$(STALIBNAME): $(OBJS)
Andrew G. Morgan953e7f12008-06-02 22:02:01 -070043 $(AR) rcs $@ $^
44 $(RANLIB) $@
Andrew Morgan370a70f2007-07-17 21:50:12 -070045
Andrew Morgan2c9c0532007-07-10 20:50:21 -070046$(MINLIBNAME): $(OBJS)
Andrew G. Morgan953e7f12008-06-02 22:02:01 -070047 $(LD) $(CFLAGS) $(LDFLAGS) -Wl,-soname,$(MAJLIBNAME) -o $@ $^
Andrew Morgan2c9c0532007-07-10 20:50:21 -070048 ln -sf $(MINLIBNAME) $(MAJLIBNAME)
49 ln -sf $(MAJLIBNAME) $(LIBNAME)
50
51%.o: %.c $(INCLS)
52 $(CC) $(CFLAGS) -c $< -o $@
53
Christian Wiese5e85b372008-02-22 23:05:45 -080054cap_text.o: cap_text.c $(USE_GPERF_OUTPUT) $(INCLS)
Andrew G. Morgane57378c2008-02-05 00:00:20 -080055 $(CC) $(CFLAGS) $(INCLUDE_GPERF_OUTPUT) -c $< -o $@
56
Andrew Morgan2c9c0532007-07-10 20:50:21 -070057install: 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 Xu8e9b94b2008-05-29 07:18:21 -070061 install -m 0644 $(STALIBNAME) $(LIBDIR)/$(STALIBNAME)
Andrew Morgan2c9c0532007-07-10 20:50:21 -070062 install -m 0644 $(MINLIBNAME) $(LIBDIR)/$(MINLIBNAME)
63 ln -sf $(MINLIBNAME) $(LIBDIR)/$(MAJLIBNAME)
64 ln -sf $(MAJLIBNAME) $(LIBDIR)/$(LIBNAME)
Mike Frysingera9d23402008-02-16 16:52:34 -050065ifeq ($(FAKEROOT),)
Andrew Morgan2c9c0532007-07-10 20:50:21 -070066 -/sbin/ldconfig
Mike Frysingera9d23402008-02-16 16:52:34 -050067endif
Andrew Morgan2c9c0532007-07-10 20:50:21 -070068
69clean:
70 $(LOCALCLEAN)
Andrew Morgan370a70f2007-07-17 21:50:12 -070071 rm -f $(OBJS) $(LIBNAME)* $(STALIBNAME)
Andrew G. Morgane57378c2008-02-05 00:00:20 -080072 rm -f cap_names.h cap_names.sed _makenames $(GPERF_OUTPUT)
Andrew Morgan2c9c0532007-07-10 20:50:21 -070073 cd include/sys && $(LOCALCLEAN)