#!/bin/sh # # $Id: build 14054 2005-05-04 21:22:22Z jpf $ # # T H E P I N E M A I L S Y S T E M # # Laurence Lundblade and Mike Seibel # Networks and Distributed Computing # Computing and Communications # University of Washington # Administration Building, AG-44 # Seattle, Washington, 98195, USA # Internet: lgl@CAC.Washington.EDU # mikes@CAC.Washington.EDU # # Please address all bugs and comments to "pine-bugs@cac.washington.edu" # # # Pine and Pico are registered trademarks of the University of Washington. # No commercial use of these trademarks may be made without prior written # permission of the University of Washington. # # Pine, Pico, and Pilot software and its included text are Copyright # 1989-2004 by the University of Washington. # # The full text of our legal notices is contained in the file called # CPYRIGHT, included with this distribution. # # # Pine is in part based on The Elm Mail System: # *********************************************************************** # * The Elm Mail System - Revision: 2.13 * # * * # * Copyright (c) 1986, 1987 Dave Taylor * # * Copyright (c) 1988, 1989 USENET Community Trust * # *********************************************************************** # # # # General build script for Pine # cat > .bld.hlp < may be one of the ports listed in doc/pine-ports or clean Clean up object files and such. Also, a good way to rebuild Pine/Pico from scratch. See the README file for more information. EOF # If no args, build what was built last time. if [ $# -eq 0 ] then if [ -f .bld.args ] then set `cat .bld.args` fi else rm -f .bld.args fi L1= L2= K1= K2= S1= S2= S3= S4= CERTSD= NOSSL= # We will complain if we pass "none", # but this gets overridden if we find the ssl dir SSL=none DEFSSLD=/usr/local/ssl SSLD= NOCC= LLIBS= LFLAGS= NOLDAP= GDIR= AAFLAGS= SAFLAGS= PINEEXTRAC= ALTDOCPATHS= maketarg="no-target" PHOME=`pwd` for var in "$@"; do case "$var" in help) cat .bld.hlp exit ;; clean|???) if [ $maketarg != no-target ] then echo "Can only make one target system at a time" echo Both \""$maketarg"\" and \""$var"\" were given exit else maketarg="$var" fi ;; NOSSL) NOSSL=1 NSSL=NOSSL SSL="none" ;; NOLDAP) NOLDAP=1 NLDAP=NOLDAP ;; SSLTYPE=*) SAFLAGS=1 SSL=`echo "$var" | cut -c9-` if [ "$SSL" = "none" ] then NOSSL=1 NSSL=NOSSL fi ;; *) makeargs="$makeargs '$var'" case "$var" in CC=*) NOCC=1 ;; LDAPLIBS=*) LLIBS=1 ;; LDAPCFLAGS=*) LFLAGS=1 ;; GSSDIR=*) GDIR=1 K1="$var" ;; EXTRAAUTHENTICATORS=*) AAFLAGS=1 ;; SSLDIR=*) SSLD=`echo "$var" | cut -c8-` ;; SSLCERTS=*) CERTSD=`echo "$var" | cut -c10-` S2="$var" ;; SSLINCLUDE=*) S3="$var" ;; SSLLIB=*) S4="$var" ;; esac ;; esac done if [ $# -ne 0 ] then case $maketarg in ???) echo "$makeargs" "$NSSL" "$NLDAP" $maketarg > .bld.args ;; esac fi # Set up correct compiler if [ "$NOCC" != "1" ] then case $maketarg in sol) echo "\"Sol\" port no longer exists. Use \"so4\" for Solaris version 2.4 or" echo "lower (SunOS 5.4 or lower) and \"so5\" for Solaris version 2.5 or" echo "higher (SunOS 5.5 or higher)." exit;; gso) echo "\"Gso\" port no longer exists. Use \"gs4\" for Solaris version 2.4 or" echo "lower (SunOS 5.4 or lower) and \"gs5\" for Solaris version 2.5 or" echo "higher (SunOS 5.5 or higher)." exit;; cyg) echo "Use the \"buildcyg\" script instead of the \"build\" script." exit;; ga4) makeargs="CC=gcc $makeargs" ;; gh9) makeargs="CC=gcc $makeargs" ;; ghp) makeargs="CC=gcc $makeargs" ;; go5) makeargs="CC=gcc $makeargs" ;; gs4) makeargs="CC=gcc $makeargs" ;; gs5) makeargs="CC=gcc $makeargs" ;; gsc) makeargs="CC=gcc $makeargs" ;; gsu) makeargs="CC=gcc $makeargs" ;; gul) makeargs="CC=gcc $makeargs" ;; mnt) makeargs="CC=gcc $makeargs" ;; bs3) makeargs="CC=shlicc $makeargs" ;; nto) makeargs="CC=qcc $makeargs" ;; lyn) [ -f /CYGNUS.bash ] && . /CYGNUS.bash; makeargs="CC=gcc $makeargs" ;; *) makeargs="CC=cc $makeargs" ;; esac fi # Some ports are common for pico (for example) but different for pine. # For example, port hxd uses hpp port for pico, hpx port for pine, and a # separate hxd port for c-client. Not all of these have been verified to work. case $maketarg in aos) ccltarg=$maketarg; picotarg=bsd; pinetarg=$picotarg ;; bs2) ccltarg=bsi; picotarg=$maketarg; pinetarg=$maketarg ;; bs3) ccltarg=$maketarg; picotarg=bs2; pinetarg=bs2 ;; bso) ccltarg=$maketarg; picotarg=$maketarg; pinetarg=$picotarg ; DEFSSLD=/usr ; CERTSD=/etc/ssl/certs ;; d41) ccltarg=$maketarg; picotarg=d-g; pinetarg=$picotarg ;; d54) ccltarg=$maketarg; picotarg=d-g; pinetarg=$picotarg ;; ghp) ccltarg=$maketarg; picotarg=gh9; pinetarg=$maketarg ;; go5) ccltarg=$maketarg; picotarg=$maketarg; pinetarg=sc5 ;; gs4) ccltarg=gso; picotarg=gso; pinetarg=$maketarg ;; gs5) ccltarg=gso; picotarg=gso; pinetarg=$maketarg ;; gsc) ccltarg=$maketarg; picotarg=sco; pinetarg=sco ;; hpx) ccltarg=$maketarg; picotarg=hpp; pinetarg=$maketarg ;; hxd) ccltarg=$maketarg; picotarg=hpp; pinetarg=hpx ;; ldb) ccltarg=$maketarg; picotarg=lnx; pinetarg=$picotarg ; DEFSSLD=/usr ; CERTSD=/etc/ssl/certs ; ALTDOCPATHS=1 ;; lnp) ccltarg=$maketarg; picotarg=lnx; pinetarg=$picotarg ;; lrh) ccltarg=$maketarg; picotarg=lnx; pinetarg=$picotarg ; DEFSSLD=/usr/share/ssl ; ALTDOCPATHS=1 ;; lmd) ccltarg=$maketarg; picotarg=lnx; pinetarg=$picotarg ; DEFSSLD=/usr/lib/ssl ; ALTDOCPATHS=1 ;; lsu) ccltarg=$maketarg; picotarg=lnx; pinetarg=$picotarg ; DEFSSLD=/usr/share/ssl ;; nx3) ccltarg=$maketarg; picotarg=nxt; pinetarg=$picotarg ;; ox2) ccltarg=osx; picotarg=osx; pinetarg=$picotarg ; DEFSSLD=/System/Library/OpenSSL ;; osx) ccltarg=oxp; picotarg=$maketarg; pinetarg=$picotarg ; DEFSSLD=/System/Library/OpenSSL ;; os4) ccltarg=$maketarg; picotarg=osf; pinetarg=$picotarg ;; pt1) ccltarg=ptx; picotarg=$maketarg; pinetarg=$maketarg ;; shp) ccltarg=$maketarg; picotarg=hpp; pinetarg=$picotarg ;; sg6) ccltarg=$maketarg; picotarg=sgi; pinetarg=$picotarg ;; slx) ccltarg=$maketarg; picotarg=lnx; pinetarg=$picotarg ;; sl4) ccltarg=$maketarg; picotarg=lnx; pinetarg=$picotarg ;; sl5) ccltarg=$maketarg; picotarg=lnx; pinetarg=$picotarg ;; snx) ccltarg=$maketarg; picotarg=sv4; pinetarg=sv4 ;; so4) ccltarg=sol; picotarg=sol; pinetarg=$maketarg ;; so5) ccltarg=sol; picotarg=sol; pinetarg=$maketarg ;; sos) ccltarg=$maketarg; picotarg=osf; pinetarg=$picotarg ;; ssn) ccltarg=$maketarg; picotarg=sun; pinetarg=$picotarg ;; *) ccltarg=$maketarg; picotarg=$maketarg; pinetarg=$maketarg ;; esac echo "make args are $makeargs" "$maketarg" case $maketarg in ???) echo '' cd "$PHOME" # Try to automatically include LDAP definitions. if [ "$NOLDAP" != "1" -a -f contrib/ldap-setup -a \ \( "$LLIBS" != "1" -o "$LFLAGS" != "1" \) ] then contrib/ldap-setup $pinetarg $maketarg # Allow for override of either of these separately. case "$?" in 1) if [ "$LLIBS" != "1" ] then L1="'LDAPLIBS=../ldap/libraries/libldap.a ../ldap/libraries/liblber.a'" fi if [ "$LFLAGS" != "1" ] then L2="'LDAPCFLAGS=-DENABLE_LDAP -I../ldap/include'" fi echo "Including LDAP functionality" ;; 23) if [ "$LLIBS" != "1" ] then L1="'LDAPLIBS=../ldap/lib/libldap.a ../ldap/lib/liblber.a'" fi if [ "$LFLAGS" != "1" ] then L2="'LDAPCFLAGS=-DENABLE_LDAP -I../ldap/include'" fi echo "Including LDAP functionality" ;; 11) if [ "$LLIBS" != "1" ] then L1="'LDAPLIBS=../ldap/libraries/libldap/.libs/libldap.a ../ldap/libraries/liblber/.libs/liblber.a'" fi if [ "$LFLAGS" != "1" ] then L2="'LDAPCFLAGS=-DENABLE_LDAP -I../ldap/include'" fi echo "Including LDAP functionality" ;; 2) if [ "$LLIBS" != "1" ] then L1="'LDAPLIBS=../ldap/libraries/libldap.a'" fi if [ "$LFLAGS" != "1" ] then L2="'LDAPCFLAGS=-DENABLE_LDAP -I../ldap/include'" fi echo "Including LDAP functionality" ;; 3) if [ "$LLIBS" != "1" ] then L1="'LDAPLIBS=-lldap'" fi if [ "$LFLAGS" != "1" ] then L2="'LDAPCFLAGS=-DENABLE_LDAP'" fi echo "Including LDAP functionality" ;; 4) ;; 5) if [ "$LLIBS" != "1" ] then L1="'LDAPLIBS=-lldap -llber'" fi if [ "$LFLAGS" != "1" ] then L2="'LDAPCFLAGS=-DENABLE_LDAP'" fi echo "Including LDAP functionality" ;; *) exit 30 ;; esac fi # Try to automatically include Kerberos5 definitions. if [ -d krb5 -a -f contrib/krb5-setup -a \ \( "$GDIR" != "1" -o "$AAFLAGS" != "1" \) ] then contrib/krb5-setup $pinetarg $maketarg # Allow for override of either of these separately. case "$?" in 0) if [ "$GDIR" != "1" ] then K1="GSSDIR=\"$PHOME/krb5\"" fi if [ "$AAFLAGS" != "1" ] then K2="'EXTRAAUTHENTICATORS=gss'" fi echo "Including Kerberos5 functionality" ;; *) exit 30 ;; esac fi # Try to automatically include SSL. To prevent SSL from being automatically # included use "build NOSSL target". # Check for nonempty certs directory from OpenSSL. Also check for 8-hexdigit # symlinks. if [ x"$SSLD" = "x" ] then SSLD="$DEFSSLD" fi if [ x"$CERTSD" = "x" ] then CERTSD="$SSLD/certs" fi if [ \( -d "$SSLD" -o -d "$CERTSD" \) -a "$NOSSL" != "1" ] then if [ ! -d "$CERTSD" -o ! -f "$CERTSD"/factory.pem ] then if [ ! -d "$CERTSD" ] then echo "" echo " Directory "$CERTSD" is missing" echo "" SSLWARN=1 else echo " File "$CERTSD"/factory.pem is missing" echo " This might indicate that CA certs did not get properly" echo " installed. If you get certificate validation failures" echo " in Pine, this might be the reason for them." echo "" fi else /bin/ls "$CERTSD" | grep '[0-9A-Za-z][0-9A-Za-z][0-9A-Za-z][0-9A-Za-z][0-9A-Za-z][0-9A-Za-z][0-9A-Za-z][0-9A-Za-z][0-9A-Za-z]*\.0' > /dev/null 2>&1 if [ $? != "0" ] then echo " No 8-hexdigit symlinks in "$CERTSD"" echo " This might indicate that CA certs did not get properly" echo " installed. If you get certificate validation failures" echo " in Pine, this might be the reason for them." echo "" fi fi if [ "$SAFLAGS" != "1" ] then case $maketarg in sco|gsc|sc5|go5) SSL="sco.nopwd" ;; *) SSL="nopwd" ;; esac fi S1="SSLDIR=$SSLD" echo "Including SSL functionality" fi if [ -s c-client ] ; then rm -f c-client ; fi ln -s imap/c-client c-client # if [ -s mtest ] ; then rm -f mtest ; fi # ln -s imap/mtest mtest # if [ -s mailutil ] ; then rm -f mailutil ; fi # ln -s imap/mailutil mailutil # if [ -s imapd ] ; then rm -f imapd ; fi # ln -s imap/imapd imapd # if [ -s ipopd ] ; then rm -f ipopd ; fi # ln -s imap/ipopd ipopd echo "Making c-client library, imapd, and ipopd" echo $S1 $S2 $S3 $S4 $K1 > imap/SPECIALS cd "$PHOME/imap" # This "touch" tells the IMAP make not to give any warnings about IESG compliance. if [ "$NOSSL" = "1" -o "$SSL" != "none" ] ; then touch ssl$SSL ; fi if [ "$NOSSL" != "1" -a "$SSL" = "none" -a ! -f sslnone ] then echo "+-----------------------------------------------------------+" echo "| It appears that you do not have OpenSSL or equivalent |" echo "| installed on this system. |" echo "| |" echo "| Building PINE without SSL support will possibly introduce |" echo "| problems when communicating with IMAP, POP3, or SMTP |" echo "| servers that require TLS or SSL authentication. |" echo "| In addition, your password may be vulnerable to a |" echo "| snooping attack since it may be sent over the network |" echo "| unencrypted. |" echo "+-----------------------------------------------------------+" echo "" echo "Do you want to continue this build anyway? Type y or n please:" read ans case "$ans" in y) echo "Building without SSL ..." touch sslnone ;; *) echo "Terminating build" exit 1 ;; esac fi eval echo eval make "$makeargs" "SSLTYPE=$SSL" "SPECIALS=`cat SPECIALS`" "$K2" $ccltarg eval make "$makeargs" "SSLTYPE=$SSL" "SPECIALS=`cat SPECIALS`" "$K2" $ccltarg rc=$? if [ $rc != "0" ] then echo "+---------------------------------------------+" echo "| Problems building c-client |" echo "| |" echo "| Please check the output above for a |" echo "| possible explanation for this failure |" echo "+---------------------------------------------+" echo "" exit $rc fi echo '' echo "Making Pico and Pilot" cd "$PHOME/pico" eval echo make "$makeargs" -f makefile.$picotarg eval make "$makeargs" -f makefile.$picotarg rc=$? if [ $rc != "0" ] ; then exit $rc ; fi echo '' echo "Making Pine and rpload/rpdump". if [ "$ALTDOCPATHS" = "1" ] then cd "$PHOME" rm .pine.sedargs echo -n " -e s/\/usr\/local\/lib\/pine.conf/\/etc\/pine.conf/" > .pine.sedargs echo -n " -e s/\/usr\/local\/lib\/pine.info/\/etc\/pine.info/" >> .pine.sedargs echo -n " -e s/\/usr\/lib\/sendmail/\/usr\/sbin\/sendmail/" >> .pine.sedargs echo -n " -e s/\/usr\/spool\/news/\/var\/spool\/news/" >> .pine.sedargs echo -n " -e s/\/usr\/spool\/mail/\/var\/spool\/mail/" >> .pine.sedargs echo -n " -e s/\/bin\/passwd/\/usr\/bin\/passwd/" >> .pine.sedargs PINEEXTRAC="'LOCALPINECFLAGS=-DSYSTEM_PINERC=\\\"/etc/pine.conf\\\" -DSYSTEM_PINERC_FIXED=\\\"/etc/pine.conf.fixed\\\" -DSYSTEM_PINE_INFO_PATH=\\\"/etc/pine.info\\\"'" fi cd "$PHOME/pine" eval echo make "$makeargs" "$L1" "$L2" "$PINEEXTRAC" -f makefile.$pinetarg eval make "$makeargs" "$L1" "$L2" "$PINEEXTRAC" -f makefile.$pinetarg rc=$? if [ $rc != "0" ] ; then exit $rc ; fi cd "$PHOME" if [ ! -d bin ] ; then mkdir bin; fi cd "$PHOME/bin" rm -f pine mtest imapd mailutil pico pilot rpload rpdump ipop2d ipop3d if [ -s ../pine/pine ] ; then ln ../pine/pine pine ; fi # if [ -s ../mtest/mtest ] ; then ln ../mtest/mtest mtest ; fi # if [ -s ../mailutil/mailutil ] ; then ln ../mailutil/mailutil mailutil ; fi # if [ -s ../imapd/imapd ] ; then ln ../imapd/imapd imapd ; fi # if [ -s ../ipopd/ipop2d ] ; then ln ../ipopd/ipop2d ipop2d ; fi # if [ -s ../ipopd/ipop3d ] ; then ln ../ipopd/ipop3d ipop3d ; fi if [ -s ../pico/pico ] ; then ln ../pico/pico pico ; fi if [ -s ../pico/pilot ] ; then ln ../pico/pilot pilot ; fi # if [ -s ../pine/rpload ] ; then ln ../pine/rpload rpload ; fi # if [ -s ../pine/rpdump ] ; then ln ../pine/rpdump rpdump ; fi if [ "$ALTDOCPATHS" = "1" ] then echo "making local docs" echo "sed `cat ../.pine.sedargs` < ../doc/pine.1 > pine.1" sed `cat ../.pine.sedargs` < ../doc/pine.1 > pine.1 echo "sed `cat ../.pine.sedargs` < ../doc/tech-notes.txt > tech-notes.txt" sed `cat ../.pine.sedargs` < ../doc/tech-notes.txt > tech-notes.txt fi cd "$PHOME" echo '' echo "Links to executables are in bin directory:" size bin/pine bin/pico bin/pilot case $maketarg in mnt) echo "Fixing stacksizes ..." fixstk 64K bin/pine bin/pico bin/pilot esac if [ "$SSLWARN" = "1" ] then echo "" echo " +---------------------------------------------------------+" echo " | |" echo " | WARNING. Certificates may not be installed correctly |" echo " | in $CERTSD. This may cause Pine SSL/TLS |" echo " | connections to fail because Pine may not be able to |" echo " | verify the authenticity of the certificates on the |" echo " | server. To compile Pine without SSL support use |" echo " | |" echo " | build NOSSL target |" echo " | |" echo " +---------------------------------------------------------+" echo "" fi echo "Done" ;; clean) # This only sort of works rm -f c-client mtest mailutil imapd ipopd .pine.sedargs echo "Cleaning c-client and imapd" cd "$PHOME/imap" make clean # this list of ssl* files matches with imap/Makefile rm -f sslnopwd sslunix.nopwd sslsco.nopwd sslunix sslsco sslnone echo "Cleaning Pine" cd "$PHOME/pine" make -f makefile.bsf clean echo "Cleaning pico" cd "$PHOME/pico" make $makeargs -f makefile.bsf clean echo "Done" cd "$PHOME" ;; no-target) echo "No target plaform for which to build Pine given." echo 'Give command "build help" for help.' ;; *) echo 'Do not know how to make Pine for target "'$maketarg'".' ;; esac