# Version: @(#)Makefile 2.85-13 23-Mar-2004 miquels@cistron.nl
#
-CC = gcc
-CFLAGS = -ansi -W -Wall -O2 -fomit-frame-pointer -D_GNU_SOURCE
-LDFLAGS = -s
+CPPFLAGS =
+CFLAGS ?= -ansi -O2 -fomit-frame-pointer -fstack-protector
+override CFLAGS += -W -Wall -Wunreachable-code -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -D_XOPEN_SOURCE -D_GNU_SOURCE
STATIC =
+MANDB := s@^\('\\\\\"\)[^\*-]*-\*- coding: [^[:blank:]]\+ -\*-@\1@
+
+#
+# Leave empty if the mountpoint(1) command from util-linux 2.20
+# and above should be used, otherwise set it to yes.
+#
+MNTPOINT=
# For some known distributions we do not build all programs, otherwise we do.
BIN =
-SBIN = init halt shutdown runlevel killall5
+SBIN = init halt shutdown runlevel killall5 fstab-decode
USRBIN = last mesg
MAN1 = last.1 lastb.1 mesg.1
MAN5 = initscript.5 inittab.5
MAN8 = halt.8 init.8 killall5.8 pidof.8 poweroff.8 reboot.8 runlevel.8
-MAN8 += shutdown.8 telinit.8
+MAN8 += shutdown.8 telinit.8 fstab-decode.8
ifeq ($(DISTRO),)
-BIN += mountpoint
SBIN += sulogin bootlogd
USRBIN += utmpdump wall
-MAN1 += mountpoint.1 wall.1
+MAN1 += utmpdump.1 wall.1
MAN8 += sulogin.8 bootlogd.8
endif
ifeq ($(DISTRO),Debian)
-BIN += mountpoint
+CPPFLAGS+= -DACCTON_OFF
SBIN += sulogin bootlogd
-MAN1 += mountpoint.1
MAN8 += sulogin.8 bootlogd.8
+MANDB :=
endif
ifeq ($(DISTRO),Owl)
USRBIN += wall
MAN1 += wall.1
+MANDB :=
endif
+ifeq ($(DISTRO),SuSE)
+CPPFLAGS+= -DUSE_SYSFS -DSANE_TIO -DSIGINT_ONLYONCE -DUSE_ONELINE
+SBIN += sulogin
+USRBIN += utmpdump
+MAN1 += utmpdump.1
+MAN8 += sulogin.8
+MANDB :=
+endif
+
+ifeq ($(MNTPOINT),yes)
+BIN += mountpoint
+MAN1 += mountpoint.1
+endif
+
+ID = $(shell id -u)
BIN_OWNER = root
BIN_GROUP = root
BIN_COMBO = $(BIN_OWNER):$(BIN_GROUP)
-STRIP = strip -s -R .comment
-INSTALL_EXEC = install -o $(BIN_OWNER) -g $(BIN_GROUP) -m 755
-INSTALL_DATA = install -o $(BIN_OWNER) -g $(BIN_GROUP) -m 644
+ifeq ($(ID),0)
+ INSTALL_EXEC = install -o $(BIN_OWNER) -g $(BIN_GROUP) -m 755
+ INSTALL_DATA = install -o $(BIN_OWNER) -g $(BIN_GROUP) -m 644
+else
+ INSTALL_EXEC = install -m 755
+ INSTALL_DATA = install -m 644
+endif
+INSTALL_DIR = install -m 755 -d
MANDIR = /usr/share/man
ifeq ($(WITH_SELINUX),yes)
- SELINUX_DEF=-DWITH_SELINUX
- INIT_SELIBS=-lsepol -lselinux
- SULOGIN_SELIBS=-lselinux
+ SELINUX_DEF = -DWITH_SELINUX
+ INITLIBS += -lsepol -lselinux
+ SULOGINLIBS = -lselinux
else
- SELINUX_DEF=
- INIT_SELIBS=
- SULOGIN_SELIBS=
+ SELINUX_DEF =
+ INITLIBS =
+ SULOGINLIBS =
endif
-
-
# Additional libs for GNU libc.
-ifneq ($(wildcard /usr/lib/libcrypt.a),)
-LCRYPT = -lcrypt
+ifneq ($(wildcard /usr/lib*/libcrypt.*),)
+ SULOGINLIBS += -lcrypt
+endif
+
+# Additional libs for GNU libc / multiarch on Debian based systems.
+ifneq ($(wildcard /usr/lib/*/libcrypt.*),)
+ SULOGINLIBS += -lcrypt
endif
all: $(BIN) $(SBIN) $(USRBIN)
+#%: %.o
+# $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS)
+#%.o: %.c
+# $(CC) $(CFLAGS) $(CPPFLAGS) -c $^ -o $@
+
+init: LDLIBS += $(INITLIBS) $(STATIC)
init: init.o init_utmp.o
- $(CC) $(LDFLAGS) $(STATIC) -o $@ init.o init_utmp.o $(INIT_SELIBS)
-halt: halt.o ifdown.o hddown.o utmp.o reboot.h
- $(CC) $(LDFLAGS) -o $@ halt.o ifdown.o hddown.o utmp.o
+halt: LDLIBS += $(STATIC)
+halt: halt.o ifdown.o hddown.o utmp.o
-last: last.o oldutmp.h
- $(CC) $(LDFLAGS) -o $@ last.o
+last: LDLIBS += $(STATIC)
+last: last.o
+mesg: LDLIBS += $(STATIC)
mesg: mesg.o
- $(CC) $(LDFLAGS) -o $@ mesg.o
+mountpoint: LDLIBS += $(STATIC)
mountpoint: mountpoint.o
- $(CC) $(LDFLAGS) -o $@ mountpoint.o
+utmpdump: LDLIBS += $(STATIC)
utmpdump: utmpdump.o
- $(CC) $(LDFLAGS) -o $@ utmpdump.o
+runlevel: LDLIBS += $(STATIC)
runlevel: runlevel.o
- $(CC) $(LDFLAGS) -o $@ runlevel.o
-sulogin: sulogin.o
- $(CC) $(LDFLAGS) $(STATIC) $(SELINUX_DEF) -o $@ $^ $(LCRYPT) $(SULOGIN_SELIBS)
+sulogin: LDLIBS += $(SULOGINLIBS) $(STATIC)
+sulogin: sulogin.o consoles.o
+wall: LDLIBS += $(STATIC)
wall: dowall.o wall.o
- $(CC) $(LDFLAGS) -o $@ dowall.o wall.o
-shutdown: dowall.o shutdown.o utmp.o reboot.h
- $(CC) $(LDFLAGS) -o $@ dowall.o shutdown.o utmp.o
+shutdown: LDLIBS += $(STATIC)
+shutdown: dowall.o shutdown.o utmp.o
+bootlogd: LDLIBS += -lutil $(STATIC)
bootlogd: bootlogd.o
- $(CC) $(LDFLAGS) -o $@ bootlogd.o -lutil
+fstab-decode: LDLIBS += $(STATIC)
+fstab-decode: fstab-decode.o
+
+sulogin.o: CPPFLAGS += $(SELINUX_DEF)
sulogin.o: sulogin.c
- $(CC) -c $(CFLAGS) $(SELINUX_DEF) sulogin.c
-init.o: init.c init.h set.h reboot.h initreq.h
- $(CC) -c $(CFLAGS) $(SELINUX_DEF) init.c
+init.o: CPPFLAGS += $(SELINUX_DEF)
+init.o: init.c init.h initreq.h paths.h reboot.h set.h
+
+utmp.o:
+
+init_utmp.o: CPPFLAGS += -DINIT_MAIN
+init_utmp.o: utmp.c init.h initreq.h paths.h
+ $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
+
+utmpdump.o: utmpdump.c oldutmp.h
+
+shutdown.o: shutdown.c paths.h reboot.h initreq.h init.h
+
+halt.o: halt.c reboot.h
-utmp.o: utmp.c init.h
- $(CC) -c $(CFLAGS) utmp.c
+last.o: last.c oldutmp.h
-init_utmp.o: utmp.c init.h
- $(CC) -c $(CFLAGS) -DINIT_MAIN utmp.c -o init_utmp.o
+consoles.o: consoles.c consoles.h
cleanobjs:
rm -f *.o *.bak
distclean: clobber
install:
+ $(INSTALL_DIR) $(ROOT)/bin/ $(ROOT)/sbin/
+ $(INSTALL_DIR) $(ROOT)/usr/bin/
for i in $(BIN); do \
- $(STRIP) $$i ; \
$(INSTALL_EXEC) $$i $(ROOT)/bin/ ; \
done
for i in $(SBIN); do \
- $(STRIP) $$i ; \
$(INSTALL_EXEC) $$i $(ROOT)/sbin/ ; \
done
for i in $(USRBIN); do \
- $(STRIP) $$i ; \
$(INSTALL_EXEC) $$i $(ROOT)/usr/bin/ ; \
done
- # $(INSTALL_EXEC) etc/initscript.sample $(ROOT)/etc/
+ # $(INSTALL_DIR) $(ROOT)/etc/
+ # $(INSTALL_EXEC) initscript.sample $(ROOT)/etc/
ln -sf halt $(ROOT)/sbin/reboot
ln -sf halt $(ROOT)/sbin/poweroff
ln -sf init $(ROOT)/sbin/telinit
if [ ! -f $(ROOT)/usr/bin/lastb ]; then \
ln -sf last $(ROOT)/usr/bin/lastb; \
fi
+ $(INSTALL_DIR) $(ROOT)/usr/include/
$(INSTALL_DATA) initreq.h $(ROOT)/usr/include/
- for i in $(MAN1); do \
- $(INSTALL_DATA) ../man/$$i $(ROOT)$(MANDIR)/man1/; \
+ $(INSTALL_DIR) $(ROOT)$(MANDIR)/man1/
+ $(INSTALL_DIR) $(ROOT)$(MANDIR)/man5/
+ $(INSTALL_DIR) $(ROOT)$(MANDIR)/man8/
+ for man in $(MAN1); do \
+ $(INSTALL_DATA) ../man/$$man $(ROOT)$(MANDIR)/man1/; \
+ sed -i "1{ $(MANDB); }" $(ROOT)$(MANDIR)/man1/$$man ; \
done
- for i in $(MAN5); do \
- $(INSTALL_DATA) ../man/$$i $(ROOT)$(MANDIR)/man5/; \
+ for man in $(MAN5); do \
+ $(INSTALL_DATA) ../man/$$man $(ROOT)$(MANDIR)/man5/; \
+ sed -i "1{ $(MANDB); }" $(ROOT)$(MANDIR)/man5/$$man ; \
done
- for i in $(MAN8); do \
- $(INSTALL_DATA) ../man/$$i $(ROOT)$(MANDIR)/man8/; \
+ for man in $(MAN8); do \
+ $(INSTALL_DATA) ../man/$$man $(ROOT)$(MANDIR)/man8/; \
+ sed -i "1{ $(MANDB); }" $(ROOT)$(MANDIR)/man8/$$man ; \
done
ifeq ($(ROOT),)
#