1# ========================================================================
2# Copyright 1988-2008 University of Washington
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#     http://www.apache.org/licenses/LICENSE-2.0
9#
10#
11# ========================================================================
12
13# Program:	IMAP Toolkit Makefile
14#
15# Author:	Mark Crispin
16#		UW Technology
17#		Seattle, WA  98195
18#		Internet: MRC@Washington.EDU
19#
20# Date:		7 December 1989
21# Last Edited:	12 May 2008
22
23
24# Normal command to build IMAP toolkit:
25#  make <port> [EXTRAAUTHENTICATORS=xxx] [EXTRADRIVERS=xxx] [EXTRACFLAGS=xxx]
26#	       [PASSWDTYPE=xxx] [SSLTYPE=xxx] [IP=n]
27
28
29# Port name.  These refer to the *standard* compiler on the given system.
30# This means, for example, that the hpx port is for HP's compiler and not for
31# a non-standard compiler such as gcc.
32#
33# If you are using gcc and it is not the standard compiler on your system, try
34# using an ANSI port that is close to what you have.  For example, if your
35# system is SVR4ish, try a32 or lnx; if it's more BSDish, try nxt, mct, or bsi.
36#
37# The following ports are bundled:
38# a32	AIX 3.2 for RS/6000
39# a41	AIX 4.1 for RS/6000
40# a52	Attempt at AIX 5.2
41# aix	AIX/370 (not RS/6000!!)
42# ami	AmigaDOS
43# am2	AmigaDOS with a 68020+
44# ama	AmigaDOS using AS225R2
45# amn	AmigaDOS with a 680x0 using "new" socket library
46# aos	AOS for RT
47# art	AIX 2.2.1 for RT
48# asv	Altos SVR4
49# aux	A/UX
50# bs3	BSD/i386 3.0 and higher
51# bsd	generic BSD 4.3 (as in ancient 1980s version)
52# bsf	FreeBSD
53# bsi	BSD/i386
54# bso	OpenBSD (yes, yet another one...)
55# cvx	Convex
56# cyg	Cygwin
57# d-g	Data General DG/UX prior to 5.4 (d41 port no longer exists)
58# d54	Data General DG/UX 5.4
59# do4	Apollo Domain/OS sr10.4
60# dpx	Bull DPX/2 B.O.S.
61# drs	ICL DRS/NX
62# dyn	Dynix
63# epx	EP/IX
64# ga4	GCC AIX 4.x for RS/6000
65# gas	GCC Altos SVR4
66# gcs	GCC Solaris with Blastwave Community Open Source Software
67# gh9   GCC HP-UX 9.x
68# ghp	GCC HP-UX 10.x
69# ghs	GCC HP-UX 10.x with Trusted Computer Base
70# go5	GCC 2.7.1 (95q4 from Skunkware _not_ 98q2!) SCO Open Server 5.0.x
71# gsc	GCC Santa Cruz Operation
72# gsg	GCC SGI
73# gso	GCC Solaris
74# gsu	GCC SUN-OS
75# gul	GCC RISC Ultrix (DEC-5000)
76# h11	HP-UX 11i
77# hpp	HP-UX 9.x (see gh9)
78# hpx	HP-UX 10.x (see ghp, ghs, hxd, and shp)
79# hxd	HP-UX 10.x with DCE security (see shp)
80# isc	Interactive Systems
81# ldb	Debian Linux
82# lfd	Fedora Core 4
83# ln8	Linux for Nokia N800
84# lnx	Linux with traditional passwords and crypt() in the C library
85#	 (see lnp, sl4, sl5, and slx)
86# lnp	Linux with Pluggable Authentication Modules (PAM)
87# lmd	Mandrake Linux
88# lr5	RedHat Enterprise 5 and later (same as lfd)
89# lrh	RedHat Linux 7.2 and later
90# lsu	SuSE Linux (same as lrh)
91# lyn	LynxOS
92# mct	MachTen
93# mnt	Atari ST Mint (not MacMint)
94# neb	NetBSD
95# nec	NEC UX
96# nto	QNX Neutrine RTP
97# nxt	NEXTSTEP
98# nx3	NEXTSTEP 3.x
99# osf	OSF/1 (see sos, os4)
100# os4	OSF/1 (Digital UNIX) 4
101# osi	Apple iPhone and iPod Touch
102# osx	Mac OS X
103# oxp	Mac OS X with Pluggable Authentication Modules (PAM)
104# ptx	PTX
105# pyr	Pyramid
106# qnx	QNX 4
107# s40	SUN-OS 4.0 (*not* Solaris)
108# sc5	SCO Open Server 5.0.x (see go5)
109# sco	Santa Cruz Operation (see sc5, go5)
110# shp	HP-UX with Trusted Computer Base
111# sgi	Silicon Graphics IRIX
112# sg6	Silicon Graphics IRIX 6.5
113# sl4	Linux using -lshadow to get the crypt() function
114# sl5	Linux with shadow passwords, no extra libraries
115# slx	Linux using -lcrypt to get the crypt() function
116# snx	Siemens Nixdorf SININX or Reliant UNIX
117# soc	Solaris with /opt/SUNWspro/bin/cc
118# sol	Solaris (won't work unless "ucbcc" works -- use gso instead)
119# sos	OSF/1 with SecureWare
120# ssn	SUN-OS with shadow password security
121# sua	Windows Vista (Enterprise or Ultima) Subsystem for Unix Applications
122# sun	SUN-OS 4.1 or better (*not* Solaris) (see ssn)
123# sv2	SVR2 on AT&T PC-7300 (incomplete port)
124# sv4	generic SVR4
125# ult	RISC Ultrix (DEC-5000)
126# uw2	UnixWare SVR4.2
127# vul	VAX Ultrix
128# vu2	VAX Ultrix 2.3 (e.g. for VAXstation-2000 or similar old version)
129
130
131# Extra authenticators (e.g. OTP, Kerberos, etc.).  Adds linkage for
132# auth_xxx.c and executes Makefile.xxx, where xxx is the name of the
133# authenticator.  Some authenticators are only available from third parties.
134#
135# The following extra authenticators are bundled:
136# gss	Kerberos V
137
138EXTRAAUTHENTICATORS=
139
140
141# Additional mailbox drivers.  Add linkage for xxxdriver.  Some drivers are
142# only available from third parties.
143#
144# The following extra drivers are bundled:
145# mbox	if file "mbox" exists on the home directory, automatically moves mail
146#	 from the spool directory to "mbox" and uses "mbox" as INBOX.
147
148EXTRADRIVERS=mbox
149
150
151# Plaintext password type.  Defines how plaintext password authentication is
152# done on this system.
153#
154# The following plaintext login types are bundled:
155# afs	AFS authentication database
156# dce	DCE authentication database
157# gss	Kerberos V
158# nul	plaintext authentication never permitted
159# pam	PAM authentication (note: for Linux, you should use the "lnp" port
160#	 instead of setting this...also, you may have to modify PAMLDFLAGS
161#	 in the imap-[]/src/osdep/unix/Makefile
162# pmb	PAM authentication for broken implementations such as Solaris.
163#	 you may have to modify PAMLDFLAGS
164# std	system standard (typically passwd file), determined by port
165# two	try alternative (defined by CHECKPWALT), then std
166
167PASSWDTYPE=std
168
169
170# SSL type.  Defines whether or not SSL support is on this system
171#
172# The following SSL types are bundled:
173# none	no SSL support
174# unix	SSL support using OpenSSL
175# nopwd	SSL support using OpenSSL, and plaintext authentication permitted only
176#	in SSL/TLS sessions
177# sco	link SSL before other libraries (for SCO systems)
178# unix.nopwd	same as nopwd
179# sco.nopwd	same as nopwd, plaintext authentication in SSL/TLS only
180#
181# SSLTYPE=nopwd is now the default as required by RFC 3501
182
183SSLTYPE=nopwd
184
185
186# IP protocol version
187#
188# The following IP protocol versions are defined:
189# o	IPv4 support, no DNS (truly ancient systems)
190# 4	(default) IPv4 support only
191# 6	IPv6 and IPv4 support
192
193IP=6
194IP6=6
195
196
197# The following extra compilation flags are defined.  None of these flags are
198# recommended.  If you use these, include them in the EXTRACFLAGS.
199#
200# -DDISABLE_POP_PROXY
201#	By default, the ipop[23]d servers offer POP->IMAP proxy access,
202#	which allow a POP client to access mail on an IMAP server by using the
203#	POP server as a go-between.  Setting this option disables this
204#	facility.
205#
206# -DOLDFILESUFFIX=\"xxx\"
207#	Change the default suffix appended to the backup .newsrc file from
208#	"old".
209#
210# -DSTRICT_RFC822_TIMEZONES
211#	Disable recognition of the non-standard UTC (0000), MET (+0100),
212#	EET (+0200), JST (+0900), ADT (-0300), AST (-0400), YDT (-0800),
213#	YST (-0900), and HST (-1000) symbolic timezones.
214#
215# -DBRITISH_SUMMER_TIME
216#	Enables recognition of non-standard symbolic timezone BST as +0100.
217#
218# -DBERING_STANDARD_TIME
219#	Enables recognition of non-standard symbolic timezone BST as -1100.
220#
221# -DNEWFOUNDLAND_STANDARD_TIME
222#	Enables recognition of non-standard symbolic timezone NST as -0330.
223#
224# -DNOME_STANDARD_TIME
225#	Enables recognition of non-standard symbolic timezone NST as -1100.
226#
227# -DSAMOA_STANDARD_TIME
228#	Enables recognition of non-standard symbolic timezone SST as -1100.
229#
230# -DY4KBUGFIX
231#	Turn on the Y4K bugfix (yes, that's year 4000).  It isn't well-known,
232#	but century years evenly divisible by 4000 are *not* leap years in the
233#	Gregorian calendar.  A lot of "Y2K compilant" software does not know
234#	about this rule.  Remember to turn this on sometime in the next 2000
235#	years.
236#
237# -DUSEORTHODOXCALENDAR
238#	Use the more accurate Eastern Orthodox calendar instead of the
239#	Gregorian calendar.  The century years which are leap years happen
240#	at alternating 400 and 500 year intervals without shifts every 4000
241#	years.  The Orthodox and Gregorian calendars diverge by 1 day for
242#	gradually-increasing intervals, starting at 2800-2900, and becoming
243#	permanent at 48,300.
244#
245# -DUSEJULIANCALENDAR
246#	Use the less accurate Julian calendar instead of the Gregorian
247#	calendar.  Leap years are every 4 years, including century years.
248#	My apologies to those in the English-speaking world who object to
249#	the reform of September 2, 1752 -> September 14, 1752, since this
250#	code still uses January 1 (which Julius Ceasar decreed as the start
251#	of the year, which since 153 BCE was the day that Roman consuls
252#	took office), rather than the traditional March 25 used by the
253#	British.  As of 2005, the Julian calendar and the Gregorian calendar
254#	diverge by 15 days.
255
256EXTRACFLAGS=
257
258
259# Extra linker flags (additional/alternative libraries, etc.)
260
261EXTRALDFLAGS=
262
263
264# Special make flags (e.g. to override make environment variables)
265
266EXTRASPECIALS=
267SPECIALS=
268
269
270# Normal commands
271
272CAT=cat
273CD=cd
274LN=ln -s
275MAKE=make
276MKDIR=mkdir
277BUILDTYPE=rebuild
278RM=rm -rf
279SH=sh
280SYSTEM=unix
281TOOLS=tools
282TOUCH=touch
283
284
285# Primary build command
286
287BUILD=$(MAKE) build EXTRACFLAGS='$(EXTRACFLAGS)'\
288 EXTRALDFLAGS='$(EXTRALDFLAGS)'\
289 EXTRADRIVERS='$(EXTRADRIVERS)'\
290 EXTRAAUTHENTICATORS='$(EXTRAAUTHENTICATORS)'\
291 PASSWDTYPE=$(PASSWDTYPE) SSLTYPE=$(SSLTYPE) IP=$(IP)\
292 EXTRASPECIALS='$(EXTRASPECIALS)'
293
294
295# Make the IMAP Toolkit
296
297all:	c-client SPECIALS rebuild
298
299c-client:
300	@echo Not processed yet.  In a first-time build, you must specify
301	@echo the system type so that the sources are properly processed.
302	@false
303
304
305SPECIALS:
306	echo $(SPECIALS) > SPECIALS
307
308# Note on SCO you may have to set LN to "ln".
309
310a32 a41 a52 aix bs3 bsi d-g d54 do4 drs epx ga4 gas gh9 ghp ghs go5 gsc gsg gso gul h11 hpp hpx lnp lyn mct mnt nec nto nxt nx3 osf os4 ptx qnx sc5 sco sgi sg6 shp sl4 sl5 slx snx soc sol sos uw2: an
311	$(BUILD) BUILDTYPE=$@
312
313# If you use sv4, you may find that it works to move it to use the an process.
314# If so, you probably will want to delete the "-Dconst=" from the sv4 CFLAGS in
315# the c-client Makefile.
316
317aos art asv aux bsd cvx dpx dyn isc pyr sv4 ult vul vu2: ua
318	$(BUILD) BUILDTYPE=$@
319
320
321# Knotheads moved Kerberos and SSL locations on these platforms
322
323# Paul Vixie claims that all FreeBSD versions have working IPv6
324
325bsf:	an
326	$(TOUCH) ip6
327	$(BUILD) BUILDTYPE=$@ IP=$(IP6) \
328	PASSWDTYPE=pam \
329	SPECIALS="SSLINCLUDE=/usr/local/include SSLLIB=/usr/local/lib SSLCERTS=/usr/local/certs SSLKEYS=/usr/local/certs GSSINCLUDE=/usr/include GSSLIB=/usr/lib PAMLDFLAGS=-lpam"
330
331# I assume that Theo did the right thing for IPv6.  OpenBSD does not have PAM.
332
333bso:	an
334	$(TOUCH) ip6
335	$(BUILD) BUILDTYPE=$@ IP=$(IP6) \
336	SPECIALS="SSLINCLUDE=/usr/local/include SSLLIB=/usr/local/lib SSLCERTS=/etc/ssl SSLKEYS=/usr/local/certs GSSINCLUDE=/usr/include GSSLIB=/usr/lib"
337
338# Info from Joel Reicher about NetBSD SSL paths.  I assume it has PAM because pam is in NetBSD sources...
339
340neb:	an
341	$(TOUCH) ip6
342	$(BUILD) BUILDTYPE=$@ IP=$(IP6) \
343	PASSWDTYPE=pam \
344	SPECIALS="SSLINCLUDE=/usr/local/include SSLLIB=/usr/local/lib SSLCERTS=/etc/openssl/certs SSLKEYS=/etc/openssl/private GSSINCLUDE=/usr/include GSSLIB=/usr/lib PAMLDFLAGS=-lpam"
345
346cyg:	an
347	$(BUILD) BUILDTYPE=cyg \
348	SPECIALS="SSLINCLUDE=/usr/local/include SSLLIB=/usr/local/lib SSLCERTS=/usr/ssl/certs SSLKEYS=/usr/ssl/certs"
349
350gcs:	an
351	$(BUILD) BUILDTYPE=gso \
352	SPECIALS="SSLINCLUDE=/opt/csw/include/openssl SSLLIB=/opt/csw/lib SSLCERTS=/opt/csw/ssl/certs SSLKEYS=/opt/csw/ssl/certs"
353
354ldb:	an
355	$(BUILD) BUILDTYPE=lnp IP=$(IP6) \
356	SPECIALS="SSLINCLUDE=/usr/local/include SSLLIB=/usr/local/lib SSLCERTS=/usr/local/certs SSLKEYS=/usr/local/certs GSSINCLUDE=/usr/include GSSLIB=/usr/lib MAILSPOOL=/var/mail"
357
358lfd:	an
359	$(BUILD) BUILDTYPE=lnp IP=$(IP6) \
360	SPECIALS="SSLINCLUDE=/usr/local/include SSLLIB=/usr/local/lib SSLCERTS=/etc/pki/tls/certs SSLKEYS=/etc/pki/tls/private GSSDIR=/usr/kerberos"
361
362ln8:	an
363	$(TOUCH) ip6
364	$(BUILD) BUILDTYPE=slx IP=$(IP6) \
365	SPECIALS="SSLINCLUDE=/usr/local/include SSLLIB=/usr/local/lib SSLCERTS=/usr/lib/ssl/certs MAILSPOOL=/var/mail"
366
367
368# RHE5 does not have the IPv6 bug
369
370lr5:	an
371	$(TOUCH) ip6
372	$(BUILD) BUILDTYPE=lnp IP=$(IP6) \
373	SPECIALS="SSLINCLUDE=/usr/local/include SSLLIB=/usr/local/lib SSLCERTS=/etc/pki/tls/certs SSLKEYS=/etc/pki/tls/private GSSDIR=/usr/kerberos"
374
375lmd:	an
376	$(BUILD) BUILDTYPE=lnp IP=$(IP6) \
377	SPECIALS="SSLINCLUDE=/usr/local/include SSLLIB=/usr/local/lib SSLCERTS=/usr/lib/ssl/certs SSLKEYS=/usr/lib/ssl/private GSSINCLUDE=/usr/include GSSLIB=/usr/lib"
378
379# RHE3 definitely has the IPv6 bug
380
381lrh:	lrhok an
382	$(BUILD) BUILDTYPE=lnp IP=$(IP6) \
383	SPECIALS="SSLINCLUDE=/usr/local/include SSLLIB=/usr/local/lib SSLCERTS=/usr/share/ssl/certs SSLKEYS=/usr/share/ssl/private GSSDIR=/usr/kerberos"
384
385lrhok:
386	@$(SH) -c '(test ! -d /etc/pki/tls ) || make lrhwarn'
387	@$(TOUCH) lrhok
388
389lrhwarn:
390	@echo You are building for OLD versions of RedHat Linux.  This build
391	@echo is NOT suitable for RedHat Enterprise 5, which stores SSL/TLS
392	@echo certificates and keys in /etc/pki/tls rather than /usr/share/ssl.
393	@echo If you want to build for modern RedHat Linux, you should use
394	@echo make lr5 instead.
395	@echo Do you want to continue this build?  Type y or n please:
396	@$(SH) -c 'read x; case "$$x" in y) exit 0;; *) exit 1;; esac'
397	@echo OK, I will remember that you really want to build for old
398	@echo RedHat Linux.  You will not see this message again.
399	@echo If you realize that you really wanted to build for modern
400	@echo RedHat Linux, then do the following commands:
401	@echo % rm lrhok
402	@echo % make clean
403	@echo % make lr5
404
405lsu:	an
406	$(BUILD) BUILDTYPE=lnp IP=$(IP6) \
407	SPECIALS="SSLINCLUDE=/usr/local/include SSLLIB=/usr/local/lib SSLCERTS=/usr/share/ssl/certs SSLKEYS=/usr/share/ssl/private GSSDIR=/usr/kerberos"
408
409# iToy does not have Kerberos or PAM.  It doesn't have a
410# /System/Library/OpenSSL directory either, but the libcrypto shared library
411# has these locations so this is what we will use.
412
413osi:	an
414	$(TOUCH) ip6
415	$(BUILD) BUILDTYPE=osx IP=$(IP6) CC=arm-apple-darwin-gcc \
416	SPECIALS="SSLINCLUDE=/usr/local/include SSLLIB=/usr/local/lib SSLCERTS=/System/Library/OpenSSL/certs SSLKEYS=/System/Library/OpenSSL/private"
417
418oxp:	an
419	$(TOUCH) ip6
420	$(BUILD) BUILDTYPE=osx IP=$(IP6) EXTRAAUTHENTICATORS="$(EXTRAAUTHENTICATORS) gss" \
421	PASSWDTYPE=pam \
422	EXTRACFLAGS="$(EXTRACFLAGS) -DMAC_OSX_KLUDGE=1" \
423	SPECIALS="SSLINCLUDE=/usr/local/include SSLLIB=/usr/local/lib SSLCERTS=/System/Library/OpenSSL/certs SSLKEYS=/System/Library/OpenSSL/private GSSINCLUDE=/usr/include GSSLIB=/usr/lib PAMDLFLAGS=-lpam"
424
425osx:	osxok an
426	$(TOUCH) ip6
427	$(BUILD) BUILDTYPE=$@ IP=$(IP6) EXTRAAUTHENTICATORS="$(EXTRAAUTHENTICATORS) gss" \
428	SPECIALS="SSLINCLUDE=/usr/local/include SSLLIB=/usr/local/lib SSLCERTS=/System/Library/OpenSSL/certs SSLKEYS=/System/Library/OpenSSL/private GSSINCLUDE=/usr/include GSSLIB=/usr/lib"
429
430osxok:
431	@$(SH) -c '(test ! -f /usr/include/pam/pam_appl.h ) || make osxwarn'
432	@$(TOUCH) osxok
433
434osxwarn:
435	@echo You are building for OLD versions of Mac OS X.  This build is
436	@echo NOT suitable for modern versions of Mac OS X, such as Tiger,
437	@echo which use PAM-based authentication.  If you want to build for
438	@echo modern Mac OS X, you should use make oxp instead.
439	@echo Do you want to continue this build?  Type y or n please:
440	@$(SH) -c 'read x; case "$$x" in y) exit 0;; *) exit 1;; esac'
441	@echo OK, I will remember that you really want to build for old
442	@echo Mac OS X.  You will not see this message again.
443	@echo If you realize that you really wanted to build for modern
444	@echo Mac OS X, then do the following commands:
445	@echo % rm osxok
446	@echo % make clean
447	@echo % make oxp
448
449
450# Linux shadow password support doesn't build on traditional systems, but most
451# Linux systems are shadow these days.
452
453lnx:	lnxnul an
454	$(BUILD) BUILDTYPE=$@
455
456lnxnul:
457	@$(SH) -c '(test $(PASSWDTYPE) = nul) || make lnxok'
458
459lnxok:
460	@echo You are building for traditional Linux.  Most modern Linux
461	@echo systems require that you build using make slx.
462	@echo Do you want to continue this build?  Type y or n please:
463	@$(SH) -c 'read x; case "$$x" in y) exit 0;; *) exit 1;; esac'
464	@echo OK, I will remember that you really want to build for
465	@echo traditional Linux.  You will not see this message again.
466	@echo If you discover that you can not log in to the POP and IMAP
467	@echo servers, then do the following commands:
468	@echo % rm lnxok
469	@echo % make clean
470	@echo % make slx
471	@echo If slx does not work, try sl4 or sl5.  Be sure to do a
472	@echo make clean between each try!
473	@$(TOUCH) lnxok
474
475
476# SUN-OS C compiler makes you load libdl by hand...
477
478ssn sun: sunok suntools ua
479	$(BUILD) BUILDTYPE=$@
480
481suntools:
482	$(CD) tools;$(MAKE) LDFLAGS=-ldl
483
484gsu:	sunok an
485	$(BUILD) BUILDTYPE=$@
486
487s40:	sunok ua
488	$(BUILD) BUILDTYPE=$@
489
490sunok:
491	@echo You are building for the old BSD-based SUN-OS.  This is NOT
492	@echo the modern SVR4-based Solaris.  If you want to build for
493	@echo Solaris, you should use make gso or make sol or make soc.  Do
494	@echo you want to continue this build?  Type y or n please:
495	@$(SH) -c 'read x; case "$$x" in y) exit 0;; *) exit 1;; esac'
496	@echo OK, I will remember that you really want to build for the old
497	@echo BSD-based SUN-OS.  You will not see this message again.
498	@echo If the build fails and you realize that you really wanted to
499	@echo build for Solaris, then do the following commands:
500	@echo % rm sunok
501	@echo % make clean
502	@echo % make gso
503	@echo If gso does not work, try sol.  Be sure to do a make clean
504	@echo between each try!
505	@$(TOUCH) sunok
506
507
508# SVR2 doesn't have symbolic links (at least my SVR2 system doesn't)
509
510sv2:
511	$(MAKE) ua LN=ln
512	$(BUILD) BUILDTYPE=$@ LN=ln
513
514# Hard links don't quite work right in SUA, and there don't seem to be any
515# SSL includes.  However, IPv6 works.
516
517sua:
518	$(TOUCH) ip6 sslnone
519	$(MAKE) an LN=cp SSLTYPE=none
520	$(BUILD) BUILDTYPE=$@ LN=cp IP=$(IP6) SSLTYPE=none
521
522
523# Pine port names, not distinguished in c-client
524
525bs2:	an
526	$(BUILD) BUILDTYPE=bsi
527
528pt1:	an
529	$(BUILD) BUILDTYPE=ptx
530
531
532# Compatibility
533
534hxd:
535	$(BUILD) BUILDTYPE=hpx PASSWDTYPE=dce
536
537# Amiga
538
539ami am2 ama amn:
540	$(MAKE) an LN=cp SYSTEM=amiga
541	$(BUILD) BUILDTYPE=$@ LN=cp
542
543
544# Courtesy entries for Microsoft systems
545
546nt:
547	nmake /nologo /f makefile.nt
548
549ntk:
550	nmake /nologo /f makefile.ntk
551
552w2k:
553	nmake /nologo /f makefile.w2k
554
555wce:
556	nmake /nologo /f makefile.wce
557
558
559# SSL build choices
560
561sslnopwd sslunix.nopwd sslsco.nopwd:
562	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
563	@echo + Building in full compliance with RFC 3501 security
564	@echo + requirements:
565	@echo ++ TLS/SSL encryption is supported
566	@echo ++ Unencrypted plaintext passwords are prohibited
567	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
568
569sslunix sslsco:
570	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
571	@echo + Building in PARTIAL compliance with RFC 3501 security
572	@echo + requirements:
573	@echo + Compliant:
574	@echo ++ TLS/SSL encryption is supported
575	@echo + Non-compliant:
576	@echo ++ Unencrypted plaintext passwords are permitted
577	@echo +
578	@echo + In order to rectify this problem, you MUST build with:
579	@echo ++ SSLTYPE=$(SSLTYPE).nopwd
580	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
581
582nounenc:
583	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
584	@echo + At your request, this build with unencrypted authentication has
585	@echo + been CANCELLED.
586	@echo + You must start over with a new make command.
587	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
588
589
590sslnone:
591	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
592	@echo + Building in NON-COMPLIANCE with RFC 3501 security requirements:
593	@echo + Non-compliant:
594	@echo ++ TLS/SSL encryption is NOT supported
595	@echo ++ Unencrypted plaintext passwords are permitted
596	@echo +
597	@echo + In order to rectify this problem, you MUST build with:
598	@echo ++ SSLTYPE=nopwd
599	@echo + You must also have OpenSSL or equivalent installed.
600	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
601
602nonossl:
603	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
604	@echo + At your request, this build with no TLS/SSL support has been
605	@echo + CANCELLED.
606	@echo + You must start over with a new make command.
607	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
608
609
610# IP build choices
611
612ip4:
613	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
614	@echo + Building with IPv4 support
615	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
616
617ip6:
618	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
619	@echo + Building with IPv6 support
620	@echo +
621	@echo + NOTE: Some versions of glibc have a bug in the getaddrinfo
622	@echo + call which does DNS name resolution.  This bug causes host
623	@echo + names to be canonicalized incorrectly, as well as doing an
624	@echo + unnecessary and performance-sapping reverse DNS call.  This
625	@echo + problem does not affect the IPv4 gethostbyname call.
626	@echo +
627	@echo + getaddrinfo works properly on Mac OS X and Windows.  However,
628	@echo + the problem has been observed on some Linux systems.
629	@echo +
630	@echo + If you answer n to the following question the build will be
631	@echo + cancelled and you must rebuild.  If you did not specify IPv6
632	@echo + yourself, try adding IP6=4 to the make command line.
633	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
634	@echo
635	@echo Do you want to build with IPv6 anyway?  Type y or n please:
636	@$(SH) -c 'read x; case "$$x" in y) exit 0;; *) (make noip6;exit 1);; esac'
637	@echo OK, I will remember that you really want to build with IPv6.
638	@echo You will not see this message again.
639	@$(TOUCH) ip6
640
641noip6:
642	$(MAKE) clean
643	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
644	@echo + At your request, this build with IPv6 has been CANCELLED.
645	@echo + You must start over with a new make command.
646	@echo +
647	@echo + If you wish to rebuild without IPv6 support, do one of the
648	@echo + following:
649	@echo +
650	@echo + 1. If you specified IP=6 on the make command line, omit it.
651	@echo +
652	@echo + 2. Some of the Linux builds automatically select IPv6.  If
653	@echo + you choose one of those builds, add IP6=4 to the make command
654	@echo + line.  Note that this is IP6=4, not IP=4.
655	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
656
657# C compiler types
658
659an ua:
660	@$(MAKE) ssl$(SSLTYPE)
661	@echo Applying $@ process to sources...
662	$(TOOLS)/$@ "$(LN)" src/c-client c-client
663	$(TOOLS)/$@ "$(LN)" src/ansilib c-client
664	$(TOOLS)/$@ "$(LN)" src/charset c-client
665	$(TOOLS)/$@ "$(LN)" src/osdep/$(SYSTEM) c-client
666	$(TOOLS)/$@ "$(LN)" src/mtest mtest
667	$(TOOLS)/$@ "$(LN)" src/ipopd ipopd
668	$(TOOLS)/$@ "$(LN)" src/imapd imapd
669	$(TOOLS)/$@ "$(LN)" src/mailutil mailutil
670	$(TOOLS)/$@ "$(LN)" src/mlock mlock
671	$(TOOLS)/$@ "$(LN)" src/dmail dmail
672	$(TOOLS)/$@ "$(LN)" src/tmail tmail
673	$(LN) $(TOOLS)/$@ .
674
675build:	OSTYPE rebuild rebuildclean
676
677OSTYPE:
678	@$(MAKE) ip$(IP)
679	@echo Building c-client for $(BUILDTYPE)...
680	@$(TOUCH) SPECIALS
681	echo `$(CAT) SPECIALS` $(EXTRASPECIALS) > c-client/SPECIALS
682	$(CD) c-client;$(MAKE) $(BUILDTYPE) EXTRACFLAGS='$(EXTRACFLAGS)'\
683	 EXTRALDFLAGS='$(EXTRALDFLAGS)'\
684	 EXTRADRIVERS='$(EXTRADRIVERS)'\
685	 EXTRAAUTHENTICATORS='$(EXTRAAUTHENTICATORS)'\
686	 PASSWDTYPE=$(PASSWDTYPE) SSLTYPE=$(SSLTYPE) IP=$(IP)\
687	 $(SPECIALS) $(EXTRASPECIALS)
688	echo $(BUILDTYPE) > OSTYPE
689	$(TOUCH) rebuild
690
691rebuild:
692	@$(SH) -c '(test $(BUILDTYPE) = rebuild -o $(BUILDTYPE) = `$(CAT) OSTYPE`) || (echo Already built for `$(CAT) OSTYPE` -- you must do \"make clean\" first && exit 1)'
693	@echo Rebuilding c-client for `$(CAT) OSTYPE`...
694	@$(TOUCH) SPECIALS
695	$(CD) c-client;$(MAKE) all CFLAGS="`$(CAT) CFLAGS`" `$(CAT) SPECIALS`
696
697rebuildclean:
698	$(SH) -c '$(RM) rebuild || true'
699
700bundled:
701	@echo Building bundled tools...
702	$(CD) mtest;$(MAKE)
703	$(CD) ipopd;$(MAKE)
704	$(CD) imapd;$(MAKE)
705	$(CD) mailutil;$(MAKE)
706	@$(SH) -c '(test -f /usr/include/sysexits.h ) || make sysexitwarn'
707	$(CD) mlock;$(MAKE) || true
708	$(CD) dmail;$(MAKE) || true
709	$(CD) tmail;$(MAKE) || true
710
711
712sysexitwarn:
713	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
714	@echo + Hmm...it does not look like /usr/include/sysexits.h exists.
715	@echo + Either your system is too ancient to have the sysexits.h
716	@echo + include, or your C compiler gets it from some other location
717	@echo + than /usr/include.  If your system is too old to have the
718	@echo + sysexits.h include, you will not be able to build the
719	@echo + following programs.
720	@echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
721
722clean:
723	@echo Removing old processed sources and binaries...
724	$(SH) -c '$(RM) an ua OSTYPE SPECIALS c-client mtest imapd ipopd mailutil mlock dmail tmail || true'
725	$(CD) tools;$(MAKE) clean
726
727
728# A monument to a hack of long ago and far away...
729love:
730	@echo not war?
731