1 # Until the codebase has been overhauled (and the overhauling has itself been
2 # debugged :) you may read INSTALL for hints. But otherwise:
3 # You are on your own if you turn on fancy compiler features.
5 EXT_CFLAGS = -std=c89 -O2 -g \
7 -fstack-protector-all -Wstack-protector -D_FORTIFY_SOURCE=2 \
8 -Wall -Wextra -pedantic \
9 -Wbad-function-cast -Wcast-align -Wcast-qual -Winit-self \
10 -Wshadow -Wunused -Wwrite-strings
11 # The gcc(1) from NetBSD 6 produces a lot of errors with -fstrict-overflow,
12 # so that this needs to be revisited; it was enabled on OS X 6 and FreeBSD 9,
13 # and seemed to be good for gcc(1) and clang(1)
14 # -fstrict-overflow -Wstrict-overflow=5
19 @if [ -z "$(VERBOSE)" ]; then echo ' CC $(<)';\
20 else echo ' $$ $(CC) $(CFLAGS) $(INCLUDES) -c $(<)';\
22 $(CC) $(CFLAGS) $(INCLUDES) -c $(<)
25 all: _all_echoes $(UAGENT)
28 [ -n "$(VERBOSE)" ] || {\
29 echo '. CC : $(CC) $(CFLAGS) $(WARN)';\
30 echo '. INCLUDES: $(INCLUDES)';\
31 echo '. LDFLAGS : $(LDFLAGS)';\
32 echo '. LIBS : $(LIBS)';\
35 @if [ -z "$(VERBOSE)" ]; then echo ' LD $(@)';\
36 else echo ' $$ $(CC) $(LDFLAGS) -o $(@) $(OBJ) $(LIBS)';\
38 $(CC) $(LDFLAGS) -o $(@) $(OBJ) $(LIBS)
40 $(OBJ): config.h nail.h extern.h
43 md5.o imap.o smtp.o auxlily.o pop3.o: md5.h
46 mime_types.h: mime.types
47 @echo ' Generating $(@)';\
48 < ./mime.types > $(@) sed -e '/^#/d; /^$$/d; s/^/ "/; s/$$/",/'
51 @echo 'Running test, please wait';\
52 $(SHELL) ./cc-test.sh --check-only ./$(UAGENT)
55 @[ -n "$(VERBOSE)" ] &&\
56 echo ' Creating $(UAGENT) manual ($(@))';\
57 _VERSION=`< version.h \
58 sed -e 's/^\#define VERSION "\\(.\\{1,\\}\\)"$$/\\1/'` \
59 _SYSCONFRC="$(SYSCONFRC)" _UAGENT="$(UAGENT)" \
60 < ./nail.1 > $(@) awk 'BEGIN {written = 0}\
61 /.\"--MKMAN-START--/, /.\"--MKMAN-END--/ {\
66 un = toupper(ENVIRON["_UAGENT"]);\
68 cn = toupper(substr(ln, 1, 1)) substr(ln, 2);\
69 print ".ds UU \\\\%", un;\
70 print ".ds UA \\\\%", cn;\
71 printf ".ds UV \\\\%%%s [%s]\n", cn, ENVIRON["_VERSION"];\
72 print ".ds ua \\\\%", ln;\
73 print ".ds UR \\\\%", ENVIRON["_SYSCONFRC"];\
80 mkrc.rc: nail.rc mk.mk
81 @[ -n "$(VERBOSE)" ] &&\
82 echo ' Creating $(UAGENT) default resource file ($(@))';\
83 _SYSCONFRC="$(SYSCONFRC)" _UAGENT="$(UAGENT)" \
84 < ./nail.rc > $(@) awk 'BEGIN {written = 0}\
85 /#--MKRC-START--/, /#--MKRC-END--/ {\
90 ln = tolower(ENVIRON["_UAGENT"]);\
91 cn = toupper(substr(ln, 1, 1)) substr(ln, 2);\
92 print "# ", ENVIRON["_SYSCONFRC"];\
93 print "# Configuration file for ", cn, "(1)";\
101 install: _install_echoes mk.mk mkman.1 mkrc.rc
102 @test -d "$(DESTDIR)$(BINDIR)" || {\
103 [ -n "$(VERBOSE)" ] &&\
104 echo ' $$ mkdir -p "$(DESTDIR)$(BINDIR)"';\
105 mkdir -p "$(DESTDIR)$(BINDIR)";\
107 [ -n "$(VERBOSE)" ] &&\
108 echo ' $$ $(INSTALL) -c $(UAGENT) \
109 "$(DESTDIR)$(BINDIR)/$(UAGENT)"';\
110 $(INSTALL) -c $(UAGENT) "$(DESTDIR)$(BINDIR)/$(UAGENT)";\
111 [ -n "$(VERBOSE)" ] &&\
112 echo ' $$ $(STRIP) "$(DESTDIR)$(BINDIR)/$(UAGENT)"';\
113 $(STRIP) "$(DESTDIR)$(BINDIR)/$(UAGENT)";\
114 test -d "$(DESTDIR)$(MANDIR)/man1" || {\
115 [ -n "$(VERBOSE)" ] &&\
116 echo ' $$ mkdir -p "$(DESTDIR)$(MANDIR)/man1"';\
117 mkdir -p "$(DESTDIR)$(MANDIR)/man1";\
119 [ -n "$(VERBOSE)" ] &&\
120 echo ' $$ $(INSTALL) -c -m 644 ./mkman.1 \
121 "$(DESTDIR)$(MANDIR)/man1/$(UAGENT).1"';\
122 $(INSTALL) -c -m 644 ./mkman.1 \
123 "$(DESTDIR)$(MANDIR)/man1/$(UAGENT).1";\
124 test -d "$(DESTDIR)$(SYSCONFDIR)" || {\
125 [ -n "$(VERBOSE)" ] &&\
126 echo ' $$ mkdir -p "$(DESTDIR)$(SYSCONFDIR)"';\
127 mkdir -p "$(DESTDIR)$(SYSCONFDIR)";\
129 test -f "$(DESTDIR)$(SYSCONFRC)" || {\
130 [ -n "$(VERBOSE)" ] &&\
131 echo ' $$ $(INSTALL) -c -m 644 ./mkrc.rc \
132 "$(DESTDIR)$(SYSCONFRC)"';\
133 $(INSTALL) -c -m 644 ./mkrc.rc "$(DESTDIR)$(SYSCONFRC)";\
137 @echo 'Uninstalling..';\
138 [ -n "$(VERBOSE)" ] &&\
139 echo ' $$ rm -f "$(DESTDIR)$(BINDIR)/$(UAGENT)" \
140 "$(DESTDIR)$(MANDIR)/man1/$(UAGENT).1"';\
141 rm -f "$(DESTDIR)$(BINDIR)/$(UAGENT)" \
142 "$(DESTDIR)$(MANDIR)/man1/$(UAGENT).1";\
143 [ -n "$(VERBOSE)" ] && [ -f "$(DESTDIR)$(SYSCONFRC)" ] &&\
144 echo ' NOTE: not removing "$(DESTDIR)$(SYSCONFRC)"!'
147 @echo 'Cleaning up..';\
148 [ -n "$(VERBOSE)" ] &&\
149 echo ' $$ rm -f $(OBJ) $(UAGENT) ./mime_types.h ./mkman.1 \
151 rm -f $(OBJ) $(UAGENT) ./mime_types.h ./mkman.1 ./mkrc.rc
154 @echo 'Deconfiguring..';\
155 [ -n "$(VERBOSE)" ] && echo ' $$ rm -f ./config.* ./*.mk';\
156 rm -f ./config.* ./*.mk
159 @[ -z "$(VERSION)" ] && eval VERSION="`git describe --tags`";\
160 trap "rm ./version.tmp" 0 1 2 15;\
161 printf > ./version.tmp "#define VERSION \"$${VERSION:-vHuih-Buh}\"\n";\
162 $(CMP) ./version.tmp ./version.h >/dev/null 2>&1 && exit;\
163 mv ./version.tmp ./version.h; trap -- - 0 1 2 15
166 [ "`git rev-parse --verify HEAD`" != \
167 "`git rev-parse --verify master`" ] && {\
168 echo >&2 'Not on the [master] branch';\
171 echo 'Name of release tag:';\
173 echo "Is $(UAGENT) <v$${REL}> correct? ENTER continues";\
175 FREL=`echo $${REL} | sed -e 's/\./_/g'` &&\
176 $(MAKE) -f ./mk.mk _update-version &&\
177 git add version.h &&\
178 git commit -m "Bump $(UAGENT) v$${REL}" &&\
179 git tag -f "v$${REL}" &&\
180 $(MAKE) -f ./mk.mk _update-version &&\
181 git add version.h && git commit --amend &&\
182 git tag -f "v$${REL}" &&\
183 git archive --prefix="$(UAGENT)-$${REL}/" \
184 -o "$${TMPDIR}/$(UAGENT)-$${FREL}.tar.gz" HEAD &&\
186 tar -x -z -f "$(UAGENT)-$${FREL}.tar.gz" &&\
187 rm -f "$(UAGENT)-$${FREL}.tar.gz" &&\
188 tar -c -z -f "$(UAGENT)-$${FREL}.tar.gz" "$(UAGENT)-$${REL}" &&\
189 openssl md5 "$(UAGENT)-$${FREL}.tar.gz" > \
190 "$(UAGENT)-$${FREL}.cksum" 2>&1 &&\
191 openssl sha1 "$(UAGENT)-$${FREL}.tar.gz" >> \
192 "$(UAGENT)-$${FREL}.cksum" 2>&1 &&\
193 openssl sha256 "$(UAGENT)-$${FREL}.tar.gz" >> \
194 "$(UAGENT)-$${FREL}.cksum" 2>&1 &&\
195 echo "-put $(UAGENT)-$${FREL}.tar.gz" | \
196 sftp -b - sdaoden@frs.sourceforge.net:/home/frs/project/s-nail &&\
197 echo 'All seems fine';\
198 echo 'Really send announcement mail? ENTER continues';\
200 cd "$(UAGENT)-$${REL}" &&\
201 make WANT_ASSERTS=1 &&\
202 ./s-nail -A sdn_sf -s "[ANNOUNCE] Announcing S-nail v$${REL}" \
205 rm -rf "$(UAGENT)-$${REL}" &&\
208 # vim:set fenc=utf-8 filetype=make: