guido+pwm@0: # guido+pwm@6: # Copyright (C) 2017 Guido Berhoerster guido+pwm@0: # guido+pwm@0: # Permission is hereby granted, free of charge, to any person obtaining guido+pwm@0: # a copy of this software and associated documentation files (the guido+pwm@0: # "Software"), to deal in the Software without restriction, including guido+pwm@0: # without limitation the rights to use, copy, modify, merge, publish, guido+pwm@0: # distribute, sublicense, and/or sell copies of the Software, and to guido+pwm@0: # permit persons to whom the Software is furnished to do so, subject to guido+pwm@0: # the following conditions: guido+pwm@0: # guido+pwm@0: # The above copyright notice and this permission notice shall be included guido+pwm@0: # in all copies or substantial portions of the Software. guido+pwm@0: # guido+pwm@0: # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, guido+pwm@0: # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF guido+pwm@0: # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. guido+pwm@0: # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY guido+pwm@0: # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, guido+pwm@0: # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE guido+pwm@0: # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. guido+pwm@0: # guido+pwm@0: guido+pwm@0: PACKAGE = pwm guido+pwm@0: VERSION = 1 guido+pwm@0: DISTNAME := $(PACKAGE)-$(VERSION) guido+pwm@0: guido+pwm@0: # gcc, clang, icc, Sun/Solaris Studio guido+pwm@0: CC := $(CC) -std=c99 guido+pwm@0: COMPILE.c = $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(XCPPFLAGS) $(TARGET_ARCH) -c guido+pwm@0: # gcc, clang, icc guido+pwm@0: MAKEDEPEND.c = $(CC) -MM $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(XCPPFLAGS) guido+pwm@0: # Sun/Solaris Studio guido+pwm@0: #MAKEDEPEND.c = $(CC) -xM1 $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(XCPPFLAGS) guido+pwm@0: # X makedepend guido+pwm@0: #MAKEDEPEND.c = makedepend -f- -Y -- $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(XCPPFLAGS) -- guido+pwm@0: LINK.c = $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(XCPPFLAGS) $(LDFLAGS) $(XLDFLAGS) $(TARGET_ARCH) guido+pwm@0: LINK.o = $(CC) $(LDFLAGS) $(XLDFLAGS) $(TARGET_ARCH) guido+pwm@24: AR := ar guido+pwm@24: RANLIB := ranlib guido+pwm@0: CP := cp guido+pwm@0: INSTALL := install guido+pwm@0: INSTALL.exec := $(INSTALL) -D -m 0755 guido+pwm@0: INSTALL.data := $(INSTALL) -D -m 0644 guido+pwm@0: INSTALL.link := $(CP) -f -P guido+pwm@0: PAX := pax guido+pwm@0: GZIP := gzip guido+pwm@0: SED := sed guido+pwm@1: XSLTPROC := xsltproc guido+pwm@1: DOCBOOK5_MANPAGES_STYLESHEET = http://docbook.sourceforge.net/release/xsl-ns/current/manpages/docbook.xsl guido+pwm@1: DOCBOOK5_MANPAGES_FLAGS = --stringparam man.authors.section.enabled 0 \ guido+pwm@1: --stringparam man.copyright.section.enabled 0 guido+pwm@1: guido+pwm@1: define generate-manpage-rule = guido+pwm@1: $(addsuffix .%,$(basename $1)): $(addsuffix .%.xml,$(basename $(firstword $1))) docbook-update-source-data.xsl guido+pwm@1: $$(XSLTPROC) \ guido+pwm@1: --xinclude \ guido+pwm@1: --stringparam package $$(PACKAGE) \ guido+pwm@1: --stringparam version $$(VERSION) \ guido+pwm@1: docbook-update-source-data.xsl $$< | \ guido+pwm@1: $$(XSLTPROC) \ guido+pwm@1: --xinclude \ guido+pwm@1: --output $(firstword $1) \ guido+pwm@1: $$(DOCBOOK5_MANPAGES_FLAGS) \ guido+pwm@1: $$(DOCBOOK5_MANPAGES_STYLESHEET) \ guido+pwm@1: - guido+pwm@1: for alias in $(wordlist 2,$(words $1),$1); do \ guido+pwm@1: ln -sf $(notdir $(firstword $1)) $$$$alias; \ guido+pwm@1: done guido+pwm@1: endef guido+pwm@0: guido+pwm@0: DESTDIR ?= guido+pwm@0: prefix ?= /usr/local guido+pwm@0: bindir ?= $(prefix)/bin guido+pwm@1: datadir ?= $(prefix)/share guido+pwm@1: mandir ?= $(datadir)/man guido+pwm@0: guido+pwm@0: OS_NAME := $(shell uname -s) guido+pwm@0: OS_RELEASE := $(shell uname -r) guido+pwm@0: guido+pwm@0: ifeq ($(OS_NAME),Linux) guido+pwm@12: HAVE_ARC4RANDOM ?= 0 guido+pwm@0: HAVE_ASPRINTF ?= 1 guido+pwm@19: HAVE_CLOSEFROM ?= 0 guido+pwm@0: HAVE_ERR_H ?= 1 guido+pwm@26: HAVE_GETLINE ?= 0 guido+pwm@12: HAVE_GETRANDOM ?= 0 guido+pwm@17: HAVE_SYS_QUEUE_H ?= 0 guido+pwm@0: HAVE_SETPROGNAME ?= 0 guido+pwm@0: HAVE_SYS_TREE_H ?= 0 guido+pwm@0: else ifneq ($(findstring $(OS_NAME),FreeBSD DragonFly),) guido+pwm@12: HAVE_ARC4RANDOM ?= 1 guido+pwm@0: HAVE_ASPRINTF ?= 1 guido+pwm@19: HAVE_CLOSEFROM ?= 1 guido+pwm@0: HAVE_ERR_H ?= 1 guido+pwm@26: HAVE_GETLINE ?= 1 guido+pwm@12: HAVE_GETRANDOM ?= 0 guido+pwm@17: HAVE_SYS_QUEUE_H ?= 1 guido+pwm@0: HAVE_SETPROGNAME ?= 1 guido+pwm@0: HAVE_SYS_TREE_H ?= 1 guido+pwm@0: else ifeq ($(OS_NAME),NetBSD) guido+pwm@12: HAVE_ARC4RANDOM ?= 1 guido+pwm@0: HAVE_ASPRINTF ?= 1 guido+pwm@19: HAVE_CLOSEFROM ?= 1 guido+pwm@0: HAVE_ERR_H ?= 1 guido+pwm@26: HAVE_GETLINE ?= 1 guido+pwm@12: HAVE_GETRANDOM ?= 0 guido+pwm@17: HAVE_SYS_QUEUE_H ?= 1 guido+pwm@0: HAVE_SYS_TREE_H ?= 1 guido+pwm@0: HAVE_SETPROGNAME ?= 1 guido+pwm@0: else ifeq ($(OS_NAME),OpenBSD) guido+pwm@12: HAVE_ARC4RANDOM ?= 1 guido+pwm@0: HAVE_ASPRINTF ?= 1 guido+pwm@19: HAVE_CLOSEFROM ?= 1 guido+pwm@0: HAVE_ERR_H ?= 1 guido+pwm@26: HAVE_GETLINE ?= 1 guido+pwm@12: HAVE_GETRANDOM ?= 0 guido+pwm@17: HAVE_SYS_QUEUE_H ?= 1 guido+pwm@0: HAVE_SYS_TREE_H ?= 1 guido+pwm@0: HAVE_SETPROGNAME ?= 1 guido+pwm@0: else ifeq ($(OS_NAME),SunOS) guido+pwm@0: ifeq ($(OS_RELEASE),5.10) guido+pwm@12: HAVE_ARC4RANDOM ?= 0 guido+pwm@0: HAVE_ASPRINTF ?= 0 guido+pwm@0: HAVE_ERR_H ?= 0 guido+pwm@26: HAVE_GETLINE ?= 0 guido+pwm@12: HAVE_GETRANDOM ?= 0 guido+pwm@0: else guido+pwm@12: HAVE_ARC4RANDOM ?= 1 guido+pwm@0: HAVE_ASPRINTF ?= 1 guido+pwm@0: HAVE_ERR_H ?= 1 guido+pwm@26: HAVE_GETLINE ?= 1 guido+pwm@12: HAVE_GETRANDOM ?= 1 guido+pwm@0: endif guido+pwm@19: HAVE_CLOSEFROM ?= 1 guido+pwm@17: HAVE_SYS_QUEUE_H ?= 0 guido+pwm@0: HAVE_SYS_TREE_H ?= 0 guido+pwm@0: HAVE_SETPROGNAME ?= 0 guido+pwm@0: else guido+pwm@12: HAVE_ARC4RANDOM ?= 0 guido+pwm@0: HAVE_ASPRINTF ?= 0 guido+pwm@19: HAVE_CLOSEFROM ?= 0 guido+pwm@0: HAVE_ERR_H ?= 0 guido+pwm@26: HAVE_GETLINE ?= 0 guido+pwm@12: HAVE_GETRANDOM ?= 0 guido+pwm@17: HAVE_SYS_QUEUE_H ?= 0 guido+pwm@0: HAVE_SETPROGNAME ?= 0 guido+pwm@0: HAVE_SYS_TREE_H ?= 0 guido+pwm@0: endif guido+pwm@0: guido+pwm@24: LIBCOMPAT_OBJS = compat/compat.o guido+pwm@24: LIBCOMPAT_LIB = compat/libcompat.a guido+pwm@24: LIBCOMPAT_LIB_MEMBERS = $(LIBCOMPAT_OBJS:%.o=$(LIBCOMPAT_LIB)(%.o)) guido+pwm@24: guido+pwm@25: LIBPWM_OBJS = util.o guido+pwm@25: LIBPWM_LIB = libpwm.a guido+pwm@25: LIBPWM_LIB_MEMBERS = $(LIBPWM_OBJS:%.o=$(LIBPWM_LIB)(%.o)) guido+pwm@25: guido+pwm@26: PWM_CLIP_OBJS = pwm-clip.o guido+pwm@26: PWM_CLIP_BIN = pwm-clip guido+pwm@26: PWM_CLIP_MAN1 = pwm-clip.1 guido+pwm@26: guido+pwm@24: PWM_OBJS = cmd.o \ guido+pwm@24: io.o \ guido+pwm@24: pager.o \ guido+pwm@24: proc.o \ guido+pwm@24: pw.o \ guido+pwm@24: pwfile.o \ guido+pwm@24: pwm.o \ guido+pwm@25: tok.o guido+pwm@24: PWM_BIN = $(PACKAGE) guido+pwm@26: PWM_MAN1 = pwm.1 guido+pwm@24: guido+pwm@26: OBJS = $(LIBCOMPAT_OBJS) $(LIBPWM_OBJS) $(PWM_CLIP_OBJS) $(PWM_OBJS) guido+pwm@0: guido+pwm@26: MANPAGES = $(PWM_MAN1) $(PWM_CLIP_MAN1) guido+pwm@1: guido+pwm@0: .DEFAULT_TARGET = all guido+pwm@0: guido+pwm@0: .PHONY: all clean clobber dist install guido+pwm@0: guido+pwm@26: all: $(PWM_BIN) $(PWM_CLIP_BIN) $(MANPAGES) guido+pwm@0: guido+pwm@24: $(PWM_BIN): XCPPFLAGS += -DPACKAGE=\"$(PACKAGE)\" \ guido+pwm@24: -DVERSION=\"$(VERSION)\" guido+pwm@24: $(PWM_BIN): LDLIBS = -ltecla -lcurses -lpws -lnettle guido+pwm@26: $(PWM_CLIP_BIN): XCPPFLAGS += -Icompat/include guido+pwm@26: $(PWM_CLIP_BIN): LDLIBS = -lnettle guido+pwm@8: ifeq ($(HAVE_ASPRINTF),1) guido+pwm@24: XCPPFLAGS += -DHAVE_ASPRINTF guido+pwm@8: else guido+pwm@24: LIBCOMPAT_OBJS += compat/asprintf.o guido+pwm@8: endif guido+pwm@12: ifeq ($(HAVE_ARC4RANDOM),1) guido+pwm@24: XCPPFLAGS += -DHAVE_ARC4RANDOM guido+pwm@25: LIBPWM_OBJS += rand-arc4random.o guido+pwm@12: else ifeq ($(HAVE_GETRANDOM),1) guido+pwm@24: XCPPFLAGS += -DHAVE_GETRANDOM guido+pwm@25: LIBPWM_OBJS += rand-getrandom.o guido+pwm@12: else guido+pwm@25: LIBPWM_OBJS += rand-dev-random.o guido+pwm@12: endif guido+pwm@19: ifeq ($(HAVE_CLOSEFROM),1) guido+pwm@24: XCPPFLAGS += -DHAVE_CLOSEFROM guido+pwm@19: else guido+pwm@24: LIBCOMPAT_OBJS += compat/closefrom.o guido+pwm@19: endif guido+pwm@0: ifeq ($(HAVE_ERR_H),1) guido+pwm@24: XCPPFLAGS += -DHAVE_ERR_H guido+pwm@0: else guido+pwm@24: LIBCOMPAT_OBJS += compat/err.o guido+pwm@0: endif guido+pwm@26: ifeq ($(HAVE_GETLINE),1) guido+pwm@26: XCPPFLAGS += -DHAVE_GETLINE guido+pwm@26: else guido+pwm@26: LIBCOMPAT_OBJS += compat/getline.o guido+pwm@26: endif guido+pwm@0: ifeq ($(HAVE_SETPROGNAME),1) guido+pwm@24: XCPPFLAGS += -DHAVE_SETPROGNAME guido+pwm@0: else guido+pwm@24: LIBCOMPAT_OBJS += compat/setprogname.o guido+pwm@0: endif guido+pwm@0: ifeq ($(HAVE_SYS_TREE_H),1) guido+pwm@24: XCPPFLAGS += -DHAVE_SYS_TREE_H guido+pwm@0: endif guido+pwm@0: ifneq ($(findstring $(OS_NAME),FreeBSD DragonFly OpenBSD),) guido+pwm@24: XCPPFLAGS += -I/usr/local/include guido+pwm@24: XLDFLAGS += -L/usr/local/lib guido+pwm@0: else ifeq ($(OS_NAME),NetBSD) guido+pwm@24: XCPPFLAGS += -I/usr/pkg/include guido+pwm@24: XLDFLAGS += -L/usr/pkg/lib guido+pwm@0: endif guido+pwm@0: ifeq ($(findstring $(OS_NAME),FreeBSD DragonFly NetBSD OpenBSD),) guido+pwm@24: XCPPFLAGS += -D_XOPEN_SOURCE=600 guido+pwm@0: endif guido+pwm@0: ifeq ($(OS_NAME),SunOS) guido+pwm@24: XCPPFLAGS += -I/usr/xpg4/include -D__EXTENSIONS__ guido+pwm@24: XLDFLAGS += -L/usr/xpg4/lib -R/usr/xpg4/lib guido+pwm@0: endif guido+pwm@0: guido+pwm@24: $(LIBCOMPAT_LIB): $(LIBCOMPAT_LIB_MEMBERS) guido+pwm@24: guido+pwm@25: $(LIBPWM_LIB): $(LIBPWM_LIB_MEMBERS) guido+pwm@25: guido+pwm@26: $(PWM_CLIP_BIN): $(PWM_CLIP_OBJS) $(LIBPWM_LIB) $(LIBCOMPAT_LIB) guido+pwm@26: $(LINK.o) $^ $(LDLIBS) -o $@ guido+pwm@26: guido+pwm@26: $(eval $(call generate-manpage-rule,$(PWM_CLIP_MAN1))) guido+pwm@26: guido+pwm@25: $(PWM_BIN): $(PWM_OBJS) $(LIBPWM_LIB) $(LIBCOMPAT_LIB) guido+pwm@0: $(LINK.o) $^ $(LDLIBS) -o $@ guido+pwm@0: guido+pwm@26: $(eval $(call generate-manpage-rule,$(PWM_MAN1))) guido+pwm@1: guido+pwm@0: %.o: %.c guido+pwm@0: $(MAKEDEPEND.c) $< | $(SED) -f deps.sed >$*.d guido+pwm@0: $(COMPILE.c) -o $@ $< guido+pwm@0: guido+pwm@24: (%): % guido+pwm@24: $(AR) $(ARFLAGS) $@ $< guido+pwm@24: $(RANLIB) $@ guido+pwm@24: guido+pwm@6: install: all guido+pwm@24: $(INSTALL.exec) $(PWM_BIN) "$(DESTDIR)$(bindir)/$(PWM_BIN)" guido+pwm@26: $(INSTALL.exec) $(PWM_CLIP_BIN) "$(DESTDIR)$(bindir)/$(PWM_CLIP_BIN)" guido+pwm@1: for manpage in $(MANPAGES); do \ guido+pwm@1: if [ -L $${manpage} ]; then \ guido+pwm@1: $(INSTALL.link) $${manpage} \ guido+pwm@1: "$(DESTDIR)$(mandir)/man$${manpage##*.}/$${manpage##*/}"; \ guido+pwm@1: else \ guido+pwm@1: $(INSTALL.data) $${manpage} \ guido+pwm@1: "$(DESTDIR)$(mandir)/man$${manpage##*.}/$${manpage##*/}"; \ guido+pwm@1: fi \ guido+pwm@1: done guido+pwm@0: guido+pwm@0: clean: guido+pwm@26: rm -f $(LIBCOMPAT_LIB) $(LIBPWM_LIB) $(PWM_CLIP_BIN) $(PWM_BIN) \ guido+pwm@26: $(OBJS) $(MANPAGES) guido+pwm@0: guido+pwm@0: clobber: clean guido+pwm@0: rm -f $(patsubst %.o,%.d,$(OBJS)) guido+pwm@0: guido+pwm@0: dist: clobber guido+pwm@0: $(PAX) -w -x ustar -s ',.*/\..*,,' -s ',./[^/]*\.tar\.gz,,' \ guido+pwm@0: -s ',^\.$$,,' -s ',\./,$(DISTNAME)/,' . | \ guido+pwm@0: $(GZIP) > $(DISTNAME).tar.gz guido+pwm@0: guido+pwm@0: -include $(patsubst %.o,%.d,$(OBJS))