Thanks to the fine work of Russell Bryant and Dancho Lazarov, we now have autoconf...
authorKevin P. Fleming <kpfleming@digium.com>
Mon, 24 Apr 2006 17:11:45 +0000 (17:11 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Mon, 24 Apr 2006 17:11:45 +0000 (17:11 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@22267 65c4cc65-6c06-0410-ace0-fbb531ad65f3

115 files changed:
Makefile
UPGRADE.txt
acinclude.m4 [new file with mode: 0644]
agi/Makefile
agi/eagi-sphinx-test.c
agi/eagi-test.c
apps/Makefile
apps/app_flash.c
apps/app_ivrdemo.c
apps/app_meetme.c
apps/app_osplookup.c
apps/app_page.c
apps/app_rpt.c
apps/app_skel.c
apps/app_zapbarge.c
apps/app_zapras.c
apps/app_zapscan.c
ast_expr2.c
ast_expr2.fl
ast_expr2.y
ast_expr2f.c
bootstrap.sh [new file with mode: 0755]
build_tools/Makefile [new file with mode: 0644]
build_tools/cflags.xml [new file with mode: 0644]
build_tools/get_moduledeps [new file with mode: 0644]
build_tools/make_svn_branch_name [deleted file]
build_tools/make_version [new file with mode: 0755]
build_tools/menuselect-deps.in [new file with mode: 0644]
build_tools/menuselect.c [new file with mode: 0644]
build_tools/menuselect.h [new file with mode: 0644]
build_tools/menuselect_curses.c [new file with mode: 0644]
build_tools/prep_moduledeps [new file with mode: 0755]
cdr/Makefile
cdr/cdr_odbc.c
cdr/cdr_pgsql.c
cdr/cdr_sqlite.c
cdr/cdr_tds.c
channel.c
channels/Makefile
channels/chan_agent.c
channels/chan_alsa.c
channels/chan_h323.c
channels/chan_iax2.c
channels/chan_misdn.c
channels/chan_nbs.c
channels/chan_oss.c
channels/chan_phone.c
channels/chan_sip.c
channels/chan_vpb.c
channels/chan_zap.c
channels/h323/Makefile
codecs/Makefile
codecs/codec_gsm.c
codecs/codec_speex.c
codecs/gsm/Makefile
codecs/ilbc/Makefile
codecs/lpc10/Makefile
config.guess [new file with mode: 0755]
config.sub [new file with mode: 0755]
configure.ac [new file with mode: 0644]
cryptostub.c
db1-ast/Makefile
db1-ast/hash/hash.c
file.c
formats/Makefile
formats/format_ogg_vorbis.c
funcs/Makefile
funcs/func_curl.c
funcs/func_odbc.c
include/asterisk.h
include/asterisk/astmm.h
include/asterisk/compat.h
makeopts.in [new file with mode: 0644]
mxml/.cvsignore [new file with mode: 0644]
mxml/ANNOUNCEMENT [new file with mode: 0644]
mxml/CHANGES [new file with mode: 0644]
mxml/COPYING [new file with mode: 0644]
mxml/Makefile.in [new file with mode: 0644]
mxml/README [new file with mode: 0644]
mxml/config.h.in [new file with mode: 0644]
mxml/configure [new file with mode: 0755]
mxml/configure.in [new file with mode: 0644]
mxml/install-sh [new file with mode: 0755]
mxml/mxml-attr.c [new file with mode: 0644]
mxml/mxml-entity.c [new file with mode: 0644]
mxml/mxml-file.c [new file with mode: 0644]
mxml/mxml-index.c [new file with mode: 0644]
mxml/mxml-node.c [new file with mode: 0644]
mxml/mxml-private.c [new file with mode: 0644]
mxml/mxml-search.c [new file with mode: 0644]
mxml/mxml-set.c [new file with mode: 0644]
mxml/mxml-string.c [new file with mode: 0644]
mxml/mxml.h [new file with mode: 0644]
mxml/mxml.list.in [new file with mode: 0644]
mxml/mxml.pc [new file with mode: 0644]
mxml/mxml.pc.in [new file with mode: 0644]
mxml/mxml.spec [new file with mode: 0644]
mxml/mxmldoc.c [new file with mode: 0644]
mxml/temp1.xmlfd [new file with mode: 0644]
mxml/test.xml [new file with mode: 0644]
mxml/testmxml.c [new file with mode: 0644]
pbx/Makefile
pbx/pbx_dundi.c
pbx/pbx_gtkconsole.c
pbx/pbx_kdeconsole.cc
res/Makefile
res/res_config_odbc.c
res/res_config_pgsql.c
res/res_crypto.c
res/res_musiconhold.c
res/res_odbc.c
res/res_osp.c
res/res_snmp.c
strcompat.c
utils/Makefile

index 1f4945c..6ee19b9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -49,7 +49,7 @@ PWD=$(shell pwd)
 # Remember the MAKELEVEL at the top
 MAKETOPLEVEL?=$(MAKELEVEL)
 
-ifneq ($(findstring dont-optimize,$(MAKECMDGOALS)),dont-optimize)
+ifeq ($(findstring dont-optimize,$(MAKECMDGOALS)),)
 # More GSM codec optimization
 # Uncomment to enable MMXTM optimizations for x86 architecture CPU's
 # which support MMX instructions.  This should be newer pentiums,
@@ -97,13 +97,6 @@ DEBUG_THREADS += #-DDEBUG_CHANNEL_LOCKS
 # Uncomment next one to enable ast_frame tracing (for debugging)
 TRACE_FRAMES = #-DTRACE_FRAMES
 
-# Uncomment next one to enable malloc debugging
-# You can view malloc debugging with:
-#   *CLI> show memory allocations [filename]
-#   *CLI> show memory summary [filename]
-#
-MALLOC_DEBUG = #-include $(PWD)/include/asterisk/astmm.h
-
 # Where to install asterisk after compiling
 # Default -> leave empty
 INSTALL_PREFIX?=
@@ -182,26 +175,39 @@ HTTP_CGIDIR=/var/www/cgi-bin
 
 ASTCFLAGS=
 
-# Define this to use files larger than 2GB (useful for sound files longer than 37 hours and logfiles)
-ASTCFLAGS+=-D_FILE_OFFSET_BITS=64
-
 # Uncomment this to use the older DSP routines
 #ASTCFLAGS+=-DOLD_DSP_ROUTINES
 
 # If the file .asterisk.makeopts is present in your home directory, you can
-# include all of your favorite Makefile options so that every time you download
-# a new version of Asterisk, you don't have to edit the makefile to set them. 
-# The file, /etc/asterisk.makeopts will also be included, but can be overridden
+# include all of your favorite menuselect options so that every time you download
+# a new version of Asterisk, you don't have to run menuselect to set them. 
+# The file /etc/asterisk.makeopts will also be included but can be overridden
 # by the file in your home directory.
 
-ifneq ($(wildcard /etc/asterisk.makeopts),)
-  include /etc/asterisk.makeopts
+GLOBAL_MAKEOPTS=$(wildcard /etc/asterisk.makeopts)
+USER_MAKEOPTS=$(wildcard ~/.asterisk.makeopts)
+
+ifneq ($(wildcard menuselect.makeopts),)
+  include menuselect.makeopts
+endif
+
+ifneq ($(wildcard makeopts),)
+  include makeopts
 endif
 
-ifneq ($(wildcard ~/.asterisk.makeopts),)
-  include ~/.asterisk.makeopts
+ASTCFLAGS+=$(MENUSELECT_CFLAGS)
+TOPDIR_CFLAGS=-include include/autoconfig.h
+MOD_SUBDIR_CFLAGS=-include ../include/autoconfig.h
+
+#   *CLI> show memory allocations [filename]
+#   *CLI> show memory summary [filename]
+ifneq ($(findstring -DMALLOC_DEBUG,$(ASTCFLAGS)),)
+  TOPDIR_CFLAGS+=-include include/asterisk/astmm.h
+  MOD_SUBDIR_CFLAGS+=-include ../include/asterisk/astmm.h
 endif
 
+MOD_SUBDIR_CFLAGS+=-fPIC
+
 ifeq ($(OSARCH),Linux)
   ifeq ($(PROC),x86_64)
     # You must have GCC 3.4 to use k8, otherwise use athlon
@@ -247,9 +253,13 @@ ifeq ($(OSARCH),SunOS)
 endif
 
 INCLUDE+=-Iinclude -I../include
-ASTCFLAGS+=-pipe  -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(DEBUG) $(INCLUDE) -D_REENTRANT -D_GNU_SOURCE #-DMAKE_VALGRIND_HAPPY
+ASTCFLAGS+=-pipe  -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(DEBUG) $(INCLUDE) #-DMAKE_VALGRIND_HAPPY
 ASTCFLAGS+=$(OPTIMIZE)
-ASTCFLAGS+=# -Werror -Wunused
+
+ifeq ($(AST_DEVMODE),yes)
+  ASTCFLAGS+=-Werror -Wunused
+endif
+
 ifeq ($(shell gcc -v 2>&1 | grep 'gcc version' | cut -f3 -d' ' | cut -f1 -d.),4)
 ASTCFLAGS+= -Wno-pointer-sign
 endif
@@ -267,14 +277,6 @@ ifeq ($(PROC),ppc)
   ASTCFLAGS+=-fsigned-char
 endif
 
-ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/osp/osp.h),)
-  ASTCFLAGS+=-DOSP_SUPPORT -I$(CROSS_COMPILE_TARGET)/usr/local/include/osp
-else
-  ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/osp/osp.h),)
-    ASTCFLAGS+=-DOSP_SUPPORT -I$(CROSS_COMPILE_TARGET)/usr/include/osp
-  endif
-endif
-
 ifeq ($(OSARCH),FreeBSD)
   BSDVERSION=$(shell make -V OSVERSION -f $(CROSS_COMPILE_TARGET)/usr/share/mk/bsd.port.subdir.mk)
   ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi)
@@ -300,27 +302,11 @@ ifeq ($(OSARCH),SunOS)
   INCLUDE+=-Iinclude/solaris-compat -I$(CROSS_COMPILE_TARGET)/usr/local/ssl/include
 endif
 
-ifeq ($(findstring CYGWIN,$(OSARCH)),CYGWIN)
-  CYGLOADER=cygwin_a
-  OSARCH=CYGWIN
-  ASTOBJ=-shared -o asterisk.dll -Wl,--out-implib=libasterisk.dll.a -Wl,--export-all-symbols
-  ASTLINK=
-  LIBS+=-lpthread -lncurses -lm -lresolv
-  ASTSBINDIR=$(MODULES_DIR)
-endif
-
-ifndef WITHOUT_ZAPTEL
-
-ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/linux/zaptel.h)$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/zaptel.h)$(wildcard $(CROSS_COMPILE_TARGET)/usr/pkg/include/zaptel.h),)
-  ASTCFLAGS+=-DZAPTEL_OPTIMIZATIONS
-endif
-
-endif # WITHOUT_ZAPTEL
-
 LIBEDIT=editline/libedit.a
 
+ASTERISKVERSION:=$(shell build_tools/make_version .)
+
 ifneq ($(wildcard .version),)
-  ASTERISKVERSION:=$(shell cat .version)
   ASTERISKVERSIONNUM:=$(shell awk -F. '{printf "%02d%02d%02d", $$1, $$2, $$3}' .version)
   RPMVERSION:=$(shell sed 's/[-\/:]/_/g' .version)
 else
@@ -332,11 +318,9 @@ endif
 # showing the branch they are made from
 ifneq ($(wildcard .svnrevision),)
   ASTERISKVERSIONNUM=999999
-  ASTERISKVERSION:=SVN-$(shell cat .svnbranch)-r$(shell cat .svnrevision)
 else
   ifneq ($(wildcard .svn),)
     ASTERISKVERSIONNUM=999999
-    ASTERISKVERSION=SVN-$(shell build_tools/make_svn_branch_name)
   endif
 endif
 
@@ -345,11 +329,12 @@ ASTCFLAGS+= $(TRACE_FRAMES)
 ASTCFLAGS+= $(MALLOC_DEBUG)
 ASTCFLAGS+= $(BUSYDETECT)
 ASTCFLAGS+= $(OPTIONS)
-ifneq ($(findstring dont-optimize,$(MAKECMDGOALS)),dont-optimize)
+ifeq ($(findstring dont-optimize,$(MAKECMDGOALS)),)
 ASTCFLAGS+= -fomit-frame-pointer 
 endif
 
-SUBDIRS=res channels pbx apps codecs formats agi cdr funcs utils stdtime
+MOD_SUBDIRS=res channels pbx apps codecs formats cdr funcs
+SUBDIRS:=$(MOD_SUBDIRS) utils stdtime agi
 
 OBJS=io.o sched.o logger.o frame.o loader.o config.o channel.o \
        translate.o file.o pbx.o cli.o md5.o term.o \
@@ -426,11 +411,11 @@ ifeq ($(OSARCH),SunOS)
 endif
 
 ifeq ($(MAKETOPLEVEL),$(MAKELEVEL))
-  CFLAGS+=$(ASTCFLAGS)
+  CFLAGS+=$(ASTCFLAGS) $(TOPDIR_CFLAGS)
 endif
 
 # This is used when generating the doxygen documentation
-ifneq ($(wildcard /usr/local/bin/dot)$(wildcard /usr/bin/dot),)
+ifneq ($(DOT),:)
   HAVEDOT=yes
 else
   HAVEDOT=no
@@ -438,18 +423,38 @@ endif
 
 INSTALL=install
 
-CFLAGS+=-DT38_SUPPORT
-
 _all: all
        @echo " +--------- Asterisk Build Complete ---------+"  
        @echo " + Asterisk has successfully been built, but +"  
        @echo " + cannot be run before being installed by   +"  
        @echo " + running:                                  +"  
        @echo " +                                           +"
-       @echo " +               $(MAKE) install                +"  
+       @echo " +               make install                +"  
        @echo " +-------------------------------------------+"  
 
-all: cleantest depend asterisk subdirs 
+all: include/autoconfig.h menuselect.makeopts cleantest depend asterisk subdirs
+
+configure:
+       -@./bootstrap.sh
+
+include/autoconfig.h: configure
+       @CFLAGS="" ./configure
+       @echo "****"
+       @echo "**** The configure script was just executed, so 'make' needs to be"
+       @echo "**** restarted."
+       @echo "****"
+       @echo exit 1
+
+makeopts: configure
+       @CFLAGS="" ./configure
+       @echo "****"
+       @echo "**** The configure script was just executed, so 'make' needs to be"
+       @echo "**** restarted."
+       @echo "****"
+       @echo exit 1
+
+menuselect.makeopts: build_tools/menuselect makeopts.xml
+       @build_tools/menuselect --check-deps ${GLOBAL_MAKEOPTS} ${USER_MAKEOPTS} $@
 
 #ifneq ($(wildcard tags),)
 ctags: tags
@@ -459,16 +464,14 @@ ifneq ($(wildcard TAGS),)
 all: TAGS
 endif
 
-noclean: depend asterisk subdirs
-
 editline/config.h:
        cd editline && unset CFLAGS LIBS && ./configure ; \
 
-editline/libedit.a: FORCE
+editline/libedit.a:
        cd editline && unset CFLAGS LIBS && test -f config.h || ./configure
        $(MAKE) -C editline libedit.a
 
-db1-ast/libdb1.a: FORCE
+db1-ast/libdb1.a:
        $(MAKE) -C db1-ast libdb1.a
 
 ifneq ($(wildcard .depend),)
@@ -511,27 +514,24 @@ asterisk.html: asterisk.sgml
 asterisk.txt: asterisk.sgml
        docbook2txt asterisk.sgml
 
-defaults.h: FORCE
+defaults.h: makeopts
        build_tools/make_defaults_h > $@.tmp
        if cmp -s $@.tmp $@ ; then echo ; else \
                mv $@.tmp $@ ; \
        fi
        rm -f $@.tmp
 
-include/asterisk/version.h: FORCE
+include/asterisk/version.h:
        build_tools/make_version_h > $@.tmp
        if cmp -s $@.tmp $@ ; then echo; else \
                mv $@.tmp $@ ; \
        fi
        rm -f $@.tmp
 
-stdtime/libtime.a: FORCE
-       $(MAKE) -C stdtime libtime.a
+stdtime/libtime.a:
+       CFLAGS="$(ASTCFLAGS) $(MOD_SUBDIR_CFLAGS)" $(MAKE) -C stdtime libtime.a
 
-cygwin_a:
-       $(MAKE) -C cygwin all
-
-asterisk: $(CYGLOADER) editline/libedit.a db1-ast/libdb1.a stdtime/libtime.a $(OBJS)
+asterisk: editline/libedit.a db1-ast/libdb1.a stdtime/libtime.a $(OBJS)
        build_tools/make_build_h > include/asterisk/build.h.tmp
        if cmp -s include/asterisk/build.h.tmp include/asterisk/build.h ; then echo ; else \
                mv include/asterisk/build.h.tmp include/asterisk/build.h ; \
@@ -544,7 +544,9 @@ muted: muted.o
        $(CC) $(AUDIO_LIBS) -o muted muted.o
 
 subdirs: 
-       for x in $(SUBDIRS); do $(MAKE) -C $$x || exit 1 ; done
+       for x in $(MOD_SUBDIRS); do CFLAGS="$(ASTCFLAGS) $(MOD_SUBDIR_CFLAGS)" $(MAKE) -C $$x || exit 1 ; done
+       CFLAGS="$(ASTCFLAGS)" $(MAKE) -C utils
+       CFLAGS="$(ASTCFLAGS) -include ../include/autoconfig.h" $(MAKE) -C agi
 
 clean-depend:
        for x in $(SUBDIRS); do $(MAKE) -C $$x clean-depend || exit 1 ; done
@@ -562,11 +564,18 @@ clean: clean-depend
        $(MAKE) -C db1-ast clean
        $(MAKE) -C stdtime clean
 
+dist-clean: clean
+       rm -f menuselect.makeopts makeopts makeopts.xml
+       rm -f config.log config.status
+       rm -f include/autoconfig.h
+       $(MAKE) -C mxml clean
+       $(MAKE) -C build_tools dist-clean
+
 datafiles: all
        if [ x`$(ID) -un` = xroot ]; then sh build_tools/mkpkgconfig $(DESTDIR)/usr/lib/pkgconfig; fi
-       # Should static HTTP be installed during make samples or even with its own target ala
-       # webvoicemail?  There are portions here that *could* be customized but might also be
-       # improved a lot.  I'll put it here for now.
+# Should static HTTP be installed during make samples or even with its own target ala
+# webvoicemail?  There are portions here that *could* be customized but might also be
+# improved a lot.  I'll put it here for now.
        mkdir -p $(DESTDIR)$(ASTDATADIR)/static-http
        for x in static-http/*; do \
                install -m 644 $$x $(DESTDIR)$(ASTDATADIR)/static-http ; \
@@ -664,7 +673,6 @@ bininstall: all
        mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/meetme
        mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/monitor
        if [ -f asterisk ]; then $(INSTALL) -m 755 asterisk $(DESTDIR)$(ASTSBINDIR)/; fi
-       if [ -f cygwin/asterisk.exe ]; then $(INSTALL) -m 755 cygwin/asterisk.exe $(DESTDIR)$(ASTSBINDIR)/; fi
        if [ -f asterisk.dll ]; then $(INSTALL) -m 755 asterisk.dll $(DESTDIR)$(ASTSBINDIR)/; fi
        ln -sf asterisk $(DESTDIR)$(ASTSBINDIR)/rasterisk
        $(INSTALL) -m 755 contrib/scripts/astgenkey $(DESTDIR)$(ASTSBINDIR)/
@@ -887,7 +895,7 @@ valgrind: dont-optimize
 depend: include/asterisk/version.h .depend defaults.h 
        for x in $(SUBDIRS); do $(MAKE) -C $$x depend || exit 1 ; done
 
-.depend: include/asterisk/version.h
+.depend: include/asterisk/version.h defaults.h
        build_tools/mkdep $(CFLAGS) $(wildcard *.c)
 
 .tags-depend:
@@ -928,7 +936,6 @@ env:
 # If the cleancount has been changed, force a make clean.
 # .cleancount is the global clean count, and .lastclean is the 
 # last clean count we had
-# We can avoid this by making noclean
 
 cleantest:
        if cmp -s .cleancount .lastclean ; then echo ; else \
@@ -967,3 +974,17 @@ uninstall-all: _uninstall
        rm -rf $(DESTDIR)$(ASTSPOOLDIR)
        rm -rf $(DESTDIR)$(ASTETCDIR)
        rm -rf $(DESTDIR)$(ASTLOGDIR)
+
+menuselect: build_tools/menuselect makeopts.xml
+       -@build_tools/menuselect ${GLOBAL_MAKEOPTS} ${USER_MAKEOPTS} menuselect.makeopts && echo "menuselect changes saved!" || echo "menuselect changes NOT saved!"
+
+build_tools/menuselect: build_tools/menuselect.c build_tools/menuselect.h mxml/libmxml.a
+       $(MAKE) -C build_tools menuselect
+
+mxml/libmxml.a:
+       @cd mxml && unset CFLAGS && test -f config.h || ./configure
+       $(MAKE) -C mxml libmxml.a
+
+makeopts.xml: $(foreach dir,$(MOD_SUBDIRS),$(dir)/*.c) build_tools/cflags.xml
+       @echo "Generating list of available modules ..."
+       @build_tools/prep_moduledeps > $@
index 9c505b2..c7456d9 100644 (file)
@@ -1,6 +1,38 @@
 Information for Upgrading From Previous Asterisk Releases
 =========================================================
 
+Build Process (configure script):
+
+Asterisk now uses an autoconf-generated configuration script to learn how it
+should build itself for your system. As it is a standard script, running:
+
+$ ./configure --help
+
+will show you all the options available. This script can be used to tell the
+build process what libraries you have on your system (if it cannot find them
+automatically), which libraries you wish to have ignored even though they may
+be present, etc.
+
+You must run the configure script before Asterisk will build, although it will
+attempt to automatically run it for you with no options specified; for most users,
+that will result in a similar build to what they would have had before the
+configure script was added to the build process (except for having to run 'make'
+again after the configure script is run). Note that the configure script does NOT
+need to be re-run just to rebuild Asterisk; you only need to re-run it when your
+system configuration changes or you wish to build Asterisk with different options.
+
+Build Process (module selection):
+
+The Asterisk source tree now includes a basic module selection and build option
+selection tool called 'menuselect'. Run 'make menuselect' to make your choices.
+In this tool, you can disable building of modules that you don't care about,
+turn on/off global options for the build and see which modules will not (and cannot)
+be built because your system does not have the required external dependencies
+installed.
+
+(TODO: document where 'global' and 'per-user' menuselect input files should go
+and what they need to contain)
+
 PBX Core:
 
 * The (very old and undocumented) ability to use BYEXTENSION for dialing
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644 (file)
index 0000000..57037b3
--- /dev/null
@@ -0,0 +1,79 @@
+# AST_EXT_LIB([NAME], [FUNCTION], [package header], [package symbol name], [package friendly name], [additional LIB data])
+
+AC_DEFUN([AST_EXT_LIB],
+[
+AC_ARG_WITH([$1], AC_HELP_STRING([--with-$1=PATH],[use $5 files in PATH]),[
+case ${withval} in
+     n|no)
+     USE_$1=no
+     ;;
+     y|ye|yes)
+     $1_MANDATORY="yes"
+     ;;
+     *)
+     $1_DIR="${withval}"
+     $1_MANDATORY="yes"
+     ;;
+esac
+])
+
+PBX_LIB$1=0
+
+if test "${USE_$1}" != "no"; then      
+   AC_CHECK_LIB([$1], [$2], AC_DEFINE_UNQUOTED([HAVE_$4], 1,
+   [Define to indicate the $5 library]), [], -L${$1_DIR}/lib $6)
+
+   if test "${ac_cv_lib_$1_$2}" = "yes"; then
+      $1_LIB="-l$1 $6"
+      $4_HEADER_FOUND="1"
+      if test "x${$1_DIR}" != "x"; then
+         $1_LIB="-L${$1_DIR}/lib ${$1_LIB}"
+        $1_INCLUDE="-I${$1_DIR}/include"
+        if test "x$3" != "x" ; then
+           AC_CHECK_HEADER([${$1_DIR}/include/$3], [$4_HEADER_FOUND=1], [$4_HEADER_FOUND=0] )
+        fi
+      else
+        if test "x$3" != "x" ; then
+            AC_CHECK_HEADER([$3], [$4_HEADER_FOUND=1], [$4_HEADER_FOUND=0] )
+        fi
+      fi
+      if test "x${$4_HEADER_FOUND}" = "x0" ; then
+        echo " ***"
+        echo " *** It appears that you do not have the $5 development package installed."
+        echo " *** Please install it to include $5 support, or re-run configure"
+        echo " *** with the argument --without-$1"
+        exit 1
+      fi
+      PBX_LIB$1=1 
+   elif test ! -z "${$1_MANDATORY}";
+   then
+      echo "***"
+      echo "*** The $5 installation on this system appears to be broken."
+      echo "*** Either correct the installation, or run configure"
+      echo "*** including --without-$1"
+      exit 1
+   fi
+fi
+AC_SUBST([$1_LIB])
+AC_SUBST([$1_INCLUDE])
+AC_SUBST([PBX_LIB$1])
+])
+
+
+AC_DEFUN(
+[AST_CHECK_GNU_MAKE], [ AC_CACHE_CHECK( for GNU make, GNU_MAKE,
+   GNU_MAKE='Not Found' ;
+   for a in make gmake gnumake ; do
+      if test -z "$a" ; then continue ; fi ;
+      if ( sh -c "$a --version" 2> /dev/null | grep GNU  2>&1 > /dev/null ) ;  then
+         GNU_MAKE=$a ;
+         break;
+      fi
+   done ;
+) ;
+if test  "x$GNU_MAKE" = "xNot Found"  ; then
+   echo " *** Please install GNU make.  It is required to build Asterisk!"
+   exit 1
+fi
+AC_SUBST([GNU_MAKE])
+] )
index bcb7e87..5c9c1f6 100644 (file)
@@ -3,7 +3,7 @@
 # 
 # Makefile for AGI-related stuff
 #
-# Copyright (C) 1999-2005, Digium
+# Copyright (C) 1999-2006, Digium
 #
 # Mark Spencer <markster@digium.com>
 #
@@ -13,8 +13,6 @@
 
 AGIS=agi-test.agi eagi-test eagi-sphinx-test jukebox.agi
 
-CFLAGS+=-DNO_AST_MM
-
 LIBS=
 ifeq ($(OSARCH),SunOS)
   LIBS=-lsocket -lnsl ../strcompat.o
@@ -30,10 +28,10 @@ uninstall:
        for x in $(AGIS); do rm -f $(DESTDIR)$(AGI_DIR)/$$x ; done
 
 eagi-test: eagi-test.o
-       $(CC) $(CFLAGS) -o eagi-test eagi-test.o $(LIBS)
+       $(CC) $(CFLAGS) -include ../include/autoconfig.h -o eagi-test eagi-test.o $(LIBS)
 
 eagi-sphinx-test: eagi-sphinx-test.o
-       $(CC) $(CFLAGS) -o eagi-sphinx-test eagi-sphinx-test.o $(LIBS) 
+       $(CC) $(CFLAGS) -include ../include/autoconfig.h -o eagi-sphinx-test eagi-sphinx-test.o $(LIBS) 
 
 clean-depend:
        rm -f .depend
index 95c47c9..0ad12c7 100644 (file)
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <netdb.h>
-#include <asterisk/compat.h>
+
+#include "asterisk.h"
+
+#include "asterisk/compat.h"
 
 #define AUDIO_FILENO (STDERR_FILENO + 1)
 
index 5ba28f9..7745d18 100644 (file)
 #include <errno.h>
 #include <string.h>
 #include <sys/select.h>
-#include <asterisk/compat.h>
+
+#include "asterisk.h"
+
+#include "asterisk/compat.h"
 
 #define AUDIO_FILENO (STDERR_FILENO + 1)
 
index 934a8f2..ba10cba 100644 (file)
 # the GNU General Public License
 #
 
-MODS:=$(patsubst %.c,%.so,$(wildcard app_*.c))
+MODS:=$(filter-out $(MENUSELECT_APPS),$(patsubst %.c,%.so,$(wildcard app_*.c)))
 
-#
-# Experimental things
-#
-MODS:=$(filter-out app_ivrdemo.so,$(MODS))
-MODS:=$(filter-out app_skel.so,$(MODS))
-MODS:=$(filter-out app_rpt.so,$(MODS))
-
-ifndef WITHOUT_ZAPTEL
-ZAPAVAIL:=$(wildcard $(CROSS_COMPILE_TARGET)/usr/include/linux/zaptel.h $(CROSS_COMPILE_TARGET)/usr/local/include/zaptel.h)
-endif
-
-ifeq (${ZAPAVAIL},)
-  MODS:=$(filter-out app_zapras.so app_meetme.so app_flash.so app_zapbarge.so app_zapscan.so app_page.so,$(MODS))
-endif
-
-ifeq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/osp/osp.h $(CROSS_COMPILE_TARGET)/usr/include/osp/osp.h),)
-  MODS:=$(filter-out app_osplookup.so,$(MODS))
-endif
-
-ifneq (${WITH_SMDI},)
+ifneq ($(WITH_SMDI),)
   CFLAGS+=-DWITH_SMDI
 endif
 
-ifeq (${OSARCH},CYGWIN)
-  CYGSOLINK=-Wl,--out-implib=lib$@.a -Wl,--export-all-symbols
-  CYGSOLIB=-L.. -L. -L../res -lasterisk.dll -lres_features.so -lres_adsi.so -lres_monitor.so
-  MODS:=$(filter-out app_sms.so,$(MODS))
-else
-  CFLAGS+=-fPIC
-endif
-
 # If you have UnixODBC you can use ODBC voicemail
 # storage
 #
@@ -61,11 +34,14 @@ clean-depend:
 clean: clean-depend
        rm -f *.so *.o
 
-%.so : %.o
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB}
+%.so: %.o
+       $(CC) $(SOLINK) -o $@ $<
+
+app_rpt.so: app_rpt.o
+       $(CC) $(SOLINK) -o $@ $< $(ZAPTEL_LIB)
 
-app_rpt.so : app_rpt.o
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} -ltonezone
+app_rpt.o: app_rpt.c
+       $(CC) $(SOLINK) -o $@ $< $(ZAPTEL_INCLUDE) 
 
 install: all
        for x in $(MODS); do $(INSTALL) -m 755 $$x $(DESTDIR)$(MODULES_DIR) ; done
index 0e3eba4..5e4f760 100644 (file)
  * \ingroup applications
  */
  
