1# stone		simple repeater
2# Copyright(c)1995-2004 by Hiroaki Sengoku <sengoku@gcd.org>
3#
4# -DUSE_POP	use POP -> APOP conversion
5# -DUSE_SSL	use OpenSSL
6# -DCPP		preprocessor for reading config. file
7# -DIGN_SIGTERM	ignore SIGTERM signal
8# -DUNIX_DAEMON	fork into background and become a UNIX Daemon
9# -DNO_BCOPY	without bcopy(3)
10# -DNO_SNPRINTF	without snprintf(3)
11# -DNO_SYSLOG	without syslog(2)
12# -DNO_RINDEX	without rindex(3)
13# -DNO_THREAD	without thread
14# -DNO_PID_T	without pid_t
15# -DNO_ADDRINFO without getaddrinfo
16# -DPTHREAD     use Posix Thread
17# -DPRCTL	use prctl(2) - operations on a process
18# -DOS2		OS/2 with EMX
19# -DWINDOWS	Windows95/98/NT
20# -DNT_SERVICE	WindowsNT/2000 native service
21
22
23SSL=		/usr/local/ssl
24SSL_FLAGS=	-DUSE_SSL -DCONST_SSL_METHOD -DOPENSSL_NO_TLS1 -DOPENSSL_NO_SSL2 -DOPENSSL_NO_SSL3
25SSL_LIBS=	-lssl -lcrypto
26
27POP_FLAGS=	-DUSE_POP
28POP_LIBS=	md5c.o
29
30MINGWCC=	mingw32-gcc
31MC=		wmc
32RC=		wrc
33WINDRES=	windres
34SVC_LIBS=	logmsg.o
35
36all:
37	@echo "run make with one of the following arguments"
38	@echo "linux     ; for Linux"
39	@echo "zaurus    ; for Linux Zaurus"
40	@echo "fon       ; for La Fonera"
41	@echo "bsd       ; for FreeBSD or BSD/OS"
42	@echo "macosx    ; for Mac OS X"
43	@echo "sun       ; for SunOS 4.x with gcc"
44	@echo "solaris   ; for Solaris with gcc"
45	@echo "hp        ; for HP-UX with gcc"
46	@echo "irix      ; for IRIX"
47	@echo "win       ; for Windows 95/NT with VC++"
48	@echo "win-svc   ; for Windows NT service with VC++"
49	@echo "mingw     ; for Windows 95/NT with MinGW"
50	@echo "mingw-svc ; for Windows NT service with MinGW"
51	@echo "emx       ; for OS/2 with EMX"
52	@echo "using POP -> APOP conv., add '-pop' (example: linux-pop)"
53	@echo "using above conv. and OpenSSL, add '-ssl' (example: linux-ssl)"
54
55clean:
56	rm -f stone $(POP_LIBS) stone.exe stone.obj md5c.obj stone.o $(SVC_LIBS) MSG00001.bin logmsg.h logmsg.rc cryptoapi.o
57
58md5c.c:
59	@echo "*** md5c.c is contained in RFC1321"
60
61stone: stone.c
62	$(CC) $(CFLAGS) $(FLAGS) -o $@ $? $(LIBS)
63
64pop_stone: $(POP_LIBS)
65	$(MAKE) FLAGS="$(POP_FLAGS)" LIBS="$(POP_LIBS)" $(TARGET)
66
67ssl_stone:
68	$(MAKE) FLAGS="$(POP_FLAGS) $(SSL_FLAGS) $(FLAGS)" LIBS="$(LIBS) $(SSL_LIBS)" $(TARGET)
69
70stone.exe: stone.c
71	$(CC) $(CFLAGS) $(FLAGS) $? $(LIBS)
72
73pop_stone.exe: md5c.obj
74	$(MAKE) FLAGS=$(POP_FLAGS) LIBS="md5c.obj" $(TARGET)
75
76ssl_stone.exe: cryptoapi.obj
77	$(MAKE) FLAGS="$(POP_FLAGS) $(SSL_FLAGS) -DCRYPTOAPI $(FLAGS)" LIBS="cryptoapi.obj ssleay32.lib libeay32.lib crypt32.lib $(LIBS)" $(TARGET)
78
79svc_stone.exe: logmsg.res
80	$(MAKE) FLAGS="/DNT_SERVICE $(FLAGS)" LIBS="logmsg.res advapi32.lib user32.lib gdi32.lib shell32.lib kernel32.lib" $(TARGET)
81
82logmsg.rc: logmsg.mc
83	$(MC) -i $?
84
85logmsg.res: logmsg.rc
86	$(RC) $?
87
88logmsg.o: logmsg.res
89	$(WINDRES) $? -o $@
90
91cryptoapi.o: cryptoapi.c
92	$(MINGWCC) -c $? -o $@
93
94svc_stone: logmsg.rc $(SVC_LIBS)
95	$(MAKE) FLAGS="-DNT_SERVICE $(FLAGS)" LIBS="$(LIBS) $(SVC_LIBS) -ladvapi32 -luser32 -lshell32 -lkernel32" $(TARGET)
96
97linux:
98	$(MAKE) FLAGS="-O -Wall -DCPP='\"/usr/bin/cpp -traditional\"' -DPTHREAD -DUNIX_DAEMON -DPRCTL -DSO_ORIGINAL_DST=80 -DUSE_EPOLL $(FLAGS)" LIBS="-lpthread $(LIBS)" stone
99
100linux-pop:
101	$(MAKE) TARGET=linux pop_stone
102
103linux-ssl:
104	$(MAKE) TARGET=linux ssl_stone LIBS="-ldl"
105
106zaurus:
107	$(MAKE) CC="arm-linux-gcc" FLAGS="-O -Wall -DPTHREAD -DUNIX_DAEMON $(FLAGS)" LIBS="-lpthread $(LIBS)" stone
108	arm-linux-strip stone
109
110zaurus-pop:
111	$(MAKE) CC="arm-linux-gcc" TARGET=zaurus pop_stone
112
113zaurus-ssl:
114	$(MAKE) CC="arm-linux-gcc" SSL_LIBS="-lssl -lcrypto" TARGET=zaurus ssl_stone
115
116fon:
117	$(MAKE) CC="mips-linux-uclibc-gcc" FLAGS="-O -Wall -DPTHREAD -DUNIX_DAEMON -DPRCTL $(FLAGS)" LIBS="-lpthread $(LIBS)" stone
118	mips-linux-uclibc-strip stone
119
120fon-pop:
121	$(MAKE) CC="mips-linux-uclibc-gcc" TARGET=fon pop_stone
122
123fon-ssl:
124	$(MAKE) CC="mips-linux-uclibc-gcc" SSL_LIBS="-lssl -lcrypto" TARGET=fon ssl_stone
125
126bsd:
127	$(MAKE) FLAGS="-DCPP='\"/usr/bin/cpp -traditional\"' -D_THREAD_SAFE -DPTHREAD -DREG_NOERROR=0 $(FLAGS)" LIBS="-pthread $(LIBS)" stone
128
129bsd-pop:
130	$(MAKE) TARGET=bsd pop_stone
131
132bsd-ssl:
133	$(MAKE) TARGET=bsd ssl_stone
134
135macosx:
136	$(MAKE) FLAGS="-DCPP='\"/usr/bin/cpp -traditional\"' -D_THREAD_SAFE -DPTHREAD $(FLAGS)" stone
137
138macosx-pop:
139	$(MAKE) TARGET=macosx pop_stone
140
141macosx-ssl:
142	$(MAKE) TARGET=macosx SSL=/usr ssl_stone
143
144sun:
145	$(MAKE) CC=gcc FLAGS="-DNO_ADDRINFO -DNO_SNPRINTF -DIGN_SIGTERM -DCPP='\"/usr/lib/cpp\"' $(FLAGS)" stone
146
147sun-pop:
148	$(MAKE) TARGET=sun pop_stone
149
150sun-ssl:
151	$(MAKE) TARGET=sun ssl_stone
152
153solaris:
154	$(MAKE) CC=gcc FLAGS="-DPTHREAD -D_REENTRANT $(FLAGS)" LIBS="-lnsl -lsocket -lpthread -lthread $(LIBS)" stone
155
156solaris-pop:
157	$(MAKE) TARGET=solaris pop_stone
158
159solaris-ssl:
160	$(MAKE) TARGET=solaris ssl_stone
161
162hp:
163	$(MAKE) CC=gcc FLAGS="-DNO_SNPRINTF -DH_ERRNO -DCPP='\"/lib/cpp\"' $(FLAGS)" stone
164
165hp-pop:
166	$(MAKE) TARGET=hp pop_stone
167
168hp-ssl:
169	$(MAKE) TARGET=hp ssl_stone
170
171irix:
172	$(MAKE) FLAGS="-DNO_SNPRINTF $(FLAGS)" stone
173
174irix-pop:
175	$(MAKE) TARGET=irix pop_stone
176
177irix-ssl:
178	$(MAKE) TARGET=irix ssl_stone
179
180win:
181#	$(MAKE) FLAGS="/Zi /DUSE_PCRE /DWINDOWS /DNO_RINDEX /DNO_SNPRINTF /DNO_VSNPRINTF /DNO_PID_T $(FLAGS)" LIBS="/MT ws2_32.lib libpcreposix.lib $(LIBS) /link /NODEFAULTLIB:LIBC" stone.exe
182	$(MAKE) FLAGS="/Zi /DUSE_PCRE /DWINDOWS /DNO_RINDEX /DNO_PID_T $(FLAGS)" LIBS="/MT ws2_32.lib libpcreposix.lib $(LIBS) /link /NODEFAULTLIB:LIBC" stone.exe
183
184win-pop:
185	$(MAKE) TARGET=win pop_stone.exe
186
187win-ssl:
188	$(MAKE) FLAGS="$(FLAGS)" TARGET=win ssl_stone.exe
189
190win-svc:
191	$(MAKE) TARGET=win-ssl svc_stone.exe
192
193mingw.exe: stone.c
194	$(MINGWCC) $(CFLAGS) $(FLAGS) -o stone.exe $? $(LIBS)
195
196mingw:
197	$(MAKE) CC="$(MINGWCC)" FLAGS="-O -Wall -D_WIN32_WINNT=0x0501 -DWINDOWS -DNO_RINDEX -DADDRCACHE $(FLAGS)" LIBS="$(LIBS) -lws2_32 -lregex -lgdi32" mingw.exe
198
199mingw-pop:
200	$(MAKE) CC="$(MINGWCC)" TARGET=mingw pop_stone
201
202mingw-ssl: cryptoapi.o
203	$(MAKE) CC="$(MINGWCC)" FLAGS="$(FLAGS)" SSL_FLAGS="$(SSL_FLAGS) -DCRYPTOAPI" SSL_LIBS="cryptoapi.o -lssl -lcrypt32 -lssl32 -leay32" TARGET=mingw ssl_stone
204
205mingw-me:
206	$(MAKE) CC="$(MINGWCC)" FLAGS="-DNO_ADDRINFO" mingw-ssl
207
208mingw-nt:
209	$(MAKE) CC="$(MINGWCC)" FLAGS="-DNO_ADDRINFO" TARGET=mingw-ssl svc_stone
210
211mingw-svc:
212	$(MAKE) CC="$(MINGWCC)" TARGET=mingw-ssl svc_stone
213
214emx:
215	$(MAKE) CC=gcc FLAGS="-DOS2 -Zmts -Zsysv-signals $(FLAGS)" LIBS="$(LIBS) -lsocket" stone.exe
216
217emx-pop:
218	$(MAKE) TARGET=emx pop_stone
219
220emx-ssl:
221	$(MAKE) TARGET=emx ssl_stone
222