#
# Copyright (c) 2000-2003,2005,2009,2010 by Solar Designer
# Copyright (c) 2008,2009 by Dmitry V. Levin
# See LICENSE
#
TITLE = pam_passwdqc
SHARED_LIB = libpasswdqc.so.0
DEVEL_LIB = libpasswdqc.so
SHARED_LIB_DARWIN = libpasswdqc.0.dylib
DEVEL_LIB_DARWIN = libpasswdqc.dylib
MAP_LIB = libpasswdqc.map
PAM_SO_SUFFIX =
SHARED_PAM = $(TITLE).so$(PAM_SO_SUFFIX)
MAP_PAM = pam_passwdqc.map
SHLIBMODE = 755
HEADER = passwdqc.h
INCMODE = 644
MAN1 = pwqgen.1 pwqcheck.1
MAN5 = passwdqc.conf.5
MAN8 = $(TITLE).8
MANMODE = 644
BINDIR = /usr/bin
BINMODE = 755
CONFDIR = /etc
CONFMODE = 644
SHARED_LIBDIR = /lib
SHARED_LIBDIR_SUN = /usr/lib
SHARED_LIBDIR_REL = ../..$(SHARED_LIBDIR)
DEVEL_LIBDIR = /usr/lib
SECUREDIR = /lib/security
SECUREDIR_SUN = /usr/lib/security
SECUREDIR_DARWIN = /usr/lib/pam
INCLUDEDIR = /usr/include
MANDIR = /usr/share/man
DESTDIR =
CC = gcc
LD = $(CC)
LD_lib = $(LD)
RM = rm -f
LN_s = ln -s -f
MKDIR = umask 022 && mkdir -p
INSTALL = install -c
# We support Sun's older /usr/ucb/install, but not the newer /usr/sbin/install.
INSTALL_SUN = /usr/ucb/install -c
CFLAGS = -Wall -W -O2
CFLAGS_lib = $(CFLAGS) -fPIC
CFLAGS_bin = $(CFLAGS) -fomit-frame-pointer
LDFLAGS =
LDFLAGS_shared = --shared
LDFLAGS_shared_LINUX = --shared
LDFLAGS_shared_SUN = -G
LDFLAGS_shared_HP = -b
LDFLAGS_lib = $(LDFLAGS_shared)
LDFLAGS_lib_LINUX = $(LDFLAGS_shared_LINUX) \
-Wl,--soname,$(SHARED_LIB),--version-script,$(MAP_LIB)
LDFLAGS_lib_SUN = $(LDFLAGS_shared_SUN)
LDFLAGS_lib_HP = $(LDFLAGS_shared_HP)
LDFLAGS_pam = $(LDFLAGS_shared)
LDFLAGS_pam_LINUX = $(LDFLAGS_shared_LINUX) \
-Wl,--version-script,$(MAP_PAM)
LDFLAGS_pam_SUN = $(LDFLAGS_shared_SUN)
LDFLAGS_pam_HP = $(LDFLAGS_shared_HP)
LDLIBS_lib =
LDLIBS_pam = -lpam -lcrypt
LDLIBS_pam_LINUX = -lpam -lcrypt
LDLIBS_pam_SUN = -lpam -lcrypt
LDLIBS_pam_HP = -lpam -lsec
LDLIBS_pam_DARWIN = -lpam -lSystem
# Uncomment this to use cc instead of gcc
#CC = cc
# Uncomment this to use Sun's C compiler flags
#CFLAGS = -xO2
#CFLAGS_lib = $(CFLAGS) -KPIC
#CFLAGS_bin = $(CFLAGS)
# Uncomment this to use HP's ANSI C compiler flags
#CFLAGS = -Ae +w1 +W 474,486,542 +O2
#CFLAGS_lib = $(CFLAGS) +z
#CFLAGS_bin = $(CFLAGS)
CONFIGS = passwdqc.conf
BINS = pwqgen pwqcheck
PROJ = $(SHARED_LIB) $(DEVEL_LIB) $(SHARED_PAM) $(BINS)
OBJS_LIB = concat.o passwdqc_check.o passwdqc_load.o passwdqc_memzero.o passwdqc_parse.o passwdqc_random.o wordset_4k.o
OBJS_PAM = pam_passwdqc.o passwdqc_memzero.o
OBJS_GEN = pwqgen.o passwdqc_memzero.o
OBJS_CHECK = pwqcheck.o passwdqc_memzero.o
default: all
all pam utils install install_lib install_pam install_utils uninstall remove remove_lib remove_pam remove_utils:
case "`uname -s`" in \
Linux) $(MAKE) CFLAGS_lib="$(CFLAGS_lib) -DHAVE_SHADOW" \
LDFLAGS_lib="$(LDFLAGS_lib_LINUX)" \
LDFLAGS_pam="$(LDFLAGS_pam_LINUX)" \
LDLIBS_pam="$(LDLIBS_pam_LINUX)" \
$@_wrapped;; \
SunOS) $(MAKE) -e CFLAGS_lib="$(CFLAGS_lib) -DHAVE_SHADOW" \
LD_lib=ld \
LDFLAGS_lib="$(LDFLAGS_lib_SUN)" \
LDFLAGS_pam="$(LDFLAGS_pam_SUN)" \
LDLIBS_pam="$(LDLIBS_pam_SUN)" \
INSTALL="$(INSTALL_SUN)" \
SHARED_LIBDIR="$(SHARED_LIBDIR_SUN)" \
SECUREDIR="$(SECUREDIR_SUN)" \
$@_wrapped;; \
HP-UX) $(MAKE) CFLAGS_lib="$(CFLAGS_lib) -DHAVE_SHADOW" \
LD_lib=ld \
LDFLAGS_lib="$(LDFLAGS_lib_HP)" \
LDFLAGS_pam="$(LDFLAGS_pam_HP)" \
LDLIBS_pam="$(LDLIBS_pam_HP)" \
$@_wrapped;; \
Darwin) $(MAKE) \
SHARED_LIB="$(SHARED_LIB_DARWIN)" \
DEVEL_LIB="$(DEVEL_LIB_DARWIN)" \
SECUREDIR="$(SECUREDIR_DARWIN)" \
LDLIBS_pam="$(LDLIBS_pam_DARWIN)" \
$@_wrapped;; \
*) $(MAKE) $@_wrapped;; \
esac
all_wrapped: pam_wrapped utils_wrapped
pam_wrapped: $(SHARED_PAM)
utils_wrapped: $(BINS)
$(SHARED_LIB): $(OBJS_LIB) $(MAP_LIB)
$(LD_lib) $(LDFLAGS_lib) $(OBJS_LIB) $(LDLIBS_lib) -o $(SHARED_LIB)
$(DEVEL_LIB): $(SHARED_LIB)
$(LN_s) $(SHARED_LIB) $(DEVEL_LIB)
$(SHARED_PAM): $(OBJS_PAM) $(MAP_PAM) $(DEVEL_LIB)
$(LD_lib) $(LDFLAGS_pam) $(OBJS_PAM) $(LDLIBS_pam) -L. -lpasswdqc -o $(SHARED_PAM)
pwqgen: $(OBJS_GEN) $(DEVEL_LIB)
$(LD) $(LDFLAGS) $(OBJS_GEN) -L. -lpasswdqc -o $@
pwqcheck: $(OBJS_CHECK) $(DEVEL_LIB)
$(LD) $(LDFLAGS) $(OBJS_CHECK) -L. -lpasswdqc -o $@
pwqgen.o: pwqgen.c passwdqc.h
$(CC) $(CFLAGS_bin) -c $*.c
pwqcheck.o: pwqcheck.c passwdqc.h
$(CC) $(CFLAGS_bin) -c $*.c
.c.o:
$(CC) $(CFLAGS_lib) -c $*.c
concat.o: concat.h
pam_passwdqc.o: passwdqc.h pam_macros.h
passwdqc_check.o: passwdqc.h wordset_4k.h
passwdqc_load.o: passwdqc.h concat.h
passwdqc_parse.o: passwdqc.h concat.h
passwdqc_random.o: passwdqc.h wordset_4k.h
wordset_4k.o: wordset_4k.h
install_wrapped: install_lib_wrapped install_utils_wrapped install_pam_wrapped
@echo 'Consider running ldconfig(8) to update the dynamic linker cache.'
install_lib_wrapped:
$(MKDIR) $(DESTDIR)$(CONFDIR)
$(INSTALL) -m $(CONFMODE) $(CONFIGS) $(DESTDIR)$(CONFDIR)/
$(MKDIR) $(DESTDIR)$(SHARED_LIBDIR)
$(INSTALL) -m $(SHLIBMODE) $(SHARED_LIB) $(DESTDIR)$(SHARED_LIBDIR)/
$(MKDIR) $(DESTDIR)$(DEVEL_LIBDIR)
$(LN_s) $(SHARED_LIBDIR_REL)/$(SHARED_LIB) \
$(DESTDIR)$(DEVEL_LIBDIR)/$(DEVEL_LIB)
$(MKDIR) $(DESTDIR)$(INCLUDEDIR)
$(INSTALL) -m $(INCMODE) $(HEADER) $(DESTDIR)$(INCLUDEDIR)/
$(MKDIR) $(DESTDIR)$(MANDIR)/man5
$(INSTALL) -m $(MANMODE) $(MAN5) $(DESTDIR)$(MANDIR)/man5/
install_utils_wrapped:
$(MKDIR) $(DESTDIR)$(BINDIR)
$(INSTALL) -m $(BINMODE) $(BINS) $(DESTDIR)$(BINDIR)/
$(MKDIR) $(DESTDIR)$(MANDIR)/man1
$(INSTALL) -m $(MANMODE) $(MAN1) $(DESTDIR)$(MANDIR)/man1/
install_pam_wrapped:
$(MKDIR) $(DESTDIR)$(SECUREDIR)
$(INSTALL) -m $(SHLIBMODE) $(SHARED_PAM) $(DESTDIR)$(SECUREDIR)/
$(MKDIR) $(DESTDIR)$(MANDIR)/man8
$(INSTALL) -m $(MANMODE) $(MAN8) $(DESTDIR)$(MANDIR)/man8/
uninstall_wrapped remove_wrapped: remove_pam_wrapped remove_utils_wrapped remove_lib_wrapped
remove_pam_wrapped:
$(RM) $(DESTDIR)$(MANDIR)/man8/$(MAN8)
$(RM) $(DESTDIR)$(SECUREDIR)/$(SHARED_PAM)
remove_utils_wrapped:
for f in $(MAN1); do $(RM) $(DESTDIR)$(MANDIR)/man1/$$f; done
for f in $(BINS); do $(RM) $(DESTDIR)$(BINDIR)/$$f; done
remove_lib_wrapped:
for f in $(MAN5); do $(RM) $(DESTDIR)$(MANDIR)/man5/$$f; done
for f in $(HEADER); do $(RM) $(DESTDIR)$(INCLUDEDIR)/$$f; done
for f in $(DEVEL_LIB); do $(RM) $(DESTDIR)$(DEVEL_LIBDIR)/$$f; done
for f in $(SHARED_LIB); do $(RM) $(DESTDIR)$(SHARED_LIBDIR)/$$f; done
for f in $(CONFIGS); do $(RM) $(DESTDIR)$(CONFDIR)/$$f; done
clean:
$(RM) $(PROJ) *.o
.PHONY: all all_wrapped clean install install_lib install_pam install_utils \
pam pam_wrapped uninstall remove remove_lib remove_pam remove_utils \
utils utils_wrapped \
install_wrapped install_lib_wrapped install_pam_wrapped \
install_utils_wrapped \
remove_wrapped remove_lib_wrapped remove_pam_wrapped \
remove_utils_wrapped