From: James Carlson Date: Sat, 7 Sep 2002 05:15:25 +0000 (+0000) Subject: Added ability to detect and use either gcc or Sun WorkShop C compiler X-Git-Tag: ppp-2.4.7~397 X-Git-Url: http://git.ozlabs.org/?p=ppp.git;a=commitdiff_plain;h=fcec736c6140de7ac8fa9a8fe425932d13b0e45a Added ability to detect and use either gcc or Sun WorkShop C compiler on Solaris. Added support for Solaris 10. Quieted down warning in ppp_comp.c due to bad preprocessor usage. Quieted WorkShop warnings in options.c (casting of void * to function) and pppd.h (constant too large). Tested in 32 and 64 bit modes with gcc and WorkShop. --- diff --git a/chat/Makefile.sol2 b/chat/Makefile.sol2 index f566cc6..10d3314 100644 --- a/chat/Makefile.sol2 +++ b/chat/Makefile.sol2 @@ -2,7 +2,7 @@ # Makefile for chat on Solaris 2 # -include ../solaris/Makedefs +include ../Makedefs.com CFLAGS = $(COPTS) -DNO_USLEEP -DSOL2 diff --git a/configure b/configure index 6238cf6..2744f4e 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: configure,v 1.28 2002/01/22 16:02:56 dfs Exp $ +# $Id: configure,v 1.29 2002/09/07 05:15:25 carlsonj Exp $ # if [ -d /NextApps ]; then # system="NeXTStep" @@ -20,15 +20,35 @@ case $system in case $release in # [0-3]*) state="ancient";; # 4*) state="known"; ksrc="sunos4"; makext="sunos4";; - 5.[1-6]*) state="known"; ksrc="solaris"; makext="sol2";; - 5.[7-9]*) state="known"; ksrc="solaris"; makext="sol2"; + 5.[7-9]*|5.[1-9][0-9]) state="known"; ksrc="solaris"; makext="sol2"; case $arch in - sun4u) lp64='y';; + sun4u) archvariant='-64';; *) ;; esac;; - esac;; - NetBSD|FreeBSD|ULTRIX|OSF1|NeXTStep|SINIX-?|UNIX_SV|UNIX_System_V) - state="notincluded";; + 5.[1-6]*) state="known"; ksrc="solaris"; makext="sol2";; + esac + if [ -x /opt/SUNWspro/bin/cc ] && + /opt/SUNWspro/bin/cc -flags >/dev/null 2>&1; then + : # use Sun WorkShop compiler + elif gcc --version >/dev/null 2>&1; then + archvariant=gcc$archvariant + compiletype=.gcc + if [ "$arch" = "sun4u" ]; then + ( cd /tmp; touch ppp$$.c + gcc -c -m64 ppp$$.c >/dev/null 2>&1 || ( + echo "gcc is unable to make 64 bit modules, and your $arch system needs them." + echo "consider upgrading gcc on this machine, or switching to Sun WorkShop." + rm -f ppp$$.c + exit 1 + ) || exit 1 + rm -f ppp$$.c ppp$$.o + ) || exit 1 + fi + else + echo "C compiler not found; hoping for the best." + fi;; + NetBSD|FreeBSD|ULTRIX|OSF1|NeXTStep|SINIX-?|UNIX_SV|UNIX_System_V) + state="notincluded";; # NetBSD) # makext="bsd"; # case $release in @@ -111,26 +131,14 @@ case $state in echo "in this distribution. Sorry.";; esac -orig_makext=$makext - if [ -d "$ksrc" ]; then echo "Creating links to Makefiles." rm -f Makefile ln -s $ksrc/Makefile.top Makefile echo " Makefile -> $ksrc/Makefile.top" - if [ "$ksrc" = solaris ]; then - # Point to 64-bit Makefile extension - if [ "$lp64" = y ]; then - makext=$makext-64 - fi - rm -f $ksrc/Makefile - ln -s Makefile.$makext $ksrc/Makefile - echo " $ksrc/Makefile -> Makefile.$makext" - # Restore extension - if [ "$lp64" = y ]; then - makext=$orig_makext - fi - fi + rm -f Makedefs.com + ln -s $ksrc/Makedefs$compiletype Makedefs.com + echo " $ksrc/Makedefs$compiletype -> Makedefs.com" for dir in pppd pppstats chat pppdump pppd/plugins pppd/plugins/rp-pppoe pppd/plugins/radius; do rm -f $dir/Makefile if [ -f $dir/Makefile.$makext ]; then @@ -138,4 +146,13 @@ if [ -d "$ksrc" ]; then echo " $dir/Makefile -> Makefile.$makext" fi done + if [ "$archvariant" ]; then + makext=$makext$archvariant + rm -f $ksrc/Makefile + ln -s Makefile.$makext $ksrc/Makefile + echo " $ksrc/Makefile -> Makefile.$makext" + fi +else + echo "Unable to locate kernel source $ksrc" + exit 1 fi diff --git a/modules/ppp_comp.c b/modules/ppp_comp.c index 7c475ef..87d0c1d 100644 --- a/modules/ppp_comp.c +++ b/modules/ppp_comp.c @@ -24,7 +24,7 @@ * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, * OR MODIFICATIONS. * - * $Id: ppp_comp.c,v 1.12 1999/09/15 23:49:06 masputra Exp $ + * $Id: ppp_comp.c,v 1.13 2002/09/07 05:15:25 carlsonj Exp $ */ /* @@ -616,7 +616,7 @@ ppp_comp_wsrv(q) if (!bcanputnext(q,mp->b_band)) #else if (!canputnext(q)) -#endif PRIOQ +#endif /* PRIOQ */ { putbq(q, mp); break; @@ -694,7 +694,7 @@ ppp_comp_wsrv(q) if (cmp != NULL) { #ifdef PRIOQ cmp->b_band=mp->b_band; -#endif PRIOQ +#endif /* PRIOQ */ freemsg(mp); mp = cmp; } diff --git a/pppd/Makefile.sol2 b/pppd/Makefile.sol2 index 2f32aaf..83b23af 100644 --- a/pppd/Makefile.sol2 +++ b/pppd/Makefile.sol2 @@ -1,11 +1,10 @@ # # Makefile for pppd under Solaris 2. -# $Id: Makefile.sol2,v 1.21 2002/05/21 17:26:48 dfs Exp $ +# $Id: Makefile.sol2,v 1.22 2002/09/07 05:15:25 carlsonj Exp $ # -include ../solaris/Makedefs +include ../Makedefs.com -COPTS += -xO2 -xspace -W0,-Lt CFLAGS = -I../include -DSVR4 -DSOL2 $(COPTS) LIBS = -lsocket -lnsl diff --git a/pppd/options.c b/pppd/options.c index 5073ed7..d17df58 100644 --- a/pppd/options.c +++ b/pppd/options.c @@ -17,7 +17,7 @@ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ -#define RCSID "$Id: options.c,v 1.85 2002/07/18 15:25:04 dfs Exp $" +#define RCSID "$Id: options.c,v 1.86 2002/09/07 05:15:25 carlsonj Exp $" #include #include @@ -902,7 +902,9 @@ print_option(opt, mainopt, printer, arg) void (*oprt) __P((option_t *, void ((*)__P((void *, char *, ...))), void *)); - oprt = opt->addr2; + oprt = (void (*) __P((option_t *, + void ((*)__P((void *, char *, ...))), + void *)))opt->addr2; (*oprt)(opt, printer, arg); } else if (opt->flags & OPT_A2STRVAL) { p = (char *) opt->addr2; diff --git a/pppd/plugins/Makefile.sol2 b/pppd/plugins/Makefile.sol2 index ee04761..bc7d85d 100644 --- a/pppd/plugins/Makefile.sol2 +++ b/pppd/plugins/Makefile.sol2 @@ -1,10 +1,10 @@ # # Makefile for plugins on Solaris 2 # -# $Id: Makefile.sol2,v 1.2 1999/11/17 03:49:27 paulus Exp $ +# $Id: Makefile.sol2,v 1.3 2002/09/07 05:15:25 carlsonj Exp $ # -include ../../svr4/Makedefs +include ../../Makedefs.com CFLAGS = -c -O -I.. -I../../include $(COPTS) LDFLAGS = -G diff --git a/pppd/pppd.h b/pppd/pppd.h index 1a5a109..fde104b 100644 --- a/pppd/pppd.h +++ b/pppd/pppd.h @@ -16,7 +16,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: pppd.h,v 1.72 2002/09/01 12:00:15 dfs Exp $ + * $Id: pppd.h,v 1.73 2002/09/07 05:15:25 carlsonj Exp $ */ /* @@ -79,7 +79,7 @@ typedef struct { enum opt_type type; void *addr; char *description; - int flags; + unsigned int flags; void *addr2; int upper_limit; int lower_limit; @@ -120,7 +120,7 @@ typedef struct { #define OPT_A2PRINTER 0x10000000 /* *addr2 is a fn for printing option */ #define OPT_A2STRVAL 0x20000000 /* *addr2 points to current string value */ #define OPT_NOPRINT 0x40000000 /* don't print this option at all */ -#define OPT_A3OR 0x80000000 /* addr3 -> third location to rcv | value */ +#define OPT_A3OR 0x80000000u /* addr3 -> third location to rcv | value */ #define OPT_VAL(x) ((x) & OPT_VALUE) diff --git a/pppd/sys-solaris.c b/pppd/sys-solaris.c index dc2fe2b..f97b82b 100644 --- a/pppd/sys-solaris.c +++ b/pppd/sys-solaris.c @@ -42,12 +42,13 @@ * OR MODIFICATIONS. */ -#define RCSID "$Id: sys-solaris.c,v 1.7 2002/02/12 20:07:09 dfs Exp $" +#define RCSID "$Id: sys-solaris.c,v 1.8 2002/09/07 05:15:25 carlsonj Exp $" #include #include #include #include +#include #include #include #include diff --git a/pppdump/Makefile.sol2 b/pppdump/Makefile.sol2 index 5549beb..e9196f6 100644 --- a/pppdump/Makefile.sol2 +++ b/pppdump/Makefile.sol2 @@ -1,9 +1,9 @@ # # pppdump Makefile for SVR4 systems -# $Id: Makefile.sol2,v 1.3 2000/04/18 23:51:27 masputra Exp $ +# $Id: Makefile.sol2,v 1.4 2002/09/07 05:15:25 carlsonj Exp $ # -include ../solaris/Makedefs +include ../Makedefs.com CFLAGS= $(COPTS) -I../include/net OBJS = pppdump.o bsd-comp.o deflate.o zlib.o diff --git a/pppstats/Makefile.sol2 b/pppstats/Makefile.sol2 index ace1a24..e0093a5 100644 --- a/pppstats/Makefile.sol2 +++ b/pppstats/Makefile.sol2 @@ -1,9 +1,9 @@ # # pppstats Makefile for SVR4 systems -# $Id: Makefile.sol2,v 1.9 2000/04/18 23:51:27 masputra Exp $ +# $Id: Makefile.sol2,v 1.10 2002/09/07 05:15:25 carlsonj Exp $ # -include ../solaris/Makedefs +include ../Makedefs.com CFLAGS = -DSTREAMS -I../include $(COPTS) diff --git a/solaris/Makedefs b/solaris/Makedefs index 81db8ab..f5ac9c7 100644 --- a/solaris/Makedefs +++ b/solaris/Makedefs @@ -8,9 +8,5 @@ BINDIR = /usr/local/bin MANDIR = /usr/local/man ETCDIR = /etc/ppp +CC = /opt/SUNWspro/bin/cc COPTS = -O -Xa - -# For compiling with gcc, comment out the COPTS definition above and -# uncomment the next 2 definitions. -#CC = gcc -#COPTS = -O2 diff --git a/solaris/Makedefs.gcc b/solaris/Makedefs.gcc new file mode 100644 index 0000000..e24152f --- /dev/null +++ b/solaris/Makedefs.gcc @@ -0,0 +1,12 @@ +# +# defines common to several Makefiles +# + +INSTALL= /usr/sbin/install + +BINDIR = /usr/local/bin +MANDIR = /usr/local/man +ETCDIR = /etc/ppp + +CC = gcc +COPTS = -O2 diff --git a/solaris/Makedefs.sol2 b/solaris/Makedefs.sol2 index ee57da0..a0417bd 100644 --- a/solaris/Makedefs.sol2 +++ b/solaris/Makedefs.sol2 @@ -1,10 +1,10 @@ # # Generic make definitions for Solaris 2 # -# $Id: Makedefs.sol2,v 1.1 2000/04/18 23:51:27 masputra Exp $ +# $Id: Makedefs.sol2,v 1.2 2002/09/07 05:15:25 carlsonj Exp $ # -include ../solaris/Makedefs +include ../Makedefs.com CPPFLAGS = -D_KERNEL -DSVR4 -DSOL2 -DPRIOQ -DDEBUG -I../include CFLAGS = $(CPPFLAGS) $(COPTS) diff --git a/solaris/Makefile.sol2gcc b/solaris/Makefile.sol2gcc new file mode 100644 index 0000000..0eb97ad --- /dev/null +++ b/solaris/Makefile.sol2gcc @@ -0,0 +1,64 @@ +# +# Makefile for STREAMS modules for Solaris 2. +# +# $Id: Makefile.sol2gcc,v 1.1 2002/09/07 05:15:25 carlsonj Exp $ +# + +include Makedefs.sol2 + +COMP_OBJS = ppp_comp.o bsd-comp.o deflate.o zlib.o vjcompress.o \ + ppp_comp_mod.o + +all: ppp ppp_ahdl ppp_comp + +ppp: ppp.o ppp_mod.o + ld -r -o $@ ppp.o ppp_mod.o + chmod +x $@ + +ppp_ahdl: ppp_ahdlc.o ppp_ahdlc_mod.o + ld -r -o $@ ppp_ahdlc.o ppp_ahdlc_mod.o + chmod +x $@ + +ppp_comp: $(COMP_OBJS) + ld -r -o $@ $(COMP_OBJS) + chmod +x $@ + +bsd-comp.o: ../modules/bsd-comp.c + $(CC) $(CFLAGS) -c $? +deflate.o: ../modules/deflate.c + $(CC) $(CFLAGS) -c $? +ppp.o: ppp.c + $(CC) $(CFLAGS) -c $? +ppp_mod.o: ppp_mod.c + $(CC) $(CFLAGS) -c $? +ppp_ahdlc_mod.o: ppp_ahdlc_mod.c + $(CC) $(CFLAGS) -c $? +ppp_ahdlc.o: ppp_ahdlc.c + $(CC) $(CFLAGS) -c $? +ppp_comp.o: ppp_comp.c + $(CC) $(CFLAGS) -c $? +ppp_comp_mod.o: ppp_comp_mod.c + $(CC) $(CFLAGS) -c $? +vjcompress.o: ../modules/vjcompress.c + $(CC) $(CFLAGS) -c $? +zlib.o: ../common/zlib.c + $(CC) $(CFLAGS) -c $? + +install: + cp ppp ppp.conf /kernel/drv + cp ppp_comp ppp_ahdl /kernel/strmod + if grep clone:ppp /etc/minor_perm; then :; else \ + echo clone:ppp 0644 root sys >>/etc/minor_perm; fi + /usr/sbin/rem_drv ppp 2>/dev/null || true + /usr/sbin/add_drv ppp + +SRCS = ppp.c ppp_mod.c ppp_ahdlc.c ppp_ahdlc_mod.c \ + ppp_comp.c ../modules/bsd-comp.c ../modules/deflate.c \ + ../common/zlib.c ../modules/vjcompress.c ppp_comp_mod.c + +lint: + $(LINT32) $(SRCS) + +clean: + rm -f ppp ppp_comp ppp_ahdl *.o *~ core + rm -f *.ln diff --git a/solaris/Makefile.sol2gcc-64 b/solaris/Makefile.sol2gcc-64 new file mode 100644 index 0000000..f826f1a --- /dev/null +++ b/solaris/Makefile.sol2gcc-64 @@ -0,0 +1,85 @@ +# +# Makefile for 64-bit STREAMS modules for Solaris 2. +# +# $Id: Makefile.sol2gcc-64,v 1.1 2002/09/07 05:15:25 carlsonj Exp $ +# + +include Makedefs.sol2 + +# gcc flags for LP64 compilation / linkage +COPTS += -mcpu=v9 -m64 -mcmodel=medlow -mstack-bias -fno-builtin + +# subdirectory where 64-bit objects / binaries will be placed +LP64DIR = sparcv9 + +# Name of legacy Makefile (for 32-bit binaries) +STD_MAKE = Makefile.sol2gcc + +COMP_OBJS = $(LP64DIR)/ppp_comp.o $(LP64DIR)/bsd-comp.o \ + $(LP64DIR)/deflate.o $(LP64DIR)/zlib.o $(LP64DIR)/vjcompress.o \ + $(LP64DIR)/ppp_comp_mod.o + +all: std_objs $(LP64DIR) ppp ppp_ahdl ppp_comp + +std_objs: + $(MAKE) -f $(STD_MAKE) all + +ppp: $(LP64DIR)/ppp.o $(LP64DIR)/ppp_mod.o + ld -r -o $(LP64DIR)/$@ $(LP64DIR)/ppp.o $(LP64DIR)/ppp_mod.o + chmod +x $(LP64DIR)/$@ + +ppp_ahdl: $(LP64DIR)/ppp_ahdlc.o $(LP64DIR)/ppp_ahdlc_mod.o + ld -r -o $(LP64DIR)/$@ $(LP64DIR)/ppp_ahdlc.o $(LP64DIR)/ppp_ahdlc_mod.o + chmod +x $(LP64DIR)/$@ + +ppp_comp: $(COMP_OBJS) + ld -r -o $(LP64DIR)/$@ $(COMP_OBJS) + chmod +x $(LP64DIR)/$@ + +$(LP64DIR)/bsd-comp.o: ../modules/bsd-comp.c + $(CC) $(CFLAGS) -c $? -o $@ +$(LP64DIR)/deflate.o: ../modules/deflate.c + $(CC) $(CFLAGS) -c $? -o $@ +$(LP64DIR)/ppp.o: ppp.c + $(CC) $(CFLAGS) -c $? -o $@ +$(LP64DIR)/ppp_mod.o: ppp_mod.c + $(CC) $(CFLAGS) -c $? -o $@ +$(LP64DIR)/ppp_ahdlc_mod.o: ppp_ahdlc_mod.c + $(CC) $(CFLAGS) -c $? -o $@ +$(LP64DIR)/ppp_ahdlc.o: ppp_ahdlc.c + $(CC) $(CFLAGS) -c $? -o $@ +$(LP64DIR)/ppp_comp.o: ppp_comp.c + $(CC) $(CFLAGS) -c $? -o $@ +$(LP64DIR)/ppp_comp_mod.o: ppp_comp_mod.c + $(CC) $(CFLAGS) -c $? -o $@ +$(LP64DIR)/vjcompress.o: ../modules/vjcompress.c + $(CC) $(CFLAGS) -c $? -o $@ +$(LP64DIR)/zlib.o: ../common/zlib.c + $(CC) $(CFLAGS) -c $? -o $@ + +$(LP64DIR): + mkdir -m 755 -p $@ + +install: + cp ppp ppp.conf /kernel/drv + cp ppp_comp ppp_ahdl /kernel/strmod + cp $(LP64DIR)/ppp /kernel/drv/$(LP64DIR) + cp $(LP64DIR)/ppp_comp $(LP64DIR)/ppp_ahdl /kernel/strmod/$(LP64DIR) + if grep clone:ppp /etc/minor_perm; then :; else \ + echo clone:ppp 0644 root sys >>/etc/minor_perm; fi + /usr/sbin/rem_drv ppp 2>/dev/null || true + /usr/sbin/add_drv ppp + +SRCS = ppp.c ppp_mod.c ppp_ahdlc.c ppp_ahdlc_mod.c \ + ppp_comp.c ../modules/bsd-comp.c ../modules/deflate.c \ + ../common/zlib.c ../modules/vjcompress.c ppp_comp_mod.c + +lint: + $(LINT64) $(SRCS) + +lint-32: + $(LINT32) $(SRCS) + +clean: + $(MAKE) -f $(STD_MAKE) clean + rm -f $(LP64DIR)/ppp $(LP64DIR)/ppp_comp $(LP64DIR)/ppp_ahdl $(LP64DIR)/*.o $(LP64DIR)/*~ $(LP64DIR)/core