mirror of
https://github.com/slicer69/doas
synced 2024-07-09 03:55:50 +00:00
version of the doas.conf file. Then allows the user to edit it. The new configuration file is checked for syntax and then, if it passes, is installed on the system. If the syntax check fails the user is asked to fix any errors.
79 lines
2.4 KiB
Makefile
79 lines
2.4 KiB
Makefile
AWK?=awk
|
|
CC?=clang
|
|
YACC?=yacc
|
|
BIN=doas
|
|
PREFIX?=/usr/local
|
|
MANDIR?=$(DESTDIR)$(PREFIX)/man
|
|
SYSCONFDIR?=$(DESTDIR)$(PREFIX)/etc
|
|
OBJECTS=doas.o env.o compat/execvpe.o compat/reallocarray.o y.tab.o
|
|
OPT?=-O2
|
|
# Can set GLOBAL_PATH here to set PATH for target user.
|
|
# TARGETPATH=-DGLOBAL_PATH=\"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:\"
|
|
CFLAGS+=-Wall $(OPT) -DUSE_PAM -DDOAS_CONF=\"${SYSCONFDIR}/doas.conf\" $(TARGETPATH)
|
|
CPPFLAGS+=-include compat/compat.h
|
|
LDFLAGS+=-lpam
|
|
UNAME_S := $(shell uname -s)
|
|
ifeq ($(UNAME_S),Linux)
|
|
LDFLAGS+=-lpam_misc
|
|
CPPFLAGS+=-Icompat
|
|
CFLAGS+=-D_GNU_SOURCE
|
|
COMPAT+=closefrom.o errc.o getprogname.o setprogname.o strlcat.o strlcpy.o strtonum.o verrc.o
|
|
OBJECTS+=$(COMPAT:%.o=compat/%.o)
|
|
endif
|
|
ifeq ($(UNAME_S),FreeBSD)
|
|
CFLAGS+=-DHAVE_LOGIN_CAP_H
|
|
LDFLAGS+=-lutil
|
|
endif
|
|
ifeq ($(UNAME_S),SunOS)
|
|
SAFE_PATH?=/bin:/sbin:/usr/bin:/usr/sbin:$(PREFIX)/bin:$(PREFIX)/sbin
|
|
GLOBAL_PATH?=/bin:/sbin:/usr/bin:/usr/sbin:$(PREFIX)/bin:$(PREFIX)/sbin
|
|
CPPFLAGS+=-Icompat
|
|
CFLAGS+=-DSOLARIS_PAM -DSAFE_PATH=\"$(SAFE_PATH)\" -DGLOBAL_PATH=\"$(GLOBAL_PATH)\"
|
|
COMPAT=errc.o pm_pam_conv.o setresuid.o verrc.o
|
|
OBJECTS+=$(COMPAT:%.o=compat/%.o)
|
|
endif
|
|
ifeq ($(UNAME_S),Darwin)
|
|
CPPFLAGS+=-Icompat
|
|
COMPAT+=bsd-closefrom.o
|
|
OBJECTS+=$(COMPAT:%.o=compat/%.o)
|
|
# On MacOS the default man page path is /usr/local/share/man
|
|
MANDIR=$(DESTDIR)$(PREFIX)/share/man
|
|
endif
|
|
|
|
all: $(OBJECTS) doas.1.final doas.conf.5.final
|
|
$(CC) -o $(BIN) $(OBJECTS) $(LDFLAGS)
|
|
|
|
env.o: doas.h env.c
|
|
|
|
execvpe.o: doas.h execvpe.c
|
|
|
|
doas.o: doas.h doas.c parse.y
|
|
|
|
reallocarray.o: doas.h reallocarray.c
|
|
|
|
y.tab.o: parse.y
|
|
$(YACC) parse.y
|
|
$(CC) $(CPPFLAGS) $(CFLAGS) -c y.tab.c
|
|
|
|
install: $(BIN)
|
|
mkdir -p $(DESTDIR)$(PREFIX)/bin
|
|
cp $(BIN) $(DESTDIR)$(PREFIX)/bin/
|
|
cp vidoas $(DESTDIR)$(PREFIX)/bin/
|
|
chmod 4755 $(DESTDIR)$(PREFIX)/bin/$(BIN)
|
|
mkdir -p $(MANDIR)/man1
|
|
cp doas.1.final $(MANDIR)/man1/doas.1
|
|
mkdir -p $(MANDIR)/man5
|
|
cp doas.conf.5.final $(MANDIR)/man5/doas.conf.5
|
|
|
|
clean:
|
|
rm -f $(BIN) $(OBJECTS) y.tab.c
|
|
rm -f *.final parse.o
|
|
|
|
# Doing it this way allows to change the original files
|
|
# only partially instead of renaming them.
|
|
doas.1.final:
|
|
$(AWK) -v pfx="$(SYSCONFDIR)" '{gsub("@SUBSTSYSCONFDIR@",pfx); print $$0}' < doas.1 > doas.1.final
|
|
|
|
doas.conf.5.final:
|
|
$(AWK) -v pfx="$(SYSCONFDIR)" '{gsub("@SUBSTSYSCONFDIR@",pfx); print $$0}' < doas.conf.5 > doas.conf.5.final
|