libbsd/Makefile
Eric Smith cd730a02c3 build: Install shared library with 755 permission
The Makefile should install the shared library with 755 permission
rather than 644. That's standard practice, and required when building
RPMs on Fedora to get a debuginfo package.
2010-01-30 22:13:18 +01:00

204 lines
4.5 KiB
Makefile

VERSION := $(shell ./get-version)
LIB_NAME := libbsd
LIB_VERSION_MAJOR := 0
LIB_VERSION_MINOR := 2
LIB_VERSION_MICRO := 0
LIB_VERSION := $(LIB_VERSION_MAJOR).$(LIB_VERSION_MINOR).$(LIB_VERSION_MICRO)
LIB_PKGCONFIG := $(LIB_NAME).pc
LIB_STATIC := $(LIB_NAME).a
LIB_SHARED_SO := $(LIB_NAME).so
LIB_SONAME := $(LIB_SHARED_SO).$(LIB_VERSION_MAJOR)
LIB_SHARED := $(LIB_SONAME).$(LIB_VERSION_MINOR).$(LIB_VERSION_MICRO)
TAR_NAME := $(LIB_NAME)-$(VERSION)
TAR_FILE := $(TAR_NAME).tar.gz
LIB_DIST := \
ChangeLog
LIB_SRCS_GEN := \
hash/md5hl.c
LIB_SRCS := \
arc4random.c \
bsd_getopt.c \
err.c \
fgetln.c \
flopen.c \
heapsort.c \
humanize_number.c \
dehumanize_number.c \
inet_net_pton.c \
hash/md5.c \
pidfile.c \
readpassphrase.c \
setmode.c \
setproctitle.c \
strmode.c \
strtonum.c \
strlcat.c strlcpy.c \
fmtcheck.c \
nlist.c \
progname.c \
vis.c unvis.c \
$(LIB_SRCS_GEN)
LIB_SRCS_GEN := $(patsubst %,src/%,$(LIB_SRCS_GEN))
LIB_SRCS := $(patsubst %,src/%,$(LIB_SRCS))
LIB_INCLUDES := \
bsd/cdefs.h \
bsd/queue.h \
bsd/ip_icmp.h \
bsd/sys/cdefs.h \
bsd/sys/queue.h \
bsd/sys/tree.h \
bsd/netinet/ip_icmp.h \
bsd/err.h \
bsd/getopt.h \
bsd/inet.h \
bsd/random.h \
bsd/md5.h \
bsd/string.h \
bsd/bsd.h \
bsd/stdio.h \
bsd/stdlib.h \
bsd/readpassphrase.h \
bsd/unistd.h \
nlist.h \
vis.h \
libutil.h
LIB_MANS_GEN := \
md5.3bsd
LIB_MANS := \
arc4random.3 \
arc4random_addrandom.3 \
arc4random_buf.3 \
arc4random_stir.3 \
arc4random_uniform.3 \
dehumanize_number.3 \
strtonum.3 \
strlcpy.3 \
strlcat.3 \
fgetln.3 \
flopen.3 \
readpassphrase.3 \
humanize_number.3 \
fmtcheck.3 \
nlist.3 \
pidfile.3 \
setmode.3 \
getmode.3 \
strmode.3 \
unvis.3 \
vis.3 \
$(LIB_MANS_GEN)
LIB_MANS_GEN := $(patsubst %,src/%,$(LIB_MANS_GEN))
LIB_MANS := $(patsubst %,src/%,$(LIB_MANS))
LIB_STATIC_OBJS := $(LIB_SRCS:%.c=%.o)
LIB_SHARED_OBJS := $(LIB_SRCS:%.c=%.lo)
# Set default value for compilation
CFLAGS ?= -g -Wall -Wextra -Wno-unused-variable
MK_CFLAGS := -Iinclude/ -include bsd/bsd.h -D_GNU_SOURCE -D__REENTRANT
prefix = /usr
exec_prefix =
libdir = ${exec_prefix}/lib
usrlibdir = ${prefix}/lib
includedir = ${prefix}/include
pkgconfigdir = ${usrlibdir}/pkgconfig
mandir = ${prefix}/share/man
.PHONY: libs
libs: $(LIB_STATIC) $(LIB_SHARED_SO) $(LIB_PKGCONFIG)
.PHONY: man
man: $(LIB_MANS)
%.lo: %.c
$(CC) -o $@ $(MK_CFLAGS) $(CFLAGS) -DPIC -fPIC -c $<
%.o: %.c
$(CC) -o $@ $(MK_CFLAGS) $(CFLAGS) -c $<
src/md5.3bsd: src/mdX.3
sed -e 's/mdX/md5/g' -e 's/mdY/md4/g' -e 's/MDX/MD5/g' $< > $@
src/hash/md5hl.c: src/hash/helper.c
sed -e 's:hashinc:bsd/md5.h:g' -e 's:HASH:MD5:g' $< > $@
$(LIB_PKGCONFIG): $(LIB_PKGCONFIG).in
sed -e 's:@VERSION@:$(VERSION):' \
-e 's:@prefix@:$(value prefix):' \
-e 's:@exec_prefix@:$(value exec_prefix):' \
-e 's:@libdir@:$(value usrlibdir):' \
-e 's:@includedir@:$(value includedir):' \
$< > $@
$(LIB_STATIC): $(LIB_STATIC_OBJS)
ar rcs $@ $^
$(LIB_SHARED_SO): $(LIB_SONAME)
ln -fs $^ $@
$(LIB_SONAME): $(LIB_SHARED)
ln -fs $^ $@
$(LIB_SHARED): $(LIB_SHARED_OBJS)
gcc -shared \
-Wl,-soname -Wl,$(LIB_SONAME) \
-Wl,--version-script=Versions \
-o $@ $^
.PHONY: ChangeLog
ChangeLog:
-git log --stat -C >$@
.PHONY: dist
dist: $(LIB_DIST)
mkdir $(TAR_NAME)
echo $(VERSION) >$(TAR_NAME)/.dist-version
cp -a --parents $(LIB_DIST) `git ls-files` $(TAR_NAME)
tar czf $(TAR_FILE) --exclude=.gitignore $(TAR_NAME)
rm -rf $(TAR_NAME)
gpg -a -b $(TAR_FILE)
.PHONY: install
install: libs man
mkdir -p $(DESTDIR)$(libdir)
mkdir -p $(DESTDIR)$(usrlibdir)
mkdir -p $(DESTDIR)$(includedir)/bsd/
mkdir -p $(DESTDIR)$(includedir)/bsd/sys/
mkdir -p $(DESTDIR)$(includedir)/bsd/netinet/
mkdir -p $(DESTDIR)$(mandir)/man3
mkdir -p $(DESTDIR)$(pkgconfigdir)
install -m644 $(LIB_STATIC) $(DESTDIR)$(usrlibdir)
install -m755 $(LIB_SHARED) $(DESTDIR)$(libdir)
for i in $(LIB_INCLUDES); do \
install -m644 include/$$i $(DESTDIR)$(includedir)/$$i; \
done
install -m644 $(LIB_MANS) $(DESTDIR)$(mandir)/man3
install -m644 $(LIB_PKGCONFIG) $(DESTDIR)$(pkgconfigdir)
ifeq ($(libdir),$(usrlibdir))
# If both dirs are the same, do a relative symlink.
ln -sf $(LIB_SHARED) $(DESTDIR)$(usrlibdir)/$(LIB_SHARED_SO)
else
# Otherwise, do an absolute one.
ln -sf $(libdir)/$(LIB_SHARED) $(DESTDIR)$(usrlibdir)/$(LIB_SHARED_SO)
endif
ln -sf $(LIB_SHARED) $(DESTDIR)$(libdir)/$(LIB_SONAME)
.PHONY: clean
clean:
rm -f $(LIB_PKGCONFIG)
rm -f $(LIB_SRCS_GEN) $(LIB_MANS_GEN)
rm -f $(LIB_STATIC_OBJS)
rm -f $(LIB_STATIC)
rm -f $(LIB_SHARED_OBJS)
rm -f $(LIB_SHARED) $(LIB_SONAME) $(LIB_SHARED_SO)