+/*** MODULEINFO
+       <depend>zaptel</depend>
+ ***/
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -132,3 +136,4 @@ static const char *key(void)
 }
 
 STD_MOD1;
+
index 1ceedf6..8adccd3 100644 (file)
  * \ingroup applications
  */
 
+/*** MODULEINFO
+       <defaultenabled>no</defaultenabled>
+ ***/
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -137,3 +141,4 @@ static const char *key(void)
 }
 
 STD_MOD1;
+
index fed92f3..deab9af 100644 (file)
  * \ingroup applications
  */
 
+/*** MODULEINFO
+       <depend>zaptel</depend>
+ ***/
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -2469,5 +2473,6 @@ static const char *key(void)
 {
        return ASTERISK_GPL_KEY;
 }
+
 STD_MOD(MOD_1, reload, NULL, NULL);
+
index bc12f5b..7c09fee 100644 (file)
  * \ingroup applications
  */
 
+/*** MODULEINFO
+       <depend>libosptk</depend>
+       <depend>ssl</depend>
+ ***/
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -637,3 +642,5 @@ static const char *key(void)
 }
 
 STD_MOD1;
+
+
index 0dee161..bb32938 100644 (file)
  * \ingroup applications
  */
 
+/*** MODULEINFO
+       <depend>zaptel</depend>
+ ***/
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -230,3 +234,4 @@ static const char *key(void)
 }
 
 STD_MOD1;
+
index d919fc2..f3edb04 100644 (file)
  *
 */
 
+/*** MODULEINFO
+       <depend>zaptel</depend>
+       <defaultenabled>no</defaultenabled>
+ ***/
+
 /* The following is JUST GROSS!! There is some soft of underlying problem,
    probably in channel_iax2.c, that causes an IAX2 connection to sometimes
    stop transmitting randomly. We have been working for weeks to try to
@@ -7063,3 +7068,4 @@ static const char *key(void)
 }
 
 STD_MOD1;
+
index 598170d..debe358 100644 (file)
  * \ingroup applications
  */
 
+/*** MODULEINFO
+       <defaultenabled>no</defaultenabled>
+ ***/
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -141,3 +145,4 @@ static const char *key(void)
 }
 
 STD_MOD1;
+
index ad77a6e..7dc12f6 100644 (file)
  * \ingroup applications
  */
 
+/*** MODULEINFO
+       <depend>zaptel</depend>
+ ***/
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -329,3 +333,4 @@ static const char *key(void)
 }
 
 STD_MOD1;
+
index d918b7d..c95f752 100644 (file)
  * \ingroup applications
  */
 
+/*** MODULEINFO
+       <depend>zaptel</depend>
+ ***/
+
 #include <sys/ioctl.h>
 #include <sys/wait.h>
 #ifdef __linux__
@@ -267,3 +271,4 @@ static const char *key(void)
 }
 
 STD_MOD1;
+
index affa16d..c8e0d75 100644 (file)
  * \ingroup applications
  */
 
+/*** MODULEINFO
+       <depend>zaptel</depend>
+ ***/
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -390,3 +394,4 @@ static const char *key(void)
 }
 
 STD_MOD1;
+
index d1e9bf3..6b2bd60 100644 (file)
 #include <errno.h>
 #include <regex.h>
 #include <limits.h>
-#include <asterisk/ast_expr.h>
-#include <asterisk/logger.h>
+
+#include "asterisk.h"
+
+ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
+
+#include "asterisk/ast_expr.h"
+#include "asterisk/logger.h"
 
 #if defined(LONG_LONG_MIN) && !defined(QUAD_MIN)
 #define QUAD_MIN LONG_LONG_MIN
index 32525cf..8eaea63 100644 (file)
 #include <errno.h>
 #include <regex.h>
 #include <limits.h>
