Include -Wunreachable-code when building.
[sysvinit.git] / src / Makefile
index 0a9075e5029825036bcbce18524222fde33d0af9..b553ff078c222b7c5e2248eef8c37bfdad4f1be6 100644 (file)
 # 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
@@ -127,21 +175,19 @@ clobber:  cleanobjs
 distclean:     clobber
 
 install:
-               $(INSTALL_EXEC) -d $(ROOT)/bin/ $(ROOT)/sbin/
-               $(INSTALL_EXEC) -d $(ROOT)/usr/bin/
+               $(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
@@ -149,19 +195,22 @@ install:
                if [ ! -f $(ROOT)/usr/bin/lastb ]; then \
                        ln -sf last $(ROOT)/usr/bin/lastb; \
                fi
-               $(INSTALL_EXEC) -d $(ROOT)/usr/include/
+               $(INSTALL_DIR) $(ROOT)/usr/include/
                $(INSTALL_DATA) initreq.h $(ROOT)/usr/include/
-               $(INSTALL_EXEC) -d $(ROOT)$(MANDIR)/man1/
-               $(INSTALL_EXEC) -d $(ROOT)$(MANDIR)/man5/
-               $(INSTALL_EXEC) -d $(ROOT)$(MANDIR)/man8/
-               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),)
                #