sendout.c:__savemail(): try to file_lock() *record*
[s-mailx.git] / mk-mk.in
blob98528514fc1b3e8c9b8f0e58fbdf72b53925a605
1 #@ "mk-mk.in" -- mk.mk template, completed by mk-conf.sh.
2 #@ Please see "INSTALL" and "make.rc" instead.
4 SIZE_CHECK = @if ( command -v size ) > /dev/null 2>&1; then size $(@); fi
6 # Corresponds to same thing in makefile!
7 _version_from_header = VERSION="`< version.h $(sed) \
8                 -e '/ VERSION /b X' -e d -e ':X' \
9                 -e 's/[^\"]*\"v\([^\"]\{1,\}\)\"/\1/'`"
11 OBJ = $(OBJ_SRC:.c=.o)
12 .SUFFIXES: .o .c .y
13 .c.o:
14         $(ECHO_CC)$(CC) $(CFLAGS) $(INCS) -c $(<)
15 .c: ;
17 all: $(UAGENT) $(OPTIONAL_PRIVSEP)
19 $(UAGENT): $(OBJ)
20         $(ECHO_LINK)$(CC) $(LDFLAGS) -o $(@) $(OBJ) $(LIBS)
21         $(SIZE_CHECK)
23 $(OBJ): config.h nail.h nailfuns.h $(AMALGAM_DEP)
24 $(AMALGAM_TARGET) accmacvar.o: okeys.h version.h
25 $(AMALGAM_TARGET) dotlock.o: dotlock.h
26 $(AMALGAM_TARGET) lex_input.o: cmd_tab.h
27 $(AMALGAM_TARGET) mime_types.o: mime_types.h
28 $(AMALGAM_TARGET) pop3.o smtp.o urlcrecry.o: rfc1321.h
29 $(AMALGAM_TARGET) smtp.o: smtp_gssapi.h
30 $(AMALGAM_TARGET) termcap.o: tcaps.h
32 $(PRIVSEP): privsep.o
33         $(ECHO_LINK)$(CC) $(LDFLAGS) -o $(@) privsep.o $(BASE_LIBS)
34         $(SIZE_CHECK)
36 privsep.o: privsep.c config.h nail.h dotlock.h
37         $(ECHO_CC)$(CC) $(CFLAGS) $(BASE_INCS) -c privsep.c
39 test: all
40         $(ECHO_TEST)\
41         MAKE=$(MAKE) \
42         awk=$(awk) cat=$(cat) cksum=$(cksum) rm=$(rm) sed=$(sed) grep=$(grep) \
43         $(SHELL) ./cc-test.sh --check-only ./$(UAGENT)
45 mime_types.h: mime.types
46         $(ECHO_GEN)\
47         LC_ALL=C < ./mime.types > $(@) $(awk) '\
48         function add(mt, ln) {\
49                 gsub(/[[:space:]]+/, " ", ln);\
50                 i = split(ln, i_a);\
51                 e = "";\
52                 for (j = 1; j <= i; ++j) {\
53                         k = i_a[j];\
54                         e = (e ? e " " : "") k\
55                 }\
56                 if (e) {\
57                         if (e_a[mt])\
58                                 e_a[mt] = e_a[mt] " ";\
59                         e_a[mt] = e_a[mt] e\
60                 }\
61         }\
62         /^[[:space:]]*#/ {next}\
63         /^[[:space:]]*$$/ {ltype = ""; next}\
64         /^[[:space:]]/ {\
65                 if (!ltype)\
66                         print "FAULTY CONTINUATION: " $$0 >> "/dev/stderr";\
67                 add(ltype, $$0);\
68                 next\
69         }\
70         /^(@([thH]@)? )?[[:alpha:]]/ {\
71                 if ($$1 ~ /^@([thH]@)?$$/) {\
72                         pa = $$1;\
73                         $$1 = $$2;\
74                         $$2 = ""\
75                 } else\
76                         pa = "";\
77                 if ($$1 !~ /^([[:alnum:]]+)\/([[:alnum:]_+-]+)$$/)\
78                         print "FAULTY MIME TYPE: <" $$1 ">" >> "/dev/stderr";\
79                 ltype = $$1; $$1 = "";\
80                 if (pa)\
81                         p_a[ltype] = pa;\
82                 if (!nt_a[ltype])\
83                         no_a[++no_ai] = nt_a[ltype] = ltype;\
84                 add(ltype, $$0)\
85         }\
86         END {\
87                 for (z = 1; z <= no_ai; ++z) {\
88                         t = no_a[z];\
89                         j = index(t, "/");\
90                         mt = toupper(substr(t, 1, j - 1));\
91                         j = substr(t, j + 1);\
92                         l = length(j);\
93                         if (!p_a[t])\
94                                 mt = "_MT_" mt;\
95                         else {\
96                                 tm = p_a[t];\
97                                 if (tm == "@" || tm == "@t@")\
98                                         mt = "_MT_" mt " | _MT_PLAIN";\
99                                 else if (tm == "@h@")\
100                                         mt = "_MT_" mt " | _MT_SOUP_h";\
101                                 else if (tm == "@H@")\
102                                         mt = "_MT_" mt " | _MT_SOUP_H";\
103                         }\
104                         print "   {" mt ", " l ", \"" j e_a[t] "\"},"\
105                 }\
106         }\
107         '
109 mkman.1: nail.1
110         $(ECHO_GEN)\
111         LC_ALL=C _SYSCONFRC="$(SYSCONFRC)" _UAGENT="$(UAGENT)" \
112                 $(_version_from_header) \
113         < ./nail.1 > $(@) $(awk) '\
114         BEGIN { written = 0 }\
115         /\.\\"--MKMAN-START--/, /\.\\"--MKMAN-END--/ {\
116                 if (written++ != 0)\
117                         next;\
118                 OFS = "";\
119                 un = toupper(ENVIRON["_UAGENT"]);\
120                 ln = tolower(un);\
121                 cn = toupper(substr(ln, 1, 1)) substr(ln, 2);\
122                 print ".ds UU \\\\%", un;\
123                 print ".ds UA \\\\%", cn;\
124                 print ".ds ua \\\\%", ln;\
125                 print ".ds VV \\\\%v", ENVIRON["VERSION"];\
126                 path = ENVIRON["_SYSCONFRC"];\
127                 gsub("/", "/\\:", path);\
128                 print ".ds UR \\\\%", path;\
129                 OFS = " ";\
130                 next\
131         }\
132         {print}\
133         '
135 mkrc.rc: nail.rc
136         $(ECHO_GEN)\
137         LC_ALL=C _SYSCONFRC="$(SYSCONFRC)" _UAGENT="$(UAGENT)" \
138                 $(_version_from_header) \
139         < ./nail.rc > $(@) $(awk) 'BEGIN {written = 0}\
140         /^#--MKRC-START--/, /^#--MKRC-END--/ {\
141                 if (written == 1)\
142                         next;\
143                 written = 1;\
144                 OFS = "";\
145                 ln = tolower(ENVIRON["_UAGENT"]);\
146                 cn = toupper(substr(ln, 1, 1)) substr(ln, 2);\
147                 print "#@ ", ENVIRON["_SYSCONFRC"];\
148                 print "#@ Configuration file for ", cn, "(1) v",\
149                         ENVIRON["VERSION"];\
150                 OFS = " ";\
151                 next\
152         }\
153         {print}\
154         '
156 install: mkman.1 mkrc.rc
157         $(ECHO_BLOCK_BEGIN)\
158         __mkdir() {\
159                 _dir=$${1};\
160                 if [ -d "$${_dir}" ]; then :; else\
161                         $(mkdir) -m 0755 -p "$${_dir}";\
162                 fi;\
163         };\
164         __copyfile() {\
165                 _mode=$${1} _src=$${2} _dst=$${3};\
166                 $(cp) -f "$${_src}" "$${_dst}";\
167                 $(chmod) $${_mode} "$${_dst}";\
168         };\
169         __copychownfile() {\
170                 _mode=$${1} _ident=$${2} _src=$${3} _dst=$${4};\
171                 $(cp) -f "$${_src}" "$${_dst}";\
172                 $(chown) $${_ident} "$${_dst}";\
173                 $(chmod) $${_mode} "$${_dst}";\
174         };\
175         __stripfile() {\
176                 _file=$${1};\
177                 if [ "$(WANT_DEBUG)" != 0 ]; then :;\
178                 elif [ -n "$(HAVE_STRIP)" ]; then \
179                         $(strip) "$${_file}";\
180                 fi;\
181         };\
182         if [ -n "$(DESTDIR)" ]; then __mkdir "$(DESTDIR)"; fi;\
183         __mkdir "$(DESTDIR)$(BINDIR)";\
184         __stripfile "$(UAGENT)";\
185         __copyfile 0555 "$(UAGENT)" "$(DESTDIR)$(BINDIR)/$(UAGENT)";\
186         if [ -n "$(OPTIONAL_PRIVSEP)" ]; then \
187                 __mkdir "$(DESTDIR)$(LIBEXECDIR)";\
188                 __stripfile "$(PRIVSEP)";\
189                 m='o=rx' o=;\
190                 if [ -n "$(_____PRIVSEP_GROUP)" ]; then \
191                         m="g=rxs,$${m}" o=":$(PRIVSEP_GROUP)";\
192                 else \
193                         m="g=rx,$${m}";\
194                 fi;\
195                 if [ -n "$(PRIVSEP_USER)" ]; then \
196                         m="u=rxs,$${m}" o="$(PRIVSEP_USER)$${o}";\
197                 else \
198                         m="u=rx,$${m}";\
199                 fi;\
200                 __copychownfile "$${m}" "$${o}" "$(PRIVSEP)" \
201                                 "$(DESTDIR)$(LIBEXECDIR)/$(PRIVSEP)";\
202         fi;\
203         __mkdir "$(DESTDIR)$(MANDIR)/man1";\
204         __copyfile 0444 ./mkman.1 "$(DESTDIR)$(MANDIR)/man1/$(UAGENT).1";\
205         __mkdir "$(DESTDIR)$(SYSCONFDIR)";\
206         if [ -f "$(DESTDIR)$(SYSCONFDIR)/$(SYSCONFRC)" ]; then :; else\
207                 __copyfile 0444 ./mkrc.rc \
208                         "$(DESTDIR)$(SYSCONFDIR)/$(SYSCONFRC)";\
209         fi;\
210         $(ECHO_BLOCK_END)
212 uninstall:
213         $(ECHO_BLOCK_BEGIN)\
214         echo 'Uninstalling..';\
215         $(rm) -f "$(DESTDIR)$(BINDIR)/$(UAGENT)" \
216                 "$(DESTDIR)$(MANDIR)/man1/$(UAGENT).1";\
217         if [ -n "$(OPTIONAL_PRIVSEP)" ]; then \
218                 $(rm) -f "$(DESTDIR)$(LIBEXECDIR)/$(PRIVSEP)";\
219         fi;\
220         if [ -n "$(VERBOSE)" ] && [ -f "$(DESTDIR)$(SYSCONFRC)" ]; then \
221                 echo '  NOTE: not removing "$(DESTDIR)$(SYSCONFRC)"';\
222         fi;\
223         $(ECHO_BLOCK_END)
225 clean:
226         $(ECHO_CMD)\
227         $(rm) -f $(OBJ) $(UAGENT) ./mime_types.h ./mkman.1 ./mkrc.rc;\
228         if [ -n "$(OPTIONAL_PRIVSEP)" ]; then \
229                 $(rm) -f ./privsep.o $(PRIVSEP);\
230         fi
232 distclean: clean
233         $(ECHO_CMD)\
234         $(rm) -f ./config.* ./*.mk
236 # MUST work with "grep=grep sed=sed cmp=cmp mv=mv", otherwise modify makefile
237 _update-version:
238         @LC_ALL=C; export LC_ALL;\
239         if [ -z "$(VERSION)" ]; then \
240                 eval VERSION="`(git describe --tags) 2>/dev/null`";\
241                 if [ -n "$${VERSION}" ]; then \
242                         VERSION="`echo $${VERSION} |\
243                                 $(sed) -e 's/^v\{0,1\}\(.*\)/\1/'`";\
244                         [ "`git status --porcelain |\
245                                 $(awk) '\
246                                         BEGIN {n=0}\
247                                         /version\.h/ {next}\
248                                         /^\?\?/ {next}\
249                                         {++n}\
250                                         END {print n}\
251                                 '`" -ne 0 ] &&\
252                                 VERSION="$${VERSION}-dirty";\
253                 else \
254                         $(_version_from_header);\
255                         echo "$${VERSION}" | $(grep) -q -F dirty ||\
256                                 VERSION="$${VERSION}-dirty";\
257                 fi;\
258         fi;\
259         vmaj="`echo \"$${VERSION}\" |\
260                 $(sed) -e 's/^\([^.]\{1,\}\).*/\1/'`";\
261         vmin="`echo \"$${VERSION}\" |\
262                 $(sed) -e 's/^[^.]\{1,\}\.\([^.]\{1,\}\).*/\1/'`";\
263         [ "$${vmin}" = "$${VERSION}" ] && VERSION="$${VERSION}.0" vmin=0;\
264         vupd="`echo \"$${VERSION}\" |\
265                 $(sed) -e 's/^[^.]\{1,\}\.[^.]\{1,\}\.\([^.-]\{1,\}\).*/\1/'`";\
266         [ "$${vupd}" = "$${VERSION}" ] && VERSION="$${VERSION}.0" vupd=0;\
267         trap "$(rm) ./version.tmp" 0 1 2 15;\
268         printf > ./version.tmp "#define VERSION \"v$${VERSION}\"\n";\
269         printf >> ./version.tmp "#define VERSION_MAJOR \"$${vmaj}\"\n";\
270         printf >> ./version.tmp "#define VERSION_MINOR \"$${vmin}\"\n";\
271         printf >> ./version.tmp "#define VERSION_UPDATE \"$${vupd}\"\n";\
272         $(cmp) ./version.tmp ./version.h >/dev/null 2>&1 && exit;\
273         $(mv) ./version.tmp ./version.h;\
274         trap : 0 1 2 15
276 # s-mk-mode