-#include <asterisk/ast_expr.h>
-#include <asterisk/logger.h>
-#include <asterisk/strings.h>
+
+#include "asterisk.h"
+
+ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
+
+#include "asterisk/ast_expr.h"
+#include "asterisk/logger.h"
+#include "asterisk/strings.h"
 
 enum valtype {
        AST_EXPR_integer, AST_EXPR_numeric_string, AST_EXPR_string
index 728800d..58295c9 100644 (file)
 #include <errno.h>
 #include <regex.h>
 #include <limits.h>
-#include <asterisk/ast_expr.h>
-#include <asterisk/logger.h>
+
+#include "asterisk.h"
+
+ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
+
+#include "asterisk/ast_expr.h"
+#include "asterisk/logger.h"
 
 #if defined(LONG_LONG_MIN) && !defined(QUAD_MIN)
 #define QUAD_MIN LONG_LONG_MIN
index 13927ef..ed87455 100644 (file)
@@ -1267,9 +1267,14 @@ static yyconst yy_state_type yy_NUL_trans[50] =
 #include <errno.h>
 #include <regex.h>
 #include <limits.h>
-#include <asterisk/ast_expr.h>
-#include <asterisk/logger.h>
-#include <asterisk/strings.h>
+
+#include "asterisk.h"
+
+ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
+
+#include "asterisk/ast_expr.h"
+#include "asterisk/logger.h"
+#include "asterisk/strings.h"
 
 enum valtype {
        AST_EXPR_integer, AST_EXPR_numeric_string, AST_EXPR_string
diff --git a/bootstrap.sh b/bootstrap.sh
new file mode 100755 (executable)
index 0000000..02392eb
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+check_for_app() {
+       $1 --version 2>&1 >/dev/null
+       if [ $? != 0 ]
+       then
+               echo "Please install $1 and run bootstrap.sh again!"
+               exit 1
+       fi
+}
+
+uname -s | grep -q FreeBSD
+if [ $? = 0 ]
+then
+       check_for_app aclocal19
+       check_for_app autoconf259
+       check_for_app autoheader259
+       check_for_app automake19
+
+       aclocal19 2>/dev/null
+       autoconf259
+       autoheader259
+       automake19 --add-missing --copy 2>/dev/null
+else
+       export AUTOCONF_VERSION=2.59
+       export AUTOMAKE_VERSION=1.9
+
+       check_for_app aclocal
+       check_for_app autoconf
+       check_for_app autoheader
+       check_for_app automake
+
+       aclocal 2>/dev/null
+       autoconf
+       autoheader
+       automake --add-missing --copy 2>/dev/null
+fi
diff --git a/build_tools/Makefile b/build_tools/Makefile
new file mode 100644 (file)
index 0000000..7719031
--- /dev/null
@@ -0,0 +1,18 @@
+MENUSELECT_OBJS=menuselect.o menuselect_curses.o
+MENUSELECT_CFLAGS=-g -c -D_GNU_SOURCE -I../ -I../include/
+MENUSELECT_LIBS=../mxml/libmxml.a $(CURSES_LIB)
+
+menuselect: $(MENUSELECT_OBJS)
+       $(CC) -g -o $@ $(MENUSELECT_OBJS) $(MENUSELECT_LIBS)
+
+menuselect.o: menuselect.c menuselect.h
+       $(CC) -o $@ $(MENUSELECT_CFLAGS) $<
+
+menuselect_curses.o: menuselect_curses.c menuselect.h
+       $(CC) -o $@ $(MENUSELECT_CFLAGS) $(CURSES_INCLUDE) $<
+
+clean:
+       rm -f menuselect *.o
+
+dist-clean: clean
+       rm -f menuselect-deps
diff --git a/build_tools/cflags.xml b/build_tools/cflags.xml
new file mode 100644 (file)
index 0000000..3bb1393
--- /dev/null
@@ -0,0 +1,23 @@
+       <category name="MENUSELECT_CFLAGS" displayname="Compiler Flags" positive_output="yes" force_clean_on_change="yes">
+               <member name="-DDEBUG_SCHEDULER">
+               </member>
+               <member name="-DDEBUG_THREADS">
+               </member>
+               <member name="-DDETECT_DEADLOCKS">
+               </member>
+               <member name="-DDUMP_SCHEDULER">
+               </member>
+               <member name="-DLOW_MEMORY">
+               </member>
+               <member name="-DMALLOC_DEBUG">
+               </member>
+               <member name="-DRADIO_RELAX">
+               </member>
+               <member name="-DTRACE_FRAMES">
+               </member>
+               <member name="-DMTX_PROFILE">
+               </member>
+               <member name="-DT38_SUPPORT">
+                       <defaultenabled>yes</defaultenabled>
+               </member>
+       </category>
diff --git a/build_tools/get_moduledeps b/build_tools/get_moduledeps
new file mode 100644 (file)
index 0000000..08ae61c
--- /dev/null
@@ -0,0 +1,3 @@
+/\/\*\*\* MODULEINFO/ {printit=1; next}
+/\*\*\*\// {exit}
+// {if (printit) print}
diff --git a/build_tools/make_svn_branch_name b/build_tools/make_svn_branch_name
deleted file mode 100755 (executable)
index 848ca49..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/sh
-
-PARTS=`LANG=C svn info | grep URL | awk '{print $2;}' | sed -e 's:^.*/svn/asterisk/::' | sed -e 's:/: :g'`
-BRANCH=0
-TEAM=0
-
-REV=`svnversion -c . | cut -d: -f2`
-
-if [ "${PARTS}" = "trunk" ]
-then
-    echo 'trunk'-r${REV}
-    exit 0
-fi
-
-for PART in $PARTS
-do
-  if [ ${BRANCH} != 0 ]
-  then
-      RESULT="${RESULT}-${PART}"
-      break
-  fi
-
-  if [ ${TEAM} != 0 ]
-  then
-      RESULT="${RESULT}-${PART}"
-      continue
-  fi
-
-  if [ "${PART}" = "branches" ]
-  then
-      BRANCH=1
-      RESULT="branch"
-      continue
-  fi
-
-  if [ "${PART}" = "tags" ]
-  then
-      BRANCH=1
-      RESULT="tag"
-      continue
-  fi
-
-  if [ "${PART}" = "team" ]
-  then
-      TEAM=1
-      continue
-  fi
-done
-
-echo ${RESULT##-}-r${REV}
diff --git a/build_tools/make_version b/build_tools/make_version
new file mode 100755 (executable)
index 0000000..5733d48
--- /dev/null
@@ -0,0 +1,56 @@
+#!/bin/sh
+
+if [ -f ${1}/.version ]; then
+       cat ${1}.version
+elif [ -f ${1}/.svnrevision ]; then
+       echo SVN-`cat ${1}/.svnbranch`-r`cat ${1}.svnrevision`
+elif [ -d .svn ]; then
+    PARTS=`LANG=C svn info ${1} | grep URL | awk '{print $2;}' | sed -e s:^.*/svn/asterisk/:: | sed -e 's:/: :g'`
+    BRANCH=0
+    TEAM=0
+    
+    REV=`svnversion -c ${1} | cut -d: -f2`
+    
+    if [ "${PARTS}" = "trunk" ]
+       then
+       echo SVN-'trunk'-r${REV}
+       exit 0
+    fi
+    
+    for PART in $PARTS
+      do
+      if [ ${BRANCH} != 0 ]
+         then
+         RESULT="${RESULT}-${PART}"
+         break
+      fi
+      
+      if [ ${TEAM} != 0 ]
+         then
+         RESULT="${RESULT}-${PART}"
+         continue
+      fi
+      
+      if [ "${PART}" = "branches" ]
+         then
+         BRANCH=1
+         RESULT="branch"
+         continue
+      fi
+      
+      if [ "${PART}" = "tags" ]
+         then
+         BRANCH=1
+         RESULT="tag"
+         continue
+      fi
+      
+      if [ "${PART}" = "team" ]
+         then
+         TEAM=1
+         continue
+      fi
+    done
+    
+    echo SVN-${RESULT##-}-r${REV}
+fi
diff --git a/build_tools/menuselect-deps.in b/build_tools/menuselect-deps.in
new file mode 100644 (file)
index 0000000..a561f12
--- /dev/null
@@ -0,0 +1,27 @@
+ASOUND=@PBX_LIBasound@
+CURL=@PBX_CURL@
+FREETDS=@PBX_LIBtds@
+GTK=@PBX_GTK@
+H323=@PBX_H323@
+KDE=@PBX_KDE@
+LIBMFCR2=@PBX_LIBmfcr2@
+LIBNEWT=@PBX_LIBnewt@
+LIBOSPTK=@PBX_LIBosptk@
+LIBPOPT=@PBX_LIBpopt@
+LIBPRI=@PBX_LIBpri@
+LIBSPEEX=@PBX_LIBspeex@
+LIBVORBIS=@PBX_LIBvorbis@
+NBS=@PBX_LIBnbs@
+OGG=@PBX_LIBogg@
+OSSAUDIO=@PBX_LIBossaudio@
+PGSQL=@PBX_LIBpq@
+PTLIB=@PBX_LIBPWLIB@
+QT=@PBX_QT@
+SQLITE=@PBX_LIBsqlite@
+SSL=@PBX_LIBssl@
+UNIXODBC=@PBX_LIBodbc@
+VPBAPI=@PBX_LIBvpb@
+WIN32=@OSISWIN32@
+ZLIB=@PBX_LIBz@
+ZAPTEL=@PBX_LIBtonezone@
+LIBGSM=@PBX_LIBgsm@
diff --git a/build_tools/menuselect.c b/build_tools/menuselect.c
new file mode 100644 (file)
index 0000000..2f23d96
--- /dev/null
@@ -0,0 +1,671 @@
+/*
+ * Asterisk -- An open source telephony toolkit.
+ *
+ * Copyright (C) 2005 - 2006, Russell Bryant
+ *
+ * Russell Bryant <russell@digium.com>
+ *
+ * See http://www.asterisk.org for more information about
+ * the Asterisk project. Please do not directly contact
+ * any of the maintainers of this project for assistance;
+ * the project provides a web site, mailing lists and IRC
+ * channels for your use.
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License Version 2. See the LICENSE file
+ * at the top of the source tree.
+ */
+
+/*
+ * \file
+ *
+ * \author Russell Bryant <russell@digium.com>
+ * 
+ * \brief A menu-driven system for Asterisk module selection
+ */
+
+#include "autoconfig.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "mxml/mxml.h"
+#include "menuselect.h"
+
+#include "asterisk.h"
+
+#include "asterisk/linkedlists.h"
+
+#undef MENUSELECT_DEBUG
+
+struct depend {
+       /*! the name of the dependency */
+       const char *name;
+       /*! for linking */
+       AST_LIST_ENTRY(depend) list;
+};
+
+struct conflict {
+       /*! the name of the conflict */
+       const char *name;
+       /*! for linking */
+       AST_LIST_ENTRY(conflict) list;
+};
+
+/*! The list of categories */
+struct categories categories = AST_LIST_HEAD_NOLOCK_INIT_VALUE;
+
+/*!
+   We have to maintain a pointer to the root of the trees generated from reading
+   the build options XML files so that we can free it when we're done.  We don't
+   copy any of the information over from these trees. Our list is just a 
+   convenient mapping to the information contained in these lists with one
+   additional piece of information - whether the build option is enabled or not.
+*/
+struct tree {
+       /*! the root of the tree */
+       mxml_node_t *root;
+       /*! for linking */
+       AST_LIST_ENTRY(tree) list;
+};
+
+/*! The list of trees from makeopts.xml files */
+AST_LIST_HEAD_NOLOCK_STATIC(trees, tree);
+
+const char * const makeopts_files[] = {
+       "makeopts.xml"
+};
+
+char *output_makeopts = OUTPUT_MAKEOPTS_DEFAULT;
+
+/*! This is set to 1 if menuselect.makeopts pre-existed the execution of this app */
+int existing_config = 0;
+
+/*! This is set when the --check-deps argument is provided. */
+int check_deps = 0;
+
+/*! Force a clean of the source tree */
+int force_clean = 0;
+
+int add_category(struct category *cat);
+int add_member(struct member *mem, struct category *cat);
+int parse_makeopts_xml(const char *makeopts_xml);
+int process_deps(void);
+int build_member_list(void);
+void mark_as_present(const char *member, const char *category);
+int parse_existing_config(const char *infile);
+int generate_makeopts_file(void);
+void free_member_list(void);
+void free_trees(void);
+
+/*! \brief a wrapper for calloc() that generates an error message if the allocation fails */
+static inline void *my_calloc(size_t num, size_t len)
+{
+       void *tmp;
+
+       tmp = calloc(num, len);
+       
+       if (!tmp)
+               fprintf(stderr, "Memory allocation error!\n");
+
+       return tmp;
+}
+
+/*! \brief return a pointer to the first non-whitespace character */
+static inline char *skip_blanks(char *str)
+{
+       if (!str)
+               return NULL;
+
+       while (*str && *str < 33)
+               str++;
+
+       return str;
+}
+
+/*! \brief Add a category to the category list, ensuring that there are no duplicates */
+int add_category(struct category *cat)
+{
+       struct category *tmp;
+
+       AST_LIST_TRAVERSE(&categories, tmp, list) {
+               if (!strcmp(tmp->name, cat->name)) {
+                       fprintf(stderr, "Category '%s' specified more than once!\n", cat->name);
+                       return -1;
+               }
+       }
+       AST_LIST_INSERT_TAIL(&categories, cat, list);
+
+       return 0;
+}
+
+/*! \brief Add a member to the member list of a category, ensuring that there are no duplicates */
+int add_member(struct member *mem, struct category *cat)
+{
+       struct member *tmp;
+
+       AST_LIST_TRAVERSE(&cat->members, tmp, list) {
+               if (!strcmp(tmp->name, mem->name)) {
+                       fprintf(stderr, "Member '%s' already exists in category '%s', ignoring.\n", mem->name, cat->name);
+                       return -1;
+               }
+       }
+       AST_LIST_INSERT_TAIL(&cat->members, mem, list);
+
+       return 0;
+}
+
+/*! \brief Parse an input makeopts file */
+int parse_makeopts_xml(const char *makeopts_xml)
+{
+       FILE *f;
+       struct category *cat;
+       struct tree *tree;
+       struct member *mem;
+       struct depend *dep;
+       struct conflict *cnf;
+       mxml_node_t *cur;
+       mxml_node_t *cur2;
+       mxml_node_t *cur3;
+       mxml_node_t *menu;
+       const char *tmp;
+
+       if (!(f = fopen(makeopts_xml, "r"))) {
+               fprintf(stderr, "Unable to open '%s' for reading!\n", makeopts_xml);
+               return -1;
+       }
+
+       if (!(tree = my_calloc(1, sizeof(*tree)))) {
+               fclose(f);
+               return -1;
+       }
+
+       if (!(tree->root = mxmlLoadFile(NULL, f, MXML_OPAQUE_CALLBACK))) {
+               fclose(f);
+               free(tree);
+               return -1;
+       }
+
+       AST_LIST_INSERT_HEAD(&trees, tree, list);
+
+       menu = mxmlFindElement(tree->root, tree->root, "menu", NULL, NULL, MXML_DESCEND);
+       for (cur = mxmlFindElement(menu, menu, "category", NULL, NULL, MXML_DESCEND);
+            cur;
+            cur = mxmlFindElement(cur, menu, "category", NULL, NULL, MXML_DESCEND))
+       {
+               if (!(cat = my_calloc(1, sizeof(*cat))))
+                       return -1;
+
+               cat->name = mxmlElementGetAttr(cur, "name");
+               cat->displayname = mxmlElementGetAttr(cur, "displayname");
+               if ((tmp = mxmlElementGetAttr(cur, "positive_output")))
+                       cat->positive_output = !strcasecmp(tmp, "yes");
+               if ((tmp = mxmlElementGetAttr(cur, "force_clean_on_change")))
+                       cat->force_clean_on_change = !strcasecmp(tmp, "yes");
+
+               if (add_category(cat)) {
+                       free(cat);
+                       continue;
+               }
+
+               for (cur2 = mxmlFindElement(cur, cur, "member", NULL, NULL, MXML_DESCEND);
+                    cur2;
+                    cur2 = mxmlFindElement(cur2, cur, "member", NULL, NULL, MXML_DESCEND))
+               {
+                       if (!(mem = my_calloc(1, sizeof(*mem))))
+                               return -1;
+                       
+                       if (!cat->positive_output)
+                               mem->enabled = 1; /* Enabled by default */
+
+                       mem->name = mxmlElementGetAttr(cur2, "name");
+                       
+                       cur3 = mxmlFindElement(cur2, cur2, "defaultenabled", NULL, NULL, MXML_DESCEND);
+                       if (cur3 && cur3->child) {
+                               if (!strcasecmp("no", cur3->child->value.opaque))
+                                       mem->enabled = 0;
+                               else if (!strcasecmp("yes", cur3->child->value.opaque))
+                                       mem->enabled = 1;
+                               else
+                                       fprintf(stderr, "Invalid value '%s' for <defaultenabled> !\n", cur3->child->value.opaque);
+                       }
+                       
+                       for (cur3 = mxmlFindElement(cur2, cur2, "depend", NULL, NULL, MXML_DESCEND);
+                            cur3 && cur3->child;
+                            cur3 = mxmlFindElement(cur3, cur2, "depend", NULL, NULL, MXML_DESCEND))
+                       {
+                               if (!(dep = my_calloc(1, sizeof(*dep))))
+                                       return -1;
+                               if (!strlen_zero(cur3->child->value.opaque)) {
+                                       dep->name = cur3->child->value.opaque;
+                                       AST_LIST_INSERT_HEAD(&mem->deps, dep, list);
+                               } else
+                                       free(dep);
+                       }
+
+                       for (cur3 = mxmlFindElement(cur2, cur2, "conflict", NULL, NULL, MXML_DESCEND);
+                            cur3 && cur3->child;
+                            cur3 = mxmlFindElement(cur3, cur2, "conflict", NULL, NULL, MXML_DESCEND))
+                       {
+                               if (!(cnf = my_calloc(1, sizeof(*cnf))))
+                                       return -1;
+                               if (!strlen_zero(cur3->child->value.opaque)) {
+                                       cnf->name = cur3->child->value.opaque;
+                                       AST_LIST_INSERT_HEAD(&mem->conflicts, cnf, list);
+                               } else
+                                       free(cnf);
+                       }
+
+                       if (add_member(mem, cat))
+                               free(mem);
+               }
+       }
+
+       fclose(f);
+
+       return 0;
+}
+
+/*! \brief Process dependencies against the input dependencies file */
+int process_deps(void)
+{
+       struct category *cat;
+       struct member *mem;
+       struct depend *dep;
+       struct conflict *cnf;
+       FILE *f;
+       struct dep_file {
+               char name[32];
+               int met;
+               AST_LIST_ENTRY(dep_file) list;
+       } *dep_file;
+       AST_LIST_HEAD_NOLOCK_STATIC(deps_file, dep_file);
+       char buf[80];
+       char *p;
+       int res = 0;
+
+       if (!(f = fopen(MENUSELECT_DEPS, "r"))) {
+               fprintf(stderr, "Unable to open '%s' for reading!  Did you run ./configure ?\n", MENUSELECT_DEPS);
+               return -1;
+       }
+
+       /* Build a dependency list from the file generated by configure */      
+       while (memset(buf, 0, sizeof(buf)), fgets(buf, sizeof(buf), f)) {
+               p = buf;
+               strsep(&p, "=");
+               if (!p)
+                       continue;
+               if (!(dep_file = my_calloc(1, sizeof(*dep_file))))
+                       break;
+               strncpy(dep_file->name, buf, sizeof(dep_file->name) - 1);
+               dep_file->met = atoi(p);
+               AST_LIST_INSERT_TAIL(&deps_file, dep_file, list);
+       }
+
+       fclose(f);
+
+       /* Process dependencies of all modules */
+       AST_LIST_TRAVERSE(&categories, cat, list) {
+               AST_LIST_TRAVERSE(&cat->members, mem, list) {
+                       AST_LIST_TRAVERSE(&mem->deps, dep, list) {
+                               mem->depsfailed = 1;
+                               AST_LIST_TRAVERSE(&deps_file, dep_file, list) {
+                                       if (!strcasecmp(dep_file->name, dep->name)) {
+                                               if (dep_file->met)
+                                                       mem->depsfailed = 0;
+                                               break;
+                                       }
+                               }
+                               if (mem->depsfailed)
+                                       break; /* This dependency is not met, so we can stop now */
+                       }
+                       if (mem->depsfailed) {
+                               if (check_deps && existing_config && mem->enabled) {
+                                       /* Config already existed, but this module was not disabled.
+                                        * However, according to our current list of dependencies that
+                                        * have been met, this can not be built. */
+                                       res = -1;
+                                       fprintf(stderr, "\nThe existing menuselect.makeopts did not specify that %s should not be built\n", mem->name);
+                                       fprintf(stderr, "However, menuselect-deps indicates that dependencies for this module have not\n");
+                                       fprintf(stderr, "been met.  So, either remove the existing menuselect.makeopts file, or run\n");
+                                       fprintf(stderr, "'make menuselect' to generate a file that is correct.\n\n");
+                                       goto deps_file_free;
+                               }
+                               mem->enabled = 0; /* Automatically disable it if dependencies not met */
+                       }
+               }
+       }
+
+       /* Process conflicts of all modules */
+       AST_LIST_TRAVERSE(&categories, cat, list) {
+               AST_LIST_TRAVERSE(&cat->members, mem, list) {
+                       AST_LIST_TRAVERSE(&mem->conflicts, cnf, list) {
+                               mem->conflictsfailed = 0;
+                               AST_LIST_TRAVERSE(&deps_file, dep_file, list) {
+                                       if (!strcasecmp(dep_file->name, cnf->name)) {
+                                               if (dep_file->met)
+                                                       mem->conflictsfailed = 1;
+                                               break;
+                                       }
+                               }
+                               if (mem->conflictsfailed)
+                                       break; /* This conflict was found, so we can stop now */
+                       }
+                       if (mem->conflictsfailed) {
+                               if (check_deps && existing_config && mem->enabled) {
+                                       /* Config already existed, but this module was not disabled.
+                                        * However, according to our current list of conflicts that
+                                        * exist, this can not be built. */
+                                       res = -1;
+                                       fprintf(stderr, "\nThe existing menuselect.makeopts did not specify that %s should not be built\n", mem->name);
+                                       fprintf(stderr, "However, menuselect-deps indicates that conflicts for this module exist.\n");
+                                       fprintf(stderr, "So, either remove the existing menuselect.makeopts file, or run\n");
+                                       fprintf(stderr, "'make menuselect' to generate a file that is correct.\n\n");
+                                       goto deps_file_free;
+                               }
+                               mem->enabled = 0; /* Automatically disable it if conflicts exist */
+                       }
+               }
+       }
+
+deps_file_free:
+
+       /* Free the dependency list we built from the file */
+       while ((dep_file = AST_LIST_REMOVE_HEAD(&deps_file, list)))
+               free(dep_file);
+
+       return res;
+}
+
+/*! \brief Iterate through all of the input makeopts files and call the parse function on them */
+int build_member_list(void)
+{
+       int i;
+       int res = -1;
+
+       for (i = 0; i < (sizeof(makeopts_files) / sizeof(makeopts_files[0])); i++) {
+               if ((res = parse_makeopts_xml(makeopts_files[i]))) {
+                       fprintf(stderr, "Error parsing '%s'!\n", makeopts_files[i]);
+                       break;
+               }
+       }
+
+       return res;
+}
+
+/*! \brief Given the string representation of a member and category, mark it as present in a given input file */
+void mark_as_present(const char *member, const char *category)
+{
+       struct category *cat;
+       struct member *mem;
+
+       AST_LIST_TRAVERSE(&categories, cat, list) {
+               if (strcmp(category, cat->name))
+                       continue;
+               AST_LIST_TRAVERSE(&cat->members, mem, list) {
+                       if (!strcmp(member, mem->name)) {
+                               mem->enabled = cat->positive_output;
+                               break;
+                       }
+               }
+               if (!mem)
+                       fprintf(stderr, "member '%s' in category '%s' not found, ignoring.\n", member, category);
+               break;
+       }
+
+       if (!cat)
+               fprintf(stderr, "category '%s' not found! Can't mark '%s' as disabled.\n", category, member);
+}
+
+/*! \brief Toggle a member of a category at the specified index to enabled/disabled */
+void toggle_enabled(struct category *cat, int index)
+{
+       struct member *mem;
+       int i = 0;
+
+       AST_LIST_TRAVERSE(&cat->members, mem, list) {
+               if (i++ == index)
+                       break;
+       }
+
+       if (mem && !(mem->depsfailed || mem->conflictsfailed)) {
+               mem->enabled = !mem->enabled;
+               if (cat->force_clean_on_change)
+                       force_clean = 1;
+       }
+}
+
+/*! \brief Parse an existing output makeopts file and enable members previously selected */
+int parse_existing_config(const char *infile)
+{
+       FILE *f;
+       char buf[2048];
+       char *category, *parse, *member;
+       int lineno = 0;
+
+       if (!(f = fopen(infile, "r"))) {
+#ifdef MENUSELECT_DEBUG
+               /* This isn't really an error, so only print the message in debug mode */
+               fprintf(stderr, "Unable to open '%s' for reading existing config.\n", infile);
+#endif 
+               return -1;
+       }
+
+       while (fgets(buf, sizeof(buf), f)) {
+               lineno++;
+
+               if (strlen_zero(buf))
+                       continue;
+
+               /* skip lines that are not for this tool */
+               if (strncasecmp(buf, "MENUSELECT_", strlen("MENUSELECT_")))
+                       continue;
+
+               parse = buf;
+               parse = skip_blanks(parse);
+               if (strlen_zero(parse))
+                       continue;
+
+               /* Grab the category name */    
+               category = strsep(&parse, "=");
+               if (!parse) {
+                       fprintf(stderr, "Invalid string in '%s' at line '%d'!\n", output_makeopts, lineno);
+                       continue;
+               }
+
+               parse = skip_blanks(parse);
+               while ((member = strsep(&parse, " \n"))) {
+                       member = skip_blanks(member);
+                       if (strlen_zero(member))
+                               continue;
+
+                       mark_as_present(member, category);
+               }
+       }
+
+       fclose(f);
+
+       return 0;
+}
+
+/*! \brief Create the output makeopts file that results from the user's selections */
+int generate_makeopts_file(void)
+{
+       FILE *f;
+       struct category *cat;
+       struct member *mem;
+
+       if (!(f = fopen(output_makeopts, "w"))) {
+               fprintf(stderr, "Unable to open build configuration file (%s) for writing!\n", output_makeopts);
+               return -1;
+       }
+
+       /* Traverse all categories and members and output them as var/val pairs */
+       AST_LIST_TRAVERSE(&categories, cat, list) {
+               fprintf(f, "%s=", cat->name);
+               AST_LIST_TRAVERSE(&cat->members, mem, list) {
+                       if ((!cat->positive_output && (!mem->enabled || mem->depsfailed || mem->conflictsfailed)) ||
+                           (cat->positive_output && mem->enabled && !mem->depsfailed && !mem->conflictsfailed))
+                               fprintf(f, "%s ", mem->name);
+               }
+               fprintf(f, "\n");
+       }
+
+       fclose(f);
+
+       return 0;
+}
+
+#ifdef MENUSELECT_DEBUG
+/*! \brief Print out all of the information contained in our tree */
+void dump_member_list(void)
+{
+       struct category *cat;
+       struct member *mem;
+       struct depend *dep;
+       struct conflict *cnf;
+
+       AST_LIST_TRAVERSE(&categories, cat, list) {
+               fprintf(stderr, "Category: '%s'\n", cat->name);
+               AST_LIST_TRAVERSE(&cat->members, mem, list) {
+                       fprintf(stderr, "   ==>> Member: '%s'  (%s)\n", mem->name, mem->enabled ? "Enabled" : "Disabled");
+                       AST_LIST_TRAVERSE(&mem->deps, dep, list)
+                               fprintf(stderr, "      --> Depends on: '%s'\n", dep->name);
+                       if (!AST_LIST_EMPTY(&mem->deps))
+                               fprintf(stderr, "      --> Dependencies Met: %s\n", mem->depsfailed ? "No" : "Yes");    
+                       AST_LIST_TRAVERSE(&mem->conflicts, cnf, list)
+                               fprintf(stderr, "      --> Conflicts with: '%s'\n", cnf->name);
+                       if (!AST_LIST_EMPTY(&mem->conflicts))
+                               fprintf(stderr, "      --> Conflicts Found: %s\n", mem->conflictsfailed ? "Yes" : "No");
+               }
+       }
+}
+#endif
+
+/*! \brief Free all categories and their members */
+void free_member_list(void)
+{
+       struct category *cat;
+       struct member *mem;
+       struct depend *dep;
+       struct conflict *cnf;
+
+       while ((cat = AST_LIST_REMOVE_HEAD(&categories, list))) {
+               while ((mem = AST_LIST_REMOVE_HEAD(&cat->members, list))) {
+                       while ((dep = AST_LIST_REMOVE_HEAD(&mem->deps, list)))
+                               free(dep);
+                       while ((cnf = AST_LIST_REMOVE_HEAD(&mem->conflicts, list)))
+                               free(cnf);
+                       free(mem);
+               }
+               free(cat);
+       }
+}
+
+/*! \brief Free all of the XML trees */
+void free_trees(void)
+{
+       struct tree *tree;
+
+       while ((tree = AST_LIST_REMOVE_HEAD(&trees, list))) {
+               mxmlDelete(tree->root);
+               free(tree);
+       }
+}
+
+/*! \brief Enable/Disable all members of a category as long as dependencies have been met and no conflicts are found */
+void set_all(struct category *cat, int val)
+{
+       struct member *mem;
+
+       AST_LIST_TRAVERSE(&cat->members, mem, list) {
+               if (!(mem->depsfailed || mem->conflictsfailed))
+                       mem->enabled = val;
+       }
+}
+
+int count_categories(void)
+{
+       struct category *cat;
+       int count = 0;
+
+       AST_LIST_TRAVERSE(&categories, cat, list)
+               count++;
+
+       return count;           
+}
+
+int count_members(struct category *cat)
+{
+       struct member *mem;
+       int count = 0;
+
+       AST_LIST_TRAVERSE(&cat->members, mem, list)
+               count++;
+
+       return count;           
+}
+
+int main(int argc, char *argv[])
+{
+       int res = 0;
+       unsigned int x;
+
+       /* Parse the input XML files to build the list of available options */
+       if ((res = build_member_list()))
+               exit(res);
+
+       /* The --check-deps option is used to ask this application to check to
+        * see if that an existing menuselect.makeopts file contails all of the
+        * modules that have dependencies that have not been met.  If this
+        * is not the case, an informative message will be printed to the
+        * user and the build will fail. */
+       for (x = 1; x < argc; x++) {
+               if (!strcmp(argv[x], "--check-deps"))
+                       check_deps = 1;
+               else {
+                       res = parse_existing_config(argv[x]);
+                       if (!res && !strcasecmp(argv[x], OUTPUT_MAKEOPTS_DEFAULT))
+                               existing_config = 1;
+               }
+       }
+
+       /* Process module dependencies */
+       res = process_deps();
+
+#ifdef MENUSELECT_DEBUG
+       /* Dump the list produced by parsing the various input files */
+       dump_member_list();
+#endif
+
+       /* Run the menu to let the user enable/disable options */
+       if (!check_deps && !res)
+               res = run_menu();
+
+       /* Write out the menuselect.makeopts file if
+        * 1) menuselect was not executed with --check-deps
+        * 2) menuselect was executed with --check-deps but menuselect.makeopts
+        *    did not already exist.
+        */
+       if ((!check_deps || !existing_config) && !res)
+               res = generate_makeopts_file();
+       
+       /* free everything we allocated */
+       free_trees();
+       free_member_list();
+
+       if (check_deps && !existing_config && !res) {
+               fprintf(stderr, "\n***********************************************************\n");
+               fprintf(stderr, "* menuselect.makeopts file generated with default values! *\n");
+               fprintf(stderr, "* Please rerun make to build Asterisk.                    *\n");
+               fprintf(stderr, "***********************************************************\n\n");
+               res = -1;
+       }
+
+       if (force_clean)
+               unlink(".lastclean");
+
+       exit(res);
+}
diff --git a/build_tools/menuselect.h b/build_tools/menuselect.h
new file mode 100644 (file)
index 0000000..3bd344c
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Asterisk -- An open source telephony toolkit.
+ *
+ * Copyright (C) 2005-2006, Russell Bryant
+ *
+ * Russell Bryant <russell@digium.com>
+ *
+ * See http://www.asterisk.org for more information about
+ * the Asterisk project. Please do not directly contact
+ * any of the maintainers of this project for assistance;
+ * the project provides a web site, mailing lists and IRC
+ * channels for your use.
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License Version 2. See the LICENSE file
+ * at the top of the source tree.
+ */
+
+/*!
+ * \file
+ *
+ * \brief defaults for menuselect
+ *
+ */
+
+#ifndef MENUSELECT_H
+#define MENUSELECT_H
+
+#include "asterisk/linkedlists.h"
+
+#define OUTPUT_MAKEOPTS_DEFAULT "menuselect.makeopts"
+#define MENUSELECT_DEPS         "build_tools/menuselect-deps"
+
+struct depend;
+struct conflict;
+
+struct member {
+       /*! What will be sent to the makeopts file */
+       const char *name;
+       /*! This module is currently selected */
+       int enabled;
+       /*! This module has failed dependencies */
+       int depsfailed;
+       /*! This module has failed conflicts */
+       int conflictsfailed;
+       /*! dependencies of this module */
+       AST_LIST_HEAD_NOLOCK(, depend) deps;
+       /*! conflicts of this module */
+       AST_LIST_HEAD_NOLOCK(, conflict) conflicts;
+       /*! for making a list of modules */
+       AST_LIST_ENTRY(member) list;
+};
+
+struct category {
+       /*! the Makefile variable */
+       const char *name;
+       /*! the name displayed in the menu */
+       const char *displayname;
+       /*! Display what is selected, as opposed to not selected */
+       int positive_output;
+       /*! Force a clean of the source tree if anything in this category changes */
+       int force_clean_on_change;
+       /*! the list of possible values to be set in this variable */
+       AST_LIST_HEAD_NOLOCK(, member) members;
+       /*! for linking */
+       AST_LIST_ENTRY(category) list;
+};
+
+extern AST_LIST_HEAD_NOLOCK(categories, category) categories;
+
+/*! This is implemented by the frontend */
+int run_menu(void);
+
+int count_categories(void);
+
+int count_members(struct category *cat);
+
+/*! \brief Toggle a member of a category at the specified index to enabled/disabled */
+void toggle_enabled(struct category *cat, int index);
+
+/*! \brief Enable/Disable all members of a category as long as dependencies have been met and no conflicts are found */
+void set_all(struct category *cat, int val);
+
+/*! \brief returns non-zero if the string is not defined, or has zero length */
+static inline int strlen_zero(const char *s)
+{
+       return (!s || (*s == '\0'));
+}
+
+#endif /* MENUSELECT_H */
diff --git a/build_tools/menuselect_curses.c b/build_tools/menuselect_curses.c
new file mode 100644 (file)
index 0000000..86efa60
--- /dev/null
@@ -0,0 +1,312 @@
+/*
+ * Asterisk -- An open source telephony toolkit.
+ *
+ * Copyright (C) 2005 - 2006, Russell Bryant
+ *
+ * Russell Bryant <russell@digium.com>
+ *
+ * See http://www.asterisk.org for more information about
+ * the Asterisk project. Please do not directly contact
+ * any of the maintainers of this project for assistance;
+ * the project provides a web site, mailing lists and IRC
+ * channels for your use.
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License Version 2. See the LICENSE file
+ * at the top of the source tree.
+ */
+
+/*
+ * \file
+ *
+ * \author Russell Bryant <russell@digium.com>
+ * 
+ * \brief curses frontend for Asterisk module selection
+ */
+
+#include "autoconfig.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <signal.h>
+#include <curses.h>
+
+#include "menuselect.h"
+
+#define MENU_TITLE1    "*************************************"
+#define MENU_TITLE2    "*     Asterisk Module Selection     *"
+#define MENU_TITLE3    "*************************************"
+
+#define TITLE_HEIGHT   5
+
+#define MIN_X          80
+#define MIN_Y          20
+
+#define PAGE_OFFSET    10
+
+
+/*! Maximum number of characters horizontally */
+int max_x = 0;
+/*! Maximum number of characters vertically */
+int max_y = 0;
+
+const char * const help_info[] = {
+       "scroll        => up/down arrows",
+       "(de)select    => Enter",
+       "select all    => F8",
+       "deselect all  => F7",
+       "back          => left arrow",
+       "quit          => q",
+       "save and quit => x",
+       "",
+       "XXX means dependencies have not been met"
+};
+
+void winch_handler(int sig);
+void show_help(WINDOW *win);
+void draw_main_menu(WINDOW *menu, int curopt);
+void draw_category_menu(WINDOW *menu, struct category *cat, int start, int end, int curopt);
+int run_category_menu(WINDOW *menu, int cat_num);
+int run_category_menu(WINDOW *menu, int cat_num);
+void draw_title_window(WINDOW *title);
+
+/*! \brief Handle a window resize in xterm */
+void winch_handler(int sig)
+{
+       getmaxyx(stdscr, max_y, max_x);
+
+       if (max_x < MIN_X - 1 || max_y < MIN_Y - 1) {
+               fprintf(stderr, "Terminal must be at least 80 x 25.\n");
+               max_x = MIN_X - 1;
+               max_y = MIN_Y - 1;
+       }
+}
+
+/*! \brief Display help information */
+void show_help(WINDOW *win)
+{
+       int i;
+
+       wclear(win);
+       for (i = 0; i < (sizeof(help_info) / sizeof(help_info[0])); i++) {
+               wmove(win, i, max_x / 2 - 15);
+               waddstr(win, help_info[i]);
+       }
+       wrefresh(win);
+       getch(); /* display the help until the user hits a key */
+}
+
+void draw_main_menu(WINDOW *menu, int curopt)
+{
+       struct category *cat;
+       char buf[64];
+       int i = 0;
+
+       wclear(menu);
+
+       AST_LIST_TRAVERSE(&categories, cat, list) {
+               wmove(menu, i++, max_x / 2 - 10);
+               if (!strlen_zero(cat->displayname))
+                       snprintf(buf, sizeof(buf), "%d.%s %s", i, i < 10 ? " " : "", cat->displayname);
+               else
+                       snprintf(buf, sizeof(buf), "%d.%s %s", i, i < 10 ? " " : "", cat->name);
+               waddstr(menu, buf);
+       }
+
+       wmove(menu, curopt, (max_x / 2) - 15);
+       waddstr(menu, "--->");
+       wmove(menu, 0, 0);
+
+       wrefresh(menu);
+}
+
+void draw_category_menu(WINDOW *menu, struct category *cat, int start, int end, int curopt)
+{
+       int i = 0;
+       int j = 0;
+       struct member *mem;
+       char buf[64];
+
+       wclear(menu);
+
+       AST_LIST_TRAVERSE(&cat->members, mem, list) {
+               if (i < start) {
+                       i++;
+                       continue;
+               }
+               wmove(menu, j++, max_x / 2 - 10);
+               i++;
+               if (mem->depsfailed)
+                       snprintf(buf, sizeof(buf), "XXX %d.%s %s", i, i < 10 ? " " : "", mem->name);
+               else
+                       snprintf(buf, sizeof(buf), "[%s] %d.%s %s", mem->enabled ? "*" : " ", i, i < 10 ? " " : "", mem->name);
+               waddstr(menu, buf);
+               if (i == end)
+                       break;
+       }
+
+       wmove(menu, curopt - start, max_x / 2 - 9);
+
+       wrefresh(menu);
+}
+
+int run_category_menu(WINDOW *menu, int cat_num)
+{
+       struct category *cat;
+       int i = 0;
+       int start = 0;
+       int end = max_y - TITLE_HEIGHT - 2;
+       int c;
+       int curopt = 0;
+       int maxopt;
+
+       AST_LIST_TRAVERSE(&categories, cat, list) {
+               if (i++ == cat_num)
+                       break;
+       }
+       if (!cat)
+               return -1;
+
+       maxopt = count_members(cat) - 1;
+
+       draw_category_menu(menu, cat, start, end, curopt);
+
+       while ((c = getch())) {
+               switch (c) {
+               case KEY_UP:
+                       if (curopt > 0) {
+                               curopt--;
+                               if (curopt < start) {
+                                       start--;
+                                       end--;
+                               }
+                       }
+                       break;
+               case KEY_DOWN:
+                       if (curopt < maxopt) {
+                               curopt++;
+                               if (curopt > end - 1) {
+                                       start++;
+                                       end++;
+                               }
+                       }
+                       break;
+               case KEY_NPAGE:
+                       /* XXX Move down the list by PAGE_OFFSET */
+                       break;
+               case KEY_PPAGE:
+                       /* XXX Move up the list by PAGE_OFFSET */
+                       break;
+               case KEY_LEFT:
+                       return 0;
+               case KEY_RIGHT:
+               case KEY_ENTER:
+               case '\n':
+               case ' ':
+                       toggle_enabled(cat, curopt);
+                       break;
+               case 'h':
+               case 'H':
+                       show_help(menu);
+                       break;
+               case KEY_F(7):
+                       set_all(cat, 0);
+                       break;
+               case KEY_F(8):
+                       set_all(cat, 1);
+               default:
+                       break;  
+               }
+               if (c == 'x' || c == 'q')
+                       break;  
+               draw_category_menu(menu, cat, start, end, curopt);
+       }
+
+       wrefresh(menu);
+
+       return c;
+}
+
+void draw_title_window(WINDOW *title)
+{
+       wmove(title, 1, (max_x / 2) - (strlen(MENU_TITLE1) / 2));
+       waddstr(title, MENU_TITLE1);
+       wmove(title, 2, (max_x / 2) - (strlen(MENU_TITLE2) / 2));
+       waddstr(title, MENU_TITLE2);
+       wmove(title, 3, (max_x / 2) - (strlen(MENU_TITLE3) / 2));
+       waddstr(title, MENU_TITLE3);
+       wmove(title, 0, 0);
+       wrefresh(title);
+}
+
+
+
+int run_menu(void)
+{
+       WINDOW *title;
+       WINDOW *menu;
+       int maxopt;
+       int curopt = 0;
+       int c;
+       int res = 0;
+
+       initscr();
+       getmaxyx(stdscr, max_y, max_x);
+       signal(SIGWINCH, winch_handler); /* handle window resizing in xterm */
+
+       if (max_x < MIN_X - 1 || max_y < MIN_Y - 1) {
+               fprintf(stderr, "Terminal must be at least %d x %d.\n", MIN_X, MIN_Y);
+               endwin();
+               return -1;
+       }
+
+       cbreak(); /* don't buffer input until the enter key is pressed */
+       noecho(); /* don't echo user input to the screen */
+       keypad(stdscr, TRUE); /* allow the use of arrow keys */
+       clear();
+       refresh();
+
+       maxopt = count_categories() - 1;
+       
+       /* We have two windows - the title window at the top, and the menu window gets the rest */
+       title = newwin(TITLE_HEIGHT, max_x, 0, 0);
+       menu = newwin(max_y - TITLE_HEIGHT, max_x, TITLE_HEIGHT, 0);
+       draw_title_window(title);       
+       draw_main_menu(menu, curopt);
+       
+       while ((c = getch())) {
+               switch (c) {
+               case KEY_UP:
+                       if (curopt > 0)
+                               curopt--;
+                       break;
+               case KEY_DOWN:
+                       if (curopt < maxopt)
+                               curopt++;
+                       break;
+               case KEY_RIGHT:
+               case KEY_ENTER:
+               case '\n':
+               case ' ':
+                       c = run_category_menu(menu, curopt);
+                       break;
+               case 'h':
+               case 'H':
+                       show_help(menu);
+               default:
+                       break;  
+               }
+               if (c == 'q') {
+                       res = -1;
+                       break;
+               }
+               if (c == 'x')
+                       break;  
+               draw_main_menu(menu, curopt);
+       }
+
+       endwin();
+
+       return res;
+}
diff --git a/build_tools/prep_moduledeps b/build_tools/prep_moduledeps
new file mode 100755 (executable)
index 0000000..1779123
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+process_dir() {
+       dir=${1}
+       prefix=${2}_
+       catsuffix=${3}
+       displayname=${4}
+
+       echo -e "\t<category name=\"MENUSELECT_${catsuffix}\" displayname=\"${displayname}\">"
+       for file in ${dir}/${prefix}*.c
+       do
+               fname=${file##${dir}/}
+               echo -e "\t\t<member name=\"${fname%%.c}.so\">"
+               awk -f build_tools/get_moduledeps ${file}
+               echo -e "\t\t</member>"
+       done
+       echo -e "\t</category>"
+}
+
+echo "<?xml version="1.0"?>"
+echo
+echo "<menu>"
+process_dir apps app APPS Applications
+process_dir cdr cdr CDR "Call Detail Recording"
+process_dir channels chan CHANNELS "Channel Drivers"
+process_dir codecs codec CODECS "Codec Translators"
+process_dir formats format FORMATS "Format Interpreters"
+process_dir funcs func FUNCS "Diaplan Functions"
+process_dir pbx pbx PBX "PBX Modules"
+process_dir res res RES "Resource Modules"
+cat build_tools/cflags.xml
+echo "</menu>"
index 575a019..1375980 100644 (file)
 # the GNU General Public License
 #
 
-MODS:=$(patsubst %.c,%.so,$(wildcard cdr_*.c))
-
-ifeq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/odbcinst.h $(CROSS_COMPILE_TARGET)/usr/local/include/odbcinst.h),)
-  MODS:=$(filter-out cdr_odbc.so,$(MODS))
-endif
-
-ifeq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/postgresql $(CROSS_COMPILE_TARGET)/usr/local/pgsql/include $(CROSS_COMPILE_TARGET)/usr/include/pgsql $(CROSS_COMPILE_TARGET)/usr/local/include/pgsql $(CROSS_COMPILE_TARGET)/opt/pgsql/include $(CROSS_COMPILE_TARGET)/usr/include/libpq-fe.h),)
-  MODS:=$(filter-out cdr_pgsql.so,$(MODS))
-endif
-
-ifeq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/sqlite.h),)
-  MODS:=$(filter-out cdr_sqlite.so,$(MODS))
-endif
-
-ifeq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/tds.h $(CROSS_COMPILE_TARGET)/usr/local/include/tds.h $(CROSS_COMPILE_TARGET)/usr/include/freetds/tds.h),)
-  MODS:=$(filter-out cdr_tds.so,$(MODS))
-  NOTDS=1
-endif
-
-ifeq (${OSARCH},CYGWIN)
-  CYGSOLINK=-Wl,--out-implib=lib$@.a -Wl,--export-all-symbols
-  CYGSOLIB=-L.. -L. -lasterisk.dll
-else
-  CFLAGS+=-fPIC
-endif
+MODS:=$(filter-out $(MENUSELECT_CDR),$(patsubst %.c,%.so,$(wildcard cdr_*.c)))
 
 #The problem with sparc is the best stuff is in newer versions of gcc (post 3.0) only.
 #This works for even old (2.96) versions of gcc and provides a small boost either way.
