Radix cross Linux

The main Radix cross Linux repository contains the build scripts of packages, which have the most complete and common functionality for desktop machines

452 Commits   2 Branches   1 Tag
CPPFLAGS	+= -I.
CFLAGS		+= -g -Wall -Werror
CXXFLAGS	+= -g -Wall -Werror
INSTALL		:= install
DESTDIR		:=
SPECFILE	:= keyutils.spec
NO_GLIBC_KEYERR	:= 0
NO_ARLIB	:= 0
NO_SOLIB	:= 0
ETCDIR		:= /etc
BINDIR		:= /bin
SBINDIR		:= /sbin
SHAREDIR	:= /usr/share/keyutils
MANDIR		:= /usr/share/man
MAN1		:= $(MANDIR)/man1
MAN3		:= $(MANDIR)/man3
MAN5		:= $(MANDIR)/man5
MAN7		:= $(MANDIR)/man7
MAN8		:= $(MANDIR)/man8
INCLUDEDIR	:= /usr/include
LN		:= ln
LNS		:= $(LN) -sf
PREFIX 		:= /usr

###############################################################################
#
# Determine the current package version from the specfile
#
###############################################################################
vermajor	:= $(shell grep "%define vermajor" $(SPECFILE))
verminor	:= $(shell grep "%define verminor" $(SPECFILE))
MAJOR		:= $(word 3,$(vermajor))
MINOR		:= $(word 3,$(verminor))
VERSION		:= $(MAJOR).$(MINOR)

TARBALL		:= keyutils-$(VERSION).tar
ZTARBALL	:= $(TARBALL).bz2

###############################################################################
#
# Determine the current library version from the version script
#
###############################################################################
libversion	:= $(filter KEYUTILS_%,$(shell grep ^KEYUTILS_ version.lds))
libversion	:= $(lastword $(libversion))
libversion	:= $(lastword $(libversion))
APIVERSION	:= $(subst KEYUTILS_,,$(libversion))
vernumbers	:= $(subst ., ,$(APIVERSION))
APIMAJOR	:= $(firstword $(vernumbers))

ARLIB		:= libkeyutils.a
DEVELLIB	:= libkeyutils.so
SONAME		:= libkeyutils.so.$(APIMAJOR)
LIBNAME		:= libkeyutils.so.$(APIVERSION)

###############################################################################
#
# Guess at the appropriate lib directory and word size
#
###############################################################################
ifeq ($(origin LIBDIR),undefined)
LIBDIR		:= $(shell ldd /usr/bin/make | grep '\(/libc[.]\)' | sed -e 's!.*\(/.*\)/libc[.].*!\1!')
endif
ifeq ($(origin USRLIBDIR),undefined)
USRLIBDIR	:= $(patsubst /lib/%,/usr/lib/%,$(LIBDIR))
endif
BUILDFOR	:= $(shell file /usr/bin/make | sed -e 's!.*ELF \(32\|64\)-bit.*!\1!')-bit

ifeq ($(origin CFLAGS),undefined)
ifeq ($(BUILDFOR),32-bit)
CFLAGS		+= -m32
LIBDIR		:= /lib
USRLIBDIR	:= /usr/lib
else
ifeq ($(BUILDFOR),64-bit)
CFLAGS		+= -m64
LIBDIR		:= /lib64
USRLIBDIR	:= /usr/lib64
endif
endif
endif

PKGCONFIG 	:= libkeyutils.pc
PKGCONFIG_DIR 	:= pkgconfig

###############################################################################
#
# This is necessary if glibc doesn't know about the key management error codes
#
###############################################################################
ifeq ($(NO_GLIBC_KEYERR),1)
CFLAGS	+= -DNO_GLIBC_KEYERR
LIBLIBS	:= -ldl -lc
else
LIBLIBS	:=
endif

###############################################################################
#
# Normal build rule
#
###############################################################################
all: keyctl request-key key.dns_resolver cxx

