5 kx CPPFLAGS += -I.
5 kx CFLAGS += -g -Wall -Werror
5 kx CXXFLAGS += -g -Wall -Werror
5 kx INSTALL := install
5 kx DESTDIR :=
5 kx SPECFILE := keyutils.spec
5 kx NO_GLIBC_KEYERR := 0
5 kx NO_ARLIB := 0
5 kx NO_SOLIB := 0
5 kx ETCDIR := /etc
5 kx BINDIR := /bin
5 kx SBINDIR := /sbin
5 kx SHAREDIR := /usr/share/keyutils
5 kx MANDIR := /usr/share/man
5 kx MAN1 := $(MANDIR)/man1
5 kx MAN3 := $(MANDIR)/man3
5 kx MAN5 := $(MANDIR)/man5
5 kx MAN7 := $(MANDIR)/man7
5 kx MAN8 := $(MANDIR)/man8
5 kx INCLUDEDIR := /usr/include
5 kx LN := ln
5 kx LNS := $(LN) -sf
5 kx PREFIX := /usr
5 kx
5 kx ###############################################################################
5 kx #
5 kx # Determine the current package version from the specfile
5 kx #
5 kx ###############################################################################
5 kx vermajor := $(shell grep "%define vermajor" $(SPECFILE))
5 kx verminor := $(shell grep "%define verminor" $(SPECFILE))
5 kx MAJOR := $(word 3,$(vermajor))
5 kx MINOR := $(word 3,$(verminor))
5 kx VERSION := $(MAJOR).$(MINOR)
5 kx
5 kx TARBALL := keyutils-$(VERSION).tar
5 kx ZTARBALL := $(TARBALL).bz2
5 kx
5 kx ###############################################################################
5 kx #
5 kx # Determine the current library version from the version script
5 kx #
5 kx ###############################################################################
5 kx libversion := $(filter KEYUTILS_%,$(shell grep ^KEYUTILS_ version.lds))
5 kx libversion := $(lastword $(libversion))
5 kx libversion := $(lastword $(libversion))
5 kx APIVERSION := $(subst KEYUTILS_,,$(libversion))
5 kx vernumbers := $(subst ., ,$(APIVERSION))
5 kx APIMAJOR := $(firstword $(vernumbers))
5 kx
5 kx ARLIB := libkeyutils.a
5 kx DEVELLIB := libkeyutils.so
5 kx SONAME := libkeyutils.so.$(APIMAJOR)
5 kx LIBNAME := libkeyutils.so.$(APIVERSION)
5 kx
5 kx ###############################################################################
5 kx #
5 kx # Guess at the appropriate lib directory and word size
5 kx #
5 kx ###############################################################################
5 kx ifeq ($(origin LIBDIR),undefined)
5 kx LIBDIR := $(shell ldd /usr/bin/make | grep '\(/libc[.]\)' | sed -e 's!.*\(/.*\)/libc[.].*!\1!')
5 kx endif
5 kx ifeq ($(origin USRLIBDIR),undefined)
5 kx USRLIBDIR := $(patsubst /lib/%,/usr/lib/%,$(LIBDIR))
5 kx endif
5 kx BUILDFOR := $(shell file /usr/bin/make | sed -e 's!.*ELF \(32\|64\)-bit.*!\1!')-bit
5 kx
5 kx ifeq ($(origin CFLAGS),undefined)
5 kx ifeq ($(BUILDFOR),32-bit)
5 kx CFLAGS += -m32
5 kx LIBDIR := /lib
5 kx USRLIBDIR := /usr/lib
5 kx else
5 kx ifeq ($(BUILDFOR),64-bit)
5 kx CFLAGS += -m64
5 kx LIBDIR := /lib64
5 kx USRLIBDIR := /usr/lib64
5 kx endif
5 kx endif
5 kx endif
5 kx
5 kx PKGCONFIG := libkeyutils.pc
5 kx PKGCONFIG_DIR := pkgconfig
5 kx
5 kx ###############################################################################
5 kx #
5 kx # This is necessary if glibc doesn't know about the key management error codes
5 kx #
5 kx ###############################################################################
5 kx ifeq ($(NO_GLIBC_KEYERR),1)
5 kx CFLAGS += -DNO_GLIBC_KEYERR
5 kx LIBLIBS := -ldl -lc
5 kx else
5 kx LIBLIBS :=
5 kx endif
5 kx
5 kx ###############################################################################
5 kx #
5 kx # Normal build rule
5 kx #
5 kx ###############################################################################
5 kx all: keyctl request-key key.dns_resolver cxx
5 kx
5 kx ###############################################################################
5 kx #
5 kx # Build the libraries
5 kx #
5 kx ###############################################################################
5 kx #RPATH = -Wl,-rpath,$(LIBDIR)
5 kx
5 kx VCPPFLAGS := -DPKGBUILD="\"$(shell date -u +%F)\""
5 kx VCPPFLAGS += -DPKGVERSION="\"keyutils-$(VERSION)\""
5 kx VCPPFLAGS += -DAPIVERSION="\"libkeyutils-$(APIVERSION)\""
5 kx
5 kx ifeq ($(NO_ARLIB),0)
5 kx all: $(ARLIB)
5 kx $(ARLIB): keyutils.o
5 kx $(AR) rcs $@ $<
5 kx
5 kx keyutils.o: keyutils.c keyutils.h Makefile
5 kx $(CC) $(CPPFLAGS) $(VCPPFLAGS) $(CFLAGS) -UNO_GLIBC_KEYERR -o $@ -c $<
5 kx LIB_DEPENDENCY := libkeyutils.a
5 kx endif
5 kx
5 kx
5 kx ifeq ($(NO_SOLIB),0)
5 kx all: $(DEVELLIB)
5 kx $(DEVELLIB): $(SONAME)
5 kx $(LNS) $< $@
5 kx
5 kx $(SONAME): $(LIBNAME)
5 kx $(LNS) $< $@
5 kx
5 kx LIBVERS := -shared -Wl,-soname,$(SONAME) -Wl,--version-script,version.lds
5 kx
5 kx $(LIBNAME): keyutils.os version.lds Makefile
5 kx $(CC) $(CFLAGS) -fPIC $(LDFLAGS) $(LIBVERS) -o $@ keyutils.os $(LIBLIBS)
5 kx
5 kx keyutils.os: keyutils.c keyutils.h Makefile
5 kx $(CC) $(CPPFLAGS) $(VCPPFLAGS) $(CFLAGS) -fPIC -o $@ -c $<
5 kx LIB_DEPENDENCY := $(DEVELLIB)
5 kx endif
5 kx
5 kx ###############################################################################
5 kx #
5 kx # Build the programs
5 kx #
5 kx ###############################################################################
5 kx %.o: %.c keyutils.h Makefile
5 kx $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<
5 kx
5 kx keyctl: keyctl.o keyctl_testing.o keyctl_watch.o $(LIB_DEPENDENCY)
5 kx $(CC) -L. $(CFLAGS) $(LDFLAGS) $(RPATH) -o $@ \
5 kx keyctl.o keyctl_testing.o keyctl_watch.o -lkeyutils
5 kx keyctl.o keyctl_testing.o keyctl_watch.o: keyctl.h
5 kx keyctl_watch.o: watch_queue.h
5 kx
5 kx request-key: request-key.o $(LIB_DEPENDENCY)
5 kx $(CC) -L. $(CFLAGS) $(LDFLAGS) $(RPATH) -o $@ $< -lkeyutils
5 kx
5 kx key.dns_resolver: key.dns_resolver.o dns.afsdb.o $(LIB_DEPENDENCY)
5 kx $(CC) -L. $(CFLAGS) $(LDFLAGS) $(RPATH) -o $@ \
5 kx key.dns_resolver.o dns.afsdb.o -lkeyutils -lresolv
5 kx
5 kx key.dns_resolver.o: key.dns_resolver.c key.dns.h
5 kx dns.afsdb.o: dns.afsdb.c key.dns.h
5 kx
5 kx ###############################################################################
5 kx #
5 kx # Check that the header file has valid C++ syntax
5 kx #
5 kx ###############################################################################
5 kx cxx.stamp: keyutils.h Makefile
5 kx $(CXX) $(CPPFLAGS) $(CXXFLAGS) -x c++-header -fsyntax-only $<
5 kx touch $@
5 kx
5 kx cxx: cxx.stamp
5 kx .PHONY: cxx
5 kx
5 kx ###############################################################################
5 kx #
5 kx # Install everything
5 kx #
5 kx ###############################################################################
5 kx pkgconfig:
5 kx sed \
5 kx -e 's,@VERSION\@,$(VERSION),g' \
5 kx -e 's,@prefix\@,$(PREFIX),g' \
5 kx -e 's,@exec_prefix\@,$(PREFIX),g' \
5 kx -e 's,@libdir\@,$(USRLIBDIR),g' \
5 kx -e 's,@includedir\@,$(INCLUDEDIR),g' \
5 kx < $(PKGCONFIG).in > $(PKGCONFIG) || rm $(PKGCONFIG)
5 kx
5 kx install: all
5 kx ifeq ($(NO_ARLIB),0)
5 kx $(INSTALL) -D -m 0644 $(ARLIB) $(DESTDIR)$(USRLIBDIR)/$(ARLIB)
5 kx endif
5 kx ifeq ($(NO_SOLIB),0)
5 kx $(INSTALL) -D $(LIBNAME) $(DESTDIR)$(LIBDIR)/$(LIBNAME)
5 kx $(LNS) $(LIBNAME) $(DESTDIR)$(LIBDIR)/$(SONAME)
5 kx mkdir -p $(DESTDIR)$(USRLIBDIR)
5 kx $(LNS) $(LIBDIR)/$(SONAME) $(DESTDIR)$(USRLIBDIR)/$(DEVELLIB)
5 kx sed \
5 kx -e 's,@VERSION\@,$(VERSION),g' \
5 kx -e 's,@prefix\@,$(PREFIX),g' \
5 kx -e 's,@exec_prefix\@,$(PREFIX),g' \
5 kx -e 's,@libdir\@,$(USRLIBDIR),g' \
5 kx -e 's,@includedir\@,$(INCLUDEDIR),g' \
5 kx < $(PKGCONFIG).in > $(PKGCONFIG) || rm $(PKGCONFIG)
5 kx $(INSTALL) -D $(PKGCONFIG) $(DESTDIR)$(LIBDIR)/$(PKGCONFIG_DIR)/$(PKGCONFIG)
5 kx rm $(PKGCONFIG)
5 kx endif
5 kx $(INSTALL) -D keyctl $(DESTDIR)$(BINDIR)/keyctl
5 kx $(INSTALL) -D request-key $(DESTDIR)$(SBINDIR)/request-key
5 kx $(INSTALL) -D request-key-debug.sh $(DESTDIR)$(SHAREDIR)/request-key-debug.sh
5 kx $(INSTALL) -D key.dns_resolver $(DESTDIR)$(SBINDIR)/key.dns_resolver
5 kx $(INSTALL) -D -m 0644 request-key.conf $(DESTDIR)$(ETCDIR)/request-key.conf
5 kx mkdir -p $(DESTDIR)$(ETCDIR)/request-key.d
5 kx mkdir -p $(DESTDIR)$(ETCDIR)/keyutils
5 kx mkdir -p $(DESTDIR)$(MAN1)
5 kx $(INSTALL) -m 0644 $(wildcard man/*.1) $(DESTDIR)$(MAN1)
5 kx mkdir -p $(DESTDIR)$(MAN3)
5 kx $(INSTALL) -m 0644 $(wildcard man/*.3) $(DESTDIR)$(MAN3)
5 kx mkdir -p $(DESTDIR)$(MAN5)
5 kx $(INSTALL) -m 0644 $(wildcard man/*.5) $(DESTDIR)$(MAN5)
5 kx mkdir -p $(DESTDIR)$(MAN7)
5 kx $(INSTALL) -m 0644 $(wildcard man/*.7) $(DESTDIR)$(MAN7)
5 kx mkdir -p $(DESTDIR)$(MAN8)
5 kx $(INSTALL) -m 0644 $(wildcard man/*.8) $(DESTDIR)$(MAN8)
5 kx $(LNS) keyctl_describe.3 $(DESTDIR)$(MAN3)/keyctl_describe_alloc.3
5 kx $(LNS) keyctl_get_security.3 $(DESTDIR)$(MAN3)/keyctl_get_security_alloc.3
5 kx $(LNS) keyctl_instantiate.3 $(DESTDIR)$(MAN3)/keyctl_instantiate_iov.3
5 kx $(LNS) keyctl_instantiate.3 $(DESTDIR)$(MAN3)/keyctl_reject.3
5 kx $(LNS) keyctl_instantiate.3 $(DESTDIR)$(MAN3)/keyctl_negate.3
5 kx $(LNS) keyctl_instantiate.3 $(DESTDIR)$(MAN3)/keyctl_assume_authority.3
5 kx $(LNS) keyctl_link.3 $(DESTDIR)$(MAN3)/keyctl_unlink.3
5 kx $(LNS) keyctl_read.3 $(DESTDIR)$(MAN3)/keyctl_read_alloc.3
5 kx $(LNS) recursive_key_scan.3 $(DESTDIR)$(MAN3)/recursive_session_key_scan.3
5 kx $(LNS) keyctl_dh_compute.3 $(DESTDIR)$(MAN3)/keyctl_dh_compute_alloc.3
5 kx $(LNS) keyctl_dh_compute.3 $(DESTDIR)$(MAN3)/keyctl_dh_compute_kdf.3
5 kx $(INSTALL) -D -m 0644 keyutils.h $(DESTDIR)$(INCLUDEDIR)/keyutils.h
5 kx
5 kx ###############################################################################
5 kx #
5 kx # Run tests
5 kx #
5 kx ###############################################################################
5 kx test:
5 kx $(MAKE) -C tests run
5 kx
5 kx ###############################################################################
5 kx #
5 kx # Clean up
5 kx #
5 kx ###############################################################################
5 kx clean:
5 kx $(MAKE) -C tests clean
5 kx $(RM) libkeyutils.so* libkeyutils.a libkeyutils.pc
5 kx $(RM) keyctl request-key key.dns_resolver
5 kx $(RM) *.o *.os *~
5 kx $(RM) debugfiles.list debugsources.list
5 kx $(RM) cxx.stamp
5 kx
5 kx distclean: clean
5 kx $(RM) -r rpmbuild $(TARBALL)
5 kx
5 kx ###############################################################################
5 kx #
5 kx # Generate a tarball
5 kx #
5 kx ###############################################################################
5 kx $(ZTARBALL):
5 kx git archive --prefix=keyutils-$(VERSION)/ --format tar -o $(TARBALL) HEAD
5 kx bzip2 -9 <$(TARBALL) >$(ZTARBALL)
5 kx
5 kx tarball: $(ZTARBALL)
5 kx
5 kx ###############################################################################
5 kx #
5 kx # Generate an RPM
5 kx #
5 kx ###############################################################################
5 kx SRCBALL := rpmbuild/SOURCES/$(TARBALL)
5 kx ZSRCBALL := rpmbuild/SOURCES/$(ZTARBALL)
5 kx
5 kx BUILDID := .local
5 kx rpmver0 := $(shell rpmspec -q ./keyutils.spec --define "buildid $(BUILDID)")
5 kx rpmver1 := $(word 1,$(rpmver0))
5 kx rpmver2 := $(subst ., ,$(rpmver1))
5 kx rpmver3 := $(lastword $(rpmver2))
5 kx rpmver4 := $(patsubst %.$(rpmver3),%,$(rpmver1))
5 kx rpmver := $(patsubst keyutils-%,%,$(rpmver4))
5 kx SRPM := rpmbuild/SRPMS/keyutils-$(rpmver).src.rpm
5 kx
5 kx RPMBUILDDIRS := \
5 kx --define "_srcrpmdir $(CURDIR)/rpmbuild/SRPMS" \
5 kx --define "_rpmdir $(CURDIR)/rpmbuild/RPMS" \
5 kx --define "_sourcedir $(CURDIR)/rpmbuild/SOURCES" \
5 kx --define "_specdir $(CURDIR)/rpmbuild/SPECS" \
5 kx --define "_builddir $(CURDIR)/rpmbuild/BUILD" \
5 kx --define "_buildrootdir $(CURDIR)/rpmbuild/BUILDROOT"
5 kx
5 kx RPMFLAGS := \
5 kx --define "buildid $(BUILDID)"
5 kx
5 kx srpm:
5 kx mkdir -p rpmbuild
5 kx chmod ug-s rpmbuild
5 kx mkdir -p rpmbuild/{SPECS,SOURCES,BUILD,BUILDROOT,RPMS,SRPMS}
5 kx git archive --prefix=keyutils-$(VERSION)/ --format tar -o $(SRCBALL) HEAD
5 kx bzip2 -9 <$(SRCBALL) >$(ZSRCBALL)
5 kx rpmbuild -ts $(ZSRCBALL) --define "_srcrpmdir rpmbuild/SRPMS" $(RPMFLAGS)
5 kx
5 kx rpm: srpm
5 kx rpmbuild --rebuild $(SRPM) $(RPMBUILDDIRS) $(RPMFLAGS)
5 kx
5 kx rpmlint: rpm
5 kx rpmlint $(SRPM) $(CURDIR)/rpmbuild/RPMS/*/keyutils-{,libs-,libs-devel-,debuginfo-}$(rpmver).*.rpm
5 kx
5 kx ###############################################################################
5 kx #
5 kx # Build debugging
5 kx #
5 kx ###############################################################################
5 kx show_vars:
5 kx @echo VERSION=$(VERSION)
5 kx @echo APIVERSION=$(APIVERSION)
5 kx @echo LIBDIR=$(LIBDIR)
5 kx @echo USRLIBDIR=$(USRLIBDIR)
5 kx @echo BUILDFOR=$(BUILDFOR)
5 kx @echo SONAME=$(SONAME)
5 kx @echo LIBNAME=$(LIBNAME)
5 kx @echo SRPM=$(SRPM)
5 kx @echo rpmver=$(rpmver)