@@ -47,7 +23,7 @@ ifeq ($(PROC),sparc64)
   CFLAGS += -mtune=$(PROC) -O3 -pipe -fomit-frame-pointer -mcpu=v8
 endif
 
-ifeq (${NOTDS},)
+ifneq ($(TDS_LIB),)
   ifeq ($(shell grep -s TDS_VERSION_NO $(CROSS_COMPILE_TARGET)/usr/include/tdsver.h $(CROSS_COMPILE_TARGET)/usr/local/include/tdsver.h $(CROSS_COMPILE_TARGET)/usr/include/freetds/tdsver.h | grep -c 0.63),1)
     CFLAGS += -DFREETDS_0_63
   else
@@ -59,46 +35,6 @@ ifeq (${NOTDS},)
   endif
 endif
 
-MLFLAGS=
-
-ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/freetds),)
-  CFLAGS+=-I$(CROSS_COMPILE_TARGET)/usr/include/freetds
-  MLFLAGS+=-L$(CROSS_COMPILE_TARGET)/usr/lib/postgresql
-endif
-
-ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/postgresql),)
-  CFLAGS+=-I$(CROSS_COMPILE_TARGET)/usr/include/postgresql
-  MLFLAGS+=-L$(CROSS_COMPILE_TARGET)/usr/lib/postgresql
-endif
-
-ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/local/pgsql/include),)
-  CFLAGS+=-I$(CROSS_COMPILE_TARGET)/usr/local/pgsql/include
-  MLFLAGS+=-L$(CROSS_COMPILE_TARGET)/usr/local/pgsql/lib
-endif
-
-ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/pgsql),)
-  CFLAGS+=-I$(CROSS_COMPILE_TARGET)/usr/include/pgsql
-  MLFLAGS+=-L$(CROSS_COMPILE_TARGET)/usr/lib/pgsql
-endif
-
-ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/pgsql),)
-  CFLAGS+=-I$(CROSS_COMPILE_TARGET)/usr/local/include/pgsql
-  MLFLAGS+=-L$(CROSS_COMPILE_TARGET)/usr/local/lib/pgsql
-endif
-
-ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/opt/pgsql/include),)
-  CFLAGS+=-I$(CROSS_COMPILE_TARGET)/opt/pgsql/include
-  MLFLAGS+=-L$(CROSS_COMPILE_TARGET) /opt/pgsql/lib
-endif
-
-ifneq ($(wilcard $(CROSS_COMPILE_TARGET)/usr/include/postgresql),)
-  CFLAGS+=-I$(CROSS_COMPILE_TARGET)/usr/include/postgresql
-endif
-
-ifneq ($(wilcard $(CROSS_COMPILE_TARGET)/usr/lib/libpq.so),)
-  MLFLAGS+=-L$(CROSS_COMPILE_TARGET)/usr/lib
-endif
-
 all: depend $(MODS)
 
 install: all
@@ -113,23 +49,35 @@ clean: clean-depend
        rm -f *.so *.o
 
 %.so : %.o
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB}
-
-ifneq ($(wildcard .depend),)
-  include .depend
-endif
+       $(CC) $(SOLINK) -o $@ $<
 
 cdr_odbc.so: cdr_odbc.o
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} -lodbc $(MLFLAGS)
+       $(CC) $(SOLINK) -o $@ $< $(ODBC_LIB)
+
+cdr_odbc.o: cdr_odbc.c
+       $(CC) -c -o $@ $(CFLAGS) $(ODBC_INCLUDE) $<
 
 cdr_tds.so: cdr_tds.o
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} -ltds $(MLFLAGS)
+       $(CC) $(SOLINK) -o $@ $< $(TDS_LIB)
+
+cdr_tds.o: cdr_tds.c
+       $(CC) -c -o $@ $(CFLAGS) $(TDS_INCLUDE) $<
 
 cdr_pgsql.so: cdr_pgsql.o
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} -lpq -lz $(MLFLAGS)
+       $(CC) $(SOLINK) -o $@ $< $(PGSQL_LIB)
+
+cdr_pgsql.o: cdr_pgsql.c
+       $(CC) -c -o $@ $(CFLAGS) $(PGSQL_INCLUDE) $<
 
 cdr_sqlite.so: cdr_sqlite.o
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} -lsqlite $(MLFLAGS)
+       $(CC) $(SOLINK) -o $@ $< $(SQLITE_LIB)
+
+cdr_sqlite.o: cdr_sqlite.c
+       $(CC) -c -o $@ $(CFLAGS) $(SQLITE_INCLUDE) $<
+
+ifneq ($(wildcard .depend),)
+  include .depend
+endif
 
 depend: .depend
 
index 3a76326..e42631e 100644 (file)
  * \ingroup cdr_drivers
  */
 
+/*** MODULEINFO
+       <depend>unixodbc</depend>
+ ***/
+
 #include <sys/types.h>
 #include <stdio.h>
 #include <string.h>
index 139a1e7..492301a 100644 (file)
  * \ingroup cdr_drivers
  */
 
+/*** MODULEINFO
+       <depend>pgsql</depend>
+ ***/
+
 #include <sys/types.h>
 #include <stdio.h>
 #include <string.h>
index 1982c7d..3d4d793 100644 (file)
  * \ingroup cdr_drivers
  */
 
+/*** MODULEINFO
+       <depend>sqlite</depend>
+ ***/
+
 #include <sys/types.h>
 
 #include <unistd.h>
