add srtp
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@1086 d0543943-73ff-0310-b7d9-9358b9ac24b2v1.2.stable
parent
550a64e299
commit
b3d890ef25
|
@ -0,0 +1,4 @@
|
|||
Makefile
|
||||
config.log
|
||||
config.status
|
||||
autom4te.cache
|
|
@ -0,0 +1,223 @@
|
|||
Changelog
|
||||
|
||||
1.3.20
|
||||
|
||||
Lots of changes. Thanks to Jeff Chan for catching a memory leak and
|
||||
helping track down the endian issues with the SSRCs.
|
||||
|
||||
1.3.8
|
||||
|
||||
This is an interim release. Several little-endian bugs were identified
|
||||
and fixed; this means that we can use intel/linux for development again.
|
||||
|
||||
Cleaned up sha1 and hmac code significantly, got rid of some excess
|
||||
functions and properly documented the fuctions in the .h files.
|
||||
|
||||
Eliminated some vestigial files.
|
||||
|
||||
There is a SIGBUS error in the AES encrypt function on sparc
|
||||
(observed on both solaris and openbsd) with gcc 2.95. Was unable to
|
||||
find bad pointer anywhere, so I'm wondering if it isn't a compiler
|
||||
problem (there's a known problem whose profile it fits). It doesn't
|
||||
appear on any other platform, even in the cipher_driver stress
|
||||
tests.
|
||||
|
||||
Planned changes
|
||||
|
||||
Change interface to nonces (xtd_seq_num_t) so that it uses
|
||||
network byte ordering, and is consistent with other arguments.
|
||||
|
||||
|
||||
1.3.6
|
||||
|
||||
Changed /dev/random (in configure.in and crypto/rng/rand_source.c) to
|
||||
/dev/urandom; the latter is non-blocking on all known platforms (which
|
||||
corrects some programs that seem to hang) and is actually present on
|
||||
Open BSD (unlike /dev/random, which only works in the presence of
|
||||
hardware supported random number generation).
|
||||
|
||||
Added machine/types.h case in include/integers.h.
|
||||
|
||||
1.3.5
|
||||
|
||||
Removing srtp_t::template and stream_clone().
|
||||
|
||||
Adding a new policy structure, which will reflect a complete SRTP
|
||||
policy (including SRTCP).
|
||||
|
||||
This version is *incomplete* and will undergo more changes. It is
|
||||
provided only as a basis for discussion.
|
||||
|
||||
1.3.4
|
||||
|
||||
Removed tmmh.c and tmmh.h, which implemented version one of TMMH.
|
||||
|
||||
Changed srtp_get_trailer_length() to act on streams rather than
|
||||
sessions, and documented the macro SRTP_MAX_TRAILER_LEN, which should
|
||||
usually be used rather than that function.
|
||||
|
||||
Removed 'salt' from cipher input.
|
||||
|
||||
Changed rdbx to use err.h error codes.
|
||||
|
||||
Changed malloc() and free() to xalloc() and xfree; these functions
|
||||
are defined in crypto/kernel/alloc.c and declared in
|
||||
include/alloc.h.
|
||||
|
||||
Added 'output' functions to cipher, in addition to 'encrypt'
|
||||
functions. It is no longer necessary to zeroize a buffer before
|
||||
encrypting in order to get keystream.
|
||||
|
||||
Changed octet_string_hex_string() so that "times two" isn't needed
|
||||
in its input.
|
||||
|
||||
Added crypto_kernel_init() prior to command-line parsing, so that
|
||||
kernel can be passed command-line arguments, such as "-d
|
||||
debug_module". This was done to for the applications
|
||||
test/srtp-driver, test/kernel-driver, and test/ust-driver.
|
||||
|
||||
Improved srtp_init_aes_128_prf - wrote key derivation function
|
||||
(srtp_kdf_t).
|
||||
|
||||
Add the tag_len as an argument to the auth_compute() function, but
|
||||
not the corresponding macro. This change allows the tag length for
|
||||
a given auth func to be set to different values at initialization
|
||||
time. Previously, the structure auth_t contained the
|
||||
output_length, but that value was inaccessible from hmac_compute()
|
||||
and other functions.
|
||||
|
||||
Re-named files from a-b.c to a_b.c. in order to help portability.
|
||||
|
||||
Re-named rijndael to aes (or aes_128 as appropriate).
|
||||
|
||||
|
||||
1.2.1
|
||||
|
||||
Changes so that 1.2.0 compiles on cygwin-win2k.
|
||||
|
||||
Added better error reporting system. If syslog is present on the
|
||||
OS, then it is used.
|
||||
|
||||
|
||||
1.2.0 Many improvements and additions, and a fex fixes
|
||||
|
||||
Fixed endian issues in RTP header construction in the function
|
||||
rtp_sendto() in srtp/rtp.c.
|
||||
|
||||
Implemented RIJNDAEL decryption operation, adding the functions
|
||||
rijndael_decrypt() and rijndael_expand_decryption_key(). Also
|
||||
re-named rijndael_expand_key() to rijndael_expand_encryption_key()
|
||||
for consistency.
|
||||
|
||||
Implemented random number source using /dev/random, in the files
|
||||
crypto/rng/rand_source.c and include/rand_source.h.
|
||||
|
||||
Added index check to SEAL cipher (only values less than 2^32 are
|
||||
allowed)
|
||||
|
||||
Added test case for null_auth authentication function.
|
||||
|
||||
Added a timing test which tests the effect of CPU cache thrash on
|
||||
cipher throughput. The test is done by the function
|
||||
cipher_test_throughput_array(); the function
|
||||
cipher_array_alloc_init() creates an array of ciphers for use in
|
||||
this test. This test can be accessed by using the -a flag to
|
||||
the application cipher-driver in the test subdirectory.
|
||||
|
||||
Added argument processing to ust-driver.c, and added that app to
|
||||
the 'runtest' target in Makefile.in.
|
||||
|
||||
A minor auth_t API change: last argument of auth_init() eliminated.
|
||||
|
||||
|
||||
1.0.6 A small but important fix
|
||||
|
||||
Fixed srtp_init_aes_128_prf() by adding octet_string_set_to_zero()
|
||||
after buffer allocation.
|
||||
|
||||
Eliminated references to no-longer-existing variables in debugging
|
||||
code in srtp/srtp.c. This fixes the compilation failure that
|
||||
occured when using PRINT_DEBUG in that file.
|
||||
|
||||
Corrected spelling of Richard Priestley's name in credits. Sorry
|
||||
Richard!
|
||||
|
||||
|
||||
1.0.5 Many little fixes
|
||||
|
||||
Fixed octet_string_set_to_zero(), which was writing one
|
||||
more zero octet than it should. This bug caused srtp_protect()
|
||||
and srtp_unprotect() to overwrite the byte that followed the
|
||||
srtp packet.
|
||||
|
||||
Changed sizeof(uint32_t) to srtp_get_trailer_length() in
|
||||
srtp-driver.c. This is just defensive coding.
|
||||
|
||||
Added NULL check to malloc in srtp_alloc().
|
||||
|
||||
|
||||
1.0.4 Many minor fixes and two big ones (thanks for the bug reports!)
|
||||
|
||||
Removed 'ssrc' from the srtp_init_aes_128_prf() function argument
|
||||
list. This is so that applications which do not a priori know the
|
||||
ssrc which they will be receiving can still use libsrtp. Now the
|
||||
SSRC value is gleaned from the rtp header and exored into the
|
||||
counter mode offset in the srtp_protect() and srtp_unprotect()
|
||||
functions, if that cipher is used. This change cascaed through
|
||||
many other functions, including srtp_init_from_hex(),
|
||||
srtp_sender_init() and srtp_receiver_init() in rtp.c, and also
|
||||
changing the CLI to test/rtpw. In the future, another function
|
||||
call will be added to the library that enables multiple ssrc/key
|
||||
pairs to be installed into the same srtp session, so that libsrtp
|
||||
works with multiple srtp senders. For now, this functionality is
|
||||
lacking.
|
||||
|
||||
Removed the GDOI interface to the rtpw demo program. This will be
|
||||
added again at a later date, after the SRTP and GDOI distributions
|
||||
stabilize. For now, I've left in the GDOI #defines and autoconf
|
||||
definitions so that they'll be in place when needed.
|
||||
|
||||
Updated tmmhv2_compute() so that it didn't assume any particular
|
||||
alginment of the output tag.
|
||||
|
||||
Changed bit field variables in srtp.h to unsigned char from
|
||||
unsigned int in order to avoid a potential endianness issue.
|
||||
|
||||
Fixed rdbx_estimate_index() to handle all input cases. This solves
|
||||
the now notorious "abaft" bug in the rtpw demo app on linux/intel,
|
||||
in which spurious replay protection failures happen after that word
|
||||
is received.
|
||||
|
||||
Added ntohs(hdr->seq) to srtp_protect and srtp_unprotect, removed
|
||||
from rijndael_icm_set_segment().
|
||||
|
||||
Added error checking and handling to srtp_sender_init() and
|
||||
srtp_receiver_init().
|
||||
|
||||
Changed srtp_alloc() so that it does what you'd expect: allocate an
|
||||
srtp_ctx_t structure. This hides the library internals.
|
||||
|
||||
|
||||
1.0.1 Many minor fixes
|
||||
|
||||
Added cipher_driver_buffer_test(...) to test/cipher-driver.c. This
|
||||
function checks that the byte-buffering functions used by a cipher
|
||||
are correct.
|
||||
|
||||
Fixed SunOS/Solaris build problems: added HAVE_SYS_INT_TYPES_H and
|
||||
changed index_t to xtd_seq_num_t (see include/rdbx.h).
|
||||
|
||||
Fixed SEAL3.0 output byte buffering, added byte-buffering test to
|
||||
cipher/cipher-driver.c.
|
||||
|
||||
Fixed roc-driver so that the non-sequential insertion test
|
||||
automatically recovers from bad estimates. This was required to
|
||||
prevent spurious failures.
|
||||
|
||||
Made rdbx_estimate_index(...) function smarter, so that initial RTP
|
||||
sequence numbers greater than 32,768 don't cause it to estimate the
|
||||
rollover counter of 0xffffffff.
|
||||
|
||||
|
||||
1.0.0 Initial release
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
/.cvsignore/1.2/Thu Sep 29 12:23:16 2005//
|
||||
/CHANGES/1.1.1.1/Wed Sep 21 22:51:36 2005//
|
||||
/LICENSE/1.2/Fri Sep 23 19:34:11 2005//
|
||||
/Makefile.in/1.14/Fri Mar 17 21:00:46 2006//
|
||||
/README/1.3/Sun Oct 2 12:04:37 2005//
|
||||
/TODO/1.2/Fri Sep 23 19:34:11 2005//
|
||||
/VERSION/1.2/Fri Sep 23 19:34:11 2005//
|
||||
/config.guess/1.2/Sun Oct 2 19:03:54 2005//
|
||||
/config.sub/1.2/Sun Oct 2 19:03:53 2005//
|
||||
/config_in.h/1.7/Mon Oct 3 15:24:08 2005//
|
||||
/configure/1.9/Mon Oct 3 15:23:13 2005//
|
||||
/configure.in/1.10/Mon Oct 3 15:19:02 2005//
|
||||
/install-sh/1.1.1.1/Wed Sep 21 22:51:38 2005//
|
||||
/timing/1.1.1.1/Wed Sep 21 22:51:38 2005//
|
||||
/undos.sh/1.1.1.1/Wed Sep 21 22:51:38 2005//
|
||||
/update.sh/1.1.1.1/Wed Sep 21 22:51:38 2005//
|
||||
D/crypto////
|
||||
D/doc////
|
||||
D/include////
|
||||
D/srtp////
|
||||
D/tables////
|
||||
D/test////
|
|
@ -0,0 +1 @@
|
|||
srtp
|
|
@ -0,0 +1 @@
|
|||
:pserver:anonymous@cvs.sourceforge.net:/cvsroot/srtp
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
*
|
||||
* Copyright (c) 2001-2005 Cisco Systems, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
*
|
||||
* Neither the name of the Cisco Systems, Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
|
@ -0,0 +1,220 @@
|
|||
# Makefile for secure rtp
|
||||
#
|
||||
# David A. McGrew
|
||||
# Cisco Systems, Inc.
|
||||
|
||||
# targets:
|
||||
#
|
||||
# runtest runs test applications
|
||||
# test builds test applications
|
||||
# libcrypt.a static library implementing crypto engine
|
||||
# libsrtp.a static library implementing srtp
|
||||
# clean removes objects, libs, and executables
|
||||
# distribution cleans and builds a .tgz
|
||||
# tags builds etags file from all .c and .h files
|
||||
|
||||
.PHONY: all test build_table_apps
|
||||
|
||||
all: test
|
||||
|
||||
runtest: build_table_apps test
|
||||
@echo "running libsrtp test applications..."
|
||||
crypto/test/cipher_driver$(EXE) -v >/dev/null
|
||||
crypto/test/kernel_driver$(EXE) -v >/dev/null
|
||||
test/rdbx_driver$(EXE) -v >/dev/null
|
||||
test/srtp_driver$(EXE) -v >/dev/null
|
||||
test/roc_driver$(EXE) -v >/dev/null
|
||||
test/replay_driver$(EXE) -v >/dev/null
|
||||
@echo "libsrtp test applications passed."
|
||||
$(MAKE) -C crypto runtest
|
||||
|
||||
# makefile variables
|
||||
|
||||
CC = gcc
|
||||
INCDIR = -Icrypto/include -I$(srcdir)/include -I$(srcdir)/crypto/include
|
||||
DEFS = -DHAVE_CONFIG_H
|
||||
CPPFLAGS=
|
||||
CFLAGS = -fPIC -Wall -O4 -fexpensive-optimizations -funroll-loops
|
||||
LIBS =
|
||||
LDFLAGS = -L.
|
||||
COMPILE = $(CC) $(DEFS) $(INCDIR) $(CPPFLAGS) $(CFLAGS)
|
||||
SRTPLIB = -lsrtp
|
||||
|
||||
RANLIB = ranlib
|
||||
INSTALL = /usr/bin/install -c
|
||||
|
||||
# EXE defines the suffix on executables - it's .exe for Windows, and
|
||||
# null on linux, bsd, and OS X and other OSes.
|
||||
EXE =
|
||||
# gdoi is the group domain of interpretation for isakmp, a group key
|
||||
# management system which can provide keys for srtp
|
||||
gdoi =
|
||||
# Random source.
|
||||
RNG_OBJS = rand_source.o
|
||||
|
||||
srcdir = .
|
||||
top_srcdir = .
|
||||
top_builddir =
|
||||
|
||||
prefix = /usr/local/freeswitch
|
||||
exec_prefix = ${prefix}
|
||||
includedir = ${prefix}/include
|
||||
libdir = ${exec_prefix}/lib
|
||||
|
||||
|
||||
# implicit rules for object files and test apps
|
||||
|
||||
%.o: %.c
|
||||
$(COMPILE) -c $< -o $@
|
||||
|
||||
%$(EXE): %.c
|
||||
$(COMPILE) $(LDFLAGS) $< -o $@ $(SRTPLIB) $(LIBS)
|
||||
|
||||
|
||||
# libcrypt.a (the crypto engine)
|
||||
ciphers = crypto/cipher/cipher.o crypto/cipher/null_cipher.o \
|
||||
crypto/cipher/aes.o crypto/cipher/aes_icm.o \
|
||||
crypto/cipher/aes_cbc.o
|
||||
|
||||
hashes = crypto/hash/null_auth.o crypto/hash/sha1.o \
|
||||
crypto/hash/hmac.o crypto/hash/auth.o # crypto/hash/tmmhv2.o
|
||||
|
||||
replay = crypto/replay/rdb.o crypto/replay/rdbx.o \
|
||||
crypto/replay/ut_sim.o
|
||||
|
||||
math = crypto/math/datatypes.o crypto/math/stat.o
|
||||
|
||||
ust = crypto/ust/ust.o
|
||||
|
||||
rng = crypto/rng/$(RNG_OBJS) crypto/rng/prng.o crypto/rng/ctr_prng.o
|
||||
|
||||
err = crypto/kernel/err.o
|
||||
|
||||
kernel = crypto/kernel/crypto_kernel.o crypto/kernel/alloc.o \
|
||||
crypto/kernel/key.o $(rng) $(err) # $(ust)
|
||||
|
||||
cryptobj = $(ciphers) $(hashes) $(math) $(stat) $(kernel) $(replay)
|
||||
|
||||
# libsrtp.a (implements srtp processing)
|
||||
|
||||
srtpobj = srtp/srtp.o
|
||||
|
||||
libsrtp.a: $(srtpobj) $(cryptobj) $(gdoi)
|
||||
ar cr libsrtp.a $^
|
||||
$(RANLIB) libsrtp.a
|
||||
|
||||
# libcryptomath.a contains general-purpose routines that are used to
|
||||
# generate tables and verify cryptoalgorithm implementations - this
|
||||
# library is not meant to be included in production code
|
||||
|
||||
cryptomath = crypto/math/math.o crypto/math/gf2_8.o
|
||||
|
||||
libcryptomath.a: $(cryptomath)
|
||||
ar cr libcryptomath.a $(cryptomath)
|
||||
$(RANLIB) libcryptomath.a
|
||||
|
||||
|
||||
# test applications
|
||||
|
||||
crypto_testapp = crypto/test/aes_calc$(EXE) crypto/test/cipher_driver$(EXE) \
|
||||
crypto/test/datatypes_driver$(EXE) crypto/test/kernel_driver$(EXE) \
|
||||
crypto/test/rand_gen$(EXE) crypto/test/sha1_driver$(EXE) \
|
||||
crypto/test/stat_driver$(EXE)
|
||||
|
||||
testapp = $(crypto_testapp) test/srtp_driver$(EXE) test/replay_driver$(EXE) \
|
||||
test/roc_driver$(EXE) test/rdbx_driver$(EXE) test/rtpw$(EXE)
|
||||
|
||||
$(testapp): libsrtp.a
|
||||
|
||||
test/rtpw$(EXE): test/rtpw.c test/rtp.c
|
||||
$(COMPILE) $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)
|
||||
|
||||
test: $(testapp)
|
||||
@echo "Build done. Please run '$(MAKE) runtest' to run self tests."
|
||||
|
||||
memtest: test/srtp_driver
|
||||
@test/srtp_driver -v -d "alloc" > tmp
|
||||
@grep freed tmp | wc -l > freed
|
||||
@grep allocated tmp | wc -l > allocated
|
||||
@echo "checking for memory leaks (only works with --enable-stdout)"
|
||||
cmp -s allocated freed
|
||||
@echo "passed (same number of alloc() and dealloc() calls found)"
|
||||
@rm freed allocated tmp
|
||||
|
||||
# tables_apps are used to generate the tables used in the crypto
|
||||
# implementations; these need only be generated during porting, not
|
||||
# for building libsrtp or the test applications
|
||||
|
||||
table_apps = tables/aes_tables
|
||||
|
||||
build_table_apps: $(table_apps)
|
||||
|
||||
# in the tables/ subdirectory, we use libcryptomath instead of libsrtp
|
||||
|
||||
tables/%: tables/%.c libcryptomath.a
|
||||
$(COMPILE) $(LDFLAGS) $< -o $@ $(LIBS) libcryptomath.a
|
||||
|
||||
# the target 'plot' runs the timing test (test/srtp_driver -t) then
|
||||
# uses gnuplot to produce plots of the results - see the script file
|
||||
# 'timing'
|
||||
|
||||
plot: test/srtp_driver
|
||||
test/srtp_driver -t > timing.dat
|
||||
|
||||
|
||||
# bookkeeping: tags, clean, and distribution
|
||||
|
||||
tags:
|
||||
etags */*.[ch] */*/*.[ch]
|
||||
|
||||
|
||||
# documentation - the target libsrtpdoc builds a PDF file documenting
|
||||
# libsrtp
|
||||
|
||||
libsrtpdoc:
|
||||
$(MAKE) -C doc
|
||||
|
||||
.PHONY: clean superclean install
|
||||
|
||||
install:
|
||||
@if [ -d $(DESTDIR)$(includedir)/srtp ]; then \
|
||||
echo "you should run 'make uninstall' first"; exit 1; \
|
||||
fi
|
||||
$(INSTALL) -d $(DESTDIR)$(includedir)/srtp
|
||||
$(INSTALL) -d $(DESTDIR)$(libdir)
|
||||
cp include/*.h $(DESTDIR)$(includedir)/srtp
|
||||
cp crypto/include/*.h $(DESTDIR)$(includedir)/srtp
|
||||
if [ -f libsrtp.a ]; then cp libsrtp.a $(DESTDIR)$(libdir)/; fi
|
||||
|
||||
uninstall:
|
||||
rm -rf $(DESTDIR)$(includedir)/srtp
|
||||
rm -rf $(DESTDIR)$(libdir)/libsrtp.a
|
||||
|
||||
clean:
|
||||
rm -rf $(cryptobj) $(srtpobj) $(cryptomath) $(table_apps) TAGS \
|
||||
libcryptomath.a libsrtp.a core *.core test/core
|
||||
for a in * */* */*/*; do \
|
||||
if [ -f "$$a~" ] ; then rm -f $$a~; fi; \
|
||||
done;
|
||||
for a in $(testapp) $(table_apps); do rm -rf $$a$(EXE); done
|
||||
rm -rf *.pict *.jpg *.dat
|
||||
rm -rf freed allocated tmp
|
||||
$(MAKE) -C doc clean
|
||||
$(MAKE) -C crypto clean
|
||||
|
||||
|
||||
superclean: clean
|
||||
rm -rf crypto/include/config.h config.log config.cache config.status \
|
||||
Makefile .gdb_history test/.gdb_history .DS_Store
|
||||
rm -rf autom4te.cache
|
||||
|
||||
distname = srtp-$(shell cat VERSION)
|
||||
|
||||
distribution: runtest superclean
|
||||
if ! [ -f VERSION ]; then exit 1; fi
|
||||
if [ -f ../$(distname).tgz ]; then \
|
||||
mv ../$(distname).tgz ../$(distname).tgz.bak; \
|
||||
fi
|
||||
cd ..; tar cvzf $(distname).tgz srtp
|
||||
|
||||
# EOF
|
|
@ -0,0 +1,220 @@
|
|||
# Makefile for secure rtp
|
||||
#
|
||||
# David A. McGrew
|
||||
# Cisco Systems, Inc.
|
||||
|
||||
# targets:
|
||||
#
|
||||
# runtest runs test applications
|
||||
# test builds test applications
|
||||
# libcrypt.a static library implementing crypto engine
|
||||
# libsrtp.a static library implementing srtp
|
||||
# clean removes objects, libs, and executables
|
||||
# distribution cleans and builds a .tgz
|
||||
# tags builds etags file from all .c and .h files
|
||||
|
||||
.PHONY: all test build_table_apps
|
||||
|
||||
all: test
|
||||
|
||||
runtest: build_table_apps test
|
||||
@echo "running libsrtp test applications..."
|
||||
crypto/test/cipher_driver$(EXE) -v >/dev/null
|
||||
crypto/test/kernel_driver$(EXE) -v >/dev/null
|
||||
test/rdbx_driver$(EXE) -v >/dev/null
|
||||
test/srtp_driver$(EXE) -v >/dev/null
|
||||
test/roc_driver$(EXE) -v >/dev/null
|
||||
test/replay_driver$(EXE) -v >/dev/null
|
||||
@echo "libsrtp test applications passed."
|
||||
$(MAKE) -C crypto runtest
|
||||
|
||||
# makefile variables
|
||||
|
||||
CC = @CC@
|
||||
INCDIR = -Icrypto/include -I$(srcdir)/include -I$(srcdir)/crypto/include
|
||||
DEFS = @DEFS@
|
||||
CPPFLAGS= @CPPFLAGS@
|
||||
CFLAGS = @CFLAGS@
|
||||
LIBS = @LIBS@
|
||||
LDFLAGS = @LDFLAGS@ -L.
|
||||
COMPILE = $(CC) $(DEFS) $(INCDIR) $(CPPFLAGS) $(CFLAGS)
|
||||
SRTPLIB = -lsrtp
|
||||
|
||||
RANLIB = @RANLIB@
|
||||
INSTALL = @INSTALL@
|
||||
|
||||
# EXE defines the suffix on executables - it's .exe for Windows, and
|
||||
# null on linux, bsd, and OS X and other OSes.
|
||||
EXE = @EXE@
|
||||
# gdoi is the group domain of interpretation for isakmp, a group key
|
||||
# management system which can provide keys for srtp
|
||||
gdoi = @GDOI_OBJS@
|
||||
# Random source.
|
||||
RNG_OBJS = @RNG_OBJS@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
top_builddir = @top_builddir@
|
||||
VPATH = @srcdir@
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
includedir = @includedir@
|
||||
libdir = @libdir@
|
||||
|
||||
|
||||
# implicit rules for object files and test apps
|
||||
|
||||
%.o: %.c
|
||||
$(COMPILE) -c $< -o $@
|
||||
|
||||
%$(EXE): %.c
|
||||
$(COMPILE) $(LDFLAGS) $< -o $@ $(SRTPLIB) $(LIBS)
|
||||
|
||||
|
||||
# libcrypt.a (the crypto engine)
|
||||
ciphers = crypto/cipher/cipher.o crypto/cipher/null_cipher.o \
|
||||
crypto/cipher/aes.o crypto/cipher/aes_icm.o \
|
||||
crypto/cipher/aes_cbc.o
|
||||
|
||||
hashes = crypto/hash/null_auth.o crypto/hash/sha1.o \
|
||||
crypto/hash/hmac.o crypto/hash/auth.o # crypto/hash/tmmhv2.o
|
||||
|
||||
replay = crypto/replay/rdb.o crypto/replay/rdbx.o \
|
||||
crypto/replay/ut_sim.o
|
||||
|
||||
math = crypto/math/datatypes.o crypto/math/stat.o
|
||||
|
||||
ust = crypto/ust/ust.o
|
||||
|
||||
rng = crypto/rng/$(RNG_OBJS) crypto/rng/prng.o crypto/rng/ctr_prng.o
|
||||
|
||||
err = crypto/kernel/err.o
|
||||
|
||||
kernel = crypto/kernel/crypto_kernel.o crypto/kernel/alloc.o \
|
||||
crypto/kernel/key.o $(rng) $(err) # $(ust)
|
||||
|
||||
cryptobj = $(ciphers) $(hashes) $(math) $(stat) $(kernel) $(replay)
|
||||
|
||||
# libsrtp.a (implements srtp processing)
|
||||
|
||||
srtpobj = srtp/srtp.o
|
||||
|
||||
libsrtp.a: $(srtpobj) $(cryptobj) $(gdoi)
|
||||
ar cr libsrtp.a $^
|
||||
$(RANLIB) libsrtp.a
|
||||
|
||||
# libcryptomath.a contains general-purpose routines that are used to
|
||||
# generate tables and verify cryptoalgorithm implementations - this
|
||||
# library is not meant to be included in production code
|
||||
|
||||
cryptomath = crypto/math/math.o crypto/math/gf2_8.o
|
||||
|
||||
libcryptomath.a: $(cryptomath)
|
||||
ar cr libcryptomath.a $(cryptomath)
|
||||
$(RANLIB) libcryptomath.a
|
||||
|
||||
|
||||
# test applications
|
||||
|
||||
crypto_testapp = crypto/test/aes_calc$(EXE) crypto/test/cipher_driver$(EXE) \
|
||||
crypto/test/datatypes_driver$(EXE) crypto/test/kernel_driver$(EXE) \
|
||||
crypto/test/rand_gen$(EXE) crypto/test/sha1_driver$(EXE) \
|
||||
crypto/test/stat_driver$(EXE)
|
||||
|
||||
testapp = $(crypto_testapp) test/srtp_driver$(EXE) test/replay_driver$(EXE) \
|
||||
test/roc_driver$(EXE) test/rdbx_driver$(EXE) test/rtpw$(EXE)
|
||||
|
||||
$(testapp): libsrtp.a
|
||||
|
||||
test/rtpw$(EXE): test/rtpw.c test/rtp.c
|
||||
$(COMPILE) $(LDFLAGS) -o $@ $^ $(LIBS) $(SRTPLIB)
|
||||
|
||||
test: $(testapp)
|
||||
@echo "Build done. Please run '$(MAKE) runtest' to run self tests."
|
||||
|
||||
memtest: test/srtp_driver
|
||||
@test/srtp_driver -v -d "alloc" > tmp
|
||||
@grep freed tmp | wc -l > freed
|
||||
@grep allocated tmp | wc -l > allocated
|
||||
@echo "checking for memory leaks (only works with --enable-stdout)"
|
||||
cmp -s allocated freed
|
||||
@echo "passed (same number of alloc() and dealloc() calls found)"
|
||||
@rm freed allocated tmp
|
||||
|
||||
# tables_apps are used to generate the tables used in the crypto
|
||||
# implementations; these need only be generated during porting, not
|
||||
# for building libsrtp or the test applications
|
||||
|
||||
table_apps = tables/aes_tables
|
||||
|
||||
build_table_apps: $(table_apps)
|
||||
|
||||
# in the tables/ subdirectory, we use libcryptomath instead of libsrtp
|
||||
|
||||
tables/%: tables/%.c libcryptomath.a
|
||||
$(COMPILE) $(LDFLAGS) $< -o $@ $(LIBS) libcryptomath.a
|
||||
|
||||
# the target 'plot' runs the timing test (test/srtp_driver -t) then
|
||||
# uses gnuplot to produce plots of the results - see the script file
|
||||
# 'timing'
|
||||
|
||||
plot: test/srtp_driver
|
||||
test/srtp_driver -t > timing.dat
|
||||
|
||||
|
||||
# bookkeeping: tags, clean, and distribution
|
||||
|
||||
tags:
|
||||
etags */*.[ch] */*/*.[ch]
|
||||
|
||||
|
||||
# documentation - the target libsrtpdoc builds a PDF file documenting
|
||||
# libsrtp
|
||||
|
||||
libsrtpdoc:
|
||||
$(MAKE) -C doc
|
||||
|
||||
.PHONY: clean superclean install
|
||||
|
||||
install:
|
||||
@if [ -d $(DESTDIR)$(includedir)/srtp ]; then \
|
||||
echo "you should run 'make uninstall' first"; exit 1; \
|
||||
fi
|
||||
$(INSTALL) -d $(DESTDIR)$(includedir)/srtp
|
||||
$(INSTALL) -d $(DESTDIR)$(libdir)
|
||||
cp include/*.h $(DESTDIR)$(includedir)/srtp
|
||||
cp crypto/include/*.h $(DESTDIR)$(includedir)/srtp
|
||||
if [ -f libsrtp.a ]; then cp libsrtp.a $(DESTDIR)$(libdir)/; fi
|
||||
|
||||
uninstall:
|
||||
rm -rf $(DESTDIR)$(includedir)/srtp
|
||||
rm -rf $(DESTDIR)$(libdir)/libsrtp.a
|
||||
|
||||
clean:
|
||||
rm -rf $(cryptobj) $(srtpobj) $(cryptomath) $(table_apps) TAGS \
|
||||
libcryptomath.a libsrtp.a core *.core test/core
|
||||
for a in * */* */*/*; do \
|
||||
if [ -f "$$a~" ] ; then rm -f $$a~; fi; \
|
||||
done;
|
||||
for a in $(testapp) $(table_apps); do rm -rf $$a$(EXE); done
|
||||
rm -rf *.pict *.jpg *.dat
|
||||
rm -rf freed allocated tmp
|
||||
$(MAKE) -C doc clean
|
||||
$(MAKE) -C crypto clean
|
||||
|
||||
|
||||
superclean: clean
|
||||
rm -rf crypto/include/config.h config.log config.cache config.status \
|
||||
Makefile .gdb_history test/.gdb_history .DS_Store
|
||||
rm -rf autom4te.cache
|
||||
|
||||
distname = srtp-$(shell cat VERSION)
|
||||
|
||||
distribution: runtest superclean
|
||||
if ! [ -f VERSION ]; then exit 1; fi
|
||||
if [ -f ../$(distname).tgz ]; then \
|
||||
mv ../$(distname).tgz ../$(distname).tgz.bak; \
|
||||
fi
|
||||
cd ..; tar cvzf $(distname).tgz srtp
|
||||
|
||||
# EOF
|
|
@ -0,0 +1,172 @@
|
|||
Secure RTP (SRTP) and UST Reference Implementations
|
||||
David A. McGrew
|
||||
Cisco Systems, Inc.
|
||||
mcgrew@cisco.com
|
||||
|
||||
|
||||
This package provides an implementation of the Secure Real-time
|
||||
Transport Protocol (SRTP), the Universal Security Transform (UST), and
|
||||
a supporting cryptographic kernel. These mechanisms are documented in
|
||||
the Internet Drafts in the doc/ subdirectory. The SRTP API is
|
||||
documented in include/srtp.h, and the library is in libsrtp.a (after
|
||||
compilation).
|
||||
|
||||
|
||||
Installation:
|
||||
|
||||
./configure [ options ] # GNU autoconf script
|
||||
make # or gmake if needed; use GNU make
|
||||
|
||||
The configure script accepts the following options:
|
||||
|
||||
--help provides a usage summary
|
||||
--disable-debug compile without the runtime debugging system
|
||||
--enable-syslog use syslog for error reporting
|
||||
--disable-stdout use stdout for error reporting
|
||||
--enable-console use /dev/console for error reporting
|
||||
--gdoi use GDOI key management (disabled at present)
|
||||
|
||||
By default, debbuging is enabled and stdout is used for debugging.
|
||||
You can use the above configure options to have the debugging output
|
||||
sent to syslog or the system console. Alternatively, you can define
|
||||
ERR_REPORTING_FILE in include/conf.h to be any other file that can be
|
||||
opened by libSRTP, and debug messages will be sent to it.
|
||||
|
||||
This package has been tested on Mac OS X (powerpc-apple-darwin1.4),
|
||||
Cygwin (i686-pc-cygwin), and Sparc (sparc-sun-solaris2.6). Previous
|
||||
versions have been tested on Linux and OpenBSD on both x86 and sparc
|
||||
platforms.
|
||||
|
||||
A quick tour of this package:
|
||||
|
||||
Makefile targets: all, clean, ...
|
||||
README this file
|
||||
CHANGES change log
|
||||
VERSION version number of this package
|
||||
LICENSE legal details (it's a BSD-like license)
|
||||
crypto/ciphers/ ciphers (null, aes_icm, ...)
|
||||
crypto/math/ crypto math routines
|
||||
crypto/hash/ crypto hashing (hmac, tmmhv2, ...)
|
||||
crypto/replay/ replay protection
|
||||
doc/ documentation: rfcs, apis, and suchlike
|
||||
include/ include files for all code in distribution
|
||||
srtp/ secure real-time transport protocol implementation
|
||||
tables/ apps for generating tables (useful in porting)
|
||||
test/ test drivers
|
||||
|
||||
|
||||
Applications
|
||||
|
||||
Several test drivers and a simple and portable srtp application
|
||||
are included in the test/ subdirectory.
|
||||
|
||||
test driver function tested
|
||||
-------------------------------------------------------------
|
||||
kernel_driver crypto kernel (ciphers, auth funcs, rng)
|
||||
srtp_driver srtp in-memory tests (does not use the network)
|
||||
rdbx_driver rdbx (extended replay database)
|
||||
roc_driver extended sequence number functions
|
||||
replay_driver replay database (n.b. not used in libsrtp)
|
||||
cipher_driver ciphers
|
||||
auth_driver hash functions
|
||||
|
||||
The app rtpw is a simple rtp application which reads words from
|
||||
/usr/dict/words and then sends them out one at a time using [s]rtp.
|
||||
Manual srtp keying uses the -k option; automated key management
|
||||
using gdoi will be added later.
|
||||
|
||||
usage: rtpw [-d <debug>]* [-k <key> [-a][-e]] [-s | -r] dest_ip dest_port
|
||||
or rtpw -l
|
||||
|
||||
Either the -s (sender) or -r (receiver) option must be chosen.
|
||||
|
||||
The values dest_ip, dest_port are the ip address and udp port to
|
||||
which the dictionary will be sent, respectively.
|
||||
|
||||
options:
|
||||
|
||||
-s (s)rtp sender - causes app to send words
|
||||
|
||||
-r (s)rtp receive - causes app to receve words
|
||||
|
||||
-k <key> use srtp master key <key>, where the
|
||||
key is a hexadecimal value (without the
|
||||
leading "0x")
|
||||
|
||||
-e encrypt/decrypt (for data confidentiality)
|
||||
(requires use of -k option as well)
|
||||
|
||||
-a message authentication
|
||||
(requires use of -k option as well)
|
||||
|
||||
-l list debug modules
|
||||
|
||||
-d <debug> turn on debugging for module <debug>
|
||||
|
||||
|
||||
In order to get random 30-byte values for use as key/salt pairs , you
|
||||
can use the following bash function to format the output of
|
||||
/dev/random (where that device is available).
|
||||
|
||||
function randhex() {
|
||||
cat /dev/random | od --read-bytes=32 --width=32 -x | awk '{ print $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 }'
|
||||
}
|
||||
|
||||
|
||||
An example of an SRTP session using two rtpw programs follows:
|
||||
|
||||
set k=c1eec3717da76195bb878578790af71c4ee9f859e197a414a78d5abc7451
|
||||
|
||||
[sh1]$ test/rtpw -s -k $k -ea 0.0.0.0 9999
|
||||
Security services: confidentiality message authentication
|
||||
set master key/salt to C1EEC3717DA76195BB878578790AF71C/4EE9F859E197A414A78D5ABC7451
|
||||
setting SSRC to 2078917053
|
||||
sending word: A
|
||||
sending word: a
|
||||
sending word: aa
|
||||
sending word: aal
|
||||
...
|
||||
|
||||
[sh2]$ test/rtpw -r -k $k -ea 0.0.0.0 9999
|
||||
security services: confidentiality message authentication
|
||||
set master key/salt to C1EEC3717DA76195BB878578790AF71C/4EE9F859E197A414A78D5ABC7451
|
||||
19 octets received from SSRC 2078917053 word: A
|
||||
19 octets received from SSRC 2078917053 word: a
|
||||
20 octets received from SSRC 2078917053 word: aa
|
||||
21 octets received from SSRC 2078917053 word: aal
|
||||
...
|
||||
|
||||
Implementation Notes
|
||||
|
||||
* The srtp_protect() function assumes that the buffer holding the
|
||||
rtp packet has enough storage allocated that the authentication
|
||||
tag can be written to the end of that packet. If this assumption
|
||||
is not valid, memory corruption will ensue.
|
||||
|
||||
* Automated tests for the crypto functions are provided through
|
||||
the cipher_type_self_test() and auth_type_self_test() functions.
|
||||
These functions should be used to test each port of this code
|
||||
to a new platform.
|
||||
|
||||
* Replay protection is contained in the crypto engine, and
|
||||
tests for it are provided.
|
||||
|
||||
* This implementation provides calls to initialize, protect, and
|
||||
unprotect RTP packets, and makes as few as possible assumptions
|
||||
about how these functions will be called. For example, the
|
||||
caller is not expected to provide packets in order (though if
|
||||
they're called more than 65k out of sequence, synchronization
|
||||
will be lost).
|
||||
|
||||
* The sequence number in the rtp packet is used as the low 16 bits
|
||||
of the sender's local packet index. Note that RTP will start its
|
||||
sequence number in a random place, and the SRTP layer just jumps
|
||||
forward to that number at its first invocation. An earlier
|
||||
version of this library used initial sequence numbers that are
|
||||
less than 32,768; this trick is no longer required as the
|
||||
rdbx_estimate_index(...) function has been made smarter.
|
||||
|
||||
* The replay window is 128 bits in length, and is hard-coded to this
|
||||
value for now.
|
||||
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
TODO List
|
||||
|
||||
1.4.1
|
||||
|
||||
- document which fields are in NBO/HBO, and check for consistency.
|
||||
|
||||
- move HAVE_U_LONG_LONG inside of datatypes.c, or some other
|
||||
separate file
|
||||
|
||||
- re-write configure.in to make cross-compilation easier
|
||||
|
||||
- eliminate GENERIC_AESICM by generalizing the code a bit
|
||||
|
||||
Older comments
|
||||
|
||||
- add tests for key_limit_t datatype
|
||||
|
||||
- move octet_get_weight() from datatypes.c to math.c (any other
|
||||
funcs?)
|
||||
|
||||
Changes and additions planned
|
||||
|
||||
Make cipher and auth dealloc() functions zeroize the key-storage
|
||||
areas before calling free().
|
||||
|
||||
Eliminate key_len from auth_init()
|
||||
|
||||
Doucument internal APIs (cipher, auth, srtp_protect, ...)
|
||||
|
||||
|
||||
SRTP options not (yet) included in this libaray:
|
||||
|
||||
- the aes-f8-mode cipher
|
||||
- the Master Key Index
|
||||
- re-keying using the key derivation function (only the initial
|
||||
use of the PRF has been implemented, as it's sufficient
|
||||
for most uses)
|
||||
|
||||
|
||||
(OLD) PLANNED CHANGES
|
||||
|
||||
strip out test/lfsr.c
|
||||
|
||||
Write new documentation!!!
|
||||
|
||||
Fix the x86 assembly code in aes.c.
|
||||
|
||||
Eliminate /* DAM */ - there's one in srtp.c
|
||||
|
||||
Change debugging so that it can print more than one line. Or perhaps
|
||||
just change it so that a single check of the debug-enabled flag is
|
||||
needed.
|
||||
|
||||
Improve interface between cipher and rdbx - perhaps generalize rdbx
|
||||
into 'nonce' datatype.
|
||||
|
||||
Make rijndael_icm accept variable sized keys.
|
||||
|
||||
Add rdbx functions that allow different-sized explicit sequence
|
||||
numbers to be used.
|
||||
|
||||
Write uniform byte-buffering code for PRFs, preferably as macros.
|
||||
|
||||
Consider eliminating low-level alloc functions in favor of len()
|
||||
functions, so that there need not be multiple allocations within a
|
||||
particular alloc() function.
|
|
@ -0,0 +1 @@
|
|||
1.4.2
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,991 @@
|
|||
#! /bin/sh
|
||||
# Generated by configure.
|
||||
# Run this file to recreate the current configuration.
|
||||
# Compiler output produced by configure, useful for debugging
|
||||
# configure, is in config.log if it exists.
|
||||
|
||||
debug=false
|
||||
ac_cs_recheck=false
|
||||
ac_cs_silent=false
|
||||
SHELL=${CONFIG_SHELL-/bin/sh}
|
||||
## --------------------- ##
|
||||
## M4sh Initialization. ##
|
||||
## --------------------- ##
|
||||
|
||||
# Be Bourne compatible
|
||||
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
|
||||
emulate sh
|
||||
NULLCMD=:
|
||||
# Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
|
||||
# is contrary to our usage. Disable this feature.
|
||||
alias -g '${1+"$@"}'='"$@"'
|
||||
elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
|
||||
set -o posix
|
||||
fi
|
||||
DUALCASE=1; export DUALCASE # for MKS sh
|
||||
|
||||
# Support unset when possible.
|
||||
if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
|
||||
as_unset=unset
|
||||
else
|
||||
as_unset=false
|
||||
fi
|
||||
|
||||
|
||||
# Work around bugs in pre-3.0 UWIN ksh.
|
||||
$as_unset ENV MAIL MAILPATH
|
||||
PS1='$ '
|
||||
PS2='> '
|
||||
PS4='+ '
|
||||
|
||||
# NLS nuisances.
|
||||
for as_var in \
|
||||
LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
|
||||
LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
|
||||
LC_TELEPHONE LC_TIME
|
||||
do
|
||||
if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
|
||||
eval $as_var=C; export $as_var
|
||||
else
|
||||
$as_unset $as_var
|
||||
fi
|
||||
done
|
||||
|
||||
# Required to use basename.
|
||||
if expr a : '\(a\)' >/dev/null 2>&1; then
|
||||
as_expr=expr
|
||||
else
|
||||
as_expr=false
|
||||
fi
|
||||
|
||||
if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
|
||||
as_basename=basename
|
||||
else
|
||||
as_basename=false
|
||||
fi
|
||||
|
||||
|
||||
# Name of the executable.
|
||||
as_me=`$as_basename "$0" ||
|
||||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
|
||||
X"$0" : 'X\(//\)$' \| \
|
||||
X"$0" : 'X\(/\)$' \| \
|
||||
. : '\(.\)' 2>/dev/null ||
|
||||
echo X/"$0" |
|
||||
sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
|
||||
/^X\/\(\/\/\)$/{ s//\1/; q; }
|
||||
/^X\/\(\/\).*/{ s//\1/; q; }
|
||||
s/.*/./; q'`
|
||||
|
||||
|
||||
# PATH needs CR, and LINENO needs CR and PATH.
|
||||
# Avoid depending upon Character Ranges.
|
||||
as_cr_letters='abcdefghijklmnopqrstuvwxyz'
|
||||
as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
as_cr_Letters=$as_cr_letters$as_cr_LETTERS
|
||||
as_cr_digits='0123456789'
|
||||
as_cr_alnum=$as_cr_Letters$as_cr_digits
|
||||
|
||||
# The user is always right.
|
||||
if test "${PATH_SEPARATOR+set}" != set; then
|
||||
echo "#! /bin/sh" >conf$$.sh
|
||||
echo "exit 0" >>conf$$.sh
|
||||
chmod +x conf$$.sh
|
||||
if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
|
||||
PATH_SEPARATOR=';'
|
||||
else
|
||||
PATH_SEPARATOR=:
|
||||
fi
|
||||
rm -f conf$$.sh
|
||||
fi
|
||||
|
||||
|
||||
as_lineno_1=$LINENO
|
||||
as_lineno_2=$LINENO
|
||||
as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
|
||||
test "x$as_lineno_1" != "x$as_lineno_2" &&
|
||||
test "x$as_lineno_3" = "x$as_lineno_2" || {
|
||||
# Find who we are. Look in the path if we contain no path at all
|
||||
# relative or not.
|
||||
case $0 in
|
||||
*[\\/]* ) as_myself=$0 ;;
|
||||
*) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||
for as_dir in $PATH
|
||||
do
|
||||
IFS=$as_save_IFS
|
||||
test -z "$as_dir" && as_dir=.
|
||||
test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
|
||||
done
|
||||
|
||||
;;
|
||||
esac
|
||||
# We did not find ourselves, most probably we were run as `sh COMMAND'
|
||||
# in which case we are not to be found in the path.
|
||||
if test "x$as_myself" = x; then
|
||||
as_myself=$0
|
||||
fi
|
||||
if test ! -f "$as_myself"; then
|
||||
{ { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
|
||||
echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
fi
|
||||
case $CONFIG_SHELL in
|
||||
'')
|
||||
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
|
||||
do
|
||||
IFS=$as_save_IFS
|
||||
test -z "$as_dir" && as_dir=.
|
||||
for as_base in sh bash ksh sh5; do
|
||||
case $as_dir in
|
||||
/*)
|
||||
if ("$as_dir/$as_base" -c '
|
||||
as_lineno_1=$LINENO
|
||||
as_lineno_2=$LINENO
|
||||
as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
|
||||
test "x$as_lineno_1" != "x$as_lineno_2" &&
|
||||
test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
|
||||
$as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
|
||||
$as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
|
||||
CONFIG_SHELL=$as_dir/$as_base
|
||||
export CONFIG_SHELL
|
||||
exec "$CONFIG_SHELL" "$0" ${1+"$@"}
|
||||
fi;;
|
||||
esac
|
||||
done
|
||||
done
|
||||
;;
|
||||
esac
|
||||
|
||||
# Create $as_me.lineno as a copy of $as_myself, but with $LINENO
|
||||
# uniformly replaced by the line number. The first 'sed' inserts a
|
||||
# line-number line before each line; the second 'sed' does the real
|
||||
# work. The second script uses 'N' to pair each line-number line
|
||||
# with the numbered line, and appends trailing '-' during
|
||||
# substitution so that $LINENO is not a special case at line end.
|
||||
# (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
|
||||
# second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
|
||||
sed '=' <$as_myself |
|
||||
sed '
|
||||
N
|
||||
s,$,-,
|
||||
: loop
|
||||
s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
|
||||
t loop
|
||||
s,-$,,
|
||||
s,^['$as_cr_digits']*\n,,
|
||||
' >$as_me.lineno &&
|
||||
chmod +x $as_me.lineno ||
|
||||
{ { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
|
||||
echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
|
||||
# Don't try to exec as it changes $[0], causing all sort of problems
|
||||
# (the dirname of $[0] is not the place where we might find the
|
||||
# original and so on. Autoconf is especially sensible to this).
|
||||
. ./$as_me.lineno
|
||||
# Exit status is that of the last command.
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
|
||||
*c*,-n*) ECHO_N= ECHO_C='
|
||||
' ECHO_T=' ' ;;
|
||||
*c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
|
||||
*) ECHO_N= ECHO_C='\c' ECHO_T= ;;
|
||||
esac
|
||||
|
||||
if expr a : '\(a\)' >/dev/null 2>&1; then
|
||||
as_expr=expr
|
||||
else
|
||||
as_expr=false
|
||||
fi
|
||||
|
||||
rm -f conf$$ conf$$.exe conf$$.file
|
||||
echo >conf$$.file
|
||||
if ln -s conf$$.file conf$$ 2>/dev/null; then
|
||||
# We could just check for DJGPP; but this test a) works b) is more generic
|
||||
# and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
|
||||
if test -f conf$$.exe; then
|
||||
# Don't use ln at all; we don't have any links
|
||||
as_ln_s='cp -p'
|
||||
else
|
||||
as_ln_s='ln -s'
|
||||
fi
|
||||
elif ln conf$$.file conf$$ 2>/dev/null; then
|
||||
as_ln_s=ln
|
||||
else
|
||||
as_ln_s='cp -p'
|
||||
fi
|
||||
rm -f conf$$ conf$$.exe conf$$.file
|
||||
|
||||
if mkdir -p . 2>/dev/null; then
|
||||
as_mkdir_p=:
|
||||
else
|
||||
test -d ./-p && rmdir ./-p
|
||||
as_mkdir_p=false
|
||||
fi
|
||||
|
||||
as_executable_p="test -f"
|
||||
|
||||
# Sed expression to map a string onto a valid CPP name.
|
||||
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
|
||||
|
||||
# Sed expression to map a string onto a valid variable name.
|
||||
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
|
||||
|
||||
|
||||
# IFS
|
||||
# We need space, tab and new line, in precisely that order.
|
||||
as_nl='
|
||||
'
|
||||
IFS=" $as_nl"
|
||||
|
||||
# CDPATH.
|
||||
$as_unset CDPATH
|
||||
|
||||
exec 6>&1
|
||||
|
||||
# Open the log real soon, to keep \$[0] and so on meaningful, and to
|
||||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling. Logging --version etc. is OK.
|
||||
exec 5>>config.log
|
||||
{
|
||||
echo
|
||||
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
|
||||
## Running $as_me. ##
|
||||
_ASBOX
|
||||
} >&5
|
||||
cat >&5 <<_CSEOF
|
||||
|
||||
This file was extended by $as_me, which was
|
||||
generated by GNU Autoconf 2.59. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
CONFIG_HEADERS = $CONFIG_HEADERS
|
||||
CONFIG_LINKS = $CONFIG_LINKS
|
||||
CONFIG_COMMANDS = $CONFIG_COMMANDS
|
||||
$ $0 $@
|
||||
|
||||
_CSEOF
|
||||
echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
|
||||
echo >&5
|
||||
config_files=" Makefile crypto/Makefile doc/Makefile"
|
||||
config_headers=" crypto/include/config.h:config_in.h"
|
||||
|
||||
ac_cs_usage="\
|
||||
\`$as_me' instantiates files from templates according to the
|
||||
current configuration.
|
||||
|
||||
Usage: $0 [OPTIONS] [FILE]...
|
||||
|
||||
-h, --help print this help, then exit
|
||||
-V, --version print version number, then exit
|
||||
-q, --quiet do not print progress messages
|
||||
-d, --debug don't remove temporary files
|
||||
--recheck update $as_me by reconfiguring in the same conditions
|
||||
--file=FILE[:TEMPLATE]
|
||||
instantiate the configuration file FILE
|
||||
--header=FILE[:TEMPLATE]
|
||||
instantiate the configuration header FILE
|
||||
|
||||
Configuration files:
|
||||
$config_files
|
||||
|
||||
Configuration headers:
|
||||
$config_headers
|
||||
|
||||
Report bugs to <bug-autoconf@gnu.org>."
|
||||
ac_cs_version="\
|
||||
config.status
|
||||
configured by ./configure, generated by GNU Autoconf 2.59,
|
||||
with options \"'--prefix=/usr/local/freeswitch' '--enable-pic'\"
|
||||
|
||||
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
This config.status script is free software; the Free Software Foundation
|
||||
gives unlimited permission to copy, distribute and modify it."
|
||||
srcdir=.
|
||||
INSTALL="/usr/bin/install -c"
|
||||
# If no file are specified by the user, then we need to provide default
|
||||
# value. By we need to know if files were specified by the user.
|
||||
ac_need_defaults=:
|
||||
while test $# != 0
|
||||
do
|
||||
case $1 in
|
||||
--*=*)
|
||||
ac_option=`expr "x$1" : 'x\([^=]*\)='`
|
||||
ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
|
||||
ac_shift=:
|
||||
;;
|
||||
-*)
|
||||
ac_option=$1
|
||||
ac_optarg=$2
|
||||
ac_shift=shift
|
||||
;;
|
||||
*) # This is not an option, so the user has probably given explicit
|
||||
# arguments.
|
||||
ac_option=$1
|
||||
ac_need_defaults=false;;
|
||||
esac
|
||||
|
||||
case $ac_option in
|
||||
# Handling of the options.
|
||||
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
|
||||
ac_cs_recheck=: ;;
|
||||
--version | --vers* | -V )
|
||||
echo "$ac_cs_version"; exit 0 ;;
|
||||
--he | --h)
|
||||
# Conflict between --help and --header
|
||||
{ { echo "$as_me:$LINENO: error: ambiguous option: $1
|
||||
Try \`$0 --help' for more information." >&5
|
||||
echo "$as_me: error: ambiguous option: $1
|
||||
Try \`$0 --help' for more information." >&2;}
|
||||
{ (exit 1); exit 1; }; };;
|
||||
--help | --hel | -h )
|
||||
echo "$ac_cs_usage"; exit 0 ;;
|
||||
--debug | --d* | -d )
|
||||
debug=: ;;
|
||||
--file | --fil | --fi | --f )
|
||||
$ac_shift
|
||||
CONFIG_FILES="$CONFIG_FILES $ac_optarg"
|
||||
ac_need_defaults=false;;
|
||||
--header | --heade | --head | --hea )
|
||||
$ac_shift
|
||||
CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
|
||||
ac_need_defaults=false;;
|
||||
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
|
||||
| -silent | --silent | --silen | --sile | --sil | --si | --s)
|
||||
ac_cs_silent=: ;;
|
||||
|
||||
# This is an error.
|
||||
-*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
|
||||
Try \`$0 --help' for more information." >&5
|
||||
echo "$as_me: error: unrecognized option: $1
|
||||
Try \`$0 --help' for more information." >&2;}
|
||||
{ (exit 1); exit 1; }; } ;;
|
||||
|
||||
*) ac_config_targets="$ac_config_targets $1" ;;
|
||||
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
ac_configure_extra_args=
|
||||
|
||||
if $ac_cs_silent; then
|
||||
exec 6>/dev/null
|
||||
ac_configure_extra_args="$ac_configure_extra_args --silent"
|
||||
fi
|
||||
|
||||
if $ac_cs_recheck; then
|
||||
echo "running /bin/sh ./configure " '--prefix=/usr/local/freeswitch' '--enable-pic' $ac_configure_extra_args " --no-create --no-recursion" >&6
|
||||
exec /bin/sh ./configure '--prefix=/usr/local/freeswitch' '--enable-pic' $ac_configure_extra_args --no-create --no-recursion
|
||||
fi
|
||||
|
||||
for ac_config_target in $ac_config_targets
|
||||
do
|
||||
case "$ac_config_target" in
|
||||
# Handling of arguments.
|
||||
"Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
|
||||
"crypto/Makefile" ) CONFIG_FILES="$CONFIG_FILES crypto/Makefile" ;;
|
||||
"doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
|
||||
"crypto/include/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS crypto/include/config.h:config_in.h" ;;
|
||||
*) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
|
||||
echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
|
||||
{ (exit 1); exit 1; }; };;
|
||||
esac
|
||||
done
|
||||
|
||||
# If the user did not use the arguments to specify the items to instantiate,
|
||||
# then the envvar interface is used. Set only those that are not.
|
||||
# We use the long form for the default assignment because of an extremely
|
||||
# bizarre bug on SunOS 4.1.3.
|
||||
if $ac_need_defaults; then
|
||||
test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
|
||||
test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
|
||||
fi
|
||||
|
||||
# Have a temporary directory for convenience. Make it in the build tree
|
||||
# simply because there is no reason to put it here, and in addition,
|
||||
# creating and moving files from /tmp can sometimes cause problems.
|
||||
# Create a temporary directory, and hook for its removal unless debugging.
|
||||
$debug ||
|
||||
{
|
||||
trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
|
||||
trap '{ (exit 1); exit 1; }' 1 2 13 15
|
||||
}
|
||||
|
||||
# Create a (secure) tmp directory for tmp files.
|
||||
|
||||
{
|
||||
tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
|
||||
test -n "$tmp" && test -d "$tmp"
|
||||
} ||
|
||||
{
|
||||
tmp=./confstat$$-$RANDOM
|
||||
(umask 077 && mkdir $tmp)
|
||||
} ||
|
||||
{
|
||||
echo "$me: cannot create a temporary directory in ." >&2
|
||||
{ (exit 1); exit 1; }
|
||||
}
|
||||
|
||||
|
||||
#
|
||||
# CONFIG_FILES section.
|
||||
#
|
||||
|
||||
# No need to generate the scripts if there are no CONFIG_FILES.
|
||||
# This happens for instance when ./config.status config.h
|
||||
if test -n "$CONFIG_FILES"; then
|
||||
# Protect against being on the right side of a sed subst in config.status.
|
||||
sed 's/,@/@@/; s/@,/@@/; s/,;t t$/@;t t/; /@;t t$/s/[\\&,]/\\&/g;
|
||||
s/@@/,@/; s/@@/@,/; s/@;t t$/,;t t/' >$tmp/subs.sed <<\CEOF
|
||||
s,@SHELL@,/bin/sh,;t t
|
||||
s,@PATH_SEPARATOR@,:,;t t
|
||||
s,@PACKAGE_NAME@,,;t t
|
||||
s,@PACKAGE_TARNAME@,,;t t
|
||||
s,@PACKAGE_VERSION@,,;t t
|
||||
s,@PACKAGE_STRING@,,;t t
|
||||
s,@PACKAGE_BUGREPORT@,,;t t
|
||||
s,@exec_prefix@,${prefix},;t t
|
||||
s,@prefix@,/usr/local/freeswitch,;t t
|
||||
s,@program_transform_name@,s,x,x,,;t t
|
||||
s,@bindir@,${exec_prefix}/bin,;t t
|
||||
s,@sbindir@,${exec_prefix}/sbin,;t t
|
||||
s,@libexecdir@,${exec_prefix}/libexec,;t t
|
||||
s,@datadir@,${prefix}/share,;t t
|
||||
s,@sysconfdir@,${prefix}/etc,;t t
|
||||
s,@sharedstatedir@,${prefix}/com,;t t
|
||||
s,@localstatedir@,${prefix}/var,;t t
|
||||
s,@libdir@,${exec_prefix}/lib,;t t
|
||||
s,@includedir@,${prefix}/include,;t t
|
||||
s,@oldincludedir@,/usr/include,;t t
|
||||
s,@infodir@,${prefix}/info,;t t
|
||||
s,@mandir@,${prefix}/man,;t t
|
||||
s,@build_alias@,,;t t
|
||||
s,@host_alias@,,;t t
|
||||
s,@target_alias@,,;t t
|
||||
s,@DEFS@,-DHAVE_CONFIG_H,;t t
|
||||
s,@ECHO_C@,,;t t
|
||||
s,@ECHO_N@,-n,;t t
|
||||
s,@ECHO_T@,,;t t
|
||||
s,@LIBS@,,;t t
|
||||
s,@RANLIB@,ranlib,;t t
|
||||
s,@ac_ct_RANLIB@,ranlib,;t t
|
||||
s,@CC@,gcc,;t t
|
||||
s,@CFLAGS@,-fPIC -Wall -O4 -fexpensive-optimizations -funroll-loops,;t t
|
||||
s,@LDFLAGS@,,;t t
|
||||
s,@CPPFLAGS@,,;t t
|
||||
s,@ac_ct_CC@,gcc,;t t
|
||||
s,@EXEEXT@,,;t t
|
||||
s,@OBJEXT@,o,;t t
|
||||
s,@INSTALL_PROGRAM@,${INSTALL},;t t
|
||||
s,@INSTALL_SCRIPT@,${INSTALL},;t t
|
||||
s,@INSTALL_DATA@,${INSTALL} -m 644,;t t
|
||||
s,@RNG_OBJS@,rand_source.o,;t t
|
||||
s,@CPP@,gcc -E,;t t
|
||||
s,@EGREP@,grep -E,;t t
|
||||
s,@build@,x86_64-unknown-linux-gnu,;t t
|
||||
s,@build_cpu@,x86_64,;t t
|
||||
s,@build_vendor@,unknown,;t t
|
||||
s,@build_os@,linux-gnu,;t t
|
||||
s,@host@,x86_64-unknown-linux-gnu,;t t
|
||||
s,@host_cpu@,x86_64,;t t
|
||||
s,@host_vendor@,unknown,;t t
|
||||
s,@host_os@,linux-gnu,;t t
|
||||
s,@EXE@,,;t t
|
||||
s,@GDOI_OBJS@,,;t t
|
||||
s,@LIBOBJS@,,;t t
|
||||
s,@LTLIBOBJS@,,;t t
|
||||
CEOF
|
||||
|
||||
# Split the substitutions into bite-sized pieces for seds with
|
||||
# small command number limits, like on Digital OSF/1 and HP-UX.
|
||||
ac_max_sed_lines=48
|
||||
ac_sed_frag=1 # Number of current file.
|
||||
ac_beg=1 # First line for current file.
|
||||
ac_end=$ac_max_sed_lines # Line after last line for current file.
|
||||
ac_more_lines=:
|
||||
ac_sed_cmds=
|
||||
while $ac_more_lines; do
|
||||
if test $ac_beg -gt 1; then
|
||||
sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
|
||||
else
|
||||
sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
|
||||
fi
|
||||
if test ! -s $tmp/subs.frag; then
|
||||
ac_more_lines=false
|
||||
else
|
||||
# The purpose of the label and of the branching condition is to
|
||||
# speed up the sed processing (if there are no `@' at all, there
|
||||
# is no need to browse any of the substitutions).
|
||||
# These are the two extra sed commands mentioned above.
|
||||
(echo ':t
|
||||
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
|
||||
if test -z "$ac_sed_cmds"; then
|
||||
ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
|
||||
else
|
||||
ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
|
||||
fi
|
||||
ac_sed_frag=`expr $ac_sed_frag + 1`
|
||||
ac_beg=$ac_end
|
||||
ac_end=`expr $ac_end + $ac_max_sed_lines`
|
||||
fi
|
||||
done
|
||||
if test -z "$ac_sed_cmds"; then
|
||||
ac_sed_cmds=cat
|
||||
fi
|
||||
fi # test -n "$CONFIG_FILES"
|
||||
|
||||
for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
|
||||
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
|
||||
case $ac_file in
|
||||
- | *:- | *:-:* ) # input from stdin
|
||||
cat >$tmp/stdin
|
||||
ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
|
||||
ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
|
||||
*:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
|
||||
ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
|
||||
* ) ac_file_in=$ac_file.in ;;
|
||||
esac
|
||||
|
||||
# Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
|
||||
ac_dir=`(dirname "$ac_file") 2>/dev/null ||
|
||||
$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||
X"$ac_file" : 'X\(//\)[^/]' \| \
|
||||
X"$ac_file" : 'X\(//\)$' \| \
|
||||
X"$ac_file" : 'X\(/\)' \| \
|
||||
. : '\(.\)' 2>/dev/null ||
|
||||
echo X"$ac_file" |
|
||||
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
|
||||
/^X\(\/\/\)[^/].*/{ s//\1/; q; }
|
||||
/^X\(\/\/\)$/{ s//\1/; q; }
|
||||
/^X\(\/\).*/{ s//\1/; q; }
|
||||
s/.*/./; q'`
|
||||
{ if $as_mkdir_p; then
|
||||
mkdir -p "$ac_dir"
|
||||
else
|
||||
as_dir="$ac_dir"
|
||||
as_dirs=
|
||||
while test ! -d "$as_dir"; do
|
||||
as_dirs="$as_dir $as_dirs"
|
||||
as_dir=`(dirname "$as_dir") 2>/dev/null ||
|
||||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||
X"$as_dir" : 'X\(//\)[^/]' \| \
|
||||
X"$as_dir" : 'X\(//\)$' \| \
|
||||
X"$as_dir" : 'X\(/\)' \| \
|
||||
. : '\(.\)' 2>/dev/null ||
|
||||
echo X"$as_dir" |
|
||||
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
|
||||
/^X\(\/\/\)[^/].*/{ s//\1/; q; }
|
||||
/^X\(\/\/\)$/{ s//\1/; q; }
|
||||
/^X\(\/\).*/{ s//\1/; q; }
|
||||
s/.*/./; q'`
|
||||
done
|
||||
test ! -n "$as_dirs" || mkdir $as_dirs
|
||||
fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
|
||||
echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
|
||||
{ (exit 1); exit 1; }; }; }
|
||||
|
||||
ac_builddir=.
|
||||
|
||||
if test "$ac_dir" != .; then
|
||||
ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
|
||||
# A "../" for each directory in $ac_dir_suffix.
|
||||
ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
|
||||
else
|
||||
ac_dir_suffix= ac_top_builddir=
|
||||
fi
|
||||
|
||||
case $srcdir in
|
||||
.) # No --srcdir option. We are building in place.
|
||||
ac_srcdir=.
|
||||
if test -z "$ac_top_builddir"; then
|
||||
ac_top_srcdir=.
|
||||
else
|
||||
ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
|
||||
fi ;;
|
||||
[\\/]* | ?:[\\/]* ) # Absolute path.
|
||||
ac_srcdir=$srcdir$ac_dir_suffix;
|
||||
ac_top_srcdir=$srcdir ;;
|
||||
*) # Relative path.
|
||||
ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
|
||||
ac_top_srcdir=$ac_top_builddir$srcdir ;;
|
||||
esac
|
||||
|
||||
# Do not use `cd foo && pwd` to compute absolute paths, because
|
||||
# the directories may not exist.
|
||||
case `pwd` in
|
||||
.) ac_abs_builddir="$ac_dir";;
|
||||
*)
|
||||
case "$ac_dir" in
|
||||
.) ac_abs_builddir=`pwd`;;
|
||||
[\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
|
||||
*) ac_abs_builddir=`pwd`/"$ac_dir";;
|
||||
esac;;
|
||||
esac
|
||||
case $ac_abs_builddir in
|
||||
.) ac_abs_top_builddir=${ac_top_builddir}.;;
|
||||
*)
|
||||
case ${ac_top_builddir}. in
|
||||
.) ac_abs_top_builddir=$ac_abs_builddir;;
|
||||
[\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
|
||||
*) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
|
||||
esac;;
|
||||
esac
|
||||
case $ac_abs_builddir in
|
||||
.) ac_abs_srcdir=$ac_srcdir;;
|
||||
*)
|
||||
case $ac_srcdir in
|
||||
.) ac_abs_srcdir=$ac_abs_builddir;;
|
||||
[\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
|
||||
*) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
|
||||
esac;;
|
||||
esac
|
||||
case $ac_abs_builddir in
|
||||
.) ac_abs_top_srcdir=$ac_top_srcdir;;
|
||||
*)
|
||||
case $ac_top_srcdir in
|
||||
.) ac_abs_top_srcdir=$ac_abs_builddir;;
|
||||
[\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
|
||||
*) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
|
||||
esac;;
|
||||
esac
|
||||
|
||||
|
||||
case $INSTALL in
|
||||
[\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
|
||||
*) ac_INSTALL=$ac_top_builddir$INSTALL ;;
|
||||
esac
|
||||
|
||||
if test x"$ac_file" != x-; then
|
||||
{ echo "$as_me:$LINENO: creating $ac_file" >&5
|
||||
echo "$as_me: creating $ac_file" >&6;}
|
||||
rm -f "$ac_file"
|
||||
fi
|
||||
# Let's still pretend it is `configure' which instantiates (i.e., don't
|
||||
# use $as_me), people would be surprised to read:
|
||||
# /* config.h. Generated by config.status. */
|
||||
if test x"$ac_file" = x-; then
|
||||
configure_input=
|
||||
else
|
||||
configure_input="$ac_file. "
|
||||
fi
|
||||
configure_input=$configure_input"Generated from `echo $ac_file_in |
|
||||
sed 's,.*/,,'` by configure."
|
||||
|
||||
# First look for the input files in the build tree, otherwise in the
|
||||
# src tree.
|
||||
ac_file_inputs=`IFS=:
|
||||
for f in $ac_file_in; do
|
||||
case $f in
|
||||
-) echo $tmp/stdin ;;
|
||||
[\\/$]*)
|
||||
# Absolute (can't be DOS-style, as IFS=:)
|
||||
test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
|
||||
echo "$as_me: error: cannot find input file: $f" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
echo "$f";;
|
||||
*) # Relative
|
||||
if test -f "$f"; then
|
||||
# Build tree
|
||||
echo "$f"
|
||||
elif test -f "$srcdir/$f"; then
|
||||
# Source tree
|
||||
echo "$srcdir/$f"
|
||||
else
|
||||
# /dev/null tree
|
||||
{ { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
|
||||
echo "$as_me: error: cannot find input file: $f" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
fi;;
|
||||
esac
|
||||
done` || { (exit 1); exit 1; }
|
||||
sed "/^[ ]*VPATH[ ]*=/{
|
||||
s/:*\$(srcdir):*/:/;
|
||||
s/:*\${srcdir}:*/:/;
|
||||
s/:*@srcdir@:*/:/;
|
||||
s/^\([^=]*=[ ]*\):*/\1/;
|
||||
s/:*$//;
|
||||
s/^[^=]*=[ ]*$//;
|
||||
}
|
||||
|
||||
:t
|
||||
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
|
||||
s,@configure_input@,$configure_input,;t t
|
||||
s,@srcdir@,$ac_srcdir,;t t
|
||||
s,@abs_srcdir@,$ac_abs_srcdir,;t t
|
||||
s,@top_srcdir@,$ac_top_srcdir,;t t
|
||||
s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
|
||||
s,@builddir@,$ac_builddir,;t t
|
||||
s,@abs_builddir@,$ac_abs_builddir,;t t
|
||||
s,@top_builddir@,$ac_top_builddir,;t t
|
||||
s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
|
||||
s,@INSTALL@,$ac_INSTALL,;t t
|
||||
" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
|
||||
rm -f $tmp/stdin
|
||||
if test x"$ac_file" != x-; then
|
||||
mv $tmp/out $ac_file
|
||||
else
|
||||
cat $tmp/out
|
||||
rm -f $tmp/out
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
#
|
||||
# CONFIG_HEADER section.
|
||||
#
|
||||
|
||||
# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
|
||||
# NAME is the cpp macro being defined and VALUE is the value it is being given.
|
||||
#
|
||||
# ac_d sets the value in "#define NAME VALUE" lines.
|
||||
ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
|
||||
ac_dB='[ ].*$,\1#\2'
|
||||
ac_dC=' '
|
||||
ac_dD=',;t'
|
||||
# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
|
||||
ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
|
||||
ac_uB='$,\1#\2define\3'
|
||||
ac_uC=' '
|
||||
ac_uD=',;t'
|
||||
|
||||
for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
|
||||
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
|
||||
case $ac_file in
|
||||
- | *:- | *:-:* ) # input from stdin
|
||||
cat >$tmp/stdin
|
||||
ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
|
||||
ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
|
||||
*:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
|
||||
ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
|
||||
* ) ac_file_in=$ac_file.in ;;
|
||||
esac
|
||||
|
||||
test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
|
||||
echo "$as_me: creating $ac_file" >&6;}
|
||||
|
||||
# First look for the input files in the build tree, otherwise in the
|
||||
# src tree.
|
||||
ac_file_inputs=`IFS=:
|
||||
for f in $ac_file_in; do
|
||||
case $f in
|
||||
-) echo $tmp/stdin ;;
|
||||
[\\/$]*)
|
||||
# Absolute (can't be DOS-style, as IFS=:)
|
||||
test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
|
||||
echo "$as_me: error: cannot find input file: $f" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
# Do quote $f, to prevent DOS paths from being IFS'd.
|
||||
echo "$f";;
|
||||
*) # Relative
|
||||
if test -f "$f"; then
|
||||
# Build tree
|
||||
echo "$f"
|
||||
elif test -f "$srcdir/$f"; then
|
||||
# Source tree
|
||||
echo "$srcdir/$f"
|
||||