###############################################################################
#
# Build the libraries
#
###############################################################################
#RPATH = -Wl,-rpath,$(LIBDIR)

VCPPFLAGS	:= -DPKGBUILD="\"$(shell date -u +%F)\""
VCPPFLAGS	+= -DPKGVERSION="\"keyutils-$(VERSION)\""
VCPPFLAGS	+= -DAPIVERSION="\"libkeyutils-$(APIVERSION)\""

ifeq ($(NO_ARLIB),0)
all: $(ARLIB)
$(ARLIB): keyutils.o
	$(AR) rcs $@ $<

keyutils.o: keyutils.c keyutils.h Makefile
	$(CC) $(CPPFLAGS) $(VCPPFLAGS) $(CFLAGS) -UNO_GLIBC_KEYERR -o $@ -c $<
LIB_DEPENDENCY	:= libkeyutils.a
endif


ifeq ($(NO_SOLIB),0)
all: $(DEVELLIB)
$(DEVELLIB): $(SONAME)
	$(LNS) $< $@

$(SONAME): $(LIBNAME)
	$(LNS) $< $@

LIBVERS := -shared -Wl,-soname,$(SONAME) -Wl,--version-script,version.lds

$(LIBNAME): keyutils.os version.lds Makefile
	$(CC) $(CFLAGS) -fPIC $(LDFLAGS) $(LIBVERS) -o $@ keyutils.os $(LIBLIBS)

keyutils.os: keyutils.c keyutils.h Makefile
	$(CC) $(CPPFLAGS) $(VCPPFLAGS) $(CFLAGS) -fPIC -o $@ -c $<
LIB_DEPENDENCY	:= $(DEVELLIB)
endif

###############################################################################
#
# Build the programs
#
###############################################################################
%.o: %.c keyutils.h Makefile
	$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<

keyctl: keyctl.o keyctl_testing.o keyctl_watch.o $(LIB_DEPENDENCY)
	$(CC) -L. $(CFLAGS) $(LDFLAGS) $(RPATH) -o $@ \
		keyctl.o keyctl_testing.o keyctl_watch.o -lkeyutils
keyctl.o keyctl_testing.o keyctl_watch.o: keyctl.h
keyctl_watch.o: watch_queue.h

request-key: request-key.o $(LIB_DEPENDENCY)
	$(CC) -L. $(CFLAGS) $(LDFLAGS) $(RPATH) -o $@ $< -lkeyutils

key.dns_resolver: key.dns_resolver.o dns.afsdb.o $(LIB_DEPENDENCY)
	$(CC) -L. $(CFLAGS) $(LDFLAGS) $(RPATH) -o $@ \
		key.dns_resolver.o dns.afsdb.o -lkeyutils -lresolv

key.dns_resolver.o: key.dns_resolver.c key.dns.h
dns.afsdb.o: dns.afsdb.c key.dns.h

###############################################################################
#
# Check that the header file has valid C++ syntax
#
###############################################################################
cxx.stamp: keyutils.h Makefile
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -x c++-header -fsyntax-only $<
	touch $@

cxx: cxx.stamp
.PHONY: cxx

###############################################################################
#
# Install everything
#
###############################################################################
pkgconfig:
	sed \
	-e 's,@VERSION\@,$(VERSION),g' \
	-e 's,@prefix\@,$(PREFIX),g' \
	-e 's,@exec_prefix\@,$(PREFIX),g' \
	-e 's,@libdir\@,$(USRLIBDIR),g' \
	-e 's,@includedir\@,$(INCLUDEDIR),g' \
	< $(PKGCONFIG).in > $(PKGCONFIG) || rm $(PKGCONFIG)

install: all
ifeq ($(NO_ARLIB),0)
	$(INSTALL) -D -m 0644 $(ARLIB) $(DESTDIR)$(USRLIBDIR)/$(ARLIB)