index 2a812a1..ecc6c29 100644 (file)
@@ -55,6 +55,10 @@ CREATE TABLE [dbo].[cdr] (
 
 */
 
+/*** MODULEINFO
+       <depend>freetds</depend>
+ ***/
+
 #include <sys/types.h>
 #include <stdio.h>
 #include <string.h>
index a1ba62d..9b57cce 100644 (file)
--- a/channel.c
+++ b/channel.c
@@ -32,7 +32,9 @@
 #include <unistd.h>
 #include <math.h>                      /* For PI */
 
-#ifdef ZAPTEL_OPTIMIZATIONS
+#include "asterisk.h"
+
+#ifdef HAVE_ZAPTEL
 #include <sys/ioctl.h>
 #ifdef __linux__
 #include <linux/zaptel.h>
@@ -44,8 +46,6 @@
 #endif
 #endif
 
-#include "asterisk.h"
-
 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 
 #include "asterisk/pbx.h"
@@ -605,7 +605,7 @@ struct ast_channel *ast_channel_alloc(int needqueue)
        for (x=0; x<AST_MAX_FDS - 2; x++)
                tmp->fds[x] = -1;
 
-#ifdef ZAPTEL_OPTIMIZATIONS
+#ifdef HAVE_ZAPTEL
        tmp->timingfd = open("/dev/zap/timer", O_RDWR);
        if (tmp->timingfd > -1) {
                /* Check if timing interface supports new
@@ -714,7 +714,7 @@ int ast_queue_frame(struct ast_channel *chan, struct ast_frame *fin)
                if (write(chan->alertpipe[1], &blah, sizeof(blah)) != sizeof(blah))
                        ast_log(LOG_WARNING, "Unable to write to alert pipe on %s, frametype/subclass %d/%d (qlen = %d): %s!\n",
                                chan->name, f->frametype, f->subclass, qlen, strerror(errno));
-#ifdef ZAPTEL_OPTIMIZATIONS
+#ifdef HAVE_ZAPTEL
        } else if (chan->timingfd > -1) {
                ioctl(chan->timingfd, ZT_TIMERPING, &blah);
 #endif                         
@@ -1739,7 +1739,7 @@ int ast_waitfordigit(struct ast_channel *c, int ms)
 int ast_settimeout(struct ast_channel *c, int samples, int (*func)(void *data), void *data)
 {
        int res = -1;
-#ifdef ZAPTEL_OPTIMIZATIONS
+#ifdef HAVE_ZAPTEL
        if (c->timingfd > -1) {
                if (!func) {
                        samples = 0;
@@ -1852,7 +1852,7 @@ static struct ast_frame *__ast_read(struct ast_channel *chan, int dropaudio)
        if (chan->alertpipe[0] > -1)
                read(chan->alertpipe[0], &blah, sizeof(blah));
 
-#ifdef ZAPTEL_OPTIMIZATIONS
+#ifdef HAVE_ZAPTEL
        if (chan->timingfd > -1 && chan->fdno == AST_TIMING_FD && ast_test_flag(chan, AST_FLAG_EXCEPTION)) {
                int res;
 
index 8ebcfc5..00dfcc3 100644 (file)
@@ -7,67 +7,45 @@
 #
 # Mark Spencer <markster@digium.com>
 #
-# Edited By Belgarath <> Aug 28 2004
-# Added bare bones ultrasparc-linux support.
-#
 # This program is free software, distributed under the terms of
 # the GNU General Public License
 #
 
-MODS:=$(patsubst %.c,%.so,$(wildcard chan_*.c))
+MODS:=$(filter-out $(MENUSELECT_CHANNELS),$(patsubst %.c,%.so,$(wildcard chan_*.c)))
 
-ifeq (${OSARCH},OpenBSD)
+ifeq ($(OSARCH),OpenBSD)
   PTLIB=-lpt_OpenBSD_x86_r
   H323LIB=-lh323_OpenBSD_x86_r
 endif
 
-ifeq (${OSARCH},Linux)
+ifeq ($(OSARCH),Linux)
   PTLIB=-lpt_linux_x86_r
   H323LIB=-lh323_linux_x86_r
   CHANH323LIB=-ldl
 endif
 
-ifeq (${OSARCH},CYGWIN)
-  CYGSOLINK=-Wl,--out-implib=lib$@.a -Wl,--export-all-symbols
-  CYGSOLIB=-L.. -L. -L../res -lasterisk.dll -lres_features.so
-  CYG_CHAN_AGENT=-lres_monitor.so
-endif
-
 ifeq ($(PROC),sparc64)
   PROC=ultrasparc
   CFLAGS += -mtune=$(PROC) -O3 -pipe -fomit-frame-pointer -mcpu=v8
 endif
 
-ifeq (${OSARCH},FreeBSD)
+ifeq ($(OSARCH),FreeBSD)
   PTLIB=-lpt_FreeBSD_x86_r
   H323LIB=-lh323_FreeBSD_x86_r
   CHANH323LIB=-pthread
 endif
 
-ifeq (${OSARCH},NetBSD)
+ifeq ($(OSARCH),NetBSD)
   PTLIB=-lpt_NetBSD_x86_r
   H323LIB=-lh323_NetBSD_x86_r
 endif
 
-ifeq (${OSARCH},Darwin)
-  MODS:=$(filter-out chan_oss.so,$(MODS))
-endif
-
-ifeq (${OSARCH},SunOS)
-  MODS:=$(filter-out chan_oss.so,$(MODS))
+ifeq ($(OSARCH),SunOS)
   SOLINK+=-lrt
 endif
 
-ifeq (${OSARCH},CYGWIN)
-  MODS:=$(filter-out chan_oss.so,$(MODS))
-endif
-
-ifeq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/linux/ixjuser.h $(CROSS_COMPILE_TARGET)/usr/local/include/ixjuser.h),)
-  MODS:=$(filter-out chan_phone.so,$(MODS))
-endif
-
-ifeq (${WITH_SMDI},1)
-CFLAGS+=-DWITH_SMDI
+ifeq ($(WITH_SMDI),1)
+  CFLAGS+=-DWITH_SMDI
 endif
 
 ifeq ($(wildcard h323/libchanh323.a),)
@@ -80,67 +58,6 @@ else
   CFLAGS+=-Imisdn 
 endif
 
-CFLAGS+=-Wno-missing-prototypes -Wno-missing-declarations
-
-ifeq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/alsa/asoundlib.h),)
-  MODS:=$(filter-out chan_alsa.so,$(MODS))
-endif
-
-ifndef WITHOUT_PRI
-ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/lib/libpri.so.1 $(CROSS_COMPILE_TARGET)/usr/local/lib/libpri.so.1),)
-  CFLAGS+=-DZAPATA_PRI
-  ZAPPRI=-lpri
-endif
-endif # WITHOUT_PRI
-
-ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/lib/libmfcr2.so.1 $(CROSS_COMPILE_TARGET)/usr/local/lib/libmfcr2.so.1),)
-  CFLAGS+=-DZAPATA_R2
-  ZAPR2=-lmfcr2
-endif
-
-ALSA_SRC=chan_alsa.c
-
-ifneq ($(wildcard alsa-monitor.h),)
-  CFLAGS+=-DALSA_MONITOR
-  ALSA_SRC+=alsa-monitor.h
-endif
-
-ifndef WITHOUT_ZAPTEL
-ZAPAVAIL:=$(wildcard $(CROSS_COMPILE_TARGET)/usr/include/linux/zaptel.h $(CROSS_COMPILE_TARGET)/usr/local/include/zaptel.h)
-endif
-
-ifeq (${ZAPAVAIL},)
-  MODS:=$(filter-out chan_zap.so,$(MODS))
-else
-  ifeq (${OSARCH},NetBSD)
-    SOLINK+=-L$(CROSS_COMPILE_TARGET)/usr/pkg/lib
-  endif
-  ifeq (${OSARCH},FreeBSD)
-    SOLINK+=-L$(CROSS_COMPILE_TARGET)/usr/local/lib
-  endif
-  CFLAGS+=-DIAX_TRUNKING
-endif
-
-ifeq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/vpbapi.h),)
-  MODS:=$(filter-out chan_vpb.so,$(MODS))
-else
-  CFLAGS+=-DLINUX
-endif
-
-CFLAGS+=-DCRYPTO
-
-ifneq ($(OSARCH),CYGWIN)
-  CFLAGS+=-fPIC
-endif
-
-CFLAGS+=#-DVOFRDUMPER
-
-ZAPDIR=/usr/lib
-
-ifeq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/nbs.h),)
-  MODS:=$(filter-out chan_nbs.so,$(MODS))
-endif
-
 ifndef OPENH323DIR
   OPENH323DIR=$(HOME)/openh323
 endif
@@ -159,7 +76,7 @@ clean: clean-depend
        rm -f busy.h ringtone.h gentone gentone-ulaw
 
 %.so : %.o
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} ${LIBS}
+       $(CC) $(SOLINK) -o $@ $<
 
 ifneq ($(wildcard .depend),)
   include .depend
@@ -187,39 +104,35 @@ ringtone.h: gentone
 
 chan_oss.o: chan_oss.c busy.h ringtone.h
 
-chan_alsa.o: chan_alsa.c busy.h ringtone.h
-
-ifeq (${OSARCH},OpenBSD)
+ifeq ($(OSARCH),OpenBSD)
 chan_oss.so: chan_oss.o
        $(CC) $(SOLINK) -o $@ chan_oss.o -lossaudio
 endif
-ifeq (${OSARCH},NetBSD)
+ifeq ($(OSARCH),NetBSD)
 chan_oss.so: chan_oss.o
        $(CC) $(SOLINK) -o $@ chan_oss.o -lossaudio
 endif
 
 chan_iax2.so: chan_iax2.o iax2-parser.o iax2-provision.o
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} chan_iax2.o iax2-parser.o iax2-provision.o ${CYGSOLIB}
-
-chan_zap.o: chan_zap.c
-       $(CC) -c $(CFLAGS) -o chan_zap.o chan_zap.c
+       $(CC) $(SOLINK) -o $@ $< iax2-parser.o iax2-provision.o
 
 chan_zap.so: chan_zap.o
-       $(CC) $(SOLINK) -o $@ $<  $(ZAPPRI) $(ZAPR2) -ltonezone
-
-chan_sip.so: chan_sip.o
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} chan_sip.o ${CYGSOLIB}
+       $(CC) $(SOLINK) -o $@ $< $(PRI_LIB) $(MFCR2_LIB) $(ZAPTEL_LIB)
 
-chan_agent.so: chan_agent.o
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} chan_agent.o ${CYGSOLIB} ${CYG_CHAN_AGENT}
-
-chan_alsa.o: $(ALSA_SRC)
+chan_zap.o: chan_zap.c
+       $(CC) -c -o $@ $(CFLAGS) $(ZAPTEL_INCLUDE) $<
 
 chan_alsa.so: chan_alsa.o
-       $(CC) $(SOLINK) -o $@ $< -lasound -lm -ldl
+       $(CC) $(SOLINK) -o $@ $< $(ASOUND_LIB)
+
+chan_alsa.o: chan_alsa.c busy.h ringtone.h
+       $(CC) -c -o $@ $(CFLAGS) $(ASOUND_INCLUDE) $<
 
 chan_nbs.so: chan_nbs.o
-       $(CC) $(SOLINK) -o $@ $< -lnbs
+       $(CC) $(SOLINK) -o $@ $< $(NBS_LIB)
+
+chan_nbs.o: chan_nbs.c
+       $(CC) -c -o $@ $(CFLAGS) $(NBS_INCLUDE) $<
 
 chan_vpb.o: chan_vpb.c
        $(CXX) -c $(CFLAGS:-Werror=) -o $@ chan_vpb.c
@@ -227,7 +140,7 @@ chan_vpb.o: chan_vpb.c
 chan_vpb.so: chan_vpb.o
         $(CXX) $(SOLINK) -o $@ $< -lvpb -lpthread -lm -ldl
 
-ifeq (${OSARCH},Linux)
+ifeq ($(OSARCH),Linux)
 chan_h323.so: chan_h323.o h323/libchanh323.a h323/Makefile.ast
        $(CC) $(SOLINK) $(H323LDFLAGS) -o $@ $< h323/libchanh323.a $(H323LDLIBS) -lstdc++
 else
index c36be2d..ae358ee 100644 (file)
@@ -2390,7 +2390,7 @@ static int agent_devicestate(void *data)
        return res;
 }
 
-struct agent_pvt *find_agent(char *agentid)
+static struct agent_pvt *find_agent(char *agentid)
 {
        struct agent_pvt *cur;
 
index b2bc270..e8d223a 100644 (file)
@@ -27,6 +27,9 @@
  * \ingroup channel_drivers
  */
 
+/*** MODULEINFO
+       <depend>asound</depend>
+ ***/
 
 #include <unistd.h>
 #include <fcntl.h>
@@ -1042,7 +1045,7 @@ static struct ast_cli_entry myclis[] = {
        { { "autoanswer", NULL }, console_autoanswer, "Sets/displays autoanswer", autoanswer_usage, autoanswer_complete }
 };
 
-int load_module(void)
+static int load_module(void *mod)
 {
        int res;
        int x;
@@ -1101,9 +1104,7 @@ int load_module(void)
        return 0;
 }
 
-
-
-int unload_module(void)
+static int unload_module(void *mod)
 {
        int x;
        
@@ -1125,17 +1126,14 @@ int unload_module(void)
        return 0;
 }
 
-const char *description(void)
+static const char *description(void)
 {
        return (char *) desc;
 }
 
-int usecount(void)
-{
-       return usecnt;
-}
-
-const char *key(void)
+static const char *key(void)
 {
        return ASTERISK_GPL_KEY;
 }
+
+STD_MOD(MOD_0, NULL, NULL, NULL);
index 08b04ae..4879c26 100644 (file)
  * \ingroup channel_drivers
  */
 
+/*** MODULEINFO
+       <depend>h323</depend>
+ ***/
+
 #include <sys/socket.h>
 #include <sys/signal.h>
 #include <sys/param.h>
@@ -2469,3 +2473,4 @@ const char *key()
 {
        return ASTERISK_GPL_KEY;
 }
+
index c3a6bb1..a3977a3 100644 (file)
 #include <fcntl.h>
 #include <sys/stat.h>
 #include <regex.h>
-#ifdef IAX_TRUNKING
+
+#include "asterisk.h"
+
+#ifdef HAVE_ZAPTEL
 #include <sys/ioctl.h>
 #ifdef __linux__
 #include <linux/zaptel.h>
@@ -58,8 +61,6 @@
 #endif /* __linux__ */
 #endif
 
-#include "asterisk.h"
-
 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 
 #include "asterisk/lock.h"
@@ -9006,7 +9007,7 @@ static void prune_peers(void){
 
 static void set_timing(void)
 {
-#ifdef IAX_TRUNKING
+#ifdef HAVE_ZAPTEL
        int bs = trunkfreq * 8;
        if (timingfd > -1) {
                if (
@@ -10059,7 +10060,7 @@ static int load_module(void *mod)
        jb_setoutput(jb_error_output, jb_warning_output, NULL);
 #endif
        
-#ifdef IAX_TRUNKING
+#ifdef HAVE_ZAPTEL
 #ifdef ZT_TIMERACK
        timingfd = open("/dev/zap/timer", O_RDWR);
        if (timingfd < 0)
index b5a6499..ae4c5ce 100644 (file)
@@ -257,16 +257,12 @@ static const char misdn_type[] = "mISDN";
 
 static int tracing = 0 ;
 
-static int usecnt=0;
-
 static char **misdn_key_vector=NULL;
 static int misdn_key_vector_size=0;
 
 /* Only alaw and mulaw is allowed for now */
 static int prefformat =  AST_FORMAT_ALAW ; /*  AST_FORMAT_SLINEAR ;  AST_FORMAT_ULAW | */
 
-static ast_mutex_t usecnt_lock; 
-
 static int *misdn_debug;
 static int *misdn_debug_only;
 static int max_ports;
@@ -620,7 +616,7 @@ static char *misdn_get_ch_state(struct chan_list *p)
 
 
 
-void reload_config(void)
+static void reload_config(void)
 {
        int i, cfg_debug;
        chan_misdn_log(-1, 0, "Dynamic Crypting Activation is not support during reload at the moment\n");
@@ -1190,7 +1186,7 @@ static int update_config (struct chan_list *ch, int orig)
 
 
 
-void config_jitterbuffer(struct chan_list *ch)
+static void config_jitterbuffer(struct chan_list *ch)
 {
        struct misdn_bchannel *bc=ch->bc;
        int len=ch->jb_len, threshold=ch->jb_upper_threshold;
@@ -2188,7 +2184,7 @@ static int misdn_write(struct ast_channel *ast, struct ast_frame *frame)
 
 
 
-enum ast_bridge_result  misdn_bridge (struct ast_channel *c0,
+static enum ast_bridge_result  misdn_bridge (struct ast_channel *c0,
                                      struct ast_channel *c1, int flags,
                                      struct ast_frame **fo,
                                      struct ast_channel **rc,
@@ -2517,7 +2513,7 @@ static struct ast_channel *misdn_request(const char *type, int format, void *dat
 }
 
 
-int misdn_send_text (struct ast_channel *chan, const char *text)
+static int misdn_send_text (struct ast_channel *chan, const char *text)
 {
        struct chan_list *tmp=chan->tech_pvt;
        
@@ -3827,7 +3823,7 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
 
 static int g_config_initialized=0;
 
-int unload_module(void)
+static int unload_module(void *mod)
 {
        /* First, take us out of the channel loop */
        ast_log(LOG_VERBOSE, "-- Unregistering mISDN Channel Driver --\n");
@@ -3872,7 +3868,7 @@ int unload_module(void)
        return 0;
 }
 
-int load_module(void)
+static int load_module(void *mod)
 {
        int i;
        
@@ -3927,7 +3923,7 @@ int load_module(void)
        {
                if (ast_channel_register(&misdn_tech)) {
                        ast_log(LOG_ERROR, "Unable to register channel class %s\n", misdn_type);
-                       unload_module();
+                       unload_module(mod);
                        return -1;
                }
        }
@@ -3979,28 +3975,19 @@ int load_module(void)
 
 
 
-int reload(void)
+static int reload(void *mod)
 {
        reload_config();
 
        return 0;
 }
 
-int usecount(void)
-{
-       int res;
-       ast_mutex_lock(&usecnt_lock);
-       res = usecnt;
-       ast_mutex_unlock(&usecnt_lock);
-       return res;
-}
-
-const char *description(void)
+static const char *description(void)
 {
        return desc;
 }
 
-const char *key(void)
+static const char *key(void)
 {
        return ASTERISK_GPL_KEY;
 }
@@ -4480,4 +4467,4 @@ void chan_misdn_log(int level, int port, char *tmpl, ...)
        }
 }
 
-
+STD_MOD(MOD_0, reload, NULL, NULL);
index ee6f317..37e290e 100644 (file)
  * \ingroup channel_drivers
  */
 
+/*** MODULEINFO
+       <depend>nbs</depend>
+ ***/
+
 #include <stdio.h>
 #include <string.h>
 #include <sys/socket.h>
@@ -322,3 +326,4 @@ const char *key(void)
 {
        return ASTERISK_GPL_KEY;
 }
+
index 8ee16dc..09b4b43 100644 (file)
  * \ingroup channel_drivers
  */
 
+/*** MODULEINFO
+       <depend>osssound</depend>
+ ***/
+
 #include <stdio.h>
 #include <ctype.h>     /* for isalnum */
 #include <math.h>      /* exp and log */
@@ -1532,3 +1536,5 @@ static const char *key(void)
 }
 
 STD_MOD(MOD_1, NULL, NULL, NULL);
+
+
index 15c87da..1c6fff4 100644 (file)
  * \ingroup channel_drivers
  */
 
+/*** MODULEINFO
+       <depend>ixjuser</depend>
+ ***/
+
 #include <stdio.h>
 #include <string.h>
 #include <ctype.h>
@@ -1426,3 +1430,5 @@ static const char *key(void)
 }
 
 STD_MOD1;
+
+
index 276577d..38b0007 100644 (file)
@@ -1164,7 +1164,7 @@ static char *referstatus2str(enum referstatus rstatus)
 /*! \brief Initialize the initital request packet in the pvt structure.
        This packet is used for creating replies and future requests in
        a dialog */
-void initialize_initreq(struct sip_pvt *p, struct sip_request *req)
+static void initialize_initreq(struct sip_pvt *p, struct sip_request *req)
 {
        if (p->initreq.headers) {
                ast_log(LOG_WARNING, "Initializing already initialized SIP dialog??? %s\n", p->callid);
@@ -5832,7 +5832,8 @@ static int transmit_message_with_text(struct sip_pvt *p, const char *text)
 }
 
 /*! \brief Allocate SIP refer structure */
-int sip_refer_allocate(struct sip_pvt *p) {
+static int sip_refer_allocate(struct sip_pvt *p)
+{
        p->refer = ast_calloc(1, sizeof(struct sip_refer)); 
        return p->refer ? 1 : 0;
 }
@@ -9550,7 +9551,7 @@ static char show_settings_usage[] =
 
 
 /*! \brief  func_header_read: Read SIP header (dialplan function) */
-int func_header_read(struct ast_channel *chan, char *function, char *data, char *buf, size_t len) 
+static int func_header_read(struct ast_channel *chan, char *function, char *data, char *buf, size_t len) 
 {
        struct sip_pvt *p;
        const char *content;
@@ -9596,7 +9597,7 @@ static struct ast_custom_function sip_header_function = {
 };
 
 /*! \brief  Dial plan function to check if domain is local */
-int func_check_sipdomain(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
+static int func_check_sipdomain(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
 {
        if (ast_strlen_zero(data)) {
                ast_log(LOG_WARNING, "CHECKSIPDOMAIN requires an argument - A domain name\n");
@@ -9714,7 +9715,7 @@ struct ast_custom_function sippeer_function = {
 };
 
 /*! \brief ${SIPCHANINFO()} Dialplan function - reads sip channel data */
-int function_sipchaninfo_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) 
+static int function_sipchaninfo_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) 
 {
        struct sip_pvt *p;
        char iabuf[INET_ADDRSTRLEN];
index af55eda..a9dcace 100644 (file)
@@ -29,6 +29,9 @@
  * \ingroup channel_drivers
  */
 
+/*** MODULEINFO
+       <depend>vpbapi</depend>
+ ***/
 
 extern "C" {
 
@@ -3055,3 +3058,5 @@ const char *key()
  }
 #endif
 /**/
+
+
index 13d26e5..9df4ca5 100644 (file)
  *
  * \ingroup channel_drivers
  *
- * \todo Decprecate the "musiconhold" configuration option in v1.5dev
+ * \todo Decprecate the "musiconhold" configuration option post 1.4
  */
 
+/*** MODULEINFO
+       <depend>zaptel</depend>
+ ***/
+
 #include <stdio.h>
 #include <string.h>
 #ifdef __NetBSD__
 #include <math.h>
 #include <tonezone.h>
 #include <ctype.h>
-#ifdef ZAPATA_PRI
+
+#include "asterisk.h"
+
+#ifdef HAVE_LIBPRI
 #include <libpri.h>
 #ifndef PRI_KEYPAD_FACILITY_TX
 #error "You need newer libpri"
 #endif
 #endif
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
 #include <libmfcr2.h>
 #endif
 
-#include "asterisk.h"
-
 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 
 #include "asterisk/lock.h"
@@ -107,7 +112,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #define SMDI_MD_WAIT_TIMEOUT 1500 /* 1.5 seconds */
 #endif
 
-#if !defined(ZT_SIG_EM_E1) || (defined(ZAPATA_PRI) && !defined(ZT_SIG_HARDHDLC))
+#if !defined(ZT_SIG_EM_E1) || (defined(HAVE_LIBPRI) && !defined(ZT_SIG_HARDHDLC))
 #error "Your zaptel is too old.  please update"
 #endif
 
@@ -148,12 +153,11 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 /*! \brief Signaling types that need to use MF detection should be placed in this macro */
 #define NEED_MFDETECT(p) (((p)->sig == SIG_FEATDMF) || ((p)->sig == SIG_FEATDMF_TA) || ((p)->sig == SIG_E911) || ((p)->sig == SIG_FGC_CAMA) || ((p)->sig == SIG_FGC_CAMAMF) || ((p)->sig == SIG_FEATB)) 
 
-
 static const char tdesc[] = "Zapata Telephony Driver"
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                " w/PRI"
 #endif
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
                " w/R2"
 #endif
 ;
@@ -295,7 +299,7 @@ static int cur_priexclusive = 0;
 
 static int priindication_oob = 0;
 
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
 static int minunused = 2;
 static int minidle = 0;
 static char idleext[AST_MAX_EXTENSION];
@@ -334,7 +338,7 @@ AST_MUTEX_DEFINE_STATIC(iflock);
 
 static int ifcount = 0;
 
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
 AST_MUTEX_DEFINE_STATIC(pridebugfdlock);
 #endif
 
@@ -397,13 +401,13 @@ static inline int zt_wait_event(int fd)
 struct zt_pvt;
 
 
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
 static int r2prot = -1;
 #endif
 
 static int ringt_base = DEFAULT_RINGT;
 
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
 
 #define PVT_TO_CHANNEL(p) (((p)->prioffset) | ((p)->logicalspan << 8) | (p->pri->mastertrunkgroup ? 0x10000 : 0))
 #define PRI_CHANNEL(p) ((p) & 0xff)
@@ -595,7 +599,7 @@ static struct zt_pvt {
        unsigned int usedistinctiveringdetection:1;
        unsigned int zaptrcallerid:1;                   /*!< should we use the callerid from incoming call on zap transfer or not */
        unsigned int transfertobusy:1;                  /*!< allow flash-transfers to busy channels */
-#if defined(ZAPATA_PRI)
+#if defined(HAVE_LIBPRI)
        unsigned int alerting:1;
        unsigned int alreadyhungup:1;
        unsigned int isidlecall:1;
@@ -604,7 +608,7 @@ static struct zt_pvt {
        unsigned int resetting:1;
        unsigned int setup_ack:1;
 #endif
-#if defined(ZAPATA_R2)
+#if defined(HAVE_MFCR2)
        unsigned int hasr2call:1;
        unsigned int r2blocked:1;
        unsigned int sigchecked:1;
@@ -686,7 +690,7 @@ static struct zt_pvt {
        int polarityonanswerdelay;
        struct timeval polaritydelaytv;
        int sendcalleridafter;
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        struct zt_pri *pri;
        struct zt_pvt *bearer;
        struct zt_pvt *realcall;
@@ -694,7 +698,7 @@ static struct zt_pvt {
        int prioffset;
        int logicalspan;
 #endif 
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
        int r2prot;
        mfcr2_t *r2;
 #endif 
@@ -735,7 +739,7 @@ static const struct ast_channel_tech zap_tech = {
        .setoption = zt_setoption,
 };
 
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
 #define GET_CHANNEL(p) ((p)->bearer ? (p)->bearer->channel : p->channel)
 #else
 #define GET_CHANNEL(p) ((p)->channel)
@@ -743,7 +747,7 @@ static const struct ast_channel_tech zap_tech = {
 
 struct zt_pvt *round_robin[32];
 
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
 static inline int pri_grab(struct zt_pvt *pvt, struct zt_pri *pri)
 {
        int res;
@@ -810,13 +814,13 @@ static int zt_get_index(struct ast_channel *ast, struct zt_pvt *p, int nullok)
        return res;
 }
 
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
 static void wakeup_sub(struct zt_pvt *p, int a, struct zt_pri *pri)
 #else
 static void wakeup_sub(struct zt_pvt *p, int a, void *pri)
 #endif
 {
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        if (pri)
                ast_mutex_unlock(&pri->lock);
 #endif                 
@@ -834,20 +838,20 @@ static void wakeup_sub(struct zt_pvt *p, int a, void *pri)
                } else
                        break;
        }
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        if (pri)
                ast_mutex_lock(&pri->lock);
 #endif                 
 }
 
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
 static void zap_queue_frame(struct zt_pvt *p, struct ast_frame *f, struct zt_pri *pri)
 #else
 static void zap_queue_frame(struct zt_pvt *p, struct ast_frame *f, void *pri)
 #endif
 {
        /* We must unlock the PRI to avoid the possibility of a deadlock */
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        if (pri)
                ast_mutex_unlock(&pri->lock);
 #endif         
@@ -865,7 +869,7 @@ static void zap_queue_frame(struct zt_pvt *p, struct ast_frame *f, void *pri)
                } else
                        break;
        }
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        if (pri)
                ast_mutex_lock(&pri->lock);
 #endif         
@@ -948,7 +952,7 @@ static void zt_close(int fd)
                close(fd);
 }
 
-int zt_setlinear(int zfd, int linear)
+static int zt_setlinear(int zfd, int linear)
 {
        int res;
        res = ioctl(zfd, ZT_SETLINEAR, &linear);
@@ -958,7 +962,7 @@ int zt_setlinear(int zfd, int linear)
 }
 
 
-int zt_setlaw(int zfd, int law)
+static int zt_setlaw(int zfd, int law)
 {
        int res;
        res = ioctl(zfd, ZT_SETLAW, &law);
@@ -1032,7 +1036,7 @@ static int zt_digit(struct ast_channel *ast, char digit)
        ast_mutex_lock(&p->lock);
        index = zt_get_index(ast, p, 0);
        if ((index == SUB_REAL) && p->owner) {
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                if ((p->sig == SIG_PRI) && (ast->_state == AST_STATE_DIALING) && !p->proceeding) {
                        if (p->setup_ack) {
                                if (!pri_grab(p, p->pri)) {
@@ -1118,7 +1122,7 @@ static char *event2str(int event)
        return buf;
 }
 
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
 static char *dialplan2str(int dialplan)
 {
        if (dialplan == -1) {
@@ -1128,7 +1132,7 @@ static char *dialplan2str(int dialplan)
 }
 #endif
 
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
 static int str2r2prot(char *swtype)
 {
         if (!strcasecmp(swtype, "ar"))
@@ -1524,7 +1528,7 @@ static void fill_rxgain(struct zt_gains *g, float gain, int law)
        }
 }
 
-int set_actual_txgain(int fd, int chan, float gain, int law)
+static int set_actual_txgain(int fd, int chan, float gain, int law)
 {
        struct zt_gains g;
        int res;
@@ -1542,7 +1546,7 @@ int set_actual_txgain(int fd, int chan, float gain, int law)
        return ioctl(fd, ZT_SETGAINS, &g);
 }
 
-int set_actual_rxgain(int fd, int chan, float gain, int law)
+static int set_actual_rxgain(int fd, int chan, float gain, int law)
 {
        struct zt_gains g;
        int res;
@@ -1560,7 +1564,7 @@ int set_actual_rxgain(int fd, int chan, float gain, int law)
        return ioctl(fd, ZT_SETGAINS, &g);
 }
 
-int set_actual_gain(int fd, int chan, float rxgain, float txgain, int law)
+static int set_actual_gain(int fd, int chan, float rxgain, float txgain, int law)
 {
        return set_actual_txgain(fd, chan, txgain, law) | set_actual_rxgain(fd, chan, rxgain, law);
 }
@@ -1667,7 +1671,7 @@ static int restore_conference(struct zt_pvt *p)
 
 static int send_callerid(struct zt_pvt *p);
 
-int send_cwcidspill(struct zt_pvt *p)
+static int send_cwcidspill(struct zt_pvt *p)
 {
        p->callwaitcas = 0;
        p->cidcwexpire = 0;
@@ -1755,7 +1759,7 @@ static int zt_call(struct ast_channel *ast, char *rdest, int timeout)
        struct zt_pvt *p = ast->tech_pvt;
        int x, res, index,mysig;
        char *c, *n, *l;
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        char *s=NULL;
 #endif
        char dest[256]; /* must be same length as p->dialdest */
@@ -1912,7 +1916,7 @@ static int zt_call(struct ast_channel *ast, char *rdest, int timeout)
                        ast_mutex_unlock(&p->lock);
                        return -1;
                }
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                /* Start the trunk, if not GR-303 */
                if (!p->pri) {
 #endif
@@ -1925,7 +1929,7 @@ static int zt_call(struct ast_channel *ast, char *rdest, int timeout)
                                        return -1;
                                }
                        }
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                }
 #endif
                ast_log(LOG_DEBUG, "Dialing '%s'\n", c);
@@ -2023,7 +2027,7 @@ static int zt_call(struct ast_channel *ast, char *rdest, int timeout)
                ast_mutex_unlock(&p->lock);
                return -1;
        }
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        if (p->pri) {
                struct pri_sr *sr;
 #ifdef SUPPORT_USERUSER
@@ -2241,7 +2245,7 @@ static int destroy_channel(struct zt_pvt *prev, struct zt_pvt *cur, int now)
        return 0;
 }
 
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
 static char *zap_send_keypad_facility_app = "ZapSendKeypadFacility";
 
 static char *zap_send_keypad_facility_synopsis = "Send digits out of band over a PRI";
@@ -2290,7 +2294,7 @@ static int zap_send_keypad_facility_exec(struct ast_channel *chan, void *data)
        return 0;
 }
 
-int pri_is_up(struct zt_pri *pri)
+static int pri_is_up(struct zt_pri *pri)
 {
        int x;
        for (x=0;x<NUM_DCHANS;x++) {
@@ -2300,7 +2304,7 @@ int pri_is_up(struct zt_pri *pri)
        return 0;
 }
 
-int pri_assign_bearer(struct zt_pvt *crv, struct zt_pri *pri, struct zt_pvt *bearer)
+static int pri_assign_bearer(struct zt_pvt *crv, struct zt_pri *pri, struct zt_pvt *bearer)
 {
        bearer->owner = &inuse;
        bearer->realcall = crv;
@@ -2330,7 +2334,7 @@ static char *pri_order(int level)
 }
 
 /* Returns fd of the active dchan */
-int pri_active_dchan_fd(struct zt_pri *pri)
+static int pri_active_dchan_fd(struct zt_pri *pri)
 {
        int x = -1;
 
@@ -2342,7 +2346,7 @@ int pri_active_dchan_fd(struct zt_pri *pri)
        return pri->fds[x];
 }
 
-int pri_find_dchan(struct zt_pri *pri)
+static int pri_find_dchan(struct zt_pri *pri)
 {
        int oldslot = -1;
        struct pri *old;
@@ -2523,7 +2527,7 @@ static int zt_hangup(struct ast_channel *ast)
                p->faxhandled = 0;
                p->pulsedial = 0;
                p->onhooktime = time(NULL);
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                p->proceeding = 0;
                p->progress = 0;
                p->alerting = 0;
@@ -2539,7 +2543,7 @@ static int zt_hangup(struct ast_channel *ast)
                if (res < 0) 
                        ast_log(LOG_WARNING, "Unable to set law on channel %d to default\n", p->channel);
                /* Perform low level hangup if no owner left */
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                if (p->pri) {
 #ifdef SUPPORT_USERUSER
                        const char *useruser = pbx_builtin_getvar_helper(ast,"USERUSERINFO");
@@ -2592,7 +2596,7 @@ static int zt_hangup(struct ast_channel *ast)
                        }
                }
 #endif
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
                if (p->sig == SIG_R2) {
                        if (p->hasr2call) {
                                mfcr2_DropCall(p->r2, NULL, UC_NORMAL_CLEARING);
@@ -2658,7 +2662,7 @@ static int zt_hangup(struct ast_channel *ast)
                        x = 0;
                        ast_channel_setoption(ast,AST_OPTION_AUDIO_MODE,&x,sizeof(char),0);
                }
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                if (p->bearer) {
                        ast_log(LOG_DEBUG, "Freeing up bearer channel %d\n", p->bearer->channel);
                        /* Free up the bearer channel as well, and
@@ -2769,7 +2773,7 @@ static int zt_answer(struct ast_channel *ast)
                        zt_train_ec(p);
                }
                break;
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        case SIG_PRI:
                /* Send a pri acknowledge */
                if (!pri_grab(p, p->pri)) {
@@ -2782,7 +2786,7 @@ static int zt_answer(struct ast_channel *ast)
                }
                break;
 #endif
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
        case SIG_R2:
                res = mfcr2_AnswerCall(p->r2, NULL);
                if (res)
@@ -3495,7 +3499,7 @@ static int attempt_transfer(struct zt_pvt *p)
        return 0;
 }
 
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
 static struct ast_frame *handle_r2_event(struct zt_pvt *p, mfcr2_event_t *e, int index)
 {
        struct ast_frame *f;
@@ -3644,7 +3648,7 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast)
                else
                        p->pulsedial = 0;
                ast_log(LOG_DEBUG, "Detected %sdigit '%c'\n", p->pulsedial ? "pulse ": "", res & 0xff);
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                if (!p->proceeding && p->sig == SIG_PRI && p->pri && p->pri->overlapdial) {
                        /* absorb event */
                } else {
@@ -3657,7 +3661,7 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast)
                        p->subs[index].f.subclass = res & 0xff;
                        dtmf_frame.subclass = res & 0xff;
                        p->subs[index].f.next = ast_frdup(&dtmf_frame);
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                }
 #endif
                /* Unmute conference, return the captured digit */
@@ -3687,7 +3691,7 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast)
 #endif
                case ZT_EVENT_BITSCHANGED:
                        if (p->sig == SIG_R2) {
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
                                struct ast_frame  *f = &p->subs[index].f;
                                mfcr2_event_t *e;
                                e = r2_get_event_bits(p);
@@ -3748,7 +3752,7 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast)
                        }
                        break;
                case ZT_EVENT_ALARM:
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                        if (p->call) {
                                if (p->pri && p->pri->pri) {
                                        if (!pri_grab(p, p->pri)) {
@@ -4099,7 +4103,7 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast)
                        break;
                case ZT_EVENT_NOALARM:
                        p->inalarm = 0;
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                        /* Extremely unlikely but just in case */
                        if (p->bearer)
                                p->bearer->inalarm = 0;
@@ -4773,7 +4777,7 @@ struct ast_frame  *zt_read(struct ast_channel *ast)
                                        f = NULL;
                                }
                        } else if (f->frametype == AST_FRAME_DTMF) {
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                                if (!p->proceeding && p->sig==SIG_PRI && p->pri && p->pri->overlapdial) {
                                        /* Don't accept in-band DTMF when in overlap dial mode */
                                        f->frametype = AST_FRAME_NULL;
@@ -4893,7 +4897,7 @@ static int zt_write(struct ast_channel *ast, struct ast_frame *frame)
        }
 
 #if 0
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        ast_mutex_lock(&p->lock);
        if (!p->proceeding && p->sig==SIG_PRI && p->pri && !p->outgoing) {
                if (p->pri->pri) {              
@@ -4980,7 +4984,7 @@ static int zt_indicate(struct ast_channel *chan, int condition)
        if (index == SUB_REAL) {
                switch(condition) {
                case AST_CONTROL_BUSY:
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                        if (p->priindication_oob && p->sig == SIG_PRI) {
                                chan->hangupcause = AST_CAUSE_USER_BUSY;
                                chan->_softhangup |= AST_SOFTHANGUP_DEV;
@@ -5001,7 +5005,7 @@ static int zt_indicate(struct ast_channel *chan, int condition)
                                res = tone_zone_play_tone(p->subs[index].zfd, ZT_TONE_BUSY);
                        break;
                case AST_CONTROL_RINGING:
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                        if ((!p->alerting) && p->sig==SIG_PRI && p->pri && !p->outgoing && (chan->_state != AST_STATE_UP)) {
                                if (p->pri->pri) {              
                                        if (!pri_grab(p, p->pri)) {
@@ -5025,7 +5029,7 @@ static int zt_indicate(struct ast_channel *chan, int condition)
                        break;
                case AST_CONTROL_PROCEEDING:
                        ast_log(LOG_DEBUG,"Received AST_CONTROL_PROCEEDING on %s\n",chan->name);
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                        if (!p->proceeding && p->sig==SIG_PRI && p->pri && !p->outgoing) {
                                if (p->pri->pri) {              
                                        if (!pri_grab(p, p->pri)) {
@@ -5043,7 +5047,7 @@ static int zt_indicate(struct ast_channel *chan, int condition)
                        break;
                case AST_CONTROL_PROGRESS:
                        ast_log(LOG_DEBUG,"Received AST_CONTROL_PROGRESS on %s\n",chan->name);
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                        p->digital = 0; /* Digital-only calls isn't allows any inband progress messages */
                        if (!p->progress && p->sig==SIG_PRI && p->pri && !p->outgoing) {
                                if (p->pri->pri) {              
@@ -5062,7 +5066,7 @@ static int zt_indicate(struct ast_channel *chan, int condition)
                        break;
                case AST_CONTROL_CONGESTION:
                        chan->hangupcause = AST_CAUSE_CONGESTION;
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                        if (p->priindication_oob && p->sig == SIG_PRI) {
                                chan->hangupcause = AST_CAUSE_SWITCH_CONGESTION;
                                chan->_softhangup |= AST_SOFTHANGUP_DEV;
@@ -5081,7 +5085,7 @@ static int zt_indicate(struct ast_channel *chan, int condition)
 #endif
                                res = tone_zone_play_tone(p->subs[index].zfd, ZT_TONE_CONGESTION);
                        break;
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                case AST_CONTROL_HOLD:
                        if (p->pri) {
                                if (!pri_grab(p, p->pri)) {
@@ -5167,7 +5171,7 @@ static struct ast_channel *zt_new(struct zt_pvt *i, int state, int startpbx, int
                }
                y = 1;
                do {
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                        if (i->bearer || (i->pri && (i->sig == SIG_FXSKS)))
                                ast_string_field_build(tmp, name, "Zap/%d:%d-%d", i->pri->trunkgroup, i->channel, y);
                        else
@@ -5224,7 +5228,7 @@ static struct ast_channel *zt_new(struct zt_pvt *i, int state, int startpbx, int
                                        i->dsp = NULL;
                                if (i->dsp) {
                                        i->dsp_features = features & ~DSP_PROGRESS_TALK;
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                                        /* We cannot do progress detection until receives PROGRESS message */
                                        if (i->outgoing && (i->sig == SIG_PRI)) {
                                                /* Remember requested DSP features, don't treat
@@ -5282,7 +5286,7 @@ static struct ast_channel *zt_new(struct zt_pvt *i, int state, int startpbx, int
 #endif
                tmp->cid.cid_pres = i->callingpres;
                tmp->cid.cid_ton = i->cid_ton;
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                tmp->transfercapability = transfercapability;
                pbx_builtin_setvar_helper(tmp, "TRANSFERCAPABILITY", ast_transfercapability2str(transfercapability));
                if (transfercapability & PRI_TRANS_CAP_DIGITAL) {
@@ -5391,7 +5395,7 @@ static void *ss_thread(void *data)
        if (p->dsp)
                ast_dsp_digitreset(p->dsp);
        switch(p->sig) {
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        case SIG_PRI:
                /* Now loop looking for an extension */
                ast_copy_string(exten, p->exten, sizeof(exten));
@@ -5994,7 +5998,7 @@ lax);
        case SIG_FXSLS:
        case SIG_FXSGS:
        case SIG_FXSKS:
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                if (p->pri) {
                        /* This is a GR-303 trunk actually.  Wait for the first ring... */
                        struct ast_frame *f;
@@ -6446,7 +6450,7 @@ lax);
        return NULL;
 }
 
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
 static int handle_init_r2_event(struct zt_pvt *i, mfcr2_event_t *e)
 {
        struct ast_channel *chan;
@@ -6503,7 +6507,7 @@ static int handle_init_event(struct zt_pvt *i, int event)
        case ZT_EVENT_NONE:
        case ZT_EVENT_BITSCHANGED:
                if (i->radio) break;
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
                if (i->r2) {
                        mfcr2_event_t *e;
                        e = r2_get_event_bits(i);
@@ -6739,7 +6743,7 @@ static void *do_monitor(void *data)
                                        pfds[count].events = POLLPRI;
                                        pfds[count].revents = 0;
                                        /* Message waiting or r2 channels also get watched for reading */
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
                                        if (i->cidspill || i->r2)
 #else                                  
                                        if (i->cidspill)
@@ -6833,14 +6837,14 @@ static void *do_monitor(void *data)
                                pollres = ast_fdisset(pfds, i->subs[SUB_REAL].zfd, count, &spoint);
                                if (pollres & POLLIN) {
                                        if (i->owner || i->subs[SUB_REAL].owner) {
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                                                if (!i->pri)
 #endif                                         
                                                        ast_log(LOG_WARNING, "Whoa....  I'm owned but found (%d) in read...\n", i->subs[SUB_REAL].zfd);
                                                i = i->next;
                                                continue;
                                        }
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
                                        if (i->r2) {
                                                /* If it's R2 signalled, we always have to check for events */
                                                mfcr2_event_t *e;
@@ -6889,14 +6893,14 @@ static void *do_monitor(void *data)
                                        handle_init_event(i, res);
                                        ast_mutex_lock(&iflock);        
                                }
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
                                if ((pollres & POLLPRI) || (i->r2 && !i->sigchecked)) 
 #else                          
                                if (pollres & POLLPRI) 
 #endif                         
                                {
                                        if (i->owner || i->subs[SUB_REAL].owner) {
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                                                if (!i->pri)
 #endif                                         
                                                        ast_log(LOG_WARNING, "Whoa....  I'm owned but found (%d)...\n", i->subs[SUB_REAL].zfd);
@@ -6962,7 +6966,7 @@ static int restart_monitor(void)
        return 0;
 }
 
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
 static int pri_resolve_span(int *span, int channel, int offset, struct zt_spaninfo *si)
 {
        int x;
@@ -7096,7 +7100,7 @@ static struct zt_pvt *mkintf(int channel, int signalling, int outsignalling, int
        wlist = &iflist;
        wend = &ifend;
 
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        if (pri) {
                wlist = &pri->crvs;
                wend = &pri->crvend;
@@ -7169,7 +7173,7 @@ static struct zt_pvt *mkintf(int channel, int signalling, int outsignalling, int
                                        return NULL;
                                }
                        }
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                        if ((signalling == SIG_PRI) || (signalling == SIG_GR303FXOKS) || (signalling == SIG_GR303FXSKS)) {
                                int offset;
                                int myswitchtype;
@@ -7289,7 +7293,7 @@ static struct zt_pvt *mkintf(int channel, int signalling, int outsignalling, int
                                tmp->prioffset = 0;
                        }
 #endif
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
                        if (signalling == SIG_R2) {
                                if (r2prot < 0) {
                                        ast_log(LOG_WARNING, "R2 Country not specified for channel %d -- Assuming China\n", tmp->channel);
@@ -7485,7 +7489,7 @@ static struct zt_pvt *mkintf(int channel, int signalling, int outsignalling, int
                                        zt_set_hook(tmp->subs[SUB_REAL].zfd, ZT_ONHOOK);
                        }
                        ioctl(tmp->subs[SUB_REAL].zfd,ZT_SETTONEZONE,&tmp->tonezone);
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                        /* the dchannel is down so put the channel in alarm */
                        if (tmp->pri && !pri_is_up(tmp->pri))
                                tmp->inalarm = 1;
@@ -7585,7 +7589,7 @@ static inline int available(struct zt_pvt *p, int channelmatch, int groupmatch,
                
        /* If no owner definitely available */
        if (!p->owner) {
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                /* Trust PRI */
                if (p->pri) {
                        if (p->resetting || p->call)
@@ -7594,7 +7598,7 @@ static inline int available(struct zt_pvt *p, int channelmatch, int groupmatch,
                                return 1;
                }
 #endif
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
                /* Trust R2 as well */
                if (p->r2) {
                        if (p->hasr2call || p->r2blocked)
@@ -7702,7 +7706,7 @@ static struct zt_pvt *chandup(struct zt_pvt *src)
 }
        
 
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
 static int pri_find_empty_chan(struct zt_pri *pri, int backwards)
 {
        int x;
@@ -7744,7 +7748,7 @@ static struct ast_channel *zt_request(const char *type, int format, void *data,
        char opt=0;
        int res=0, y=0;
        int backwards = 0;
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        int crv;
        int bearer = -1;
        int trunkgroup;
@@ -7804,7 +7808,7 @@ static struct ast_channel *zt_request(const char *type, int format, void *data,
                        x = CHAN_PSEUDO;
                        channelmatch = x;
                } 
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                else if ((res = sscanf(s, "%d:%d%c%d", &trunkgroup, &crv, &opt, &y)) > 1) {
                        if ((trunkgroup < 1) || (crv < 1)) {
                                ast_log(LOG_WARNING, "Unable to determine trunk group and CRV for data %s\n", (char *)data);
@@ -7855,7 +7859,7 @@ static struct ast_channel *zt_request(const char *type, int format, void *data,
                                        goto next;
 
                        callwait = (p->owner != NULL);
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                        if (pri && (p->subs[SUB_REAL].zfd < 0)) {
                                if (p->sig != SIG_FXSKS) {
                                        /* Gotta find an actual channel to use for this
@@ -7892,7 +7896,7 @@ static struct ast_channel *zt_request(const char *type, int format, void *data,
                        }
                        p->outgoing = 1;
                        tmp = zt_new(p, AST_STATE_RESERVED, 0, p->owner ? SUB_CALLWAIT : SUB_REAL, 0, 0);
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                        if (p->bearer) {
                                /* Log owner to bearer channel, too */
                                p->bearer->owner = tmp;
@@ -7954,7 +7958,7 @@ next:
 }
 
 
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
 static struct zt_pvt *pri_find_crv(struct zt_pri *pri, int crv)
 {
        struct zt_pvt *p;
@@ -8252,7 +8256,8 @@ static int pri_hangup_all(struct zt_pvt *p, struct zt_pri *pri)
        ast_mutex_lock(&pri->lock);
        return 0;
 }
-char * redirectingreason2str(int redirectingreason)
+
+static char * redirectingreason2str(int redirectingreason)
 {
        switch (redirectingreason) {
        case 0:
@@ -9735,10 +9740,10 @@ static struct ast_cli_entry zap_pri_cli[] = {
          "Ends PRI debug output to file" },
 };
 
-#endif /* ZAPATA_PRI */
+#endif /* HAVE_LIBPRI */
 
 
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
 static int handle_r2_no_debug(int fd, int argc, char *argv[])
 {
        int chan;
@@ -9847,7 +9852,7 @@ static int zap_show_channels(int fd, int argc, char **argv)
        char tmps[20] = "";
        ast_mutex_t *lock;
        struct zt_pvt *start;
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        int trunkgroup;
        struct zt_pri *pri=NULL;
        int x;
@@ -9856,7 +9861,7 @@ static int zap_show_channels(int fd, int argc, char **argv)
        lock = &iflock;
        start = iflist;
 
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        if (argc == 4) {
                if ((trunkgroup = atoi(argv[3])) < 1)
                        return RESULT_SHOWUSAGE;
@@ -9879,7 +9884,7 @@ static int zap_show_channels(int fd, int argc, char **argv)
                return RESULT_SHOWUSAGE;
 
        ast_mutex_lock(lock);
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        ast_cli(fd, FORMAT2, pri ? "CRV" : "Chan", "Extension", "Context", "Language", "MusicOnHold");
 #else
        ast_cli(fd, FORMAT2, "Chan", "Extension", "Context", "Language", "MusicOnHold");
@@ -9909,7 +9914,7 @@ static int zap_show_channel(int fd, int argc, char **argv)
        int x;
        ast_mutex_t *lock;
        struct zt_pvt *start;
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        char *c;
        int trunkgroup;
        struct zt_pri *pri=NULL;
@@ -9920,7 +9925,7 @@ static int zap_show_channel(int fd, int argc, char **argv)
 
        if (argc != 4)
                return RESULT_SHOWUSAGE;
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        if ((c = strchr(argv[3], ':'))) {
                if (sscanf(argv[3], "%d:%d", &trunkgroup, &channel) != 2)
                        return RESULT_SHOWUSAGE;
@@ -9947,7 +9952,7 @@ static int zap_show_channel(int fd, int argc, char **argv)
        tmp = start;
        while (tmp) {
                if (tmp->channel == channel) {
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                        if (pri) 
                                ast_cli(fd, "Trunk/CRV: %d/%d\n", trunkgroup, tmp->channel);
                        else
@@ -9985,7 +9990,7 @@ static int zap_show_channel(int fd, int argc, char **argv)
                                if (tmp->slaves[x])
                                        ast_cli(fd, "Slave Channel: %d\n", tmp->slaves[x]->channel);
                        }
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                        if (tmp->pri) {
                                ast_cli(fd, "PRI Flags: ");
                                if (tmp->resetting)
@@ -10002,7 +10007,7 @@ static int zap_show_channel(int fd, int argc, char **argv)
                        }
                                
 #endif
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
                        if (tmp->r2) {
                                ast_cli(fd, "R2 Flags: ");
                                if (tmp->r2blocked)
@@ -10342,7 +10347,7 @@ static int __unload_module(void)
 {
        int x = 0;
        struct zt_pvt *p, *pl;
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        int i;
        for(i=0;i<NUM_SPANS;i++) {
                if (pris[i].master != AST_PTHREADT_NULL) 
@@ -10351,7 +10356,7 @@ static int __unload_module(void)
        ast_cli_unregister_multiple(zap_pri_cli, sizeof(zap_pri_cli) / sizeof(zap_pri_cli[0]));
        ast_unregister_application(zap_send_keypad_facility_app);
 #endif
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
        ast_cli_unregister_multiple(zap_r2_cli, sizeof(zap_r2_cli) / sizeof(zap_r2_cli[0]));
 #endif
        ast_cli_unregister_multiple(zap_cli, sizeof(zap_cli) / sizeof(zap_cli[0]));
@@ -10413,7 +10418,7 @@ static int __unload_module(void)
                ast_log(LOG_WARNING, "Unable to lock the monitor\n");
                return -1;
        }
-#ifdef ZAPATA_PRI              
+#ifdef HAVE_LIBPRI             
        for(i=0;i<NUM_SPANS;i++) {
                if (pris[i].master && (pris[i].master != AST_PTHREADT_NULL))
                        pthread_join(pris[i].master, NULL);
@@ -10425,7 +10430,7 @@ static int __unload_module(void)
 
 static int unload_module(void *mod)
 {
-#ifdef ZAPATA_PRI              
+#ifdef HAVE_LIBPRI             
        int y;
        for (y=0;y<NUM_SPANS;y++)
                ast_mutex_destroy(&pris[y].lock);
@@ -10445,7 +10450,7 @@ static int setup_zap(int reload)
        int y;
        int found_pseudo = 0;
        int cur_radio = 0;
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        int spanno;
        int i;
        int logicalspan;
@@ -10468,7 +10473,7 @@ static int setup_zap(int reload)
                ast_log(LOG_ERROR, "Unable to lock interface list???\n");
                return -1;
        }
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        if (!reload) {
                /* Process trunkgroups first */
                v = ast_variable_browse(cfg, "trunkgroups");
@@ -10532,7 +10537,7 @@ static int setup_zap(int reload)
        while(v) {
                /* Create the interface list */
                if (!strcasecmp(v->name, "channel")
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                        || !strcasecmp(v->name, "crv")
 #endif                 
                                        ) {
@@ -10546,7 +10551,7 @@ static int setup_zap(int reload)
                        }
                        c = v->value;
 
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                        pri = NULL;
                        if (!strcasecmp(v->name, "crv")) {
                                if (sscanf(c, "%d:%n", &trunkgroup, &y) != 1) {
@@ -10600,7 +10605,7 @@ static int setup_zap(int reload)
                                }
                                if (cur_outsignalling < 0) cur_outsignalling = cur_signalling;
                                for (x=start;x<=finish;x++) {
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                                        tmp = mkintf(x, cur_signalling, cur_outsignalling, cur_radio, pri, reload);
 #else                                  
                                        tmp = mkintf(x, cur_signalling, cur_outsignalling, cur_radio, NULL, reload);
@@ -10608,7 +10613,7 @@ static int setup_zap(int reload)
 
                                        if (tmp) {
                                                if (option_verbose > 2) {
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                                                        if (pri)
                                                                ast_verbose(VERBOSE_PREFIX_3 "%s CRV %d:%d, %s signalling\n", reload ? "Reconfigured" : "Registered", trunkgroup,x, sig2str(tmp->sig));
                                                        else
@@ -10909,7 +10914,7 @@ static int setup_zap(int reload)
                                } else if (!strcasecmp(v->value, "featb")) {
                                        cur_signalling = SIG_FEATB;
                                        cur_radio = 0;
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                                } else if (!strcasecmp(v->value, "pri_net")) {
                                        cur_radio = 0;
                                        cur_signalling = SIG_PRI;
@@ -10927,7 +10932,7 @@ static int setup_zap(int reload)
                                        cur_radio = 0;
                                        pritype = PRI_CPE;
 #endif
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
                                } else if (!strcasecmp(v->value, "r2")) {
                                        cur_signalling = SIG_R2;
                                        cur_radio = 0;
@@ -10971,14 +10976,14 @@ static int setup_zap(int reload)
                                } else {
                                        ast_log(LOG_ERROR, "Unknown signalling method '%s'\n", v->value);
                                }
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
                        } else if (!strcasecmp(v->name, "r2country")) {
                                r2prot = str2r2prot(v->value);
                                if (r2prot < 0) {
                                        ast_log(LOG_WARNING, "Unknown R2 Country '%s' at line %d.\n", v->value, v->lineno);
                                }
 #endif
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
                        } else if (!strcasecmp(v->name, "pridialplan")) {
                                if (!strcasecmp(v->value, "national")) {
                                        dialplan = PRI_NATIONAL_ISDN + 1;
@@ -11105,7 +11110,7 @@ static int setup_zap(int reload)
                        } else if (!strcasecmp(v->name, "facilityenable")) {
                                facilityenable = ast_true(v->value);
 #endif /* PRI_GETSET_TIMERS */
-#endif /* ZAPATA_PRI */
+#endif /* HAVE_LIBPRI */
                        } else if (!strcasecmp(v->name, "cadence")) {
                                /* setup to scan our argument */
                                int element_count, c[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
@@ -11263,7 +11268,7 @@ static int setup_zap(int reload)
        }
        ast_mutex_unlock(&iflock);
        ast_config_destroy(cfg);
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        if (!reload) {
                for (x=0;x<NUM_SPANS;x++) {
                        if (pris[x].pvts[0]) {
@@ -11285,7 +11290,7 @@ static int load_module(void *mod)
 {
        int res;
 
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        int y,i;
        memset(pris, 0, sizeof(pris));
        for (y=0;y<NUM_SPANS;y++) {
@@ -11310,12 +11315,12 @@ static int load_module(void *mod)
                __unload_module();
                return -1;
        }
-#ifdef ZAPATA_PRI
+#ifdef HAVE_LIBPRI
        ast_string_field_init(&inuse, 16);
        ast_string_field_set(&inuse, name, "GR-303InUse");
        ast_cli_register_multiple(zap_pri_cli, sizeof(zap_pri_cli) / sizeof(zap_pri_cli[0]));
 #endif 
-#ifdef ZAPATA_R2
+#ifdef HAVE_MFCR2
        ast_cli_register_multiple(zap_r2_cli, sizeof(zap_r2_cli) / sizeof(zap_r2_cli[0]));
 #endif 
        ast_cli_register_multiple(zap_cli, sizeof(zap_cli) / sizeof(zap_cli[0]));
@@ -11458,4 +11463,7 @@ static const char *key(void)
 {
        return ASTERISK_GPL_KEY;
 }
+
 STD_MOD(MOD_1, reload, NULL, NULL);
+
+
index 0e92661..c7d0d34 100644 (file)
@@ -7,7 +7,7 @@
 # Verify those options with main Makefile
 STDCCFLAGS     += -DNDEBUG
 STDCCFLAGS     += $(shell grep ^DEBUG_THREADS ../../Makefile | sed -e "s/^DEBUG_THREADS[       ]*=//" -e "s/\([^\#]*\)\#.*/\1/")
-STDCCFLAGS     += -I../../include
+STDCCFLAGS     += -I../../include -include autoconfig.h
 STDCCFLAGS     += -Wmissing-prototypes
 STDCCFLAGS     += -fPIC
 #OPTCCFLAGS    +=
index 4987883..6be3e9b 100644 (file)
 # the GNU General Public License
 #
 
-MODS:=$(patsubst %.c,%.so,$(wildcard codec_*.c))
-
-ifeq (${OSARCH},CYGWIN)
-  CYGSOLINK=-Wl,--out-implib=lib$@.a -Wl,--export-all-symbols
-  CYGSOLIB=-L.. -L. -lasterisk.dll
-else
-  CFLAGS+=-fPIC
-endif
+MODS:=$(filter-out $(MENUSELECT_CODECS),$(patsubst %.c,%.so,$(wildcard codec_*.c)))
 
 ifeq ($(wildcard g723.1/coder.c),)
   MODS:=$(filter-out codec_g723_1.so,$(MODS))
@@ -31,33 +24,12 @@ ifneq ($(wildcard g723.1b/coder2.c),)
   LIBG723B=g723.1b/libg723b.a
 endif
 
-SPEEX_PATH:=/usr/local/include /usr/include /usr/include/speex /usr/local/include/speex
-SPEEX_SYSTEM_HEADERS:=$(firstword $(wildcard $(SPEEX_PATH:%=$(CROSS_COMPILE_TARGET)%/speex.h)))
-ifeq (${SPEEX_SYSTEM_HEADERS},)
-  MODS:=$(filter-out codec_speex.so,$(MODS))
-else
-  CFLAGS+=-I$(subst /speex.h,,${SPEEX_SYSTEM_HEADERS})
-  LIBSPEEX=-lspeex -lm
-endif
-
 ifeq ($(wildcard ilbc/iLBC_decode.h),)
   MODS:=$(filter-out codec_ilbc.so,$(MODS))
 else
   LIBILBC=ilbc/libilbc.a
 endif
 
-LIBGSM_PATH:=/usr/local/include /usr/include
-LIBGSM_SYSTEM_HEADERS:=$(firstword $(wildcard $(LIBGSM_PATH:%=$(CROSS_COMPILE_TARGET)%/gsm/gsm.h)))
-ifneq ($(LIBGSM_SYSTEM_HEADERS),)
-  LIBGSM=-lgsm
-  LIBGSMT=
-  CFLAGS+=-DUSE_EXTERNAL_GSM_LIB
-else
-  LIBGSM=gsm/lib/libgsm.a
-  LIBGSMT=$(LIBGSM)
-  CFLAGS+=-I.
-endif
-
 LIBLPC10=lpc10/liblpc10.a
 
 all: depend $(MODS)
@@ -74,43 +46,57 @@ clean: clean-depend
        $(MAKE) -C ilbc clean
 
 $(LIBG723):
-       $(MAKE) -C g723.1 all
+       CFLAGS="$(ASTCFLAGS)" $(MAKE) -C g723.1 all
 
-$(LIBGSM):
-       $(MAKE) -C gsm lib/libgsm.a
+gsm/lib/libgsm.a:
+       CFLAGS="$(ASTCFLAGS) -I." $(MAKE) -C gsm lib/libgsm.a
 
 $(LIBG723B):
-       $(MAKE) -C g723.1b all
+       CFLAGS="$(ASTCFLAGS)" $(MAKE) -C g723.1b all
 
 $(LIBLPC10):
-       $(MAKE) -C lpc10 all
+       CFLAGS="$(ASTCFLAGS)" $(MAKE) -C lpc10 all
 
 $(LIBILBC):
-       $(MAKE) -C ilbc all
+       CFLAGS="$(ASTCFLAGS)" $(MAKE) -C ilbc all
 
 codec_ilbc.so: codec_ilbc.o $(LIBILBC)
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} $(LIBILBC)
+       $(CC) $(SOLINK) -o $@ $< $(LIBILBC)
 
 codec_g723_1.so : codec_g723_1.o $(LIBG723)
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} $(LIBG723)
+       $(CC) $(SOLINK) -o $@ $< $(LIBG723)
 
 codec_g723_1b.o : codec_g723_1.c
        $(CC) -c -o $@ $(CFLAGS) -DANNEX_B -Dsingle $<
 
 codec_g723_1b.so : codec_g723_1b.o $(LIBG723B)
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} $(LIBG723B) -lm
+       $(CC) $(SOLINK) -o $@ $< $(LIBG723B) -lm
+
+ifeq ($(GSM_LIB),internal)
+codec_gsm.o: codec_gsm.c
+       $(CC) -c -o $@ $(CFLAGS) -Igsm/inc $<
+
+codec_gsm.so: codec_gsm.o gsm/lib/libgsm.a
+       $(CC) $(SOLINK) -o $@ $< gsm/lib/libgsm.a
+else
+codec_gsm.o: codec_gsm.c
+       $(CC) -c -o $@ $(CFLAGS) $(GSM_INCLUDE) $<
+
+codec_gsm.so: codec_gsm.o
+       $(CC) $(SOLINK) -o $@ $< $(GSM_LIB)
+endif
 
-codec_gsm.so: codec_gsm.o $(LIBGSMT) 
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} $(LIBGSM)
+codec_speex.o: codec_speex.c
+       $(CC) -c -o $@ $(CFLAGS) $(SPEEX_INCLUDE) $<
 
 codec_speex.so: codec_speex.o
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} $(LIBSPEEX)
+       $(CC) $(SOLINK) -o $@ $< $(SPEEX_LIB)
 
 codec_lpc10.so: codec_lpc10.o $(LIBLPC10)
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} $(LIBLPC10) -lm
+       $(CC) $(SOLINK) -o $@ $< $(LIBLPC10) -lm
 
 %.so : %.o
-       $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB}
+       $(CC) $(SOLINK) -o $@ $<
 
 ifneq ($(wildcard .depend),)
   include .depend
index e9a85bc..fc13deb 100644 (file)
  * \ingroup codecs
  */
 
+/*** MODULEINFO
+       <depend>libgsm</depend>
+ ***/
+
 #include <fcntl.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -46,11 +50,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/channel.h"
 #include "asterisk/utils.h"
 
-#ifdef USE_EXTERNAL_GSM_LIB
-#include <gsm/gsm.h>
-#else
-#include "gsm/inc/gsm.h"
-#endif
+#include "gsm.h"
 
 #include "../formats/msgsm.h"
 
index 2f31fb4..5f871b4 100644 (file)
  * \ingroup codecs
  */
 
+/*** MODULEINFO
+       <depend>libspeex</depend>
+ ***/
+
 #include <fcntl.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <netinet/in.h>
 #include <string.h>
 #include <stdio.h>
-#include <speex.h>
+#include <speex/speex.h>
 
 /* We require a post 1.1.8 version of Speex to enable preprocessing
    and better type handling */   
@@ -519,3 +523,4 @@ static const char *key(void)
 }
 
 STD_MOD(MOD_1, reload, NULL, NULL);
+
index dc92cf2..6b1b181 100644 (file)
@@ -73,10 +73,7 @@ PG =
 
 CC             ?= gcc
 CCFLAGS        += -c -DNeedFunctionPrototypes=1 -funroll-loops $(OPTIMIZE)
-ifneq ($(findstring CYGWIN,${OSARCH}),CYGWIN)
 CCFLAGS   += -fPIC
-endif
-
 
 LD             = $(CC)
 
index 1540c14..c916ff3 100644 (file)
@@ -1,8 +1,6 @@
 ARCH=$(PROC)
 CFLAGS+=-Wall -O3 -funroll-loops
-ifneq (${OSARCH},CYGWIN)
 CFLAGS += -fPIC
-endif
 LIB=libilbc.a
 
 OBJS= anaFilter.o iCBSearch.o packing.o \
index b56a59b..e52ca19 100644 (file)
@@ -23,9 +23,7 @@ LIB_TARGET_DIR = .
 
 WARNINGS = -Wall -Wno-comment -Wno-error
 CFLAGS += $(OPTIMIZE) -I$(LIB_TARGET_DIR) $(WARNINGS)
-ifneq (${OSARCH},CYGWIN)
 CFLAGS += -fPIC
-endif
 #CFLAGS+= $(shell if uname -m | grep -q 86; then echo "-mpentium" ; fi)
 
 #fix for PPC processors and ALPHA, And UltraSparc too
diff --git a/config.guess b/config.guess
new file mode 100755 (executable)
index 0000000..22906b3
--- /dev/null
@@ -0,0 +1,1495 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+#   Inc.
+
+timestamp='2006-03-13'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+       for c in cc gcc c89 c99 ; do
+         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+            CC_FOR_BUILD="$c"; break ;
+         fi ;
+       done ;
+       if test x"$CC_FOR_BUILD" = x ; then
+         CC_FOR_BUILD=no_compiler_found ;
+       fi
+       ;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+       PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+       # NetBSD (nbsd) targets should (where applicable) match one or
+       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+       # switched to ELF, *-*-netbsd* would select the old
+       # object file format.  This provides both forward
+       # compatibility and a consistent mechanism for selecting the
+       # object file format.
+       #
+       # Note: NetBSD doesn't particularly care about the vendor
+       # portion of the name.  We always set it to "unknown".
+       sysctl="sysctl -n hw.machine_arch"
+       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+       case "${UNAME_MACHINE_ARCH}" in
+           armeb) machine=armeb-unknown ;;
+           arm*) machine=arm-unknown ;;
+           sh3el) machine=shl-unknown ;;
+           sh3eb) machine=sh-unknown ;;
+           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+       esac
+       # The Operating System including object format, if it has switched
+       # to ELF recently, or will in the future.
+       case "${UNAME_MACHINE_ARCH}" in
+           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+               eval $set_cc_for_build
+               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+                       | grep __ELF__ >/dev/null
+               then
+                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+                   # Return netbsd for either.  FIX?
+                   os=netbsd
+               else
+                   os=netbsdelf
+               fi
+               ;;
+           *)
+               os=netbsd
+               ;;
+       esac
+       # The OS release
+       # Debian GNU/NetBSD machines have a different userland, and
+       # thus, need a distinct triplet. However, they do not need
+       # kernel version information, so it can be replaced with a
+       # suitable tag, in the style of linux-gnu.
+       case "${UNAME_VERSION}" in
+           Debian*)
+               release='-gnu'
+               ;;
+           *)
+               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+               ;;
+       esac
+       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+       # contains redundant information, the shorter form:
+       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+       echo "${machine}-${os}${release}"
+       exit ;;
+    *:OpenBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+       exit ;;
+    *:ekkoBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+       exit ;;
+    *:SolidBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+       exit ;;
+    macppc:MirBSD:*:*)
+       echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    *:MirBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    alpha:OSF1:*:*)
+       case $UNAME_RELEASE in
+       *4.0)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+               ;;
+       *5.*)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+               ;;
+       esac
+       # According to Compaq, /usr/sbin/psrinfo has been available on
+       # OSF/1 and Tru64 systems produced since 1995.  I hope that
+       # covers most systems running today.  This code pipes the CPU
+       # types through head -n 1, so we only detect the type of CPU 0.
+       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+       case "$ALPHA_CPU_TYPE" in
+           "EV4 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "EV4.5 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "LCA4 (21066/21068)")
+               UNAME_MACHINE="alpha" ;;
+           "EV5 (21164)")
+               UNAME_MACHINE="alphaev5" ;;
+           "EV5.6 (21164A)")
+               UNAME_MACHINE="alphaev56" ;;
+           "EV5.6 (21164PC)")
+               UNAME_MACHINE="alphapca56" ;;
+           "EV5.7 (21164PC)")
+               UNAME_MACHINE="alphapca57" ;;
+           "EV6 (21264)")
+               UNAME_MACHINE="alphaev6" ;;
+           "EV6.7 (21264A)")
+               UNAME_MACHINE="alphaev67" ;;
+           "EV6.8CB (21264C)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8AL (21264B)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8CX (21264D)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.9A (21264/EV69A)")
+               UNAME_MACHINE="alphaev69" ;;
+           "EV7 (21364)")
+               UNAME_MACHINE="alphaev7" ;;
+           "EV7.9 (21364A)")
+               UNAME_MACHINE="alphaev79" ;;
+       esac
+       # A Pn.n version is a patched version.
+       # A Vn.n version is a released version.
+       # A Tn.n version is a released field test version.
+       # A Xn.n version is an unreleased experimental baselevel.
+       # 1.2 uses "1.2" for uname -r.
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       exit ;;
+    Alpha\ *:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # Should we change UNAME_MACHINE based on the output of uname instead
+       # of the specific Alpha model?
+       echo alpha-pc-interix
+       exit ;;
+    21064:Windows_NT:50:3)
+       echo alpha-dec-winnt3.5
+       exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+       echo m68k-unknown-sysv4
+       exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-amigaos
+       exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-morphos
+       exit ;;
+    *:OS/390:*:*)
+       echo i370-ibm-openedition
+       exit ;;
+    *:z/VM:*:*)
+       echo s390-ibm-zvmoe
+       exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+       exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix${UNAME_RELEASE}
+       exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+       echo arm-unknown-riscos
+       exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+       echo hppa1.1-hitachi-hiuxmpp
+       exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+       if test "`(/bin/universe) 2>/dev/null`" = att ; then
+               echo pyramid-pyramid-sysv3
+       else
+               echo pyramid-pyramid-bsd
+       fi
+       exit ;;
+    NILE*:*:*:dcosx)
+       echo pyramid-pyramid-svr4
+       exit ;;
+    DRS?6000:unix:4.0:6*)
+       echo sparc-icl-nx6
+       exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+       case `/usr/bin/uname -p` in
+           sparc) echo sparc-icl-nx7; exit ;;
+       esac ;;
+    sun4H:SunOS:5.*:*)
+       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    i86pc:SunOS:5.*:*)
+       echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:6*:*)
+       # According to config.sub, this is the proper way to canonicalize
+       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+       # it's likely to be more like Solaris than SunOS4.
+       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:*:*)
+       case "`/usr/bin/arch -k`" in
+           Series*|S4*)
+               UNAME_RELEASE=`uname -v`
+               ;;
+       esac
+       # Japanese Language versions have a version number like `4.1.3-JL'.
+       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+       exit ;;
+    sun3*:SunOS:*:*)
+       echo m68k-sun-sunos${UNAME_RELEASE}
+       exit ;;
+    sun*:*:4.2BSD:*)
+       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+       case "`/bin/arch`" in
+           sun3)
+               echo m68k-sun-sunos${UNAME_RELEASE}
+               ;;
+           sun4)
+               echo sparc-sun-sunos${UNAME_RELEASE}
+               ;;
+       esac
+       exit ;;
+    aushp:SunOS:*:*)
+       echo sparc-auspex-sunos${UNAME_RELEASE}
+       exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+       echo m68k-apple-machten${UNAME_RELEASE}
+       exit ;;
+    powerpc:machten:*:*)
+       echo powerpc-apple-machten${UNAME_RELEASE}
+       exit ;;
+    RISC*:Mach:*:*)
+       echo mips-dec-mach_bsd4.3
+       exit ;;
+    RISC*:ULTRIX:*:*)
+       echo mips-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    VAX*:ULTRIX*:*:*)
+       echo vax-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+       echo clipper-intergraph-clix${UNAME_RELEASE}
+       exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+       #if defined (host_mips) && defined (MIPSEB)
+       #if defined (SYSTYPE_SYSV)
+         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_SVR4)
+         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+       #endif
+       #endif
+         exit (-1);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c &&
+         dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+         SYSTEM_NAME=`$dummy $dummyarg` &&
+           { echo "$SYSTEM_NAME"; exit; }
+       echo mips-mips-riscos${UNAME_RELEASE}
+       exit ;;
+    Motorola:PowerMAX_OS:*:*)
+       echo powerpc-motorola-powermax
+       exit ;;
+    Motorola:*:4.3:PL8-*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+       echo powerpc-harris-powerunix
+       exit ;;
+    m88k:CX/UX:7*:*)
+       echo m88k-harris-cxux7
+       exit ;;
+    m88k:*:4*:R4*)
+       echo m88k-motorola-sysv4
+       exit ;;
+    m88k:*:3*:R3*)
+       echo m88k-motorola-sysv3
+       exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+       then
+           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+              [ ${TARGET_BINARY_INTERFACE}x = x ]
+           then
+               echo m88k-dg-dgux${UNAME_RELEASE}
+           else
+               echo m88k-dg-dguxbcs${UNAME_RELEASE}
+           fi
+       else
+           echo i586-dg-dgux${UNAME_RELEASE}
+       fi
+       exit ;;
+    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
+       echo m88k-dolphin-sysv3
+       exit ;;
+    M88*:*:R3*:*)
+       # Delta 88k system running SVR3
+       echo m88k-motorola-sysv3
+       exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+       echo m88k-tektronix-sysv3
+       exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+       echo m68k-tektronix-bsd
+       exit ;;
+    *:IRIX*:*:*)
+       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+       echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+       exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+       echo i386-ibm-aix
+       exit ;;
+    ia64:AIX:*:*)
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:2:3)
+       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+               eval $set_cc_for_build
+               sed 's/^                //' << EOF >$dummy.c
+               #include <sys/systemcfg.h>
+
+               main()
+                       {
+                       if (!__power_pc())
+                               exit(1);
+                       puts("powerpc-ibm-aix3.2.5");
+                       exit(0);
+                       }
+EOF
+               if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+               then
+                       echo "$SYSTEM_NAME"
+               else
+                       echo rs6000-ibm-aix3.2.5
+               fi
+       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+               echo rs6000-ibm-aix3.2.4
+       else
+               echo rs6000-ibm-aix3.2
+       fi
+       exit ;;
+    *:AIX:*:[45])
+       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+               IBM_ARCH=rs6000
+       else
+               IBM_ARCH=powerpc
+       fi
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:*:*)
+       echo rs6000-ibm-aix
+       exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+       echo romp-ibm-bsd4.4
+       exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+       echo rs6000-bull-bosx
+       exit ;;
+    DPX/2?00:B.O.S.:*:*)
+       echo m68k-bull-sysv3
+       exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+       echo m68k-hp-bsd
+       exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+       echo m68k-hp-bsd4.4
+       exit ;;
+    9000/[34678]??:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       case "${UNAME_MACHINE}" in
+           9000/31? )            HP_ARCH=m68000 ;;
+           9000/[34]?? )         HP_ARCH=m68k ;;
+           9000/[678][0-9][0-9])
+               if [ -x /usr/bin/getconf ]; then
+                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+               fi
+               if [ "${HP_ARCH}" = "" ]; then
+                   eval $set_cc_for_build
+                   sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+               {
+               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+               case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+                   switch (bits)
+                       {
+                       case 64: puts ("hppa2.0w"); break;
+                       case 32: puts ("hppa2.0n"); break;
+                       default: puts ("hppa2.0"); break;
+                       } break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+                   puts ("hppa2.0"); break;
+              #endif
+               default: puts ("hppa1.0"); break;
+               }
+                  exit (0);
+              }
+EOF
+                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+                   test -z "$HP_ARCH" && HP_ARCH=hppa
+               fi ;;
+       esac
+       if [ ${HP_ARCH} = "hppa2.0w" ]
+       then
+           eval $set_cc_for_build
+
+           # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+           # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+           # generating 64-bit code.  GNU and HP use different nomenclature:
+           #
+           # $ CC_FOR_BUILD=cc ./config.guess
+           # => hppa2.0w-hp-hpux11.23
+           # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+           # => hppa64-hp-hpux11.23
+
+           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+               grep __LP64__ >/dev/null
+           then
+               HP_ARCH="hppa2.0w"
+           else
+               HP_ARCH="hppa64"
+           fi
+       fi
+       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       exit ;;
+    ia64:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       echo ia64-hp-hpux${HPUX_REV}
+       exit ;;
+    3050*:HI-UX:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <unistd.h>
+       int
+       main ()
+       {
+         long cpu = sysconf (_SC_CPU_VERSION);
+         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+            results, however.  */
+         if (CPU_IS_PA_RISC (cpu))
+           {
+             switch (cpu)
+               {
+                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+                 default: puts ("hppa-hitachi-hiuxwe2"); break;
+               }
+           }
+         else if (CPU_IS_HP_MC68K (cpu))
+           puts ("m68k-hitachi-hiuxwe2");
+         else puts ("unknown-hitachi-hiuxwe2");
+         exit (0);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+               { echo "$SYSTEM_NAME"; exit; }
+       echo unknown-hitachi-hiuxwe2
+       exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+       echo hppa1.1-hp-bsd
+       exit ;;
+    9000/8??:4.3bsd:*:*)
+       echo hppa1.0-hp-bsd
+       exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+       echo hppa1.0-hp-mpeix
+       exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+       echo hppa1.1-hp-osf
+       exit ;;
+    hp8??:OSF1:*:*)
+       echo hppa1.0-hp-osf
+       exit ;;
+    i*86:OSF1:*:*)
+       if [ -x /usr/sbin/sysversion ] ; then
+           echo ${UNAME_MACHINE}-unknown-osf1mk
+       else
+           echo ${UNAME_MACHINE}-unknown-osf1
+       fi
+       exit ;;
+    parisc*:Lites*:*:*)
+       echo hppa1.1-hp-lites
+       exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+       echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+       echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+       echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+       echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*[A-Z]90:*:*:*)
+       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+             -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*TS:*:*:*)
+       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*T3E:*:*:*)
+       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*SV1:*:*:*)
+       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    *:UNICOS/mp:*:*)
+       echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       exit ;;
+    sparc*:BSD/OS:*:*)
+       echo sparc-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:FreeBSD:*:*)
+       case ${UNAME_MACHINE} in
+           pc98)
+               echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+           *)
+               echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+       esac
+       exit ;;
+    i*:CYGWIN*:*)
+       echo ${UNAME_MACHINE}-pc-cygwin
+       exit ;;
+    i*:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit ;;
+    i*:windows32*:*)
+       # uname -m includes "-pc" on this system.
+       echo ${UNAME_MACHINE}-mingw32
+       exit ;;
+    i*:PW*:*)
+       echo ${UNAME_MACHINE}-pc-pw32
+       exit ;;
+    x86:Interix*:[345]*)
+       echo i586-pc-interix${UNAME_RELEASE}
+       exit ;;
+    EM64T:Interix*:[345]*)
+       echo x86_64-unknown-interix${UNAME_RELEASE}
+       exit ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+       echo i${UNAME_MACHINE}-pc-mks
+       exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+       # UNAME_MACHINE based on the output of uname instead of i386?
+       echo i586-pc-interix
+       exit ;;
+    i*:UWIN*:*)
+       echo ${UNAME_MACHINE}-pc-uwin
+       exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+       echo x86_64-unknown-cygwin
+       exit ;;
+    p*:CYGWIN*:*)
+       echo powerpcle-unknown-cygwin
+       exit ;;
+    prep*:SunOS:5.*:*)
+       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    *:GNU:*:*)
+       # the GNU system
+       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       exit ;;
+    *:GNU/*:*:*)
+       # other systems with GNU libc and userland
+       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+       exit ;;
+    i*86:Minix:*:*)
+       echo ${UNAME_MACHINE}-pc-minix
+       exit ;;
+    arm*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    cris:Linux:*:*)
+       echo cris-axis-linux-gnu
+       exit ;;
+    crisv32:Linux:*:*)
+       echo crisv32-axis-linux-gnu
+       exit ;;
+    frv:Linux:*:*)
+       echo frv-unknown-linux-gnu
+       exit ;;
+    ia64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m32r*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m68*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    mips:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef mips
+       #undef mipsel
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=mipsel
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=mips
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+           /^CPU/{
+               s: ::g
+               p
+           }'`"
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       ;;
+    mips64:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef mips64
+       #undef mips64el
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=mips64el
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=mips64
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+           /^CPU/{
+               s: ::g
+               p
+           }'`"
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       ;;
+    or32:Linux:*:*)
+       echo or32-unknown-linux-gnu
+       exit ;;
+    ppc:Linux:*:*)
+       echo powerpc-unknown-linux-gnu
+       exit ;;
+    ppc64:Linux:*:*)
+       echo powerpc64-unknown-linux-gnu
+       exit ;;
+    alpha:Linux:*:*)
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+         EV5)   UNAME_MACHINE=alphaev5 ;;
+         EV56)  UNAME_MACHINE=alphaev56 ;;
+         PCA56) UNAME_MACHINE=alphapca56 ;;
+         PCA57) UNAME_MACHINE=alphapca56 ;;
+         EV6)   UNAME_MACHINE=alphaev6 ;;
+         EV67)  UNAME_MACHINE=alphaev67 ;;
+         EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+       objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+       # Look for CPU level
+       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+         PA7*) echo hppa1.1-unknown-linux-gnu ;;
+         PA8*) echo hppa2.0-unknown-linux-gnu ;;
+         *)    echo hppa-unknown-linux-gnu ;;
+       esac
+       exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+       echo hppa64-unknown-linux-gnu
+       exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+       echo ${UNAME_MACHINE}-ibm-linux
+       exit ;;
+    sh64*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sh*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    vax:Linux:*:*)
+       echo ${UNAME_MACHINE}-dec-linux-gnu
+       exit ;;
+    x86_64:Linux:*:*)
+       echo x86_64-unknown-linux-gnu
+       exit ;;
+    i*86:Linux:*:*)
+       # The BFD linker knows what the default object file format is, so
+       # first see if it will tell us. cd to the root directory to prevent
+       # problems with other programs or directories called `ld' in the path.
+       # Set LC_ALL=C to ensure ld outputs messages in English.
+       ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+                        | sed -ne '/supported targets:/!d
+                                   s/[         ][      ]*/ /g
+                                   s/.*supported targets: *//
+                                   s/ .*//
+                                   p'`
+        case "$ld_supported_targets" in
+         elf32-i386)
+               TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+               ;;
+         a.out-i386-linux)
+               echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+               exit ;;
+         coff-i386)
+               echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+               exit ;;
+         "")
+               # Either a pre-BFD a.out linker (linux-gnuoldld) or
+               # one that does not give us useful --help.
+               echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+               exit ;;
+       esac
+       # Determine whether the default compiler is a.out or elf
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <features.h>
+       #ifdef __ELF__
+       # ifdef __GLIBC__
+       #  if __GLIBC__ >= 2
+       LIBC=gnu
+       #  else
+       LIBC=gnulibc1
+       #  endif
+       # else
+       LIBC=gnulibc1
+       # endif
+       #else
+       #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__sun)
+       LIBC=gnu
+       #else
+       LIBC=gnuaout
+       #endif
+       #endif
+       #ifdef __dietlibc__
+       LIBC=dietlibc
+       #endif
+EOF
+       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+           /^LIBC/{
+               s: ::g
+               p
+           }'`"
+       test x"${LIBC}" != x && {
+               echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+               exit
+       }
+       test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+       ;;
+    i*86:DYNIX/ptx:4*:*)
+       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+       # earlier versions are messed up and put the nodename in both
+       # sysname and nodename.
+       echo i386-sequent-sysv4
+       exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+       # I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+       exit ;;
+    i*86:OS/2:*:*)
+       # If we were able to find `uname', then EMX Unix compatibility
+       # is probably installed.
+       echo ${UNAME_MACHINE}-pc-os2-emx
+       exit ;;
+    i*86:XTS-300:*:STOP)
+       echo ${UNAME_MACHINE}-unknown-stop
+       exit ;;
+    i*86:atheos:*:*)
+       echo ${UNAME_MACHINE}-unknown-atheos
+       exit ;;
+    i*86:syllable:*:*)
+       echo ${UNAME_MACHINE}-pc-syllable
+       exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+       echo i386-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    i*86:*DOS:*:*)
+       echo ${UNAME_MACHINE}-pc-msdosdjgpp
+       exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+       else
+               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+       fi
+       exit ;;
+    i*86:*:5:[678]*)
+       # UnixWare 7.x, OpenUNIX and OpenServer 6.
+       case `/bin/uname -X | grep "^Machine"` in
+           *486*)           UNAME_MACHINE=i486 ;;
+           *Pentium)        UNAME_MACHINE=i586 ;;
+           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+       esac
+       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+       exit ;;
+    i*86:*:3.2:*)
+       if test -f /usr/options/cb.name; then
+               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+       elif /bin/uname -X 2>/dev/null >/dev/null ; then
+               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+       else
+               echo ${UNAME_MACHINE}-pc-sysv32
+       fi
+       exit ;;
+    pc:*:*:*)
+       # Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+       echo i386-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+       echo i386-pc-mach3
+       exit ;;
+    paragon:*:*:*)
+       echo i860-intel-osf1
+       exit ;;
+    i860:*:4.*:*) # i860-SVR4
+       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+       else # Add other i860-SVR4 vendors below as they are discovered.
+         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+       fi
+       exit ;;
+    mini*:CTIX:SYS*5:*)
+       # "miniframe"
+       echo m68010-convergent-sysv
+       exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+       echo m68k-convergent-sysv
+       exit ;;
+    M680?0:D-NIX:5.3:*)
+       echo m68k-diab-dnix
+       exit ;;
+    M68*:*:R3V[5678]*:*)
+       test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+       OS_REL=''
+       test -r /etc/.relid \
+       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+         && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+       echo m68k-atari-sysv4
+       exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    rs6000:LynxOS:2.*:*)
+       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+       echo powerpc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+       echo mips-dde-sysv${UNAME_RELEASE}
+       exit ;;
+    RM*:ReliantUNIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    RM*:SINIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    *:SINIX-*:*:*)
+       if uname -p 2>/dev/null >/dev/null ; then
+               UNAME_MACHINE=`(uname -p) 2>/dev/null`
+               echo ${UNAME_MACHINE}-sni-sysv4
+       else
+               echo ns32k-sni-sysv
+       fi
+       exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <hewes@openmarket.com>.
+       # How about differentiating between stratus architectures? -djm
+       echo hppa1.1-stratus-sysv4
+       exit ;;
+    *:*:*:FTX*)
+       # From seanf@swdc.stratus.com.
+       echo i860-stratus-sysv4
+       exit ;;
+    i*86:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo ${UNAME_MACHINE}-stratus-vos
+       exit ;;
+    *:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo hppa1.1-stratus-vos
+       exit ;;
+    mc68*:A/UX:*:*)
+       echo m68k-apple-aux${UNAME_RELEASE}
+       exit ;;
+    news*:NEWS-OS:6*:*)
+       echo mips-sony-newsos6
+       exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+       if [ -d /usr/nec ]; then
+               echo mips-nec-sysv${UNAME_RELEASE}
+       else
+               echo mips-unknown-sysv${UNAME_RELEASE}
+       fi
+        exit ;;
+    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
+       echo powerpc-be-beos
+       exit ;;
+    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
+       echo powerpc-apple-beos
+       exit ;;
+    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
+       echo i586-pc-beos
+       exit ;;
+    SX-4:SUPER-UX:*:*)
+       echo sx4-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-5:SUPER-UX:*:*)
+       echo sx5-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-6:SUPER-UX:*:*)
+       echo sx6-nec-superux${UNAME_RELEASE}
+       exit ;;
+    Power*:Rhapsody:*:*)
+       echo powerpc-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Rhapsody:*:*)
+       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Darwin:*:*)
+       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+       case $UNAME_PROCESSOR in
+           unknown) UNAME_PROCESSOR=powerpc ;;
+       esac
+       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+       exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+       UNAME_PROCESSOR=`uname -p`
+       if test "$UNAME_PROCESSOR" = "x86"; then
+               UNAME_PROCESSOR=i386
+               UNAME_MACHINE=pc
+       fi
+       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+       exit ;;
+    *:QNX:*:4*)
+       echo i386-pc-qnx
+       exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+       echo nse-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+       echo nsr-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    *:NonStop-UX:*:*)
+       echo mips-compaq-nonstopux
+       exit ;;
+    BS2000:POSIX*:*:*)
+       echo bs2000-siemens-sysv
+       exit ;;
+    DS/*:UNIX_System_V:*:*)
+       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+       exit ;;
+    *:Plan9:*:*)
+       # "uname -m" is not consistent, so use $cputype instead. 386
+       # is converted to i386 for consistency with other x86
+       # operating systems.
+       if test "$cputype" = "386"; then
+           UNAME_MACHINE=i386
+       else
+           UNAME_MACHINE="$cputype"
+       fi
+       echo ${UNAME_MACHINE}-unknown-plan9
+       exit ;;
+    *:TOPS-10:*:*)
+       echo pdp10-unknown-tops10
+       exit ;;
+    *:TENEX:*:*)
+       echo pdp10-unknown-tenex
+       exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+       echo pdp10-dec-tops20
+       exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+       echo pdp10-xkl-tops20
+       exit ;;
+    *:TOPS-20:*:*)
+       echo pdp10-unknown-tops20
+       exit ;;
+    *:ITS:*:*)
+       echo pdp10-unknown-its
+       exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+       exit ;;
+    *:DragonFly:*:*)
+       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       exit ;;
+    *:*VMS:*:*)
+       UNAME_MACHINE=`(uname -p) 2>/dev/null`
+       case "${UNAME_MACHINE}" in
+           A*) echo alpha-dec-vms ; exit ;;
+           I*) echo ia64-dec-vms ; exit ;;
+           V*) echo vax-dec-vms ; exit ;;
+       esac ;;
+    *:XENIX:*:SysV)
+       echo i386-pc-xenix
+       exit ;;
+    i*86:skyos:*:*)
+       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+       exit ;;
+    i*86:rdos:*:*)
+       echo ${UNAME_MACHINE}-pc-rdos
+       exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+         ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+       printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+       printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+       { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+       echo c1-convex-bsd
+       exit ;;
+    c2*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit ;;
+    c34*)
+       echo c34-convex-bsd
+       exit ;;
+    c38*)
+       echo c38-convex-bsd
+       exit ;;
+    c4*)
+       echo c4-convex-bsd
+       exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.sub b/config.sub
new file mode 100755 (executable)
index 0000000..5705e54
--- /dev/null
@@ -0,0 +1,1609 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+#   Inc.
+
+timestamp='2006-03-07'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+       -sun*os*)
+               # Prevent following clause from handling this invalid input.
+               ;;
+       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+       -apple | -axis | -knuth | -cray)
+               os=
+               basic_machine=$1
+               ;;
+       -sim | -cisco | -oki | -wec | -winbond)
+               os=
+               basic_machine=$1
+               ;;
+       -scout)
+               ;;
+       -wrs)
+               os=-vxworks
+               basic_machine=$1
+               ;;
+       -chorusos*)
+               os=-chorusos
+               basic_machine=$1
+               ;;
+       -chorusrdb)
+               os=-chorusrdb
+               basic_machine=$1
+               ;;
+       -hiux*)
+               os=-hiuxwe2
+               ;;
+       -sco6)
+               os=-sco5v6
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5)
+               os=-sco3.2v5
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco4)
+               os=-sco3.2v4
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2v[4-9]*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5v6*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco*)
+               os=-sco3.2v2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -udk*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -isc)
+               os=-isc2.2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -clix*)
+               basic_machine=clipper-intergraph
+               ;;
+       -isc*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -lynx*)
+               os=-lynxos
+               ;;
+       -ptx*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+               ;;
+       -windowsnt*)
+               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+               ;;
+       -psos*)
+               os=-psos
+               ;;
+       -mint | -mint[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+       # Recognize the basic CPU types without company name.
+       # Some are omitted here because they have special meanings below.
+       1750a | 580 \
+       | a29k \
+       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+       | am33_2.0 \
+       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+       | bfin \
+       | c4x | clipper \
+       | d10v | d30v | dlx | dsp16xx \
+       | fr30 | frv \
+       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+       | i370 | i860 | i960 | ia64 \
+       | ip2k | iq2000 \
+       | m32r | m32rle | m68000 | m68k | m88k | maxq | mb | microblaze | mcore \
+       | mips | mipsbe | mipseb | mipsel | mipsle \
+       | mips16 \
+       | mips64 | mips64el \
+       | mips64vr | mips64vrel \
+       | mips64orion | mips64orionel \
+       | mips64vr4100 | mips64vr4100el \
+       | mips64vr4300 | mips64vr4300el \
+       | mips64vr5000 | mips64vr5000el \
+       | mips64vr5900 | mips64vr5900el \
+       | mipsisa32 | mipsisa32el \
+       | mipsisa32r2 | mipsisa32r2el \
+       | mipsisa64 | mipsisa64el \
+       | mipsisa64r2 | mipsisa64r2el \
+       | mipsisa64sb1 | mipsisa64sb1el \
+       | mipsisa64sr71k | mipsisa64sr71kel \
+       | mipstx39 | mipstx39el \
+       | mn10200 | mn10300 \
+       | mt \
+       | msp430 \
+       | nios | nios2 \
+       | ns16k | ns32k \
+       | or32 \
+       | pdp10 | pdp11 | pj | pjl \
+       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+       | pyramid \
+       | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+       | sh64 | sh64le \
+       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+       | strongarm \
+       | tahoe | thumb | tic4x | tic80 | tron \
+       | v850 | v850e \
+       | we32k \
+       | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
+       | z8k)
+               basic_machine=$basic_machine-unknown
+               ;;
+       m32c)
+               basic_machine=$basic_machine-unknown
+               ;;
+       m6811 | m68hc11 | m6812 | m68hc12)
+               # Motorola 68HC11/12.
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
+       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+               ;;
+       ms1)
+               basic_machine=mt-unknown
+               ;;
+
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i*86 | x86_64)
+         basic_machine=$basic_machine-pc
+         ;;
+       # Object if more than one company name word.
+       *-*-*)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+       # Recognize the basic CPU types with company name.
+       580-* \
+       | a29k-* \
+       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+       | avr-* \
+       | bfin-* | bs2000-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+       | clipper-* | craynv-* | cydra-* \
+       | d10v-* | d30v-* | dlx-* \
+       | elxsi-* \
+       | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+       | h8300-* | h8500-* \
+       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+       | i*86-* | i860-* | i960-* | ia64-* \
+       | ip2k-* | iq2000-* \
+       | m32r-* | m32rle-* \
+       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+       | m88110-* | m88k-* | maxq-* | mcore-* \
+       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+       | mips16-* \
+       | mips64-* | mips64el-* \
+       | mips64vr-* | mips64vrel-* \
+       | mips64orion-* | mips64orionel-* \
+       | mips64vr4100-* | mips64vr4100el-* \
+       | mips64vr4300-* | mips64vr4300el-* \
+       | mips64vr5000-* | mips64vr5000el-* \
+       | mips64vr5900-* | mips64vr5900el-* \
+       | mipsisa32-* | mipsisa32el-* \
+       | mipsisa32r2-* | mipsisa32r2el-* \
+       | mipsisa64-* | mipsisa64el-* \
+       | mipsisa64r2-* | mipsisa64r2el-* \
+       | mipsisa64sb1-* | mipsisa64sb1el-* \
+       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+       | mipstx39-* | mipstx39el-* \
+       | mmix-* \
+       | mt-* \
+       | msp430-* \
+       | nios-* | nios2-* \
+       | none-* | np1-* | ns16k-* | ns32k-* \
+       | orion-* \
+       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+       | pyramid-* \
+       | romp-* | rs6000-* \
+       | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+       | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+       | sparclite-* \
+       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+       | tahoe-* | thumb-* \
+       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+       | tron-* \
+       | v850-* | v850e-* | vax-* \
+       | we32k-* \
+       | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
+       | xstormy16-* | xtensa-* \
+       | ymp-* \
+       | z8k-*)
+               ;;
+       m32c-*)
+               ;;
+       # Recognize the various machine names and aliases which stand
+       # for a CPU type and a company and sometimes even an OS.
+       386bsd)
+               basic_machine=i386-unknown
+               os=-bsd
+               ;;
+       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+               basic_machine=m68000-att
+               ;;
+       3b*)
+               basic_machine=we32k-att
+               ;;
+       a29khif)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       abacus)
+               basic_machine=abacus-unknown
+               ;;
+       adobe68k)
+               basic_machine=m68010-adobe
+               os=-scout
+               ;;
+       alliant | fx80)
+               basic_machine=fx80-alliant
+               ;;
+       altos | altos3068)
+               basic_machine=m68k-altos
+               ;;
+       am29k)
+               basic_machine=a29k-none
+               os=-bsd
+               ;;
+       amd64)
+               basic_machine=x86_64-pc
+               ;;
+       amd64-*)
+               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       amdahl)
+               basic_machine=580-amdahl
+               os=-sysv
+               ;;
+       amiga | amiga-*)
+               basic_machine=m68k-unknown
+               ;;
+       amigaos | amigados)
+               basic_machine=m68k-unknown
+               os=-amigaos
+               ;;
+       amigaunix | amix)
+               basic_machine=m68k-unknown
+               os=-sysv4
+               ;;
+       apollo68)
+               basic_machine=m68k-apollo
+               os=-sysv
+               ;;
+       apollo68bsd)
+               basic_machine=m68k-apollo
+               os=-bsd
+               ;;
+       aux)
+               basic_machine=m68k-apple
+               os=-aux
+               ;;
+       balance)
+               basic_machine=ns32k-sequent
+               os=-dynix
+               ;;
+       c90)
+               basic_machine=c90-cray
+               os=-unicos
+               ;;
+       convex-c1)
+               basic_machine=c1-convex
+               os=-bsd
+               ;;
+       convex-c2)
+               basic_machine=c2-convex
+               os=-bsd
+               ;;
+       convex-c32)
+               basic_machine=c32-convex
+               os=-bsd
+               ;;
+       convex-c34)
+               basic_machine=c34-convex
+               os=-bsd
+               ;;
+       convex-c38)
+               basic_machine=c38-convex
+               os=-bsd
+               ;;
+       cray | j90)
+               basic_machine=j90-cray
+               os=-unicos
+               ;;
+       craynv)
+               basic_machine=craynv-cray
+               os=-unicosmp
+               ;;
+       cr16c)
+               basic_machine=cr16c-unknown
+               os=-elf
+               ;;
+       crds | unos)
+               basic_machine=m68k-crds
+               ;;
+       crisv32 | crisv32-* | etraxfs*)
+               basic_machine=crisv32-axis
+               ;;
+       cris | cris-* | etrax*)
+               basic_machine=cris-axis
+               ;;
+       crx)
+               basic_machine=crx-unknown
+               os=-elf
+               ;;
+       da30 | da30-*)
+               basic_machine=m68k-da30
+               ;;
+       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+               basic_machine=mips-dec
+               ;;
+       decsystem10* | dec10*)
+               basic_machine=pdp10-dec
+               os=-tops10
+               ;;
+       decsystem20* | dec20*)
+               basic_machine=pdp10-dec
+               os=-tops20
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               basic_machine=m68k-motorola
+               ;;
+       delta88)
+               basic_machine=m88k-motorola
+               os=-sysv3
+               ;;
+       djgpp)
+               basic_machine=i586-pc
+               os=-msdosdjgpp
+               ;;
+       dpx20 | dpx20-*)
+               basic_machine=rs6000-bull
+               os=-bosx
+               ;;
+       dpx2* | dpx2*-bull)
+               basic_machine=m68k-bull
+               os=-sysv3
+               ;;
+       ebmon29k)
+               basic_machine=a29k-amd
+               os=-ebmon
+               ;;
+       elxsi)
+               basic_machine=elxsi-elxsi
+               os=-bsd
+               ;;
+       encore | umax | mmax)
+               basic_machine=ns32k-encore
+               ;;
+       es1800 | OSE68k | ose68k | ose | OSE)
+               basic_machine=m68k-ericsson
+               os=-ose
+               ;;
+       fx2800)
+               basic_machine=i860-alliant
+               ;;
+       genix)
+               basic_machine=ns32k-ns
+               ;;
+       gmicro)
+               basic_machine=tron-gmicro
+               os=-sysv
+               ;;
+       go32)
+               basic_machine=i386-pc
+               os=-go32
+               ;;
+       h3050r* | hiux*)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       h8300hms)
+               basic_machine=h8300-hitachi
+               os=-hms
+               ;;
+       h8300xray)
+               basic_machine=h8300-hitachi
+               os=-xray
+               ;;
+       h8500hms)
+               basic_machine=h8500-hitachi
+               os=-hms
+               ;;
+       harris)
+               basic_machine=m88k-harris
+               os=-sysv3
+               ;;
+       hp300-*)
+               basic_machine=m68k-hp
+               ;;
+       hp300bsd)
+               basic_machine=m68k-hp
+               os=-bsd
+               ;;
+       hp300hpux)
+               basic_machine=m68k-hp
+               os=-hpux
+               ;;
+       hp3k9[0-9][0-9] | hp9[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               basic_machine=m68000-hp
+               ;;
+       hp9k3[2-9][0-9])
+               basic_machine=m68k-hp
+               ;;
+       hp9k6[0-9][0-9] | hp6[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k7[0-79][0-9] | hp7[0-79][0-9])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k78[0-9] | hp78[0-9])
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][13679] | hp8[0-9][13679])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hppa-next)
+               os=-nextstep3
+               ;;
+       hppaosf)
+               basic_machine=hppa1.1-hp
+               os=-osf
+               ;;
+       hppro)
+               basic_machine=hppa1.1-hp
+               os=-proelf
+               ;;
+       i370-ibm* | ibm*)
+               basic_machine=i370-ibm
+               ;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+       i*86v32)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv32
+               ;;
+       i*86v4*)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv4
+               ;;
+       i*86v)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv
+               ;;
+       i*86sol2)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-solaris2
+               ;;
+       i386mach)
+               basic_machine=i386-mach
+               os=-mach
+               ;;
+       i386-vsta | vsta)
+               basic_machine=i386-unknown
+               os=-vsta
+               ;;
+       iris | iris4d)
+               basic_machine=mips-sgi
+               case $os in
+                   -irix*)
+                       ;;
+                   *)
+                       os=-irix4
+                       ;;
+               esac
+               ;;
+       isi68 | isi)
+               basic_machine=m68k-isi
+               os=-sysv
+               ;;
+       m88k-omron*)
+               basic_machine=m88k-omron
+               ;;
+       magnum | m3230)
+               basic_machine=mips-mips
+               os=-sysv
+               ;;
+       merlin)
+               basic_machine=ns32k-utek
+               os=-sysv
+               ;;
+       mingw32)
+               basic_machine=i386-pc
+               os=-mingw32
+               ;;
+       miniframe)
+               basic_machine=m68000-convergent
+               ;;
+       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+       mips3*-*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+               ;;
+       mips3*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+               ;;
+       monitor)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       morphos)
+               basic_machine=powerpc-unknown
+               os=-morphos
+               ;;
+       msdos)
+               basic_machine=i386-pc
+               os=-msdos
+               ;;
+       ms1-*)
+               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+               ;;
+       mvs)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
+       ncr3000)
+               basic_machine=i486-ncr
+               os=-sysv4
+               ;;
+       netbsd386)
+               basic_machine=i386-unknown
+               os=-netbsd
+               ;;
+       netwinder)
+               basic_machine=armv4l-rebel
+               os=-linux
+               ;;
+       news | news700 | news800 | news900)
+               basic_machine=m68k-sony
+               os=-newsos
+               ;;
+       news1000)
+               basic_machine=m68030-sony
+               os=-newsos
+               ;;
+       news-3600 | risc-news)
+               basic_machine=mips-sony
+               os=-newsos
+               ;;
+       necv70)
+               basic_machine=v70-nec
+               os=-sysv
+               ;;
+       next | m*-next )
+               basic_machine=m68k-next
+               case $os in
+                   -nextstep* )
+                       ;;
+                   -ns2*)
+                     os=-nextstep2
+                       ;;
+                   *)
+                     os=-nextstep3
+                       ;;
+               esac
+               ;;
+       nh3000)
+               basic_machine=m68k-harris
+               os=-cxux
+               ;;
+       nh[45]000)
+               basic_machine=m88k-harris
+               os=-cxux
+               ;;
+       nindy960)
+               basic_machine=i960-intel
+               os=-nindy
+               ;;
+       mon960)
+               basic_machine=i960-intel
+               os=-mon960
+               ;;
+       nonstopux)
+               basic_machine=mips-compaq
+               os=-nonstopux
+               ;;
+       np1)
+               basic_machine=np1-gould
+               ;;
+       nsr-tandem)
+               basic_machine=nsr-tandem
+               ;;
+       op50n-* | op60c-*)
+               basic_machine=hppa1.1-oki
+               os=-proelf
+               ;;
+       openrisc | openrisc-*)
+               basic_machine=or32-unknown
+               ;;
+       os400)
+               basic_machine=powerpc-ibm
+               os=-os400
+               ;;
+       OSE68000 | ose68000)
+               basic_machine=m68000-ericsson
+               os=-ose
+               ;;
+       os68k)
+               basic_machine=m68k-none
+               os=-os68k
+               ;;
+       pa-hitachi)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       paragon)
+               basic_machine=i860-intel
+               os=-osf
+               ;;
+       pbd)
+               basic_machine=sparc-tti
+               ;;
+       pbb)
+               basic_machine=m68k-tti
+               ;;
+       pc532 | pc532-*)
+               basic_machine=ns32k-pc532
+               ;;
+       pc98)
+               basic_machine=i386-pc
+               ;;
+       pc98-*)
+               basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium | p5 | k5 | k6 | nexgen | viac3)
+               basic_machine=i586-pc
+               ;;
+       pentiumpro | p6 | 6x86 | athlon | athlon_*)
+               basic_machine=i686-pc
+               ;;
+       pentiumii | pentium2 | pentiumiii | pentium3)
+               basic_machine=i686-pc
+               ;;
+       pentium4)
+               basic_machine=i786-pc
+               ;;
+       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumpro-* | p6-* | 6x86-* | athlon-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium4-*)
+               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pn)
+               basic_machine=pn-gould
+               ;;
+       power)  basic_machine=power-ibm
+               ;;
+       ppc)    basic_machine=powerpc-unknown
+               ;;
+       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppcle | powerpclittle | ppc-le | powerpc-little)
+               basic_machine=powerpcle-unknown
+               ;;
+       ppcle-* | powerpclittle-*)
+               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64)  basic_machine=powerpc64-unknown
+               ;;
+       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+               basic_machine=powerpc64le-unknown
+               ;;
+       ppc64le-* | powerpc64little-*)
+               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ps2)
+               basic_machine=i386-ibm
+               ;;
+       pw32)
+               basic_machine=i586-unknown
+               os=-pw32
+               ;;
+       rdos)
+               basic_machine=i386-pc
+               os=-rdos
+               ;;
+       rom68k)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       rm[46]00)
+               basic_machine=mips-siemens
+               ;;
+       rtpc | rtpc-*)
+               basic_machine=romp-ibm
+               ;;
+       s390 | s390-*)
+               basic_machine=s390-ibm
+               ;;
+       s390x | s390x-*)
+               basic_machine=s390x-ibm
+               ;;
+       sa29200)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       sb1)
+               basic_machine=mipsisa64sb1-unknown
+               ;;
+       sb1el)
+               basic_machine=mipsisa64sb1el-unknown
+               ;;
+       sei)
+               basic_machine=mips-sei
+               os=-seiux
+               ;;
+       sequent)
+               basic_machine=i386-sequent
+               ;;
+       sh)
+               basic_machine=sh-hitachi
+               os=-hms
+               ;;
+       sh64)
+               basic_machine=sh64-unknown
+               ;;
+       sparclite-wrs | simso-wrs)
+               basic_machine=sparclite-wrs
+               os=-vxworks
+               ;;
+       sps7)
+               basic_machine=m68k-bull
+               os=-sysv2
+               ;;
+       spur)
+               basic_machine=spur-unknown
+               ;;
+       st2000)
+               basic_machine=m68k-tandem
+               ;;
+       stratus)
+               basic_machine=i860-stratus
+               os=-sysv4
+               ;;
+       sun2)
+               basic_machine=m68000-sun
+               ;;
+       sun2os3)
+               basic_machine=m68000-sun
+               os=-sunos3
+               ;;
+       sun2os4)
+               basic_machine=m68000-sun
+               os=-sunos4
+               ;;
+       sun3os3)
+               basic_machine=m68k-sun
+               os=-sunos3
+               ;;
+       sun3os4)
+               basic_machine=m68k-sun
+               os=-sunos4
+               ;;
+       sun4os3)
+               basic_machine=sparc-sun
+               os=-sunos3
+               ;;
+       sun4os4)
+               basic_machine=sparc-sun
+               os=-sunos4
+               ;;
+       sun4sol2)
+               basic_machine=sparc-sun
+               os=-solaris2
+               ;;
+       sun3 | sun3-*)
+               basic_machine=m68k-sun
+               ;;
+       sun4)
+               basic_machine=sparc-sun
+               ;;
+       sun386 | sun386i | roadrunner)
+               basic_machine=i386-sun
+               ;;
+       sv1)
+               basic_machine=sv1-cray
+               os=-unicos
+               ;;
+       symmetry)
+               basic_machine=i386-sequent
+               os=-dynix
+               ;;
+       t3e)
+               basic_machine=alphaev5-cray
+               os=-unicos
+               ;;
+       t90)
+               basic_machine=t90-cray
+               os=-unicos
+               ;;
+       tic54x | c54x*)
+               basic_machine=tic54x-unknown
+               os=-coff
+               ;;
+       tic55x | c55x*)
+               basic_machine=tic55x-unknown
+               os=-coff
+               ;;
+       tic6x | c6x*)
+               basic_machine=tic6x-unknown
+               os=-coff
+               ;;
+       tx39)
+               basic_machine=mipstx39-unknown
+               ;;
+       tx39el)
+               basic_machine=mipstx39el-unknown
+               ;;
+       toad1)
+               basic_machine=pdp10-xkl
+               os=-tops20
+               ;;
+       tower | tower-32)
+               basic_machine=m68k-ncr
+               ;;
+       tpf)
+               basic_machine=s390x-ibm
+               os=-tpf
+               ;;
+       udi29k)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       ultra3)
+               basic_machine=a29k-nyu
+               os=-sym1
+               ;;
+       v810 | necv810)
+               basic_machine=v810-nec
+               os=-none
+               ;;
+       vaxv)
+               basic_machine=vax-dec
+               os=-sysv
+               ;;
+       vms)
+               basic_machine=vax-dec
+               os=-vms
+               ;;
+       vpp*|vx|vx-*)
+               basic_machine=f301-fujitsu
+               ;;
+       vxworks960)
+               basic_machine=i960-wrs
+               os=-vxworks
+               ;;
+       vxworks68)
+               basic_machine=m68k-wrs
+               os=-vxworks
+               ;;
+       vxworks29k)
+               basic_machine=a29k-wrs
+               os=-vxworks
+               ;;
+       w65*)
+               basic_machine=w65-wdc
+               os=-none
+               ;;
+       w89k-*)
+               basic_machine=hppa1.1-winbond
+               os=-proelf
+               ;;
+       xbox)
+               basic_machine=i686-pc
+               os=-mingw32
+               ;;
+       xps | xps100)
+               basic_machine=xps100-honeywell
+               ;;
+       ymp)
+               basic_machine=ymp-cray
+               os=-unicos
+               ;;
+       z8k-*-coff)
+               basic_machine=z8k-unknown
+               os=-sim
+               ;;
+       none)
+               basic_machine=none-none
+               os=-none
+               ;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               basic_machine=hppa1.1-winbond
+               ;;
+       op50n)
+               basic_machine=hppa1.1-oki
+               ;;
+       op60c)
+               basic_machine=hppa1.1-oki
+               ;;
+       romp)
+               basic_machine=romp-ibm
+               ;;
+       mmix)
+               basic_machine=mmix-knuth
+               ;;
+       rs6000)
+               basic_machine=rs6000-ibm
+               ;;
+       vax)
+               basic_machine=vax-dec
+               ;;
+       pdp10)
+               # there are many clones, so DEC is not a safe bet
+               basic_machine=pdp10-unknown
+               ;;
+       pdp11)
+               basic_machine=pdp11-dec
+               ;;
+       we32k)
+               basic_machine=we32k-att
+               ;;
+       sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+               basic_machine=sh-unknown
+               ;;
+       sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+               basic_machine=sparc-sun
+               ;;
+       cydra)
+               basic_machine=cydra-cydrome
+               ;;
+       orion)
+               basic_machine=orion-highlevel
+               ;;
+       orion105)
+               basic_machine=clipper-highlevel
+               ;;
+       mac | mpw | mac-mpw)
+               basic_machine=m68k-apple
+               ;;
+       pmac | pmac-mpw)
+               basic_machine=powerpc-apple
+               ;;
+       *-unknown)
+               # Make sure to match an already-canonicalized machine name.
+               ;;
+       *)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+       *-digital*)
+               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+               ;;
+       *-commodore*)
+               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+               ;;
+       *)
+               ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+       # -solaris* is a basic system type, with this one exception.
+       -solaris1 | -solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+               ;;
+       -solaris)
+               os=-solaris2
+               ;;
+       -svr4*)
+               os=-sysv4
+               ;;
+       -unixware*)
+               os=-sysv4.2uw
+               ;;
+       -gnu/linux*)
+               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+               ;;
+       # First accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST END IN A *, to match a version number.
+       # -sysv* is not here because it comes later, after sysvr4.
+       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+             | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+             | -aos* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+             | -openbsd* | -solidbsd* \
+             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+             | -chorusos* | -chorusrdb* \
+             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+             | -uxpv* | -beos* | -mpeix* | -udk* \
+             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+             | -skyos* | -haiku* | -rdos*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -qnx*)
+               case $basic_machine in
+                   x86-* | i*86-*)
+                       ;;
+                   *)
+                       os=-nto$os
+                       ;;
+               esac
+               ;;
+       -nto-qnx*)
+               ;;
+       -nto*)
+               os=`echo $os | sed -e 's|nto|nto-qnx|'`
+               ;;
+       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+               ;;
+       -mac*)
+               os=`echo $os | sed -e 's|mac|macos|'`
+               ;;
+       -linux-dietlibc)
+               os=-linux-dietlibc
+               ;;
+       -linux*)
+               os=`echo $os | sed -e 's|linux|linux-gnu|'`
+               ;;
+       -sunos5*)
+               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+               ;;
+       -sunos6*)
+               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+               ;;
+       -opened*)
+               os=-openedition
+               ;;
+        -os400*)
+               os=-os400
+               ;;
+       -wince*)
+               os=-wince
+               ;;
+       -osfrose*)
+               os=-osfrose
+               ;;
+       -osf*)
+               os=-osf
+               ;;
+       -utek*)
+               os=-bsd
+               ;;
+       -dynix*)
+               os=-bsd
+               ;;
+       -acis*)
+               os=-aos
+               ;;
+       -atheos*)
+               os=-atheos
+               ;;
+       -syllable*)
+               os=-syllable
+               ;;
+       -386bsd)
+               os=-bsd
+               ;;
+       -ctix* | -uts*)
+               os=-sysv
+               ;;
+       -nova*)
+               os=-rtmk-nova
+               ;;
+       -ns2 )
+               os=-nextstep2
+               ;;
+       -nsk*)
+               os=-nsk
+               ;;
+       # Preserve the version number of sinix5.
+       -sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       -sinix*)
+               os=-sysv4
+               ;;
+        -tpf*)
+               os=-tpf
+               ;;
+       -triton*)
+               os=-sysv3
+               ;;
+       -oss*)
+               os=-sysv3
+               ;;
+       -svr4)
+               os=-sysv4
+               ;;
+       -svr3)
+               os=-sysv3
+               ;;
+       -sysvr4)
+               os=-sysv4
+               ;;
+       # This must come after -sysvr4.
+       -sysv*)
+               ;;
+       -ose*)
+               os=-ose
+               ;;
+       -es1800*)
+               os=-ose
+               ;;
+       -xenix)
+               os=-xenix
+               ;;
+       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+               os=-mint
+               ;;
+       -aros*)
+               os=-aros
+               ;;
+       -kaos*)
+               os=-kaos
+               ;;
+       -zvmoe)
+               os=-zvmoe
+               ;;
+       -none)
+               ;;
+       *)
+               # Get rid of the `-' at the beginning of $os.
+               os=`echo $os | sed 's/[^-]*-//'`
+               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+       *-acorn)
+               os=-riscix1.2
+               ;;
+       arm*-rebel)
+               os=-linux
+               ;;
+       arm*-semi)
+               os=-aout
+               ;;
+    c4x-* | tic4x-*)
+        os=-coff
+        ;;
+       # This must come before the *-dec entry.
+       pdp10-*)
+               os=-tops20
+               ;;
+       pdp11-*)
+               os=-none
+               ;;
+       *-dec | vax-*)
+               os=-ultrix4.2
+               ;;
+       m68*-apollo)
+               os=-domain
+               ;;
+       i386-sun)
+               os=-sunos4.0.2
+               ;;
+       m68000-sun)
+               os=-sunos3
+               # This also exists in the configure program, but was not the
+               # default.
+               # os=-sunos4
+               ;;
+       m68*-cisco)
+               os=-aout
+               ;;
+       mips*-cisco)
+               os=-elf
+               ;;
+       mips*-*)
+               os=-elf
+               ;;
+       or32-*)
+               os=-coff
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=-sysv3
+               ;;
+       sparc-* | *-sun)
+               os=-sunos4.1.1
+               ;;
+       *-be)
+               os=-beos
+               ;;
+       *-haiku)
+               os=-haiku
+               ;;
+       *-ibm)
+               os=-aix
+               ;;
+       *-knuth)
+               os=-mmixware
+               ;;
+       *-wec)
+               os=-proelf
+               ;;
+       *-winbond)
+               os=-proelf
+               ;;
+       *-oki)
+               os=-proelf
+               ;;
+       *-hp)
+               os=-hpux
+               ;;
+       *-hitachi)
+               os=-hiux
+               ;;
+       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+               os=-sysv
+               ;;
+       *-cbm)
+               os=-amigaos
+               ;;
+       *-dg)
+               os=-dgux
+               ;;
+       *-dolphin)
+               os=-sysv3
+               ;;
+       m68k-ccur)
+               os=-rtu
+               ;;
+       m88k-omron*)
+               os=-luna
+               ;;
+       *-next )
+               os=-nextstep
+               ;;
+       *-sequent)
+               os=-ptx
+               ;;
+       *-crds)
+               os=-unos
+               ;;
+       *-ns)
+               os=-genix
+               ;;
+       i370-*)
+               os=-mvs
+               ;;
+       *-next)
+               os=-nextstep3
+               ;;
+       *-gould)
+               os=-sysv
+               ;;
+       *-highlevel)
+               os=-bsd
+               ;;
+       *-encore)
+               os=-bsd
+               ;;
+       *-sgi)
+               os=-irix
+               ;;
+       *-siemens)
+               os=-sysv4
+               ;;
+       *-masscomp)
+               os=-rtu
+               ;;
+       f30[01]-fujitsu | f700-fujitsu)
+               os=-uxpv
+               ;;
+       *-rom68k)
+               os=-coff
+               ;;
+       *-*bug)
+               os=-coff
+               ;;
+       *-apple)
+               os=-macos
+               ;;
+       *-atari*)
+               os=-mint
+               ;;
+       *)
+               os=-none
+               ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+       *-unknown)
+               case $os in
+                       -riscix*)
+                               vendor=acorn
+                               ;;
+                       -sunos*)
+                               vendor=sun
+                               ;;
+                       -aix*)
+                               vendor=ibm
+                               ;;
+                       -beos*)
+                               vendor=be
+                               ;;
+                       -hpux*)
+                               vendor=hp
+                               ;;
+                       -mpeix*)
+                               vendor=hp
+                               ;;
+                       -hiux*)
+                               vendor=hitachi
+                               ;;
+                       -unos*)
+                               vendor=crds
+                               ;;
+                       -dgux*)
+                               vendor=dg
+                               ;;
+                       -luna*)
+                               vendor=omron
+                               ;;
+                       -genix*)
+                               vendor=ns
+                               ;;
+                       -mvs* | -opened*)
+                               vendor=ibm
+                               ;;
+                       -os400*)
+                               vendor=ibm
+                               ;;
+                       -ptx*)
+                               vendor=sequent
+                               ;;
+                       -tpf*)
+                               vendor=ibm
+                               ;;
+                       -vxsim* | -vxworks* | -windiss*)
+                               vendor=wrs
+                               ;;
+                       -aux*)
+                               vendor=apple
+                               ;;
+                       -hms*)
+                               vendor=hitachi
+                               ;;
+                       -mpw* | -macos*)
+                               vendor=apple
+                               ;;
+                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+                               vendor=atari
+                               ;;
+                       -vos*)
+                               vendor=stratus
+                               ;;
+               esac
+               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+               ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure.ac b/configure.ac
new file mode 100644 (file)
index 0000000..5c63428
--- /dev/null
@@ -0,0 +1,674 @@
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.59)
+
+m4_define([PBX_VERSION],
+          m4_bpatsubst(m4_esyscmd([build_tools/make_version .]),
+                       [\([0-9.]*\)\(\w\|\W\)*],
+                       [\1]))
+AC_INIT(asterisk, PBX_VERSION, www.asterisk.org)
+
+# cross-compile macros
+AC_CANONICAL_BUILD
+AC_CANONICAL_HOST
+AC_CANONICAL_TARGET
+
+# check existence of the package
+AC_CONFIG_SRCDIR([asterisk.c])
+
+# specify output header file
+AC_CONFIG_HEADER(include/autoconfig.h)
+
+AC_COPYRIGHT("Asterisk")
+AC_REVISION($Revision$)
+
+AC_PREFIX_DEFAULT()
+
+### ** Platform.
+AC_DEFINE_UNQUOTED(PBX_PLATFORM, "${host}",
+[Define this to be the canonical name (cpu-vendor-os) of your system.])
+AC_DEFINE_UNQUOTED(PBX_CPU, "${host_cpu}",
+[Define this to be the name of the CPU of your system.])
+AC_DEFINE_UNQUOTED(PBX_VENDOR, "${host_vendor}",
+[Define this to be the name of the vendor of your system.])
+AC_DEFINE_UNQUOTED(PBX_OS, "${host_os}",
+[Define this to be the name of the OS of your system.])
+
+# export some useful defines
+PBX_PLATFORM=${host}
+PBX_CPU=${host_cpu}
+PBX_VENDOR=${host_vendor}
+PBX_OS=${host_os}
+AC_SUBST(PBX_PLATFORM)
+AC_SUBST(PBX_CPU)
+AC_SUBST(PBX_VENDOR)
+AC_SUBST(PBX_OS)
+
+#  check for uname
+AC_PATH_TOOL([UNAME], [uname], No)
+if test ! x"${UNAME}" = xNo; then
+   PBX_OSREV=$(${UNAME} -r)
+fi
+AC_SUBST(PBX_OSREV)
+
+# guest OS type
+case "${host}" in
+  cygwin*|mingw*|windows*|winnt)
+    AC_DEFINE(Win32, 1,
+              [Define according to your operating system type.])
+    PBX_OSTYPE="CYGWIN"
+# this is ugly - KPF
+  OSISWIN32=1
+  AC_SUBST(OSISWIN32)
+    ;;
+  *linux*)
+    AC_DEFINE(Linux, 1,
+              [Define according to your operating system type.])
+    PBX_OSTYPE="Linux"
+    ;;
+  *netbsd*)
+    AC_DEFINE(NetBSD, 1,
+              [Define according to your operating system type.])
+    PBX_OSTYPE="NetBSD"
+    ;;
+  *freebsd*)
+    AC_DEFINE(FreeBSD, 1,
+              [Define according to your operating system type.])
+    PBX_OSTYPE="FreeBSD"
+    ;;
+  *openbsd*)
+    AC_DEFINE(OpenBSD, 1,
+              [Define according to your operating system type.])
+    PBX_OSTYPE="OpenBSD"
+    ;;
+  *sun*)
+    AC_DEFINE(SunOS, 1,
+              [Define according to your operating system type.])
+    PBX_OSTYPE="SunOS"
+    ;;
+  *darwin*)
+    AC_DEFINE(Darwin, 1,
+              [Define according to your operating system type.])
+    PBX_OSTYPE="Darwin"
+    ;;
+  *)
+    AC_DEFINE(Unix, 1,
+              [Define according to your operating system type.])
+    PBX_OSTYPE="Unix"
+   ;;
+esac
+AC_SUBST(PBX_OSTYPE)
+
+# This needs to be before any macros that use the C compiler
+AC_GNU_SOURCE
+
+AH_TOP(
+#ifndef _REENTRANT
+#define _REENTRANT
+#endif
+)
+
+# cross-compile checks
+if test x"${build}" != x"${host}"; 
+then
+   AC_CHECK_TOOL(CC, gcc, :)
+   AC_CHECK_TOOL(CXX, g++, :)
+   AC_CHECK_TOOL(RANLIB, ranlib, :)
+   AC_CHECK_TOOL(AR, ar, :)
+
+   if test x"${PBX_OSTYPE}" = xWin32;
+   then
+      AC_CHECK_TOOL(NM, nm, :)
+      AC_CHECK_TOOL(WINDRES, windres, :)
+      AC_CHECK_TOOL(DLLWRAP, dllwrap, :)
+   fi
+   crossCompile="Yes"
+fi
+
+# Checks for programs.
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_CPP
+AC_PROG_CXXCPP
+AC_PROG_AWK
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_RANLIB
+AST_CHECK_GNU_MAKE
+
+AC_PATH_PROG([GREP], [grep], :)
+AC_PATH_PROG([AR], [ar], :)
+AC_PATH_PROG([FIND], [find], :)
+AC_PATH_PROG([COMPRESS], [compress], :)
+AC_PATH_PROG([BASENAME], [basename], :)
+AC_PATH_PROG([DIRNAME], [dirname], :)
+AC_PATH_PROG([SHELL], [sh], :)
+AC_PATH_PROG([LN], [ln], :)
+AC_PATH_PROG([DOT], [dot], :)
+
+AC_LANG(C)
+
+AC_ARG_ENABLE(dev-mode,
+       [  --enable-dev-mode    Turn on developer mode],
+       [case "${enableval}" in
+             y|ye|yes) AST_DEVMODE=yes ;;
+             n|no)  AST_DEVMODE=no ;;
+             *) AC_MSG_ERROR(bad value ${enableval} for --enable-dev-mode)  ;;
+       esac])
+AC_SUBST(AST_DEVMODE)
+
+AST_EXT_LIB([asound], [snd_spcm_init], [alsa/asoundlib.h], [ALSA], [Advanced Linux Sound Architecture], [-lm -ldl])
+AST_EXT_LIB([curses], [initscr], [curses.h], [CURSES], [curses], [])
+AST_EXT_LIB([mfcr2], [mfcr2_MakeCall], [libmfcr2.h], [MFCR2], [MFCR2])
+AST_EXT_LIB([nbs], [nbs_setup], [nbs.h], [NBS], [Network Broadcast Sound])