Add PIE compilation flags
[platform/upstream/keyutils.git] / Makefile
1 CPPFLAGS        := -I.
2 CFLAGS          := $(CPPFLAGS) -g -Wall -Werror
3 INSTALL         := install
4 DESTDIR         :=
5 SPECFILE        := keyutils.spec
6 NO_GLIBC_KEYERR := 0
7 NO_ARLIB        := 0
8 ETCDIR          := /etc
9 BINDIR          := /bin
10 SBINDIR         := /sbin
11 SHAREDIR        := /usr/share/keyutils
12 MAN1            := /usr/share/man/man1
13 MAN3            := /usr/share/man/man3
14 MAN5            := /usr/share/man/man5
15 MAN8            := /usr/share/man/man8
16 INCLUDEDIR      := /usr/include
17 LNS             := ln -sf
18
19 ###############################################################################
20 #
21 # Determine the current package version from the specfile
22 #
23 ###############################################################################
24 vermajor        := $(shell grep "%define vermajor" $(SPECFILE))
25 verminor        := $(shell grep "%define verminor" $(SPECFILE))
26 MAJOR           := $(word 3,$(vermajor))
27 MINOR           := $(word 3,$(verminor))
28 VERSION         := $(MAJOR).$(MINOR)
29
30 ###############################################################################
31 #
32 # Determine the current library version from the version script
33 #
34 ###############################################################################
35 libversion      := $(filter KEYUTILS_%,$(shell grep ^KEYUTILS_ version.lds))
36 libversion      := $(lastword $(libversion))
37 libversion      := $(lastword $(libversion))
38 APIVERSION      := $(subst KEYUTILS_,,$(libversion))
39 vernumbers      := $(subst ., ,$(APIVERSION))
40 APIMAJOR        := $(firstword $(vernumbers))
41
42 ARLIB           := libkeyutils.a
43 DEVELLIB        := libkeyutils.so
44 SONAME          := libkeyutils.so.$(APIMAJOR)
45 LIBNAME         := libkeyutils.so.$(APIVERSION)
46
47 ###############################################################################
48 #
49 # Guess at the appropriate lib directory and word size
50 #
51 ###############################################################################
52 LIBDIR          := $(shell ldd /usr/bin/make | grep '\(/libc\)' | sed -e 's!.*\(/.*\)/libc[.].*!\1!')
53 USRLIBDIR       := $(patsubst /lib/%,/usr/lib/%,$(LIBDIR))
54 BUILDFOR        := $(shell file /usr/bin/make | sed -e 's!.*ELF \(32\|64\)-bit.*!\1!')-bit
55
56 LNS             := ln -sf
57
58 ifeq ($(BUILDFOR),32-bit)
59 CFLAGS          += -m32
60 LIBDIR          := /lib
61 USRLIBDIR       := /usr/lib
62 else
63 ifeq ($(BUILDFOR),64-bit)
64 CFLAGS          += -m64
65 LIBDIR          := /lib64
66 USRLIBDIR       := /usr/lib64
67 endif
68 endif
69
70 ###############################################################################
71 #
72 # This is necessary if glibc doesn't know about the key management error codes
73 #
74 ###############################################################################
75 ifeq ($(NO_GLIBC_KEYERR),1)
76 CFLAGS  += -DNO_GLIBC_KEYERR
77 LIBLIBS := -ldl -lc
78 else
79 LIBLIBS :=
80 endif
81
82 ###############################################################################
83 #
84 # Normal build rule
85 #
86 ###############################################################################
87 all: $(DEVELLIB) keyctl request-key key.dns_resolver
88
89 ###############################################################################
90 #
91 # Build the libraries
92 #
93 ###############################################################################
94 #RPATH = -Wl,-rpath,$(LIBDIR)
95
96 ifeq ($(NO_ARLIB),0)
97 all: $(ARLIB)
98 $(ARLIB): keyutils.o
99         $(AR) rcs $@ $<
100 endif
101
102 keyutils.o: keyutils.c keyutils.h Makefile
103         $(CC) $(CPPFLAGS) $(CFLAGS) -UNO_GLIBC_KEYERR -o $@ -c $<
104
105
106 $(DEVELLIB): $(SONAME)
107         ln -sf $< $@
108
109 $(SONAME): $(LIBNAME)
110         ln -sf $< $@
111
112 LIBVERS := -shared -Wl,-soname,$(SONAME) -Wl,--version-script,version.lds
113
114 $(LIBNAME): keyutils.os version.lds Makefile
115         $(CC) $(CFLAGS) -fPIC $(LDFLAGS) $(LIBVERS) -o $@ keyutils.os $(LIBLIBS)
116
117 keyutils.os: keyutils.c keyutils.h Makefile
118         $(CC) $(CFLAGS) -fPIC -o $@ -c $<
119
120 ###############################################################################
121 #
122 # Build the programs
123 #
124 ###############################################################################
125 %.o: %.c keyutils.h Makefile
126         $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<
127
128 keyctl: keyctl.o $(DEVELLIB)
129         $(CC) -L. $(CFLAGS) $(LDFLAGS) $(RPATH) -o $@ $< -lkeyutils
130
131 request-key: request-key.o $(DEVELLIB)
132         $(CC) -L. $(CFLAGS) $(LDFLAGS) $(RPATH) -o $@ $< -lkeyutils
133
134 key.dns_resolver: key.dns_resolver.o $(DEVELLIB)
135         $(CC) -L. $(CFLAGS) $(LDFLAGS) $(RPATH) -o $@ $< -lkeyutils -lresolv
136
137 ###############################################################################
138 #
139 # Install everything
140 #
141 ###############################################################################
142 install: all
143 ifeq ($(NO_ARLIB),0)
144         $(INSTALL) -D -m 0644 $(ARLIB) $(DESTDIR)$(USRLIBDIR)/$(ARLIB)
145 endif
146         $(INSTALL) -D $(LIBNAME) $(DESTDIR)$(LIBDIR)/$(LIBNAME)
147         $(LNS) $(LIBNAME) $(DESTDIR)$(LIBDIR)/$(SONAME)
148         mkdir -p $(DESTDIR)$(USRLIBDIR)
149         $(LNS) $(LIBDIR)/$(SONAME) $(DESTDIR)$(USRLIBDIR)/$(DEVELLIB)
150         $(INSTALL) -D keyctl $(DESTDIR)$(BINDIR)/keyctl
151         $(INSTALL) -D request-key $(DESTDIR)$(SBINDIR)/request-key
152         $(INSTALL) -D request-key-debug.sh $(DESTDIR)$(SHAREDIR)/request-key-debug.sh
153         $(INSTALL) -D key.dns_resolver $(DESTDIR)$(SBINDIR)/key.dns_resolver
154         $(INSTALL) -D -m 0644 request-key.conf $(DESTDIR)$(ETCDIR)/request-key.conf
155         $(INSTALL) -D -m 0644 keyctl.1 $(DESTDIR)$(MAN1)/keyctl.1
156         $(INSTALL) -D -m 0644 keyctl_chown.3 $(DESTDIR)$(MAN3)/keyctl_chown.3
157         $(INSTALL) -D -m 0644 keyctl_clear.3 $(DESTDIR)$(MAN3)/keyctl_clear.3
158         $(INSTALL) -D -m 0644 keyctl_describe.3 $(DESTDIR)$(MAN3)/keyctl_describe.3
159         $(LNS) keyctl_describe.3 $(DESTDIR)$(MAN3)/keyctl_describe_alloc.3
160         $(INSTALL) -D -m 0644 keyctl_get_keyring_ID.3 $(DESTDIR)$(MAN3)/keyctl_get_keyring_ID.3
161         $(INSTALL) -D -m 0644 keyctl_get_security.3 $(DESTDIR)$(MAN3)/keyctl_get_security.3
162         $(LNS) keyctl_get_security.3 $(DESTDIR)$(MAN3)/keyctl_get_security_alloc.3
163         $(INSTALL) -D -m 0644 keyctl_instantiate.3 $(DESTDIR)$(MAN3)/keyctl_instantiate.3
164         $(LNS) keyctl_instantiate.3 $(DESTDIR)$(MAN3)/keyctl_instantiate_iov.3
165         $(LNS) keyctl_instantiate.3 $(DESTDIR)$(MAN3)/keyctl_reject.3
166         $(LNS) keyctl_instantiate.3 $(DESTDIR)$(MAN3)/keyctl_negate.3
167         $(LNS) keyctl_instantiate.3 $(DESTDIR)$(MAN3)/keyctl_assume_authority.3
168         $(INSTALL) -D -m 0644 keyctl_join_session_keyring.3 $(DESTDIR)$(MAN3)/keyctl_join_session_keyring.3
169         $(INSTALL) -D -m 0644 keyctl_link.3 $(DESTDIR)$(MAN3)/keyctl_link.3
170         $(LNS) keyctl_link.3 $(DESTDIR)$(MAN3)/keyctl_unlink.3
171         $(INSTALL) -D -m 0644 keyctl_read.3 $(DESTDIR)$(MAN3)/keyctl_read.3
172         $(LNS) keyctl_read.3 $(DESTDIR)$(MAN3)/keyctl_read_alloc.3
173         $(INSTALL) -D -m 0644 keyctl_revoke.3 $(DESTDIR)$(MAN3)/keyctl_revoke.3
174         $(INSTALL) -D -m 0644 keyctl_search.3 $(DESTDIR)$(MAN3)/keyctl_search.3
175         $(INSTALL) -D -m 0644 keyctl_setperm.3 $(DESTDIR)$(MAN3)/keyctl_setperm.3
176         $(INSTALL) -D -m 0644 keyctl_set_reqkey_keyring.3 $(DESTDIR)$(MAN3)/keyctl_set_reqkey_keyring.3
177         $(INSTALL) -D -m 0644 keyctl_set_timeout.3 $(DESTDIR)$(MAN3)/keyctl_set_timeout.3
178         $(INSTALL) -D -m 0644 keyctl_update.3 $(DESTDIR)$(MAN3)/keyctl_update.3
179         $(INSTALL) -D -m 0644 recursive_key_scan.3 $(DESTDIR)$(MAN3)/recursive_key_scan.3
180         $(LNS) recursive_key_scan.3 $(DESTDIR)$(MAN3)/recursive_session_key_scan.3
181         $(INSTALL) -D -m 0644 request-key.conf.5 $(DESTDIR)$(MAN5)/request-key.conf.5
182         $(INSTALL) -D -m 0644 request-key.8 $(DESTDIR)$(MAN8)/request-key.8
183         $(INSTALL) -D -m 0644 key.dns_resolver.8 $(DESTDIR)$(MAN8)/key.dns_resolver.8
184         $(INSTALL) -D -m 0644 keyutils.h $(DESTDIR)$(INCLUDEDIR)/keyutils.h
185
186 ###############################################################################
187 #
188 # Clean up
189 #
190 ###############################################################################
191 clean:
192         $(RM) libkeyutils*
193         $(RM) keyctl request-key key.dns_resolver
194         $(RM) *.o *.os *~
195         $(RM) debugfiles.list debugsources.list
196
197 distclean: clean
198         $(RM) -r rpmbuild
199
200 ###############################################################################
201 #
202 # Generate a tarball
203 #
204 ###############################################################################
205 TARBALL := keyutils-$(VERSION).tar.bz2
206 SRCBALL := rpmbuild/SOURCES/$(TARBALL)
207
208 dist    := $(word 2,$(shell grep "%dist" /etc/rpm/macros.dist))
209 release := $(word 2,$(shell grep ^Release: $(SPECFILE)))
210 release := $(subst %{?dist},$(dist),$(release))
211 rpmver  := $(VERSION)-$(release)
212 SRPM    := rpmbuild/SRPMS/keyutils-$(rpmver).src.rpm
213
214 RPMBUILDDIRS := \
215                 --define "_srcrpmdir $(PWD)/rpmbuild/SRPMS" \
216                 --define "_rpmdir $(PWD)/rpmbuild/RPMS" \
217                 --define "_sourcedir $(PWD)/rpmbuild/SOURCES" \
218                 --define "_specdir $(PWD)/rpmbuild/SPECS" \
219                 --define "_builddir $(PWD)/rpmbuild/BUILD" \
220                 --define "_buildrootdir $(PWD)/rpmbuild/BUILDROOT"
221
222 rpm:
223         mkdir -p rpmbuild/{SPECS,SOURCES,BUILD,BUILDROOT,RPMS,SRPMS}
224         git archive --prefix=keyutils-$(VERSION)/ --format tar -o $(SRCBALL) HEAD
225         rpmbuild -ts $(SRCBALL) --define "_srcrpmdir rpmbuild/SRPMS"
226         rpmbuild --rebuild $(SRPM) $(RPMBUILDDIRS)
227
228 ###############################################################################
229 #
230 # Build debugging
231 #
232 ###############################################################################
233 show_vars:
234         @echo VERSION=$(VERSION)
235         @echo APIVERSION=$(APIVERSION)
236         @echo LIBDIR=$(LIBDIR)
237         @echo USRLIBDIR=$(USRLIBDIR)
238         @echo BUILDFOR=$(BUILDFOR)
239         @echo SONAME=$(SONAME)
240         @echo LIBNAME=$(LIBNAME)