1
0
mirror of https://github.com/rg3/libbcrypt.git synced 2026-10-25 00:19:18 +03:00
Files
bcrypt/Makefile

144 lines
4.3 KiB
Makefile

# Solar Designer implementation.
CRYPT_BLOWFISH_DIR = crypt_blowfish
CRYPT_BLOWFISH_SRC = $(sort $(wildcard $(CRYPT_BLOWFISH_DIR)/*.[cS]))
CRYPT_BLOWFISH_OBJ = $(patsubst %.S,%.o,$(CRYPT_BLOWFISH_SRC:%.c=%.o))
CRYPT_BLOWFISH_LIB = $(CRYPT_BLOWFISH_DIR)/$(CRYPT_BLOWFISH_DIR).a
# Compiler.
CC = $(shell grep '^CC = ' $(CRYPT_BLOWFISH_DIR)/Makefile | cut -d= -f2-)
# Compiler flags.
CFLAGS = $(shell grep '^CFLAGS = ' $(CRYPT_BLOWFISH_DIR)/Makefile | cut -d= -f2-)
override CFLAGS += -fPIC -fvisibility=hidden
# Library version.
BCRYPT_MAJOR = 1
BCRYPT_MINOR = 0
BCRYPT_PATCH = 0
# Library files and variables.
BCRYPT_BASENAME = bcrypt
BCRYPT_LIBNAME = lib$(BCRYPT_BASENAME)
BCRYPT_LDNAME = $(BCRYPT_LIBNAME).so
BCRYPT_LAFILE = $(BCRYPT_LIBNAME).a
BCRYPT_SONAME = $(BCRYPT_LDNAME).$(BCRYPT_MAJOR)
BCRYPT_SOFILE = $(BCRYPT_SONAME).$(BCRYPT_MINOR).$(BCRYPT_PATCH)
BCRYPT_MANPAGE = $(BCRYPT_BASENAME).3
BCRYPT_MANPAGE_SOURCE = $(BCRYPT_MANPAGE).txt
BCRYPT_MANPAGE_LINKS = $(BCRYPT_BASENAME)_gensalt.3 $(BCRYPT_BASENAME)_hashpw.3 $(BCRYPT_BASENAME)_checkpw.3 $(BCRYPT_BASENAME)_sha512.3 $(BCRYPT_BASENAME)_sha3_512.3
BCRYPT_HEADER = $(BCRYPT_BASENAME).h
BCRYPT_PCFILE = $(BCRYPT_LIBNAME).pc
BCRYPT_OBJS = $(BCRYPT_BASENAME).o keccak.o base64.o sha512.o
# Installation variables.
# This is the most common convention. It is used for LIBDIR, which can be
# overridden completely below.
MACHINE = $(shell uname -m)
ifeq ($(MACHINE),x86_64)
LIBDIRNAME = lib64
else
LIBDIRNAME = lib
endif
# These may be set by the user on the command line.
DESTDIR =
PREFIX = /usr/local
MANDIR = $(PREFIX)/share/man
INCLUDEDIR = $(PREFIX)/include
LIBDIR = $(PREFIX)/$(LIBDIRNAME)
# Derived from the previous ones.
INCLUDESUBDIR = $(INCLUDEDIR)/$(BCRYPT_BASENAME)
MAN3DIR = $(MANDIR)/man3
PKGCONFIGDIR = $(LIBDIR)/pkgconfig
#
# Macros and rules.
#
define make_lib_links
set -e ; \
ln -sf $(BCRYPT_SOFILE) $(1)/$(BCRYPT_SONAME) ; \
ln -sf $(BCRYPT_SONAME) $(1)/$(BCRYPT_LDNAME)
endef
define make_man_links
set -e ; \
for f in $(BCRYPT_MANPAGE_LINKS); do \
ln -sf $(BCRYPT_MANPAGE) $(1)/$$f ; \
done
endef
.PHONY: all
all: $(BCRYPT_SOFILE) $(BCRYPT_LAFILE) $(BCRYPT_MANPAGE) $(BCRYPT_PCFILE) $(BCRYPT_HEADER)
.PHONY: test
test: $(BCRYPT_BASENAME)_test
@set -e ; \
$(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS)" -C $(CRYPT_BLOWFISH_DIR) check check_threads ; \
for prog in $^; do \
./$$prog ; \
done
$(BCRYPT_BASENAME)_test: $(BCRYPT_BASENAME)_test.o $(BCRYPT_LAFILE)
$(CC) -o $@ $^
$(BCRYPT_LDNAME) $(BCRYPT_SONAME): $(BCRYPT_SOFILE)
$(call make_lib_links,.)
$(BCRYPT_SOFILE): $(BCRYPT_OBJS) $(CRYPT_BLOWFISH_LIB)
$(CC) $(EXTRA_CFLAGS) -shared -Wl,-soname,$(BCRYPT_SONAME) -o $@ $^
$(BCRYPT_LAFILE): $(BCRYPT_OBJS) $(CRYPT_BLOWFISH_LIB)
ar Dr $@ $(BCRYPT_OBJS) $(CRYPT_BLOWFISH_OBJ) && ranlib -D $@
FORCE:
$(CRYPT_BLOWFISH_LIB): FORCE
@set -e ; \
$(MAKE) -q CC="$(CC)" CFLAGS="$(CFLAGS)" -C $(CRYPT_BLOWFISH_DIR) || \
( $(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS)" -C $(CRYPT_BLOWFISH_DIR) && \
ar Dr $@ $(CRYPT_BLOWFISH_OBJ) && ranlib -D $@ )
$(BCRYPT_BASENAME)_test.c: $(BCRYPT_HEADER)
%.c: %.h
%.o: %.c
$(CC) $(CFLAGS) -c $<
$(BCRYPT_MANPAGE): $(BCRYPT_MANPAGE_SOURCE)
a2x --doctype manpage --format manpage $<
$(BCRYPT_PCFILE):
@set -e ; \
>$@ ; \
echo "Name: $(BCRYPT_BASENAME)" >>$@ ; \
echo "Description: bcrypt password hash C library" >>$@ ; \
echo "Version: $(BCRYPT_MAJOR).$(BCRYPT_MINOR).$(BCRYPT_PATCH)" >>$@ ; \
echo "Cflags: -I$(INCLUDESUBDIR)" >>$@ ; \
echo "Libs: -L$(LIBDIR) -l$(BCRYPT_BASENAME)" >>$@ ; \
:
.PHONY: clean
clean:
rm -f *.o $(BCRYPT_BASENAME)_test $(BCRYPT_SOFILE) $(BCRYPT_LAFILE) $(BCRYPT_SONAME) $(BCRYPT_LDNAME) $(BCRYPT_MANPAGE) $(BCRYPT_PCFILE) *~ core
$(MAKE) -C $(CRYPT_BLOWFISH_DIR) clean
.PHONY: install
install: all
install -d $(DESTDIR)$(MAN3DIR)
install -d $(DESTDIR)$(INCLUDESUBDIR)
install -d $(DESTDIR)$(LIBDIR)
install -d $(DESTDIR)$(PKGCONFIGDIR)
install -m 755 $(BCRYPT_SOFILE) $(DESTDIR)$(LIBDIR)
install -m 644 $(BCRYPT_LAFILE) $(DESTDIR)$(LIBDIR)
install -m 644 $(BCRYPT_HEADER) $(DESTDIR)$(INCLUDESUBDIR)
install -m 644 $(BCRYPT_MANPAGE) $(DESTDIR)$(MAN3DIR)
install -m 644 $(BCRYPT_PCFILE) $(DESTDIR)$(PKGCONFIGDIR)
$(call make_lib_links,$(DESTDIR)$(LIBDIR))
$(call make_man_links,$(DESTDIR)$(MAN3DIR))