endif
ifeq ($(NO_SOLIB),0)
	$(INSTALL) -D $(LIBNAME) $(DESTDIR)$(LIBDIR)/$(LIBNAME)
	$(LNS) $(LIBNAME) $(DESTDIR)$(LIBDIR)/$(SONAME)
	mkdir -p $(DESTDIR)$(USRLIBDIR)
	$(LNS) $(LIBDIR)/$(SONAME) $(DESTDIR)$(USRLIBDIR)/$(DEVELLIB)
	sed \
	-e 's,@VERSION\@,$(VERSION),g' \
	-e 's,@prefix\@,$(PREFIX),g' \
	-e 's,@exec_prefix\@,$(PREFIX),g' \
	-e 's,@libdir\@,$(USRLIBDIR),g' \
	-e 's,@includedir\@,$(INCLUDEDIR),g' \
	< $(PKGCONFIG).in > $(PKGCONFIG) || rm $(PKGCONFIG)
	$(INSTALL) -D $(PKGCONFIG) $(DESTDIR)$(LIBDIR)/$(PKGCONFIG_DIR)/$(PKGCONFIG)
	rm $(PKGCONFIG)
endif
	$(INSTALL) -D keyctl $(DESTDIR)$(BINDIR)/keyctl
	$(INSTALL) -D request-key $(DESTDIR)$(SBINDIR)/request-key
	$(INSTALL) -D request-key-debug.sh $(DESTDIR)$(SHAREDIR)/request-key-debug.sh
	$(INSTALL) -D key.dns_resolver $(DESTDIR)$(SBINDIR)/key.dns_resolver
	$(INSTALL) -D -m 0644 request-key.conf $(DESTDIR)$(ETCDIR)/request-key.conf
	mkdir -p $(DESTDIR)$(ETCDIR)/request-key.d
	mkdir -p $(DESTDIR)$(ETCDIR)/keyutils
	mkdir -p $(DESTDIR)$(MAN1)
	$(INSTALL) -m 0644 $(wildcard man/*.1) $(DESTDIR)$(MAN1)
	mkdir -p $(DESTDIR)$(MAN3)
	$(INSTALL) -m 0644 $(wildcard man/*.3) $(DESTDIR)$(MAN3)
	mkdir -p $(DESTDIR)$(MAN5)
	$(INSTALL) -m 0644 $(wildcard man/*.5) $(DESTDIR)$(MAN5)
	mkdir -p $(DESTDIR)$(MAN7)
	$(INSTALL) -m 0644 $(wildcard man/*.7) $(DESTDIR)$(MAN7)
	mkdir -p $(DESTDIR)$(MAN8)
	$(INSTALL) -m 0644 $(wildcard man/*.8) $(DESTDIR)$(MAN8)
	$(LNS) keyctl_describe.3 $(DESTDIR)$(MAN3)/keyctl_describe_alloc.3
	$(LNS) keyctl_get_security.3 $(DESTDIR)$(MAN3)/keyctl_get_security_alloc.3
	$(LNS) keyctl_instantiate.3 $(DESTDIR)$(MAN3)/keyctl_instantiate_iov.3
	$(LNS) keyctl_instantiate.3 $(DESTDIR)$(MAN3)/keyctl_reject.3
	$(LNS) keyctl_instantiate.3 $(DESTDIR)$(MAN3)/keyctl_negate.3
	$(LNS) keyctl_instantiate.3 $(DESTDIR)$(MAN3)/keyctl_assume_authority.3
	$(LNS) keyctl_link.3 $(DESTDIR)$(MAN3)/keyctl_unlink.3
	$(LNS) keyctl_read.3 $(DESTDIR)$(MAN3)/keyctl_read_alloc.3
	$(LNS) recursive_key_scan.3 $(DESTDIR)$(MAN3)/recursive_session_key_scan.3
	$(LNS) keyctl_dh_compute.3 $(DESTDIR)$(MAN3)/keyctl_dh_compute_alloc.3
	$(LNS) keyctl_dh_compute.3 $(DESTDIR)$(MAN3)/keyctl_dh_compute_kdf.3
	$(INSTALL) -D -m 0644 keyutils.h $(DESTDIR)$(INCLUDEDIR)/keyutils.h

###############################################################################
#
# Run tests
#
###############################################################################
test:
	$(MAKE) -C tests run

###############################################################################
#
# Clean up
#
###############################################################################
clean:
	$(MAKE) -C tests clean
	$(RM) libkeyutils.so* libkeyutils.a libkeyutils.pc
	$(RM) keyctl request-key key.dns_resolver
	$(RM) *.o *.os *~
	$(RM) debugfiles.list debugsources.list
	$(RM) cxx.stamp

distclean: clean
	$(RM) -r rpmbuild $(TARBALL)

###############################################################################
#
# Generate a tarball
#
###############################################################################
$(ZTARBALL):
	git archive --prefix=keyutils-$(VERSION)/ --format tar -o $(TARBALL) HEAD
	bzip2 -9 <$(TARBALL) >$(ZTARBALL)

tarball: $(ZTARBALL)

###############################################################################
#
# Generate an RPM
#
###############################################################################
SRCBALL	:= rpmbuild/SOURCES/$(TARBALL)
ZSRCBALL := rpmbuild/SOURCES/$(ZTARBALL)

BUILDID	:= .local
rpmver0	:= $(shell rpmspec -q ./keyutils.spec --define "buildid $(BUILDID)")
rpmver1	:= $(word 1,$(rpmver0))
rpmver2	:= $(subst ., ,$(rpmver1))
rpmver3	:= $(lastword $(rpmver2))
rpmver4	:= $(patsubst %.$(rpmver3),%,$(rpmver1))
rpmver	:= $(patsubst keyutils-%,%,$(rpmver4))
SRPM	:= rpmbuild/SRPMS/keyutils-$(rpmver).src.rpm

RPMBUILDDIRS := \
	--define "_srcrpmdir $(CURDIR)/rpmbuild/SRPMS" \
	--define "_rpmdir $(CURDIR)/rpmbuild/RPMS" \
	--define "_sourcedir $(CURDIR)/rpmbuild/SOURCES" \
	--define "_specdir $(CURDIR)/rpmbuild/SPECS" \
	--define "_builddir $(CURDIR)/rpmbuild/BUILD" \
	--define "_buildrootdir $(CURDIR)/rpmbuild/BUILDROOT"

RPMFLAGS := \
	--define "buildid $(BUILDID)"

srpm:
	mkdir -p rpmbuild
	chmod ug-s rpmbuild
	mkdir -p rpmbuild/{SPECS,SOURCES,BUILD,BUILDROOT,RPMS,SRPMS}
	git archive --prefix=keyutils-$(VERSION)/ --format tar -o $(SRCBALL) HEAD
	bzip2 -9 <$(SRCBALL) >$(ZSRCBALL)
	rpmbuild -ts $(ZSRCBALL) --define "_srcrpmdir rpmbuild/SRPMS" $(RPMFLAGS)

rpm: srpm
	rpmbuild --rebuild $(SRPM) $(RPMBUILDDIRS) $(RPMFLAGS)

rpmlint: rpm
	rpmlint $(SRPM) $(CURDIR)/rpmbuild/RPMS/*/keyutils-{,libs-,libs-devel-,debuginfo-}$(rpmver).*.rpm

###############################################################################
#
# Build debugging
#
###############################################################################
show_vars:
	@echo VERSION=$(VERSION)
	@echo APIVERSION=$(APIVERSION)
	@echo LIBDIR=$(LIBDIR)
	@echo USRLIBDIR=$(USRLIBDIR)
	@echo BUILDFOR=$(BUILDFOR)
	@echo SONAME=$(SONAME)
	@echo LIBNAME=$(LIBNAME)
	@echo SRPM=$(SRPM)
	@echo rpmver=$(rpmver)