* ditto
[sysvinit.git] / src / Makefile
1 #
2 # Makefile Makefile for the systemV init suite.
3 # Targets: all compiles everything
4 # install installs the binaries (not the scripts)
5 # clean cleans up object files
6 # clobber really cleans up
7 #
8 # Version: @(#)Makefile 2.85-13 23-Mar-2004 miquels@cistron.nl
9 #
10
11 CPPFLAGS =
12 CFLAGS ?= -ansi -O2 -fomit-frame-pointer
13 override CFLAGS += -W -Wall -D_GNU_SOURCE
14 STATIC =
15
16 # For some known distributions we do not build all programs, otherwise we do.
17 BIN =
18 SBIN = init halt shutdown runlevel killall5 fstab-decode
19 USRBIN = last mesg
20
21 MAN1 = last.1 lastb.1 mesg.1
22 MAN5 = initscript.5 inittab.5
23 MAN8 = halt.8 init.8 killall5.8 pidof.8 poweroff.8 reboot.8 runlevel.8
24 MAN8 += shutdown.8 telinit.8 fstab-decode.8
25
26 ifeq ($(DISTRO),)
27 BIN += mountpoint
28 SBIN += sulogin bootlogd
29 USRBIN += utmpdump wall
30 MAN1 += utmpdump.1 mountpoint.1 wall.1
31 MAN8 += sulogin.8 bootlogd.8
32 endif
33
34 ifeq ($(DISTRO),Debian)
35 CPPFLAGS+= -DACCTON_OFF
36 BIN += mountpoint
37 SBIN += sulogin bootlogd
38 MAN1 += mountpoint.1
39 MAN8 += sulogin.8 bootlogd.8
40 endif
41
42 ifeq ($(DISTRO),Owl)
43 USRBIN += wall
44 MAN1 += wall.1
45 endif
46
47 ifeq ($(DISTRO),SuSE)
48 CPPFLAGS+= -DUSE_SYSFS -DSANE_TIO -DSIGINT_ONLYONCE -DUSE_ONELINE
49 BIN += mountpoint
50 SBIN += sulogin
51 USRBIN += utmpdump
52 MAN1 += utmpdump.1 mountpoint.1
53 MAN8 += sulogin.8
54 endif
55
56 ID = $(shell id -u)
57 BIN_OWNER = root
58 BIN_GROUP = root
59 BIN_COMBO = $(BIN_OWNER):$(BIN_GROUP)
60 STRIP = strip -s -R .comment
61 ifeq ($(ID),0)
62 INSTALL_EXEC = install -o $(BIN_OWNER) -g $(BIN_GROUP) -m 755
63 INSTALL_DATA = install -o $(BIN_OWNER) -g $(BIN_GROUP) -m 644
64 else
65 INSTALL_EXEC = install -m 755
66 INSTALL_DATA = install -m 644
67 endif
68 INSTALL_DIR = install -m 755 -d
69 MANDIR = /usr/share/man
70
71 ifeq ($(WITH_SELINUX),yes)
72 SELINUX_DEF = -DWITH_SELINUX
73 INITLIBS += -lsepol -lselinux
74 SULOGINLIBS = -lselinux
75 else
76 SELINUX_DEF =
77 INITLIBS =
78 SULOGINLIBS =
79 endif
80
81 # Additional libs for GNU libc.
82 ifneq ($(wildcard /usr/lib*/libcrypt.a),)
83 SULOGINLIBS += -lcrypt
84 endif
85
86 all: $(BIN) $(SBIN) $(USRBIN)
87
88 #%: %.o
89 # $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS)
90 #%.o: %.c
91 # $(CC) $(CFLAGS) $(CPPFLAGS) -c $^ -o $@
92
93 init: LDLIBS += $(INITLIBS) $(STATIC)
94 init: init.o init_utmp.o
95
96 halt: halt.o ifdown.o hddown.o utmp.o reboot.h
97
98 last: last.o oldutmp.h
99
100 mesg: mesg.o
101
102 mountpoint: mountpoint.o
103
104 utmpdump: utmpdump.o
105
106 runlevel: runlevel.o
107
108 sulogin: LDLIBS += $(SULOGINLIBS) $(STATIC)
109 sulogin: sulogin.o
110
111 wall: dowall.o wall.o
112
113 shutdown: dowall.o shutdown.o utmp.o reboot.h
114
115 bootlogd: LDLIBS += -lutil
116 bootlogd: bootlogd.o
117
118 sulogin.o: CPPFLAGS += $(SELINUX_DEF)
119 sulogin.o: sulogin.c
120
121 init.o: CPPFLAGS += $(SELINUX_DEF)
122 init.o: init.c init.h set.h reboot.h initreq.h
123
124 utmp.o: utmp.c init.h
125
126 init_utmp.o: CPPFLAGS += -DINIT_MAIN
127 init_utmp.o: utmp.c init.h
128 $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
129
130 cleanobjs:
131 rm -f *.o *.bak
132
133 clean: cleanobjs
134 @echo Type \"make clobber\" to really clean up.
135
136 clobber: cleanobjs
137 rm -f $(BIN) $(SBIN) $(USRBIN)
138
139 distclean: clobber
140
141 install:
142 $(INSTALL_DIR) $(ROOT)/bin/ $(ROOT)/sbin/
143 $(INSTALL_DIR) $(ROOT)/usr/bin/
144 for i in $(BIN); do \
145 $(STRIP) $$i ; \
146 $(INSTALL_EXEC) $$i $(ROOT)/bin/ ; \
147 done
148 for i in $(SBIN); do \
149 $(STRIP) $$i ; \
150 $(INSTALL_EXEC) $$i $(ROOT)/sbin/ ; \
151 done
152 for i in $(USRBIN); do \
153 $(STRIP) $$i ; \
154 $(INSTALL_EXEC) $$i $(ROOT)/usr/bin/ ; \
155 done
156 # $(INSTALL_DIR) $(ROOT)/etc/
157 # $(INSTALL_EXEC) initscript.sample $(ROOT)/etc/
158 ln -sf halt $(ROOT)/sbin/reboot
159 ln -sf halt $(ROOT)/sbin/poweroff
160 ln -sf init $(ROOT)/sbin/telinit
161 ln -sf /sbin/killall5 $(ROOT)/bin/pidof
162 if [ ! -f $(ROOT)/usr/bin/lastb ]; then \
163 ln -sf last $(ROOT)/usr/bin/lastb; \
164 fi
165 $(INSTALL_DIR) $(ROOT)/usr/include/
166 $(INSTALL_DATA) initreq.h $(ROOT)/usr/include/
167 $(INSTALL_DIR) $(ROOT)$(MANDIR)/man1/
168 $(INSTALL_DIR) $(ROOT)$(MANDIR)/man5/
169 $(INSTALL_DIR) $(ROOT)$(MANDIR)/man8/
170 for i in $(MAN1); do \
171 $(INSTALL_DATA) ../man/$$i $(ROOT)$(MANDIR)/man1/; \
172 done
173 for i in $(MAN5); do \
174 $(INSTALL_DATA) ../man/$$i $(ROOT)$(MANDIR)/man5/; \
175 done
176 for i in $(MAN8); do \
177 $(INSTALL_DATA) ../man/$$i $(ROOT)$(MANDIR)/man8/; \
178 done
179 ifeq ($(ROOT),)
180 #
181 # This part is skipped on Debian systems, the
182 # debian.preinst script takes care of it.
183 @if [ ! -p /dev/initctl ]; then \
184 echo "Creating /dev/initctl"; \
185 rm -f /dev/initctl; \
186 mknod -m 600 /dev/initctl p; fi
187 endif